Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | - | |||||||||||||
6 | - | |||||||||||||
7 | __attribute__((visibility("default"))) extern bool qt_tab_all_widgets(); | - | ||||||||||||
8 | - | |||||||||||||
9 | QWidget *qt_button_down = 0; | - | ||||||||||||
10 | - | |||||||||||||
11 | - | |||||||||||||
12 | QWidget *qt_popup_down = 0; | - | ||||||||||||
13 | extern int openPopupCount; | - | ||||||||||||
14 | bool qt_replay_popup_mouse_event = false; | - | ||||||||||||
15 | extern bool qt_try_modal(QWidget *widget, QEvent::Type type); | - | ||||||||||||
16 | - | |||||||||||||
17 | class QWidgetWindowPrivate : public QWindowPrivate | - | ||||||||||||
18 | { | - | ||||||||||||
19 | inline QWidgetWindow* q_func() { return static_cast<QWidgetWindow *>(q_ptr); } inline const QWidgetWindow* q_func() const { return static_cast<const QWidgetWindow *>(q_ptr); } friend class QWidgetWindow; | - | ||||||||||||
20 | public: | - | ||||||||||||
21 | QWindow *eventReceiver() override { | - | ||||||||||||
22 | QWidgetWindow * const q = q_func(); | - | ||||||||||||
23 | QWindow *w = q; | - | ||||||||||||
24 | while (w->parent() && qobject_cast<QWidgetWindow *>(w) && qobject_cast<QWidgetWindow *>(w->parent())) { | - | ||||||||||||
25 | w = w->parent(); | - | ||||||||||||
26 | } | - | ||||||||||||
27 | return w; | - | ||||||||||||
28 | } | - | ||||||||||||
29 | - | |||||||||||||
30 | void clearFocusObject() override | - | ||||||||||||
31 | { | - | ||||||||||||
32 | QWidgetWindow * const q = q_func(); | - | ||||||||||||
33 | QWidget *widget = q->widget(); | - | ||||||||||||
34 | if (widget && widget->focusWidget()) | - | ||||||||||||
35 | widget->focusWidget()->clearFocus(); | - | ||||||||||||
36 | } | - | ||||||||||||
37 | - | |||||||||||||
38 | QRectF closestAcceptableGeometry(const QRectF &rect) const override; | - | ||||||||||||
39 | }; | - | ||||||||||||
40 | - | |||||||||||||
41 | QRectF QWidgetWindowPrivate::closestAcceptableGeometry(const QRectF &rect) const | - | ||||||||||||
42 | { | - | ||||||||||||
43 | const QWidgetWindow * const q = q_func(); | - | ||||||||||||
44 | const QWidget *widget = q->widget(); | - | ||||||||||||
45 | if (!widget || !widget->isWindow() || !widget->hasHeightForWidth()) | - | ||||||||||||
46 | return QRect(); | - | ||||||||||||
47 | const QSize oldSize = rect.size().toSize(); | - | ||||||||||||
48 | const QSize newSize = QLayout::closestAcceptableSize(widget, oldSize); | - | ||||||||||||
49 | if (newSize == oldSize) | - | ||||||||||||
50 | return QRectF(); | - | ||||||||||||
51 | const int dw = newSize.width() - oldSize.width(); | - | ||||||||||||
52 | const int dh = newSize.height() - oldSize.height(); | - | ||||||||||||
53 | QRectF result = rect; | - | ||||||||||||
54 | const QRectF currentGeometry(widget->geometry()); | - | ||||||||||||
55 | const qreal topOffset = result.top() - currentGeometry.top(); | - | ||||||||||||
56 | const qreal bottomOffset = result.bottom() - currentGeometry.bottom(); | - | ||||||||||||
57 | if (qAbs(topOffset) > qAbs(bottomOffset)) | - | ||||||||||||
58 | result.setTop(result.top() - dh); | - | ||||||||||||
59 | else | - | ||||||||||||
60 | result.setBottom(result.bottom() + dh); | - | ||||||||||||
61 | const qreal leftOffset = result.left() - currentGeometry.left(); | - | ||||||||||||
62 | const qreal rightOffset = result.right() - currentGeometry.right(); | - | ||||||||||||
63 | if (qAbs(leftOffset) > qAbs(rightOffset)) | - | ||||||||||||
64 | result.setLeft(result.left() - dw); | - | ||||||||||||
65 | else | - | ||||||||||||
66 | result.setRight(result.right() + dw); | - | ||||||||||||
67 | return result; | - | ||||||||||||
68 | } | - | ||||||||||||
69 | - | |||||||||||||
70 | QWidgetWindow::QWidgetWindow(QWidget *widget) | - | ||||||||||||
71 | : QWindow(*new QWidgetWindowPrivate(), 0) | - | ||||||||||||
72 | , m_widget(widget) | - | ||||||||||||
73 | { | - | ||||||||||||
74 | updateObjectName(); | - | ||||||||||||
75 | - | |||||||||||||
76 | - | |||||||||||||
77 | if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::RasterGLSurface) | - | ||||||||||||
78 | && !QApplication::testAttribute(Qt::AA_ForceRasterWidgets)) { | - | ||||||||||||
79 | setSurfaceType(QSurface::RasterGLSurface); | - | ||||||||||||
80 | } | - | ||||||||||||
81 | connect(widget, &QObject::objectNameChanged, this, &QWidgetWindow::updateObjectName); | - | ||||||||||||
82 | connect(this, qFlagLocation("2""screenChanged(QScreen*)" "\0" __FILE__ ":" "127""133"), this, qFlagLocation("1""handleScreenChange()" "\0" __FILE__ ":" "127""133")); | - | ||||||||||||
83 | } | - | ||||||||||||
84 | - | |||||||||||||
85 | QWidgetWindow::~QWidgetWindow() | - | ||||||||||||
86 | { | - | ||||||||||||
87 | } | - | ||||||||||||
88 | - | |||||||||||||
89 | - | |||||||||||||
90 | QAccessibleInterface *QWidgetWindow::accessibleRoot() const | - | ||||||||||||
91 | { | - | ||||||||||||
92 | if (m_widget) | - | ||||||||||||
93 | return QAccessible::queryAccessibleInterface(m_widget); | - | ||||||||||||
94 | return 0; | - | ||||||||||||
95 | } | - | ||||||||||||
96 | - | |||||||||||||
97 | - | |||||||||||||
98 | QObject *QWidgetWindow::focusObject() const | - | ||||||||||||
99 | { | - | ||||||||||||
100 | QWidget *windowWidget = m_widget; | - | ||||||||||||
101 | if (!windowWidget) | - | ||||||||||||
102 | return nullptr; | - | ||||||||||||
103 | - | |||||||||||||
104 | QWidget *widget = windowWidget->focusWidget(); | - | ||||||||||||
105 | - | |||||||||||||
106 | if (!widget) | - | ||||||||||||
107 | widget = windowWidget; | - | ||||||||||||
108 | - | |||||||||||||
109 | QObject *focusObj = QWidgetPrivate::get(widget)->focusObject(); | - | ||||||||||||
110 | if (focusObj) | - | ||||||||||||
111 | return focusObj; | - | ||||||||||||
112 | - | |||||||||||||
113 | return widget; | - | ||||||||||||
114 | } | - | ||||||||||||
115 | - | |||||||||||||
116 | static inline bool shouldBePropagatedToWidget(QEvent *event) | - | ||||||||||||
117 | { | - | ||||||||||||
118 | switch (event->type()) { | - | ||||||||||||
119 | - | |||||||||||||
120 | case QEvent::Show: | - | ||||||||||||
121 | case QEvent::Hide: | - | ||||||||||||
122 | case QEvent::Timer: | - | ||||||||||||
123 | case QEvent::DynamicPropertyChange: | - | ||||||||||||
124 | case QEvent::ChildAdded: | - | ||||||||||||
125 | case QEvent::ChildRemoved: | - | ||||||||||||
126 | return false; | - | ||||||||||||
127 | default: | - | ||||||||||||
128 | return true; | - | ||||||||||||
129 | } | - | ||||||||||||
130 | } | - | ||||||||||||
131 | - | |||||||||||||
132 | bool QWidgetWindow::event(QEvent *event) | - | ||||||||||||
133 | { | - | ||||||||||||
134 | if (!m_widget) | - | ||||||||||||
135 | return QWindow::event(event); | - | ||||||||||||
136 | - | |||||||||||||
137 | if (m_widget->testAttribute(Qt::WA_DontShowOnScreen)) { | - | ||||||||||||
138 | - | |||||||||||||
139 | - | |||||||||||||
140 | if (!shouldBePropagatedToWidget(event)) | - | ||||||||||||
141 | return true; | - | ||||||||||||
142 | return QCoreApplication::sendEvent(m_widget, event); | - | ||||||||||||
143 | } | - | ||||||||||||
144 | - | |||||||||||||
145 | switch (event->type()) { | - | ||||||||||||
146 | case QEvent::Close: | - | ||||||||||||
147 | handleCloseEvent(static_cast<QCloseEvent *>(event)); | - | ||||||||||||
148 | return true; | - | ||||||||||||
149 | - | |||||||||||||
150 | case QEvent::Enter: | - | ||||||||||||
151 | case QEvent::Leave: | - | ||||||||||||
152 | handleEnterLeaveEvent(event); | - | ||||||||||||
153 | return true; | - | ||||||||||||
154 | - | |||||||||||||
155 | - | |||||||||||||
156 | - | |||||||||||||
157 | case QEvent::FocusIn: | - | ||||||||||||
158 | handleFocusInEvent(static_cast<QFocusEvent *>(event)); | - | ||||||||||||
159 | - | |||||||||||||
160 | case QEvent::FocusOut: { | - | ||||||||||||
161 | - | |||||||||||||
162 | QAccessible::State state; | - | ||||||||||||
163 | state.active = true; | - | ||||||||||||
164 | QAccessibleStateChangeEvent ev(m_widget, state); | - | ||||||||||||
165 | QAccessible::updateAccessibility(&ev); | - | ||||||||||||
166 | - | |||||||||||||
167 | return false; } | - | ||||||||||||
168 | - | |||||||||||||
169 | case QEvent::FocusAboutToChange: | - | ||||||||||||
170 | if (QApplicationPrivate::focus_widget) { | - | ||||||||||||
171 | if (QApplicationPrivate::focus_widget->testAttribute(Qt::WA_InputMethodEnabled)) | - | ||||||||||||
172 | QGuiApplication::inputMethod()->commit(); | - | ||||||||||||
173 | - | |||||||||||||
174 | QGuiApplication::sendSpontaneousEvent(QApplicationPrivate::focus_widget, event); | - | ||||||||||||
175 | } | - | ||||||||||||
176 | return true; | - | ||||||||||||
177 | - | |||||||||||||
178 | case QEvent::KeyPress: | - | ||||||||||||
179 | case QEvent::KeyRelease: | - | ||||||||||||
180 | case QEvent::ShortcutOverride: | - | ||||||||||||
181 | handleKeyEvent(static_cast<QKeyEvent *>(event)); | - | ||||||||||||
182 | return true; | - | ||||||||||||
183 | - | |||||||||||||
184 | case QEvent::MouseMove: | - | ||||||||||||
185 | case QEvent::MouseButtonPress: | - | ||||||||||||
186 | case QEvent::MouseButtonRelease: | - | ||||||||||||
187 | case QEvent::MouseButtonDblClick: | - | ||||||||||||
188 | handleMouseEvent(static_cast<QMouseEvent *>(event)); | - | ||||||||||||
189 | return true; | - | ||||||||||||
190 | - | |||||||||||||
191 | case QEvent::NonClientAreaMouseMove: | - | ||||||||||||
192 | case QEvent::NonClientAreaMouseButtonPress: | - | ||||||||||||
193 | case QEvent::NonClientAreaMouseButtonRelease: | - | ||||||||||||
194 | case QEvent::NonClientAreaMouseButtonDblClick: | - | ||||||||||||
195 | handleNonClientAreaMouseEvent(static_cast<QMouseEvent *>(event)); | - | ||||||||||||
196 | return true; | - | ||||||||||||
197 | - | |||||||||||||
198 | case QEvent::TouchBegin: | - | ||||||||||||
199 | case QEvent::TouchUpdate: | - | ||||||||||||
200 | case QEvent::TouchEnd: | - | ||||||||||||
201 | case QEvent::TouchCancel: | - | ||||||||||||
202 | handleTouchEvent(static_cast<QTouchEvent *>(event)); | - | ||||||||||||
203 | return true; | - | ||||||||||||
204 | - | |||||||||||||
205 | case QEvent::Move: | - | ||||||||||||
206 | handleMoveEvent(static_cast<QMoveEvent *>(event)); | - | ||||||||||||
207 | return true; | - | ||||||||||||
208 | - | |||||||||||||
209 | case QEvent::Resize: | - | ||||||||||||
210 | handleResizeEvent(static_cast<QResizeEvent *>(event)); | - | ||||||||||||
211 | return true; | - | ||||||||||||
212 | - | |||||||||||||
213 | - | |||||||||||||
214 | case QEvent::Wheel: | - | ||||||||||||
215 | handleWheelEvent(static_cast<QWheelEvent *>(event)); | - | ||||||||||||
216 | return true; | - | ||||||||||||
217 | - | |||||||||||||
218 | - | |||||||||||||
219 | - | |||||||||||||
220 | case QEvent::DragEnter: | - | ||||||||||||
221 | case QEvent::DragMove: | - | ||||||||||||
222 | handleDragEnterMoveEvent(static_cast<QDragMoveEvent *>(event)); | - | ||||||||||||
223 | return true; | - | ||||||||||||
224 | case QEvent::DragLeave: | - | ||||||||||||
225 | handleDragLeaveEvent(static_cast<QDragLeaveEvent *>(event)); | - | ||||||||||||
226 | return true; | - | ||||||||||||
227 | case QEvent::Drop: | - | ||||||||||||
228 | handleDropEvent(static_cast<QDropEvent *>(event)); | - | ||||||||||||
229 | return true; | - | ||||||||||||
230 | - | |||||||||||||
231 | - | |||||||||||||
232 | case QEvent::Expose: | - | ||||||||||||
233 | handleExposeEvent(static_cast<QExposeEvent *>(event)); | - | ||||||||||||
234 | return true; | - | ||||||||||||
235 | - | |||||||||||||
236 | case QEvent::WindowStateChange: | - | ||||||||||||
237 | handleWindowStateChangedEvent(static_cast<QWindowStateChangeEvent *>(event)); | - | ||||||||||||
238 | return true; | - | ||||||||||||
239 | - | |||||||||||||
240 | case QEvent::ThemeChange: { | - | ||||||||||||
241 | QEvent widgetEvent(QEvent::ThemeChange); | - | ||||||||||||
242 | QGuiApplication::sendSpontaneousEvent(m_widget, &widgetEvent); | - | ||||||||||||
243 | } | - | ||||||||||||
244 | return true; | - | ||||||||||||
245 | - | |||||||||||||
246 | - | |||||||||||||
247 | case QEvent::TabletPress: | - | ||||||||||||
248 | case QEvent::TabletMove: | - | ||||||||||||
249 | case QEvent::TabletRelease: | - | ||||||||||||
250 | handleTabletEvent(static_cast<QTabletEvent *>(event)); | - | ||||||||||||
251 | return true; | - | ||||||||||||
252 | - | |||||||||||||
253 | - | |||||||||||||
254 | - | |||||||||||||
255 | case QEvent::NativeGesture: | - | ||||||||||||
256 | handleGestureEvent(static_cast<QNativeGestureEvent *>(event)); | - | ||||||||||||
257 | return true; | - | ||||||||||||
258 | - | |||||||||||||
259 | - | |||||||||||||
260 | - | |||||||||||||
261 | case QEvent::ContextMenu: | - | ||||||||||||
262 | handleContextMenuEvent(static_cast<QContextMenuEvent *>(event)); | - | ||||||||||||
263 | return true; | - | ||||||||||||
264 | - | |||||||||||||
265 | - | |||||||||||||
266 | case QEvent::WindowBlocked: | - | ||||||||||||
267 | qt_button_down = 0; | - | ||||||||||||
268 | break; | - | ||||||||||||
269 | - | |||||||||||||
270 | case QEvent::UpdateRequest: | - | ||||||||||||
271 | - | |||||||||||||
272 | - | |||||||||||||
273 | m_widget->repaint(); | - | ||||||||||||
274 | return true; | - | ||||||||||||
275 | - | |||||||||||||
276 | default: | - | ||||||||||||
277 | break; | - | ||||||||||||
278 | } | - | ||||||||||||
279 | - | |||||||||||||
280 | if (shouldBePropagatedToWidget(event) && QCoreApplication::sendEvent(m_widget, event)) | - | ||||||||||||
281 | return true; | - | ||||||||||||
282 | - | |||||||||||||
283 | return QWindow::event(event); | - | ||||||||||||
284 | } | - | ||||||||||||
285 | - | |||||||||||||
286 | QPointer<QWidget> qt_last_mouse_receiver = 0; | - | ||||||||||||
287 | - | |||||||||||||
288 | void QWidgetWindow::handleEnterLeaveEvent(QEvent *event) | - | ||||||||||||
289 | { | - | ||||||||||||
290 | - | |||||||||||||
291 | - | |||||||||||||
292 | - | |||||||||||||
293 | - | |||||||||||||
294 | - | |||||||||||||
295 | if (QApplicationPrivate::inPopupMode() && m_widget != QApplication::activePopupWidget() && !m_widget->underMouse()) | - | ||||||||||||
296 | return; | - | ||||||||||||
297 | - | |||||||||||||
298 | if (event->type() == QEvent::Leave) { | - | ||||||||||||
299 | QWidget *enter = 0; | - | ||||||||||||
300 | - | |||||||||||||
301 | - | |||||||||||||
302 | - | |||||||||||||
303 | QWindowSystemInterfacePrivate::EnterEvent *systemEvent = | - | ||||||||||||
304 | static_cast<QWindowSystemInterfacePrivate::EnterEvent *> | - | ||||||||||||
305 | (QWindowSystemInterfacePrivate::peekWindowSystemEvent(QWindowSystemInterfacePrivate::Enter)); | - | ||||||||||||
306 | const QPointF globalPosF = systemEvent ? systemEvent->globalPos : QGuiApplicationPrivate::lastCursorPosition; | - | ||||||||||||
307 | if (systemEvent) { | - | ||||||||||||
308 | if (QWidgetWindow *enterWindow = qobject_cast<QWidgetWindow *>(systemEvent->enter)) | - | ||||||||||||
309 | { | - | ||||||||||||
310 | QWindow *thisParent = this; | - | ||||||||||||
311 | QWindow *enterParent = enterWindow; | - | ||||||||||||
312 | while (thisParent->parent()) | - | ||||||||||||
313 | thisParent = thisParent->parent(); | - | ||||||||||||
314 | while (enterParent->parent()) | - | ||||||||||||
315 | enterParent = enterParent->parent(); | - | ||||||||||||
316 | if (thisParent == enterParent) { | - | ||||||||||||
317 | QGuiApplicationPrivate::currentMouseWindow = enterWindow; | - | ||||||||||||
318 | enter = enterWindow->widget(); | - | ||||||||||||
319 | QWindowSystemInterfacePrivate::removeWindowSystemEvent(systemEvent); | - | ||||||||||||
320 | } | - | ||||||||||||
321 | } | - | ||||||||||||
322 | } | - | ||||||||||||
323 | - | |||||||||||||
324 | - | |||||||||||||
325 | - | |||||||||||||
326 | if (!enter || !QWidget::mouseGrabber()) { | - | ||||||||||||
327 | - | |||||||||||||
328 | - | |||||||||||||
329 | QWidget *leave = m_widget; | - | ||||||||||||
330 | if (qt_last_mouse_receiver && !qt_last_mouse_receiver->internalWinId()) | - | ||||||||||||
331 | leave = qt_last_mouse_receiver.data(); | - | ||||||||||||
332 | QApplicationPrivate::dispatchEnterLeave(enter, leave, globalPosF); | - | ||||||||||||
333 | qt_last_mouse_receiver = enter; | - | ||||||||||||
334 | } | - | ||||||||||||
335 | } else { | - | ||||||||||||
336 | const QEnterEvent *ee = static_cast<QEnterEvent *>(event); | - | ||||||||||||
337 | QWidget *child = m_widget->childAt(ee->pos()); | - | ||||||||||||
338 | QWidget *receiver = child ? child : m_widget.data(); | - | ||||||||||||
339 | QWidget *leave = nullptr; | - | ||||||||||||
340 | if (QApplicationPrivate::inPopupMode() && receiver == m_widget | - | ||||||||||||
341 | && qt_last_mouse_receiver != m_widget) { | - | ||||||||||||
342 | - | |||||||||||||
343 | - | |||||||||||||
344 | leave = qt_last_mouse_receiver; | - | ||||||||||||
345 | } | - | ||||||||||||
346 | QApplicationPrivate::dispatchEnterLeave(receiver, leave, ee->screenPos()); | - | ||||||||||||
347 | qt_last_mouse_receiver = receiver; | - | ||||||||||||
348 | } | - | ||||||||||||
349 | } | - | ||||||||||||
350 | - | |||||||||||||
351 | QWidget *QWidgetWindow::getFocusWidget(FocusWidgets fw) | - | ||||||||||||
352 | { | - | ||||||||||||
353 | QWidget *tlw = m_widget; | - | ||||||||||||
354 | QWidget *w = tlw->nextInFocusChain(); | - | ||||||||||||
355 | - | |||||||||||||
356 | QWidget *last = tlw; | - | ||||||||||||
357 | - | |||||||||||||
358 | uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus; | - | ||||||||||||
359 | - | |||||||||||||
360 | while (w != tlw) | - | ||||||||||||
361 | { | - | ||||||||||||
362 | if (((w->focusPolicy() & focus_flag) == focus_flag) | - | ||||||||||||
363 | && w->isVisibleTo(m_widget) && w->isEnabled()) | - | ||||||||||||
364 | { | - | ||||||||||||
365 | last = w; | - | ||||||||||||
366 | if (fw == FirstFocusWidget) | - | ||||||||||||
367 | break; | - | ||||||||||||
368 | } | - | ||||||||||||
369 | w = w->nextInFocusChain(); | - | ||||||||||||
370 | } | - | ||||||||||||
371 | - | |||||||||||||
372 | return last; | - | ||||||||||||
373 | } | - | ||||||||||||
374 | - | |||||||||||||
375 | void QWidgetWindow::handleFocusInEvent(QFocusEvent *e) | - | ||||||||||||
376 | { | - | ||||||||||||
377 | QWidget *focusWidget = 0; | - | ||||||||||||
378 | if (e->reason() == Qt::BacktabFocusReason) | - | ||||||||||||
379 | focusWidget = getFocusWidget(LastFocusWidget); | - | ||||||||||||
380 | else if (e->reason() == Qt::TabFocusReason) | - | ||||||||||||
381 | focusWidget = getFocusWidget(FirstFocusWidget); | - | ||||||||||||
382 | - | |||||||||||||
383 | if (focusWidget != 0) | - | ||||||||||||
384 | focusWidget->setFocus(); | - | ||||||||||||
385 | } | - | ||||||||||||
386 | - | |||||||||||||
387 | void QWidgetWindow::handleNonClientAreaMouseEvent(QMouseEvent *e) | - | ||||||||||||
388 | { | - | ||||||||||||
389 | QApplication::sendSpontaneousEvent(m_widget, e); | - | ||||||||||||
390 | } | - | ||||||||||||
391 | - | |||||||||||||
392 | void QWidgetWindow::handleMouseEvent(QMouseEvent *event) | - | ||||||||||||
393 | { | - | ||||||||||||
394 | static const QEvent::Type contextMenuTrigger = | - | ||||||||||||
395 | QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::ContextMenuOnMouseRelease).toBool() ? | - | ||||||||||||
396 | QEvent::MouseButtonRelease : QEvent::MouseButtonPress; | - | ||||||||||||
397 | if ((static_cast<
| 0 | ||||||||||||
398 | QWidget *activePopupWidget = (static_cast<QApplication *>(QCoreApplication::instance()))->activePopupWidget(); | - | ||||||||||||
399 | QPoint mapped = event->pos(); | - | ||||||||||||
400 | if (activePopupWidget != m_widget
| 0 | ||||||||||||
401 | mapped = activePopupWidget->mapFromGlobal(event->globalPos()); never executed: mapped = activePopupWidget->mapFromGlobal(event->globalPos()); | 0 | ||||||||||||
402 | bool releaseAfter = false; | - | ||||||||||||
403 | QWidget *popupChild = activePopupWidget->childAt(mapped); | - | ||||||||||||
404 | - | |||||||||||||
405 | if (activePopupWidget != qt_popup_down
| 0 | ||||||||||||
406 | qt_button_down = 0; | - | ||||||||||||
407 | qt_popup_down = 0; | - | ||||||||||||
408 | } never executed: end of block | 0 | ||||||||||||
409 | - | |||||||||||||
410 | switch (event->type()) { | - | ||||||||||||
411 | case never executed: QEvent::MouseButtonPress:case QEvent::MouseButtonPress: never executed: case QEvent::MouseButtonPress: | 0 | ||||||||||||
412 | case never executed: QEvent::MouseButtonDblClick:case QEvent::MouseButtonDblClick: never executed: case QEvent::MouseButtonDblClick: | 0 | ||||||||||||
413 | qt_button_down = popupChild; | - | ||||||||||||
414 | qt_popup_down = activePopupWidget; | - | ||||||||||||
415 | break; never executed: break; | 0 | ||||||||||||
416 | case never executed: QEvent::MouseButtonRelease:case QEvent::MouseButtonRelease: never executed: case QEvent::MouseButtonRelease: | 0 | ||||||||||||
417 | releaseAfter = true; | - | ||||||||||||
418 | break; never executed: break; | 0 | ||||||||||||
419 | default never executed: :default: never executed: default: | 0 | ||||||||||||
420 | break; never executed: break; | 0 | ||||||||||||
421 | } | - | ||||||||||||
422 | - | |||||||||||||
423 | int oldOpenPopupCount = openPopupCount; | - | ||||||||||||
424 | - | |||||||||||||
425 | if (activePopupWidget->isEnabled()
| 0 | ||||||||||||
426 | - | |||||||||||||
427 | qt_replay_popup_mouse_event = false; | - | ||||||||||||
428 | QWidget *receiver = activePopupWidget; | - | ||||||||||||
429 | QPoint widgetPos = mapped; | - | ||||||||||||
430 | if (qt_button_down
| 0 | ||||||||||||
431 | receiver = qt_button_down; never executed: receiver = qt_button_down; | 0 | ||||||||||||
432 | else if (popupChild
| 0 | ||||||||||||
433 | receiver = popupChild; never executed: receiver = popupChild; | 0 | ||||||||||||
434 | if (receiver != activePopupWidget
| 0 | ||||||||||||
435 | widgetPos = receiver->mapFromGlobal(event->globalPos()); never executed: widgetPos = receiver->mapFromGlobal(event->globalPos()); | 0 | ||||||||||||
436 | - | |||||||||||||
437 | - | |||||||||||||
438 | const bool reallyUnderMouse = activePopupWidget->rect().contains(mapped); | - | ||||||||||||
439 | const bool underMouse = activePopupWidget->underMouse(); | - | ||||||||||||
440 | if (underMouse != reallyUnderMouse
| 0 | ||||||||||||
441 | if (reallyUnderMouse
| 0 | ||||||||||||
442 | const QPoint receiverMapped = receiver->mapFromGlobal(event->screenPos().toPoint()); | - | ||||||||||||
443 | - | |||||||||||||
444 | - | |||||||||||||
445 | if (receiverMapped.x() >= 0
| 0 | ||||||||||||
446 | QApplicationPrivate::dispatchEnterLeave(receiver, nullptr, event->screenPos()); | - | ||||||||||||
447 | qt_last_mouse_receiver = receiver; | - | ||||||||||||
448 | } never executed: end of block | 0 | ||||||||||||
449 | } never executed: else {end of block | 0 | ||||||||||||
450 | QApplicationPrivate::dispatchEnterLeave(nullptr, qt_last_mouse_receiver, event->screenPos()); | - | ||||||||||||
451 | qt_last_mouse_receiver = receiver; | - | ||||||||||||
452 | receiver = activePopupWidget; | - | ||||||||||||
453 | } never executed: end of block | 0 | ||||||||||||
454 | } | - | ||||||||||||
455 | - | |||||||||||||
456 | - | |||||||||||||
457 | QMouseEvent e(event->type(), widgetPos, event->windowPos(), event->screenPos(), | - | ||||||||||||
458 | event->button(), event->buttons(), event->modifiers(), event->source()); | - | ||||||||||||
459 | e.setTimestamp(event->timestamp()); | - | ||||||||||||
460 | QApplicationPrivate::sendMouseEvent(receiver, &e, receiver, receiver->window(), &qt_button_down, qt_last_mouse_receiver); | - | ||||||||||||
461 | qt_last_mouse_receiver = receiver; | - | ||||||||||||
462 | } never executed: else {end of block | 0 | ||||||||||||
463 | - | |||||||||||||
464 | switch (event->type()) { | - | ||||||||||||
465 | case never executed: QEvent::MouseButtonPress:case QEvent::MouseButtonPress: never executed: case QEvent::MouseButtonPress: | 0 | ||||||||||||
466 | case never executed: QEvent::MouseButtonDblClick:case QEvent::MouseButtonDblClick: never executed: case QEvent::MouseButtonDblClick: | 0 | ||||||||||||
467 | case never executed: QEvent::MouseButtonRelease:case QEvent::MouseButtonRelease: never executed: case QEvent::MouseButtonRelease: | 0 | ||||||||||||
468 | activePopupWidget->close(); | - | ||||||||||||
469 | break; never executed: break; | 0 | ||||||||||||
470 | default never executed: :default: never executed: default: | 0 | ||||||||||||
471 | break; never executed: break; | 0 | ||||||||||||
472 | } | - | ||||||||||||
473 | } | - | ||||||||||||
474 | - | |||||||||||||
475 | if ((static_cast<
| 0 | ||||||||||||
476 | && qt_replay_popup_mouse_event
| 0 | ||||||||||||
477 | && QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::ReplayMousePressOutsidePopup).toBool()
| 0 | ||||||||||||
478 | if (m_widget->windowType() != Qt::Popup
| 0 | ||||||||||||
479 | qt_button_down = 0; never executed: qt_button_down = 0; | 0 | ||||||||||||
480 | if (event->type() == QEvent::MouseButtonPress
| 0 | ||||||||||||
481 | - | |||||||||||||
482 | QWidget *w = QApplication::widgetAt(event->globalPos()); | - | ||||||||||||
483 | if (w
| 0 | ||||||||||||
484 | - | |||||||||||||
485 | if (!w->isActiveWindow()
| 0 | ||||||||||||
486 | w->activateWindow(); | - | ||||||||||||
487 | w->window()->raise(); | - | ||||||||||||
488 | } never executed: end of block | 0 | ||||||||||||
489 | - | |||||||||||||
490 | QWindow *win = w->windowHandle(); | - | ||||||||||||
491 | if (!win
| 0 | ||||||||||||
492 | win = w->nativeParentWidget()->windowHandle(); never executed: win = w->nativeParentWidget()->windowHandle(); | 0 | ||||||||||||
493 | if (win
| 0 | ||||||||||||
494 | const QRect globalGeometry = win->isTopLevel()
| 0 | ||||||||||||
495 | ? win->geometry() | - | ||||||||||||
496 | : QRect(win->mapToGlobal(QPoint(0, 0)), win->size()); | - | ||||||||||||
497 | if (globalGeometry.contains(event->globalPos())
| 0 | ||||||||||||
498 | - | |||||||||||||
499 | const QPoint localPos = win->mapFromGlobal(event->globalPos()); | - | ||||||||||||
500 | QMouseEvent *e = new QMouseEvent(QEvent::MouseButtonPress, localPos, localPos, event->globalPos(), | - | ||||||||||||
501 | event->button(), event->buttons(), event->modifiers(), event->source()); | - | ||||||||||||
502 | QCoreApplicationPrivate::setEventSpontaneous(e, true); | - | ||||||||||||
503 | e->setTimestamp(event->timestamp()); | - | ||||||||||||
504 | QCoreApplication::postEvent(win, e); | - | ||||||||||||
505 | } never executed: end of block | 0 | ||||||||||||
506 | } never executed: end of block | 0 | ||||||||||||
507 | } never executed: end of block | 0 | ||||||||||||
508 | } never executed: end of block | 0 | ||||||||||||
509 | qt_replay_popup_mouse_event = false; | - | ||||||||||||
510 | - | |||||||||||||
511 | } never executed: else if (event->type() == contextMenuTriggerend of block
| 0 | ||||||||||||
512 | && event->button() == Qt::RightButton
| 0 | ||||||||||||
513 | && (
| 0 | ||||||||||||
514 | QWidget *popupEvent = activePopupWidget; | - | ||||||||||||
515 | if (qt_button_down
| 0 | ||||||||||||
516 | popupEvent = qt_button_down; never executed: popupEvent = qt_button_down; | 0 | ||||||||||||
517 | else if(popupChild
| 0 | ||||||||||||
518 | popupEvent = popupChild; never executed: popupEvent = popupChild; | 0 | ||||||||||||
519 | QContextMenuEvent e(QContextMenuEvent::Mouse, mapped, event->globalPos(), event->modifiers()); | - | ||||||||||||
520 | QApplication::sendSpontaneousEvent(popupEvent, &e); | - | ||||||||||||
521 | } never executed: end of block | 0 | ||||||||||||
522 | - | |||||||||||||
523 | - | |||||||||||||
524 | - | |||||||||||||
525 | - | |||||||||||||
526 | - | |||||||||||||
527 | - | |||||||||||||
528 | if (releaseAfter
| 0 | ||||||||||||
529 | qt_button_down = 0; | - | ||||||||||||
530 | qt_popup_down = 0; | - | ||||||||||||
531 | } never executed: end of block | 0 | ||||||||||||
532 | return; never executed: return; | 0 | ||||||||||||
533 | } | - | ||||||||||||
534 | - | |||||||||||||
535 | - | |||||||||||||
536 | if (QApplicationPrivate::instance()->modalState()
| 0 | ||||||||||||
537 | return; never executed: return; | 0 | ||||||||||||
538 | - | |||||||||||||
539 | - | |||||||||||||
540 | QWidget *widget = m_widget->childAt(event->pos()); | - | ||||||||||||
541 | QPoint mapped = event->pos(); | - | ||||||||||||
542 | - | |||||||||||||
543 | if (!widget
| 0 | ||||||||||||
544 | widget = m_widget; never executed: widget = m_widget; | 0 | ||||||||||||
545 | - | |||||||||||||
546 | if (event->type() == QEvent::MouseButtonPress
| 0 | ||||||||||||
547 | qt_button_down = widget; never executed: qt_button_down = widget; | 0 | ||||||||||||
548 | - | |||||||||||||
549 | QWidget *receiver = QApplicationPrivate::pickMouseReceiver(m_widget, event->windowPos().toPoint(), &mapped, event->type(), event->buttons(), | - | ||||||||||||
550 | qt_button_down, widget); | - | ||||||||||||
551 | - | |||||||||||||
552 | if (!receiver
| 0 | ||||||||||||
553 | if (event->type() == QEvent::MouseButtonRelease
| 0 | ||||||||||||
554 | QApplicationPrivate::mouse_buttons &= ~event->button(); never executed: QApplicationPrivate::mouse_buttons &= ~event->button(); | 0 | ||||||||||||
555 | return; never executed: return; | 0 | ||||||||||||
556 | } | - | ||||||||||||
557 | if ((
| 0 | ||||||||||||
558 | || !(event->flags().testFlag(Qt::MouseEventCreatedDoubleClick))
| 0 | ||||||||||||
559 | - | |||||||||||||
560 | - | |||||||||||||
561 | - | |||||||||||||
562 | QMouseEvent translated(event->type(), mapped, event->windowPos(), event->screenPos(), | - | ||||||||||||
563 | event->button(), event->buttons(), event->modifiers(), event->source()); | - | ||||||||||||
564 | translated.setTimestamp(event->timestamp()); | - | ||||||||||||
565 | QApplicationPrivate::sendMouseEvent(receiver, &translated, widget, m_widget, | - | ||||||||||||
566 | &qt_button_down, qt_last_mouse_receiver); | - | ||||||||||||
567 | event->setAccepted(translated.isAccepted()); | - | ||||||||||||
568 | } never executed: end of block | 0 | ||||||||||||
569 | - | |||||||||||||
570 | if (event->type() == contextMenuTrigger
| 0 | ||||||||||||
571 | && m_widget->rect().contains(event->pos())
| 0 | ||||||||||||
572 | QContextMenuEvent e(QContextMenuEvent::Mouse, mapped, event->globalPos(), event->modifiers()); | - | ||||||||||||
573 | QGuiApplication::sendSpontaneousEvent(receiver, &e); | - | ||||||||||||
574 | } never executed: end of block | 0 | ||||||||||||
575 | - | |||||||||||||
576 | } never executed: end of block | 0 | ||||||||||||
577 | - | |||||||||||||
578 | void QWidgetWindow::handleTouchEvent(QTouchEvent *event) | - | ||||||||||||
579 | { | - | ||||||||||||
580 | if (event->type() == QEvent::TouchCancel) { | - | ||||||||||||
581 | QApplicationPrivate::translateTouchCancel(event->device(), event->timestamp()); | - | ||||||||||||
582 | event->accept(); | - | ||||||||||||
583 | } else if ((static_cast<QApplication *>(QCoreApplication::instance()))->d_func()->inPopupMode()) { | - | ||||||||||||
584 | - | |||||||||||||
585 | - | |||||||||||||
586 | event->ignore(); | - | ||||||||||||
587 | } else { | - | ||||||||||||
588 | event->setAccepted(QApplicationPrivate::translateRawTouchEvent(m_widget, event->device(), event->touchPoints(), event->timestamp())); | - | ||||||||||||
589 | } | - | ||||||||||||
590 | } | - | ||||||||||||
591 | - | |||||||||||||
592 | void QWidgetWindow::handleKeyEvent(QKeyEvent *event) | - | ||||||||||||
593 | { | - | ||||||||||||
594 | if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type())) | - | ||||||||||||
595 | return; | - | ||||||||||||
596 | - | |||||||||||||
597 | QObject *receiver = QWidget::keyboardGrabber(); | - | ||||||||||||
598 | if (!receiver && QApplicationPrivate::inPopupMode()) { | - | ||||||||||||
599 | QWidget *popup = QApplication::activePopupWidget(); | - | ||||||||||||
600 | QWidget *popupFocusWidget = popup->focusWidget(); | - | ||||||||||||
601 | receiver = popupFocusWidget ? popupFocusWidget : popup; | - | ||||||||||||
602 | } | - | ||||||||||||
603 | if (!receiver) | - | ||||||||||||
604 | receiver = focusObject(); | - | ||||||||||||
605 | QGuiApplication::sendSpontaneousEvent(receiver, event); | - | ||||||||||||
606 | } | - | ||||||||||||
607 | - | |||||||||||||
608 | bool QWidgetWindow::updateSize() | - | ||||||||||||
609 | { | - | ||||||||||||
610 | bool changed = false; | - | ||||||||||||
611 | if (m_widget->testAttribute(Qt::WA_OutsideWSRange)) | - | ||||||||||||
612 | return changed; | - | ||||||||||||
613 | if (m_widget->data->crect.size() != geometry().size()) { | - | ||||||||||||
614 | changed = true; | - | ||||||||||||
615 | m_widget->data->crect.setSize(geometry().size()); | - | ||||||||||||
616 | } | - | ||||||||||||
617 | - | |||||||||||||
618 | updateMargins(); | - | ||||||||||||
619 | return changed; | - | ||||||||||||
620 | } | - | ||||||||||||
621 | - | |||||||||||||
622 | bool QWidgetWindow::updatePos() | - | ||||||||||||
623 | { | - | ||||||||||||
624 | bool changed = false; | - | ||||||||||||
625 | if (m_widget->testAttribute(Qt::WA_OutsideWSRange)) | - | ||||||||||||
626 | return changed; | - | ||||||||||||
627 | if (m_widget->data->crect.topLeft() != geometry().topLeft()) { | - | ||||||||||||
628 | changed = true; | - | ||||||||||||
629 | m_widget->data->crect.moveTopLeft(geometry().topLeft()); | - | ||||||||||||
630 | } | - | ||||||||||||
631 | updateMargins(); | - | ||||||||||||
632 | return changed; | - | ||||||||||||
633 | } | - | ||||||||||||
634 | - | |||||||||||||
635 | void QWidgetWindow::updateMargins() | - | ||||||||||||
636 | { | - | ||||||||||||
637 | const QMargins margins = frameMargins(); | - | ||||||||||||
638 | QTLWExtra *te = m_widget->d_func()->topData(); | - | ||||||||||||
639 | te->posIncludesFrame= false; | - | ||||||||||||
640 | te->frameStrut.setCoords(margins.left(), margins.top(), margins.right(), margins.bottom()); | - | ||||||||||||
641 | m_widget->data->fstrut_dirty = false; | - | ||||||||||||
642 | } | - | ||||||||||||
643 | - | |||||||||||||
644 | static void sendScreenChangeRecursively(QWidget *widget) | - | ||||||||||||
645 | { | - | ||||||||||||
646 | QEvent e(QEvent::ScreenChangeInternal); | - | ||||||||||||
647 | QApplication::sendEvent(widget, &e); | - | ||||||||||||
648 | QWidgetPrivate *d = QWidgetPrivate::get(widget); | - | ||||||||||||
649 | for (int i = 0; i < d->children.size(); ++i) { | - | ||||||||||||
650 | QWidget *w = qobject_cast<QWidget *>(d->children.at(i)); | - | ||||||||||||
651 | if (w) | - | ||||||||||||
652 | sendScreenChangeRecursively(w); | - | ||||||||||||
653 | } | - | ||||||||||||
654 | } | - | ||||||||||||
655 | - | |||||||||||||
656 | void QWidgetWindow::handleScreenChange() | - | ||||||||||||
657 | { | - | ||||||||||||
658 | - | |||||||||||||
659 | sendScreenChangeRecursively(m_widget); | - | ||||||||||||
660 | - | |||||||||||||
661 | - | |||||||||||||
662 | if (screen()) | - | ||||||||||||
663 | repaintWindow(); | - | ||||||||||||
664 | } | - | ||||||||||||
665 | - | |||||||||||||
666 | void QWidgetWindow::repaintWindow() | - | ||||||||||||
667 | { | - | ||||||||||||
668 | if (!m_widget->isVisible() || !m_widget->updatesEnabled() || !m_widget->rect().isValid()) | - | ||||||||||||
669 | return; | - | ||||||||||||
670 | - | |||||||||||||
671 | QTLWExtra *tlwExtra = m_widget->window()->d_func()->maybeTopData(); | - | ||||||||||||
672 | if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) | - | ||||||||||||
673 | tlwExtra->backingStoreTracker->markDirty(m_widget->rect(), m_widget, | - | ||||||||||||
674 | QWidgetBackingStore::UpdateNow, QWidgetBackingStore::BufferInvalid); | - | ||||||||||||
675 | } | - | ||||||||||||
676 | - | |||||||||||||
677 | Qt::WindowState effectiveState(Qt::WindowStates state); | - | ||||||||||||
678 | - | |||||||||||||
679 | - | |||||||||||||
680 | void QWidgetWindow::updateNormalGeometry() | - | ||||||||||||
681 | { | - | ||||||||||||
682 | QTLWExtra *tle = m_widget->d_func()->maybeTopData(); | - | ||||||||||||
683 | if (!tle) | - | ||||||||||||
684 | return; | - | ||||||||||||
685 | - | |||||||||||||
686 | QRect normalGeometry; | - | ||||||||||||
687 | if (const QPlatformWindow *pw = handle()) | - | ||||||||||||
688 | normalGeometry = QHighDpi::fromNativePixels(pw->normalGeometry(), this); | - | ||||||||||||
689 | if (!normalGeometry.isValid() && effectiveState(m_widget->windowState()) == Qt::WindowNoState) | - | ||||||||||||
690 | normalGeometry = m_widget->geometry(); | - | ||||||||||||
691 | if (normalGeometry.isValid()) | - | ||||||||||||
692 | tle->normalGeometry = normalGeometry; | - | ||||||||||||
693 | } | - | ||||||||||||
694 | - | |||||||||||||
695 | void QWidgetWindow::handleMoveEvent(QMoveEvent *event) | - | ||||||||||||
696 | { | - | ||||||||||||
697 | if (updatePos()) | - | ||||||||||||
698 | QGuiApplication::sendSpontaneousEvent(m_widget, event); | - | ||||||||||||
699 | } | - | ||||||||||||
700 | - | |||||||||||||
701 | void QWidgetWindow::handleResizeEvent(QResizeEvent *event) | - | ||||||||||||
702 | { | - | ||||||||||||
703 | QSize oldSize = m_widget->data->crect.size(); | - | ||||||||||||
704 | - | |||||||||||||
705 | if (updateSize()) { | - | ||||||||||||
706 | QGuiApplication::sendSpontaneousEvent(m_widget, event); | - | ||||||||||||
707 | - | |||||||||||||
708 | if (m_widget->d_func()->paintOnScreen()) { | - | ||||||||||||
709 | QRegion updateRegion(geometry()); | - | ||||||||||||
710 | if (m_widget->testAttribute(Qt::WA_StaticContents)) | - | ||||||||||||
711 | updateRegion -= QRect(0, 0, oldSize.width(), oldSize.height()); | - | ||||||||||||
712 | m_widget->d_func()->syncBackingStore(updateRegion); | - | ||||||||||||
713 | } else { | - | ||||||||||||
714 | m_widget->d_func()->syncBackingStore(); | - | ||||||||||||
715 | } | - | ||||||||||||
716 | } | - | ||||||||||||
717 | } | - | ||||||||||||
718 | - | |||||||||||||
719 | void QWidgetWindow::handleCloseEvent(QCloseEvent *event) | - | ||||||||||||
720 | { | - | ||||||||||||
721 | bool is_closing = m_widget->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); | - | ||||||||||||
722 | event->setAccepted(is_closing); | - | ||||||||||||
723 | } | - | ||||||||||||
724 | - | |||||||||||||
725 | - | |||||||||||||
726 | - | |||||||||||||
727 | void QWidgetWindow::handleWheelEvent(QWheelEvent *event) | - | ||||||||||||
728 | { | - | ||||||||||||
729 | if (QApplicationPrivate::instance()->modalState()
| 0 | ||||||||||||
730 | return; never executed: return; | 0 | ||||||||||||
731 | - | |||||||||||||
732 | QWidget *rootWidget = m_widget; | - | ||||||||||||
733 | QPoint pos = event->pos(); | - | ||||||||||||
734 | - | |||||||||||||
735 | - | |||||||||||||
736 | - | |||||||||||||
737 | QWidget *activePopupWidget = QApplication::activePopupWidget(); | - | ||||||||||||
738 | if (activePopupWidget
| 0 | ||||||||||||
739 | rootWidget = activePopupWidget; | - | ||||||||||||
740 | pos = rootWidget->mapFromGlobal(event->globalPos()); | - | ||||||||||||
741 | } never executed: end of block | 0 | ||||||||||||
742 | - | |||||||||||||
743 | - | |||||||||||||
744 | QWidget *widget = rootWidget->childAt(pos); | - | ||||||||||||
745 | - | |||||||||||||
746 | if (!widget
| 0 | ||||||||||||
747 | widget = rootWidget; never executed: widget = rootWidget; | 0 | ||||||||||||
748 | - | |||||||||||||
749 | QPoint mapped = widget->mapFrom(rootWidget, pos); | - | ||||||||||||
750 | - | |||||||||||||
751 | QWheelEvent translated(mapped, event->globalPos(), event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers(), event->phase(), event->source(), event->inverted()); | - | ||||||||||||
752 | QGuiApplication::sendSpontaneousEvent(widget, &translated); | - | ||||||||||||
753 | } never executed: end of block | 0 | ||||||||||||
754 | - | |||||||||||||
755 | - | |||||||||||||
756 | - | |||||||||||||
757 | - | |||||||||||||
758 | - | |||||||||||||
759 | void QWidgetWindow::handleDragEnterMoveEvent(QDragMoveEvent *event) | - | ||||||||||||
760 | { | - | ||||||||||||
761 | ((!(event->type() ==QEvent::DragMove || !m_dragTarget)) ? qt_assert("event->type() ==QEvent::DragMove || !m_dragTarget",__FILE__,802812) : qt_noop()); | - | ||||||||||||
762 | - | |||||||||||||
763 | QWidget *widget = m_widget->childAt(event->pos()); | - | ||||||||||||
764 | if (!widget) | - | ||||||||||||
765 | widget = m_widget; | - | ||||||||||||
766 | for ( ; widget && !widget->isWindow() && !widget->acceptDrops(); widget = widget->parentWidget()) ; | - | ||||||||||||
767 | if (widget && !widget->acceptDrops()) | - | ||||||||||||
768 | widget = 0; | - | ||||||||||||
769 | - | |||||||||||||
770 | if (widget && widget == m_dragTarget.data()) { | - | ||||||||||||
771 | ((!(event->type() == QEvent::DragMove)) ? qt_assert("event->type() == QEvent::DragMove",__FILE__,812822) : qt_noop()); | - | ||||||||||||
772 | const QPoint mapped = widget->mapFromGlobal(m_widget->mapToGlobal(event->pos())); | - | ||||||||||||
773 | QDragMoveEvent translated(mapped, event->possibleActions(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers()); | - | ||||||||||||
774 | translated.setDropAction(event->dropAction()); | - | ||||||||||||
775 | if (event->isAccepted()) { | - | ||||||||||||
776 | translated.accept(); | - | ||||||||||||
777 | translated.setDropAction(event->dropAction()); | - | ||||||||||||
778 | } | - | ||||||||||||
779 | QGuiApplication::sendSpontaneousEvent(widget, &translated); | - | ||||||||||||
780 | if (translated.isAccepted()) { | - | ||||||||||||
781 | event->accept(); | - | ||||||||||||
782 | } else { | - | ||||||||||||
783 | event->ignore(); | - | ||||||||||||
784 | } | - | ||||||||||||
785 | event->setDropAction(translated.dropAction()); | - | ||||||||||||
786 | return; | - | ||||||||||||
787 | } | - | ||||||||||||
788 | - | |||||||||||||
789 | if (m_dragTarget.data()) { | - | ||||||||||||
790 | QDragLeaveEvent le; | - | ||||||||||||
791 | QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), &le); | - | ||||||||||||
792 | m_dragTarget = 0; | - | ||||||||||||
793 | } | - | ||||||||||||
794 | if (!widget) { | - | ||||||||||||
795 | event->ignore(); | - | ||||||||||||
796 | return; | - | ||||||||||||
797 | } | - | ||||||||||||
798 | m_dragTarget = widget; | - | ||||||||||||
799 | const QPoint mapped = widget->mapFromGlobal(m_widget->mapToGlobal(event->pos())); | - | ||||||||||||
800 | QDragEnterEvent translated(mapped, event->possibleActions(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers()); | - | ||||||||||||
801 | QGuiApplication::sendSpontaneousEvent(widget, &translated); | - | ||||||||||||
802 | if (translated.isAccepted()) { | - | ||||||||||||
803 | event->accept(); | - | ||||||||||||
804 | } else { | - | ||||||||||||
805 | event->ignore(); | - | ||||||||||||
806 | } | - | ||||||||||||
807 | event->setDropAction(translated.dropAction()); | - | ||||||||||||
808 | } | - | ||||||||||||
809 | - | |||||||||||||
810 | void QWidgetWindow::handleDragLeaveEvent(QDragLeaveEvent *event) | - | ||||||||||||
811 | { | - | ||||||||||||
812 | if (m_dragTarget) | - | ||||||||||||
813 | QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), event); | - | ||||||||||||
814 | m_dragTarget = 0; | - | ||||||||||||
815 | } | - | ||||||||||||
816 | - | |||||||||||||
817 | void QWidgetWindow::handleDropEvent(QDropEvent *event) | - | ||||||||||||
818 | { | - | ||||||||||||
819 | if (__builtin_expect(!!(
| 0 | ||||||||||||
820 | QMessageLogger(__FILE__, 861871, __PRETTY_FUNCTION__).warning() << m_widget << ": No drag target set."; | - | ||||||||||||
821 | event->ignore(); | - | ||||||||||||
822 | return; never executed: return; | 0 | ||||||||||||
823 | } | - | ||||||||||||
824 | const QPoint mapped = m_dragTarget.data()->mapFromGlobal(m_widget->mapToGlobal(event->pos())); | - | ||||||||||||
825 | QDropEvent translated(mapped, event->possibleActions(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers()); | - | ||||||||||||
826 | QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), &translated); | - | ||||||||||||
827 | if (translated.isAccepted()
| 0 | ||||||||||||
828 | event->accept(); never executed: event->accept(); | 0 | ||||||||||||
829 | event->setDropAction(translated.dropAction()); | - | ||||||||||||
830 | m_dragTarget = 0; | - | ||||||||||||
831 | } never executed: end of block | 0 | ||||||||||||
832 | - | |||||||||||||
833 | - | |||||||||||||
834 | - | |||||||||||||
835 | void QWidgetWindow::handleExposeEvent(QExposeEvent *event) | - | ||||||||||||
836 | { | - | ||||||||||||
837 | QWidgetPrivate *wPriv = m_widget->d_func(); | - | ||||||||||||
838 | const bool exposed = isExposed(); | - | ||||||||||||
839 | - | |||||||||||||
840 | if (wPriv->childrenHiddenByWState) { | - | ||||||||||||
841 | - | |||||||||||||
842 | - | |||||||||||||
843 | if (exposed) { | - | ||||||||||||
844 | - | |||||||||||||
845 | if (!wPriv->childrenShownByExpose) { | - | ||||||||||||
846 | - | |||||||||||||
847 | wPriv->showChildren(true); | - | ||||||||||||
848 | QShowEvent showEvent; | - | ||||||||||||
849 | QCoreApplication::sendSpontaneousEvent(m_widget, &showEvent); | - | ||||||||||||
850 | wPriv->childrenShownByExpose = true; | - | ||||||||||||
851 | } | - | ||||||||||||
852 | } else { | - | ||||||||||||
853 | - | |||||||||||||
854 | if (wPriv->childrenShownByExpose) { | - | ||||||||||||
855 | - | |||||||||||||
856 | - | |||||||||||||
857 | - | |||||||||||||
858 | - | |||||||||||||
859 | wPriv->hideChildren(true); | - | ||||||||||||
860 | QHideEvent hideEvent; | - | ||||||||||||
861 | QCoreApplication::sendSpontaneousEvent(m_widget, &hideEvent); | - | ||||||||||||
862 | wPriv->childrenShownByExpose = false; | - | ||||||||||||
863 | } | - | ||||||||||||
864 | } | - | ||||||||||||
865 | } | - | ||||||||||||
866 | - | |||||||||||||
867 | if (exposed) { | - | ||||||||||||
868 | m_widget->setAttribute(Qt::WA_Mapped); | - | ||||||||||||
869 | if (!event->region().isNull()) | - | ||||||||||||
870 | wPriv->syncBackingStore(event->region()); | - | ||||||||||||
871 | } else { | - | ||||||||||||
872 | m_widget->setAttribute(Qt::WA_Mapped, false); | - | ||||||||||||
873 | } | - | ||||||||||||
874 | } | - | ||||||||||||
875 | - | |||||||||||||
876 | void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event) | - | ||||||||||||
877 | { | - | ||||||||||||
878 | - | |||||||||||||
879 | Qt::WindowStates eventState = event->oldState(); | - | ||||||||||||
880 | Qt::WindowStates widgetState = m_widget->windowState(); | - | ||||||||||||
881 | if (widgetState & Qt::WindowActive) | - | ||||||||||||
882 | eventState |= Qt::WindowActive; | - | ||||||||||||
883 | - | |||||||||||||
884 | - | |||||||||||||
885 | - | |||||||||||||
886 | switch (windowState()) { | - | ||||||||||||
887 | case Qt::WindowNoState: | - | ||||||||||||
888 | widgetState &= ~(Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen); | - | ||||||||||||
889 | break; | - | ||||||||||||
890 | case Qt::WindowMinimized: | - | ||||||||||||
891 | widgetState |= Qt::WindowMinimized; | - | ||||||||||||
892 | break; | - | ||||||||||||
893 | case Qt::WindowMaximized: | - | ||||||||||||
894 | updateNormalGeometry(); | - | ||||||||||||
895 | widgetState |= Qt::WindowMaximized; | - | ||||||||||||
896 | widgetState &= ~(Qt::WindowMinimized | Qt::WindowFullScreen); | - | ||||||||||||
897 | break; | - | ||||||||||||
898 | case Qt::WindowFullScreen: | - | ||||||||||||
899 | updateNormalGeometry(); | - | ||||||||||||
900 | widgetState |= Qt::WindowFullScreen; | - | ||||||||||||
901 | widgetState &= ~(Qt::WindowMinimized); | - | ||||||||||||
902 | break; | - | ||||||||||||
903 | case Qt::WindowActive: | - | ||||||||||||
904 | break; | - | ||||||||||||
905 | } | - | ||||||||||||
906 | - | |||||||||||||
907 | - | |||||||||||||
908 | - | |||||||||||||
909 | if (widgetState != int(m_widget->data->window_state)) { | - | ||||||||||||
910 | m_widget->data->window_state = widgetState; | - | ||||||||||||
911 | QWindowStateChangeEvent widgetEvent(eventState); | - | ||||||||||||
912 | QGuiApplication::sendSpontaneousEvent(m_widget, &widgetEvent); | - | ||||||||||||
913 | } | - | ||||||||||||
914 | } | - | ||||||||||||
915 | - | |||||||||||||
916 | bool QWidgetWindow::nativeEvent(const QByteArray &eventType, void *message, long *result) | - | ||||||||||||
917 | { | - | ||||||||||||
918 | return m_widget->nativeEvent(eventType, message, result); | - | ||||||||||||
919 | } | - | ||||||||||||
920 | - | |||||||||||||
921 | - | |||||||||||||
922 | void QWidgetWindow::handleTabletEvent(QTabletEvent *event) | - | ||||||||||||
923 | { | - | ||||||||||||
924 | static QPointer<QWidget> qt_tablet_target = 0; | - | ||||||||||||
925 | if (event->type() == QEvent::TabletPress
| 0 | ||||||||||||
926 | QWidget *widget = m_widget->childAt(event->pos()); | - | ||||||||||||
927 | if (!widget
| 0 | ||||||||||||
928 | widget = m_widget; never executed: widget = m_widget; | 0 | ||||||||||||
929 | - | |||||||||||||
930 | qt_tablet_target = widget; | - | ||||||||||||
931 | } never executed: end of block | 0 | ||||||||||||
932 | - | |||||||||||||
933 | if (qt_tablet_target
| 0 | ||||||||||||
934 | QPointF delta = event->globalPosF() - event->globalPos(); | - | ||||||||||||
935 | QPointF mapped = qt_tablet_target->mapFromGlobal(event->globalPos()) + delta; | - | ||||||||||||
936 | QTabletEvent ev(event->type(), mapped, event->globalPosF(), event->device(), event->pointerType(), | - | ||||||||||||
937 | event->pressure(), event->xTilt(), event->yTilt(), event->tangentialPressure(), | - | ||||||||||||
938 | event->rotation(), event->z(), event->modifiers(), event->uniqueId(), event->button(), event->buttons()); | - | ||||||||||||
939 | ev.setTimestamp(event->timestamp()); | - | ||||||||||||
940 | QGuiApplication::sendSpontaneousEvent(qt_tablet_target, &ev); | - | ||||||||||||
941 | event->setAccepted(ev.isAccepted()); | - | ||||||||||||
942 | } never executed: end of block | 0 | ||||||||||||
943 | - | |||||||||||||
944 | if (event->type() == QEvent::TabletRelease
| 0 | ||||||||||||
945 | qt_tablet_target = 0; never executed: qt_tablet_target = 0; | 0 | ||||||||||||
946 | } never executed: end of block | 0 | ||||||||||||
947 | - | |||||||||||||
948 | - | |||||||||||||
949 | - | |||||||||||||
950 | void QWidgetWindow::handleGestureEvent(QNativeGestureEvent *e) | - | ||||||||||||
951 | { | - | ||||||||||||
952 | - | |||||||||||||
953 | QObject *receiver = 0; | - | ||||||||||||
954 | if (QApplicationPrivate::inPopupMode()) { | - | ||||||||||||
955 | QWidget *popup = QApplication::activePopupWidget(); | - | ||||||||||||
956 | QWidget *popupFocusWidget = popup->focusWidget(); | - | ||||||||||||
957 | receiver = popupFocusWidget ? popupFocusWidget : popup; | - | ||||||||||||
958 | } | - | ||||||||||||
959 | if (!receiver) | - | ||||||||||||
960 | receiver = QApplication::widgetAt(e->globalPos()); | - | ||||||||||||
961 | if (!receiver) | - | ||||||||||||
962 | receiver = m_widget; | - | ||||||||||||
963 | - | |||||||||||||
964 | QApplication::sendSpontaneousEvent(receiver, e); | - | ||||||||||||
965 | } | - | ||||||||||||
966 | - | |||||||||||||
967 | - | |||||||||||||
968 | - | |||||||||||||
969 | void QWidgetWindow::handleContextMenuEvent(QContextMenuEvent *e) | - | ||||||||||||
970 | { | - | ||||||||||||
971 | - | |||||||||||||
972 | - | |||||||||||||
973 | if (e->reason() != QContextMenuEvent::Keyboard) | - | ||||||||||||
974 | return; | - | ||||||||||||
975 | - | |||||||||||||
976 | QWidget *fw = QWidget::keyboardGrabber(); | - | ||||||||||||
977 | if (!fw) { | - | ||||||||||||
978 | if (QApplication::activePopupWidget()) { | - | ||||||||||||
979 | fw = (QApplication::activePopupWidget()->focusWidget() | - | ||||||||||||
980 | ? QApplication::activePopupWidget()->focusWidget() | - | ||||||||||||
981 | : QApplication::activePopupWidget()); | - | ||||||||||||
982 | } else if (QApplication::focusWidget()) { | - | ||||||||||||
983 | fw = QApplication::focusWidget(); | - | ||||||||||||
984 | } else { | - | ||||||||||||
985 | fw = m_widget; | - | ||||||||||||
986 | } | - | ||||||||||||
987 | } | - | ||||||||||||
988 | if (fw && fw->isEnabled()) { | - | ||||||||||||
989 | QPoint pos = fw->inputMethodQuery(Qt::ImMicroFocus).toRect().center(); | - | ||||||||||||
990 | QContextMenuEvent widgetEvent(QContextMenuEvent::Keyboard, pos, fw->mapToGlobal(pos), | - | ||||||||||||
991 | e->modifiers()); | - | ||||||||||||
992 | QGuiApplication::sendSpontaneousEvent(fw, &widgetEvent); | - | ||||||||||||
993 | } | - | ||||||||||||
994 | } | - | ||||||||||||
995 | - | |||||||||||||
996 | - | |||||||||||||
997 | void QWidgetWindow::updateObjectName() | - | ||||||||||||
998 | { | - | ||||||||||||
999 | QString name = m_widget->objectName(); | - | ||||||||||||
1000 | if (name.isEmpty()
| 0 | ||||||||||||
1001 | name = QString::fromUtf8(m_widget->metaObject()->className()) + ([]() -> QString { enum { Size = sizeof(u"" "Class")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeofQLatin1String(QStringData) }, u"" "Class"}; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); never executed: name = QString::fromUtf8(m_widget->metaObject()->className()) + QLatin1String("Class"); | 0 | ||||||||||||
1002 | return qstring_literal_temp; }());name += ([]() -> QString { enum { Size = sizeof(u"" "Window")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeofQLatin1String(QStringData) }, u"" "Window"}; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder);return qstring_literal_temp; }()); | - | ||||||||||||
1003 | setObjectName(name); | - | ||||||||||||
1004 | } never executed: end of block | 0 | ||||||||||||
1005 | - | |||||||||||||
1006 | - | |||||||||||||
1007 | - | |||||||||||||
Switch to Source code | Preprocessed file |