1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtWidgets module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QWIDGETWINDOW_P_H
41#define QWIDGETWINDOW_P_H
42
43//
44// W A R N I N G
45// -------------
46//
47// This file is not part of the Qt API. It exists purely as an
48// implementation detail. This header file may change from version to
49// version without notice, or even be removed.
50//
51// We mean it.
52//
53
54#include <QtWidgets/private/qtwidgetsglobal_p.h>
55#include <QtGui/qwindow.h>
56
57#include <QtCore/private/qobject_p.h>
58#include <QtGui/private/qevent_p.h>
59#include <QtWidgets/qwidget.h>
60
61QT_BEGIN_NAMESPACE
62
63
64class QCloseEvent;
65class QMoveEvent;
66class QWidgetWindowPrivate;
67
68class QWidgetWindow : public QWindow
69{
70 Q_OBJECT
71 Q_DECLARE_PRIVATE(QWidgetWindow)
72public:
73 QWidgetWindow(QWidget *widget);
74 ~QWidgetWindow();
75
76 QWidget *widget() const { return m_widget; }
77#ifndef QT_NO_ACCESSIBILITY
78 QAccessibleInterface *accessibleRoot() const override;
79#endif
80
81 QObject *focusObject() const override;
82 void setNativeWindowVisibility(bool visible);
83protected:
84 bool event(QEvent *) override;
85
86 void handleCloseEvent(QCloseEvent *);
87 void handleEnterLeaveEvent(QEvent *);
88 void handleFocusInEvent(QFocusEvent *);
89 void handleKeyEvent(QKeyEvent *);
90 void handleMouseEvent(QMouseEvent *);
91 void handleNonClientAreaMouseEvent(QMouseEvent *);
92 void handleTouchEvent(QTouchEvent *);
93 void handleMoveEvent(QMoveEvent *);
94 void handleResizeEvent(QResizeEvent *);
95#if QT_CONFIG(wheelevent)
96 void handleWheelEvent(QWheelEvent *);
97#endif
98#if QT_CONFIG(draganddrop)
99 void handleDragEnterEvent(QDragEnterEvent *, QWidget *widget = nullptr);
100 void handleDragMoveEvent(QDragMoveEvent *);
101 void handleDragLeaveEvent(QDragLeaveEvent *);
102 void handleDropEvent(QDropEvent *);
103#endif
104 void handleExposeEvent(QExposeEvent *);
105 void handleWindowStateChangedEvent(QWindowStateChangeEvent *event);
106#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
107 bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result) override;
108#else
109 bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
110#endif
111#if QT_CONFIG(tabletevent)
112 void handleTabletEvent(QTabletEvent *);
113#endif
114#ifndef QT_NO_GESTURES
115 void handleGestureEvent(QNativeGestureEvent *);
116#endif
117#ifndef QT_NO_CONTEXTMENU
118 void handleContextMenuEvent(QContextMenuEvent *);
119#endif
120
121private slots:
122 void updateObjectName();
123 void handleScreenChange();
124
125private:
126 void repaintWindow();
127 bool updateSize();
128 bool updatePos();
129 void updateMargins();
130 void updateNormalGeometry();
131
132 enum FocusWidgets {
133 FirstFocusWidget,
134 LastFocusWidget
135 };
136 QWidget *getFocusWidget(FocusWidgets fw);
137
138 QPointer<QWidget> m_widget;
139 QPointer<QWidget> m_implicit_mouse_grabber;
140#if QT_CONFIG(draganddrop)
141 QPointer<QWidget> m_dragTarget;
142#endif
143};
144
145QT_END_NAMESPACE
146
147#endif // QWIDGETWINDOW_P_H
148