qwidgetwindow.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2015 The Qt Company Ltd.-
4** Contact: http://www.qt.io/licensing/-
5**-
6** This file is part of the QtWidgets module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL21$-
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 http://www.qt.io/terms-conditions. For further-
15** information use the contact form at http://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 2.1 or version 3 as published by the Free-
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and-
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the-
22** following information to ensure the GNU Lesser General Public License-
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and-
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.-
25**-
26** As a special exception, The Qt Company gives you certain additional-
27** rights. These rights are described in The Qt Company LGPL Exception-
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.-
29**-
30** $QT_END_LICENSE$-
31**-
32****************************************************************************/-
33-
34#include "private/qwindow_p.h"-
35#include "qwidgetwindow_p.h"-
36#include "qlayout.h"-
37-
38#include "private/qwidget_p.h"-
39#include "private/qapplication_p.h"-
40#ifndef QT_NO_ACCESSIBILITY-
41#include <QtGui/qaccessible.h>-
42#endif-
43#include <private/qwidgetbackingstore_p.h>-
44#include <qpa/qwindowsysteminterface_p.h>-
45#include <qpa/qplatformtheme.h>-
46#include <qpa/qplatformwindow.h>-
47#include <private/qgesturemanager_p.h>-
48#include <private/qhighdpiscaling_p.h>-
49-
50QT_BEGIN_NAMESPACE-
51-
52Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets();-
53-
54QWidget *qt_button_down = 0; // widget got last button-down-
55-
56// popup control-
57QWidget *qt_popup_down = 0; // popup that contains the pressed widget-
58extern int openPopupCount;-
59bool qt_replay_popup_mouse_event = false;-
60extern bool qt_try_modal(QWidget *widget, QEvent::Type type);-
61-
62class QWidgetWindowPrivate : public QWindowPrivate-
63{-
64 Q_DECLARE_PUBLIC(QWidgetWindow)-
65public:-
66 QWindow *eventReceiver() Q_DECL_OVERRIDE {-
67 Q_Q(QWidgetWindow);-
68 QWindow *w = q;-
69 while (w->parent() && qobject_cast<QWidgetWindow *>(w) && qobject_cast<QWidgetWindow *>(w->parent())) {
w->parent()Description
TRUEnever evaluated
FALSEnever evaluated
qobject_cast<Q...etWindow *>(w)Description
TRUEnever evaluated
FALSEnever evaluated
qobject_cast<Q...>(w->parent())Description
TRUEnever evaluated
FALSEnever evaluated
0
70 w = w->parent();-
71 }
never executed: end of block
0
72 return w;
never executed: return w;
0
73 }-
74-
75 void clearFocusObject() Q_DECL_OVERRIDE-
76 {-
77 Q_Q(QWidgetWindow);-
78 QWidget *widget = q->widget();-
79 if (widget && widget->focusWidget())
widgetDescription
TRUEnever evaluated
FALSEnever evaluated
widget->focusWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
80 widget->focusWidget()->clearFocus();
never executed: widget->focusWidget()->clearFocus();
0
81 }
never executed: end of block
0
82-
83 QRectF closestAcceptableGeometry(const QRectF &rect) const Q_DECL_OVERRIDE;-
84};-
85-
86QRectF QWidgetWindowPrivate::closestAcceptableGeometry(const QRectF &rect) const-
87{-
88 Q_Q(const QWidgetWindow);-
89 const QWidget *widget = q->widget();-
90 if (!widget || !widget->isWindow() || !widget->hasHeightForWidth())
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!widget->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!widget->hasHeightForWidth()Description
TRUEnever evaluated
FALSEnever evaluated
0
91 return QRect();
never executed: return QRect();
0
92 const QSize oldSize = rect.size().toSize();-
93 const QSize newSize = QLayout::closestAcceptableSize(widget, oldSize);-
94 if (newSize == oldSize)
newSize == oldSizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
95 return QRectF();
never executed: return QRectF();
0
96 const int dw = newSize.width() - oldSize.width();-
97 const int dh = newSize.height() - oldSize.height();-
98 QRectF result = rect;-
99 const QRectF currentGeometry(widget->geometry());-
100 const qreal topOffset = result.top() - currentGeometry.top();-
101 const qreal bottomOffset = result.bottom() - currentGeometry.bottom();-
102 if (qAbs(topOffset) > qAbs(bottomOffset))
qAbs(topOffset...(bottomOffset)Description
TRUEnever evaluated
FALSEnever evaluated
0
103 result.setTop(result.top() - dh); // top edge drag
never executed: result.setTop(result.top() - dh);
0
104 else-
105 result.setBottom(result.bottom() + dh); // bottom edge drag
never executed: result.setBottom(result.bottom() + dh);
0
106 const qreal leftOffset = result.left() - currentGeometry.left();-
107 const qreal rightOffset = result.right() - currentGeometry.right();-
108 if (qAbs(leftOffset) > qAbs(rightOffset))
qAbs(leftOffse...s(rightOffset)Description
TRUEnever evaluated
FALSEnever evaluated
0
109 result.setLeft(result.left() - dw); // left edge drag
never executed: result.setLeft(result.left() - dw);
0
110 else-
111 result.setRight(result.right() + dw); // right edge drag
never executed: result.setRight(result.right() + dw);
0
112 return result;
never executed: return result;
0
113}-
114-
115QWidgetWindow::QWidgetWindow(QWidget *widget)-
116 : QWindow(*new QWidgetWindowPrivate(), 0)-
117 , m_widget(widget)-
118{-
119 updateObjectName();-
120 // Enable QOpenGLWidget/QQuickWidget children if the platform plugin supports it,-
121 // and the application developer has not explicitly disabled it.-
122 if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::RasterGLSurface)
QGuiApplicatio...sterGLSurface)Description
TRUEnever evaluated
FALSEnever evaluated
0
123 && !QApplication::testAttribute(Qt::AA_ForceRasterWidgets)) {
!QApplication:...RasterWidgets)Description
TRUEnever evaluated
FALSEnever evaluated
0
124 setSurfaceType(QSurface::RasterGLSurface);-
125 }
never executed: end of block
0
126 connect(widget, &QObject::objectNameChanged, this, &QWidgetWindow::updateObjectName);-
127 connect(this, SIGNAL(screenChanged(QScreen*)), this, SLOT(handleScreenChange()));-
128}
never executed: end of block
0
129-
130QWidgetWindow::~QWidgetWindow()-
131{-
132}-
133-
134#ifndef QT_NO_ACCESSIBILITY-
135QAccessibleInterface *QWidgetWindow::accessibleRoot() const-
136{-
137 if (m_widget)
m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
138 return QAccessible::queryAccessibleInterface(m_widget);
never executed: return QAccessible::queryAccessibleInterface(m_widget);
0
139 return 0;
never executed: return 0;
0
140}-
141#endif-
142-
143QObject *QWidgetWindow::focusObject() const-
144{-
145 QWidget *windowWidget = m_widget;-
146 if (!windowWidget)
!windowWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
147 return Q_NULLPTR;
never executed: return nullptr;
0
148-
149 QWidget *widget = windowWidget->focusWidget();-
150-
151 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
152 widget = windowWidget;
never executed: widget = windowWidget;
0
153-
154 QObject *focusObj = QWidgetPrivate::get(widget)->focusObject();-
155 if (focusObj)
focusObjDescription
TRUEnever evaluated
FALSEnever evaluated
0
156 return focusObj;
never executed: return focusObj;
0
157-
158 return widget;
never executed: return widget;
0
159}-
160-
161static inline bool shouldBePropagatedToWidget(QEvent *event)-
162{-
163 switch (event->type()) {-
164 // Handing show events to widgets would cause them to be triggered twice-
165 case QEvent::Show:
never executed: case QEvent::Show:
0
166 case QEvent::Hide:
never executed: case QEvent::Hide:
0
167 case QEvent::Timer:
never executed: case QEvent::Timer:
0
168 case QEvent::DynamicPropertyChange:
never executed: case QEvent::DynamicPropertyChange:
0
169 case QEvent::ChildAdded:
never executed: case QEvent::ChildAdded:
0
170 case QEvent::ChildRemoved:
never executed: case QEvent::ChildRemoved:
0
171 return false;
never executed: return false;
0
172 default:
never executed: default:
0
173 return true;
never executed: return true;
0
174 }-
175}-
176-
177bool QWidgetWindow::event(QEvent *event)-
178{-
179 if (!m_widget)
!m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
180 return QWindow::event(event);
never executed: return QWindow::event(event);
0
181-
182 if (m_widget->testAttribute(Qt::WA_DontShowOnScreen)) {
m_widget->test...tShowOnScreen)Description
TRUEnever evaluated
FALSEnever evaluated
0
183 // \a event is uninteresting for QWidgetWindow, the event was probably-
184 // generated before WA_DontShowOnScreen was set-
185 if (!shouldBePropagatedToWidget(event))
!shouldBePropa...oWidget(event)Description
TRUEnever evaluated
FALSEnever evaluated
0
186 return true;
never executed: return true;
0
187 return QCoreApplication::sendEvent(m_widget, event);
never executed: return QCoreApplication::sendEvent(m_widget, event);
0
188 }-
189-
190 switch (event->type()) {-
191 case QEvent::Close:
never executed: case QEvent::Close:
0
192 handleCloseEvent(static_cast<QCloseEvent *>(event));-
193 return true;
never executed: return true;
0
194-
195 case QEvent::Enter:
never executed: case QEvent::Enter:
0
196 case QEvent::Leave:
never executed: case QEvent::Leave:
0
197 handleEnterLeaveEvent(event);-
198 return true;
never executed: return true;
0
199-
200 // these should not be sent to QWidget, the corresponding events-
201 // are sent by QApplicationPrivate::notifyActiveWindowChange()-
202 case QEvent::FocusIn:
never executed: case QEvent::FocusIn:
0
203 handleFocusInEvent(static_cast<QFocusEvent *>(event));-
204 // Fallthrough-
205 case QEvent::FocusOut: {
code before this statement never executed: case QEvent::FocusOut:
never executed: case QEvent::FocusOut:
0
206#ifndef QT_NO_ACCESSIBILITY-
207 QAccessible::State state;-
208 state.active = true;-
209 QAccessibleStateChangeEvent ev(m_widget, state);-
210 QAccessible::updateAccessibility(&ev);-
211#endif-
212 return false; }
never executed: return false;
0
213-
214 case QEvent::FocusAboutToChange:
never executed: case QEvent::FocusAboutToChange:
0
215 if (QApplicationPrivate::focus_widget) {
QApplicationPr...::focus_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
216 if (QApplicationPrivate::focus_widget->testAttribute(Qt::WA_InputMethodEnabled))
QApplicationPr...MethodEnabled)Description
TRUEnever evaluated
FALSEnever evaluated
0
217 QGuiApplication::inputMethod()->commit();
never executed: QGuiApplication::inputMethod()->commit();
0
218-
219 QGuiApplication::sendSpontaneousEvent(QApplicationPrivate::focus_widget, event);-
220 }
never executed: end of block
0
221 return true;
never executed: return true;
0
222-
223 case QEvent::KeyPress:
never executed: case QEvent::KeyPress:
0
224 case QEvent::KeyRelease:
never executed: case QEvent::KeyRelease:
0
225 case QEvent::ShortcutOverride:
never executed: case QEvent::ShortcutOverride:
0
226 handleKeyEvent(static_cast<QKeyEvent *>(event));-
227 return true;
never executed: return true;
0
228-
229 case QEvent::MouseMove:
never executed: case QEvent::MouseMove:
0
230 case QEvent::MouseButtonPress:
never executed: case QEvent::MouseButtonPress:
0
231 case QEvent::MouseButtonRelease:
never executed: case QEvent::MouseButtonRelease:
0
232 case QEvent::MouseButtonDblClick:
never executed: case QEvent::MouseButtonDblClick:
0
233 handleMouseEvent(static_cast<QMouseEvent *>(event));-
234 return true;
never executed: return true;
0
235-
236 case QEvent::NonClientAreaMouseMove:
never executed: case QEvent::NonClientAreaMouseMove:
0
237 case QEvent::NonClientAreaMouseButtonPress:
never executed: case QEvent::NonClientAreaMouseButtonPress:
0
238 case QEvent::NonClientAreaMouseButtonRelease:
never executed: case QEvent::NonClientAreaMouseButtonRelease:
0
239 case QEvent::NonClientAreaMouseButtonDblClick:
never executed: case QEvent::NonClientAreaMouseButtonDblClick:
0
240 handleNonClientAreaMouseEvent(static_cast<QMouseEvent *>(event));-
241 return true;
never executed: return true;
0
242-
243 case QEvent::TouchBegin:
never executed: case QEvent::TouchBegin:
0
244 case QEvent::TouchUpdate:
never executed: case QEvent::TouchUpdate:
0
245 case QEvent::TouchEnd:
never executed: case QEvent::TouchEnd:
0
246 case QEvent::TouchCancel:
never executed: case QEvent::TouchCancel:
0
247 handleTouchEvent(static_cast<QTouchEvent *>(event));-
248 return true;
never executed: return true;
0
249-
250 case QEvent::Move:
never executed: case QEvent::Move:
0
251 handleMoveEvent(static_cast<QMoveEvent *>(event));-
252 return true;
never executed: return true;
0
253-
254 case QEvent::Resize:
never executed: case QEvent::Resize:
0
255 handleResizeEvent(static_cast<QResizeEvent *>(event));-
256 return true;
never executed: return true;
0
257-
258#ifndef QT_NO_WHEELEVENT-
259 case QEvent::Wheel:
never executed: case QEvent::Wheel:
0
260 handleWheelEvent(static_cast<QWheelEvent *>(event));-
261 return true;
never executed: return true;
0
262#endif-
263-
264#ifndef QT_NO_DRAGANDDROP-
265 case QEvent::DragEnter:
never executed: case QEvent::DragEnter:
0
266 case QEvent::DragMove:
never executed: case QEvent::DragMove:
0
267 handleDragEnterMoveEvent(static_cast<QDragMoveEvent *>(event));-
268 return true;
never executed: return true;
0
269 case QEvent::DragLeave:
never executed: case QEvent::DragLeave:
0
270 handleDragLeaveEvent(static_cast<QDragLeaveEvent *>(event));-
271 return true;
never executed: return true;
0
272 case QEvent::Drop:
never executed: case QEvent::Drop:
0
273 handleDropEvent(static_cast<QDropEvent *>(event));-
274 return true;
never executed: return true;
0
275#endif-
276-
277 case QEvent::Expose:
never executed: case QEvent::Expose:
0
278 handleExposeEvent(static_cast<QExposeEvent *>(event));-
279 return true;
never executed: return true;
0
280-
281 case QEvent::WindowStateChange:
never executed: case QEvent::WindowStateChange:
0
282 handleWindowStateChangedEvent(static_cast<QWindowStateChangeEvent *>(event));-
283 return true;
never executed: return true;
0
284-
285 case QEvent::ThemeChange: {
never executed: case QEvent::ThemeChange:
0
286 QEvent widgetEvent(QEvent::ThemeChange);-
287 QGuiApplication::sendSpontaneousEvent(m_widget, &widgetEvent);-
288 }-
289 return true;
never executed: return true;
0
290-
291#ifndef QT_NO_TABLETEVENT-
292 case QEvent::TabletPress:
never executed: case QEvent::TabletPress:
0
293 case QEvent::TabletMove:
never executed: case QEvent::TabletMove:
0
294 case QEvent::TabletRelease:
never executed: case QEvent::TabletRelease:
0
295 handleTabletEvent(static_cast<QTabletEvent *>(event));-
296 return true;
never executed: return true;
0
297#endif-
298-
299#ifndef QT_NO_GESTURES-
300 case QEvent::NativeGesture:
never executed: case QEvent::NativeGesture:
0
301 handleGestureEvent(static_cast<QNativeGestureEvent *>(event));-
302 return true;
never executed: return true;
0
303#endif-
304-
305#ifndef QT_NO_CONTEXTMENU-
306 case QEvent::ContextMenu:
never executed: case QEvent::ContextMenu:
0
307 handleContextMenuEvent(static_cast<QContextMenuEvent *>(event));-
308 return true;
never executed: return true;
0
309#endif-
310-
311 case QEvent::WindowBlocked:
never executed: case QEvent::WindowBlocked:
0
312 qt_button_down = 0;-
313 break;
never executed: break;
0
314-
315 case QEvent::UpdateRequest:
never executed: case QEvent::UpdateRequest:
0
316 // This is not the same as an UpdateRequest for a QWidget. That just-
317 // syncs the backing store while here we also must mark as dirty.-
318 m_widget->repaint();-
319 return true;
never executed: return true;
0
320-
321 default:
never executed: default:
0
322 break;
never executed: break;
0
323 }-
324-
325 if (shouldBePropagatedToWidget(event) && QCoreApplication::sendEvent(m_widget, event))
shouldBePropag...oWidget(event)Description
TRUEnever evaluated
FALSEnever evaluated
QCoreApplicati...widget, event)Description
TRUEnever evaluated
FALSEnever evaluated
0
326 return true;
never executed: return true;
0
327-
328 return QWindow::event(event);
never executed: return QWindow::event(event);
0
329}-
330-
331QPointer<QWidget> qt_last_mouse_receiver = 0;-
332-
333void QWidgetWindow::handleEnterLeaveEvent(QEvent *event)-
334{-
335#if !defined(Q_OS_OSX) && !defined(Q_OS_IOS) // Cocoa tracks popups-
336 // Ignore all enter/leave events from QPA if we are not on the first-level context menu.-
337 // This prevents duplicated events on most platforms. Fake events will be delivered in-
338 // QWidgetWindow::handleMouseEvent(QMouseEvent *). Make an exception whether the widget-
339 // is already under mouse - let the mouse leave.-
340 if (QApplicationPrivate::inPopupMode() && m_widget != QApplication::activePopupWidget() && !m_widget->underMouse())
QApplicationPr...:inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
m_widget != QA...ePopupWidget()Description
TRUEnever evaluated
FALSEnever evaluated
!m_widget->underMouse()Description
TRUEnever evaluated
FALSEnever evaluated
0
341 return;
never executed: return;
0
342#endif-
343 if (event->type() == QEvent::Leave) {
event->type() == QEvent::LeaveDescription
TRUEnever evaluated
FALSEnever evaluated
0
344 QWidget *enter = 0;-
345 // Check from window system event queue if the next queued enter targets a window-
346 // in the same window hierarchy (e.g. enter a child of this window). If so,-
347 // remove the enter event from queue and handle both in single dispatch.-
348 QWindowSystemInterfacePrivate::EnterEvent *systemEvent =-
349 static_cast<QWindowSystemInterfacePrivate::EnterEvent *>-
350 (QWindowSystemInterfacePrivate::peekWindowSystemEvent(QWindowSystemInterfacePrivate::Enter));-
351 const QPointF globalPosF = systemEvent ? systemEvent->globalPos : QGuiApplicationPrivate::lastCursorPosition;
systemEventDescription
TRUEnever evaluated
FALSEnever evaluated
0
352 if (systemEvent) {
systemEventDescription
TRUEnever evaluated
FALSEnever evaluated
0
353 if (QWidgetWindow *enterWindow = qobject_cast<QWidgetWindow *>(systemEvent->enter))
QWidgetWindow ...mEvent->enter)Description
TRUEnever evaluated
FALSEnever evaluated
0
354 {-
355 QWindow *thisParent = this;-
356 QWindow *enterParent = enterWindow;-
357 while (thisParent->parent())
thisParent->parent()Description
TRUEnever evaluated
FALSEnever evaluated
0
358 thisParent = thisParent->parent();
never executed: thisParent = thisParent->parent();
0
359 while (enterParent->parent())
enterParent->parent()Description
TRUEnever evaluated
FALSEnever evaluated
0
360 enterParent = enterParent->parent();
never executed: enterParent = enterParent->parent();
0
361 if (thisParent == enterParent) {
thisParent == enterParentDescription
TRUEnever evaluated
FALSEnever evaluated
0
362 QGuiApplicationPrivate::currentMouseWindow = enterWindow;-
363 enter = enterWindow->widget();-
364 QWindowSystemInterfacePrivate::removeWindowSystemEvent(systemEvent);-
365 }
never executed: end of block
0
366 }
never executed: end of block
0
367 }
never executed: end of block
0
368 // Enter-leave between sibling widgets is ignored when there is a mousegrabber - this makes-
369 // both native and non-native widgets work similarly.-
370 // When mousegrabbing, leaves are only generated if leaving the parent window.-
371 if (!enter || !QWidget::mouseGrabber()) {
!enterDescription
TRUEnever evaluated
FALSEnever evaluated
!QWidget::mouseGrabber()Description
TRUEnever evaluated
FALSEnever evaluated
0
372 // Preferred leave target is the last mouse receiver, unless it has native window,-
373 // in which case it is assumed to receive it's own leave event when relevant.-
374 QWidget *leave = m_widget;-
375 if (qt_last_mouse_receiver && !qt_last_mouse_receiver->internalWinId())
qt_last_mouse_receiverDescription
TRUEnever evaluated
FALSEnever evaluated
!qt_last_mouse...nternalWinId()Description
TRUEnever evaluated
FALSEnever evaluated
0
376 leave = qt_last_mouse_receiver.data();
never executed: leave = qt_last_mouse_receiver.data();
0
377 QApplicationPrivate::dispatchEnterLeave(enter, leave, globalPosF);-
378 qt_last_mouse_receiver = enter;-
379 }
never executed: end of block
0
380 } else {
never executed: end of block
0
381 const QEnterEvent *ee = static_cast<QEnterEvent *>(event);-
382 QWidget *child = m_widget->childAt(ee->pos());-
383 QWidget *receiver = child ? child : m_widget.data();
childDescription
TRUEnever evaluated
FALSEnever evaluated
0
384 QWidget *leave = Q_NULLPTR;-
385 if (QApplicationPrivate::inPopupMode() && receiver == m_widget
QApplicationPr...:inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
receiver == m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
386 && qt_last_mouse_receiver != m_widget) {
qt_last_mouse_...er != m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
387 // This allows to deliver the leave event to the native widget-
388 // action on first-level menu.-
389 leave = qt_last_mouse_receiver;-
390 }
never executed: end of block
0
391 QApplicationPrivate::dispatchEnterLeave(receiver, leave, ee->screenPos());-
392 qt_last_mouse_receiver = receiver;-
393 }
never executed: end of block
0
394}-
395-
396QWidget *QWidgetWindow::getFocusWidget(FocusWidgets fw)-
397{-
398 QWidget *tlw = m_widget;-
399 QWidget *w = tlw->nextInFocusChain();-
400-
401 QWidget *last = tlw;-
402-
403 uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus;
qt_tab_all_widgets()Description
TRUEnever evaluated
FALSEnever evaluated
0
404-
405 while (w != tlw)
w != tlwDescription
TRUEnever evaluated
FALSEnever evaluated
0
406 {-
407 if (((w->focusPolicy() & focus_flag) == focus_flag)
((w->focusPoli...== focus_flag)Description
TRUEnever evaluated
FALSEnever evaluated
0
408 && w->isVisibleTo(m_widget) && w->isEnabled())
w->isVisibleTo(m_widget)Description
TRUEnever evaluated
FALSEnever evaluated
w->isEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
409 {-
410 last = w;-
411 if (fw == FirstFocusWidget)
fw == FirstFocusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
412 break;
never executed: break;
0
413 }
never executed: end of block
0
414 w = w->nextInFocusChain();-
415 }
never executed: end of block
0
416-
417 return last;
never executed: return last;
0
418}-
419-
420void QWidgetWindow::handleFocusInEvent(QFocusEvent *e)-
421{-
422 QWidget *focusWidget = 0;-
423 if (e->reason() == Qt::BacktabFocusReason)
e->reason() ==...tabFocusReasonDescription
TRUEnever evaluated
FALSEnever evaluated
0
424 focusWidget = getFocusWidget(LastFocusWidget);
never executed: focusWidget = getFocusWidget(LastFocusWidget);
0
425 else if (e->reason() == Qt::TabFocusReason)
e->reason() ==...TabFocusReasonDescription
TRUEnever evaluated
FALSEnever evaluated
0
426 focusWidget = getFocusWidget(FirstFocusWidget);
never executed: focusWidget = getFocusWidget(FirstFocusWidget);
0
427-
428 if (focusWidget != 0)
focusWidget != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
429 focusWidget->setFocus();
never executed: focusWidget->setFocus();
0
430}
never executed: end of block
0
431-
432void QWidgetWindow::handleNonClientAreaMouseEvent(QMouseEvent *e)-
433{-
434 QApplication::sendSpontaneousEvent(m_widget, e);-
435}
never executed: end of block
0
436-
437void QWidgetWindow::handleMouseEvent(QMouseEvent *event)-
438{-
439 static const QEvent::Type contextMenuTrigger =-
440 QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::ContextMenuOnMouseRelease).toBool() ?-
441 QEvent::MouseButtonRelease : QEvent::MouseButtonPress;-
442 if (qApp->d_func()->inPopupMode()) {
(static_cast<Q...>inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
0
443 QWidget *activePopupWidget = qApp->activePopupWidget();-
444 QPoint mapped = event->pos();-
445 if (activePopupWidget != m_widget)
activePopupWidget != m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
446 mapped = activePopupWidget->mapFromGlobal(event->globalPos());
never executed: mapped = activePopupWidget->mapFromGlobal(event->globalPos());
0
447 bool releaseAfter = false;-
448 QWidget *popupChild = activePopupWidget->childAt(mapped);-
449-
450 if (activePopupWidget != qt_popup_down) {
activePopupWid... qt_popup_downDescription
TRUEnever evaluated
FALSEnever evaluated
0
451 qt_button_down = 0;-
452 qt_popup_down = 0;-
453 }
never executed: end of block
0
454-
455 switch (event->type()) {-
456 case QEvent::MouseButtonPress:
never executed: case QEvent::MouseButtonPress:
0
457 case QEvent::MouseButtonDblClick:
never executed: case QEvent::MouseButtonDblClick:
0
458 qt_button_down = popupChild;-
459 qt_popup_down = activePopupWidget;-
460 break;
never executed: break;
0
461 case QEvent::MouseButtonRelease:
never executed: case QEvent::MouseButtonRelease:
0
462 releaseAfter = true;-
463 break;
never executed: break;
0
464 default:
never executed: default:
0
465 break; // nothing for mouse move
never executed: break;
0
466 }-
467-
468 int oldOpenPopupCount = openPopupCount;-
469-
470 if (activePopupWidget->isEnabled()) {
activePopupWidget->isEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
471 // deliver event-
472 qt_replay_popup_mouse_event = false;-
473 QWidget *receiver = activePopupWidget;-
474 QPoint widgetPos = mapped;-
475 if (qt_button_down)
qt_button_downDescription
TRUEnever evaluated
FALSEnever evaluated
0
476 receiver = qt_button_down;
never executed: receiver = qt_button_down;
0
477 else if (popupChild)
popupChildDescription
TRUEnever evaluated
FALSEnever evaluated
0
478 receiver = popupChild;
never executed: receiver = popupChild;
0
479 if (receiver != activePopupWidget)
receiver != activePopupWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
480 widgetPos = receiver->mapFromGlobal(event->globalPos());
never executed: widgetPos = receiver->mapFromGlobal(event->globalPos());
0
481-
482#if !defined(Q_OS_OSX) && !defined(Q_OS_IOS) // Cocoa tracks popups-
483 const bool reallyUnderMouse = activePopupWidget->rect().contains(mapped);-
484 const bool underMouse = activePopupWidget->underMouse();-
485 if (underMouse != reallyUnderMouse) {
underMouse != reallyUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
0
486 if (reallyUnderMouse) {
reallyUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
0
487 const QPoint receiverMapped = receiver->mapFromGlobal(event->screenPos().toPoint());-
488 // Prevent negative mouse position on enter event - this event-
489 // should be properly handled in "handleEnterLeaveEvent()".-
490 if (receiverMapped.x() >= 0 && receiverMapped.y() >= 0) {
receiverMapped.x() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
receiverMapped.y() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
491 QApplicationPrivate::dispatchEnterLeave(receiver, Q_NULLPTR, event->screenPos());-
492 qt_last_mouse_receiver = receiver;-
493 }
never executed: end of block
0
494 } else {
never executed: end of block
0
495 QApplicationPrivate::dispatchEnterLeave(Q_NULLPTR, qt_last_mouse_receiver, event->screenPos());-
496 qt_last_mouse_receiver = receiver;-
497 receiver = activePopupWidget;-
498 }
never executed: end of block
0
499 }-
500#endif-
501-
502 QMouseEvent e(event->type(), widgetPos, event->windowPos(), event->screenPos(),-
503 event->button(), event->buttons(), event->modifiers(), event->source());-
504 e.setTimestamp(event->timestamp());-
505 QApplicationPrivate::sendMouseEvent(receiver, &e, receiver, receiver->window(), &qt_button_down, qt_last_mouse_receiver);-
506 qt_last_mouse_receiver = receiver;-
507 } else {
never executed: end of block
0
508 // close disabled popups when a mouse button is pressed or released-
509 switch (event->type()) {-
510 case QEvent::MouseButtonPress:
never executed: case QEvent::MouseButtonPress:
0
511 case QEvent::MouseButtonDblClick:
never executed: case QEvent::MouseButtonDblClick:
0
512 case QEvent::MouseButtonRelease:
never executed: case QEvent::MouseButtonRelease:
0
513 activePopupWidget->close();-
514 break;
never executed: break;
0
515 default:
never executed: default:
0
516 break;
never executed: break;
0
517 }-
518 }-
519-
520 if (qApp->activePopupWidget() != activePopupWidget
(static_cast<Q...ivePopupWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
521 && qt_replay_popup_mouse_event
qt_replay_popup_mouse_eventDescription
TRUEnever evaluated
FALSEnever evaluated
0
522 && QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::ReplayMousePressOutsidePopup).toBool()) {
QGuiApplicatio...opup).toBool()Description
TRUEnever evaluated
FALSEnever evaluated
0
523 if (m_widget->windowType() != Qt::Popup)
m_widget->wind...) != Qt::PopupDescription
TRUEnever evaluated
FALSEnever evaluated
0
524 qt_button_down = 0;
never executed: qt_button_down = 0;
0
525 if (event->type() == QEvent::MouseButtonPress) {
event->type() ...useButtonPressDescription
TRUEnever evaluated
FALSEnever evaluated
0
526 // the popup disappeared, replay the mouse press event-
527 QWidget *w = QApplication::widgetAt(event->globalPos());-
528 if (w && !QApplicationPrivate::isBlockedByModal(w)) {
wDescription
TRUEnever evaluated
FALSEnever evaluated
!QApplicationP...ckedByModal(w)Description
TRUEnever evaluated
FALSEnever evaluated
0
529 // activate window of the widget under mouse pointer-
530 if (!w->isActiveWindow()) {
!w->isActiveWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
531 w->activateWindow();-
532 w->window()->raise();-
533 }
never executed: end of block
0
534-
535 QWindow *win = w->windowHandle();-
536 if (!win)
!winDescription
TRUEnever evaluated
FALSEnever evaluated
0
537 win = w->nativeParentWidget()->windowHandle();
never executed: win = w->nativeParentWidget()->windowHandle();
0
538 if (win) {
winDescription
TRUEnever evaluated
FALSEnever evaluated
0
539 const QRect globalGeometry = win->isTopLevel()
win->isTopLevel()Description
TRUEnever evaluated
FALSEnever evaluated
0
540 ? win->geometry()-
541 : QRect(win->mapToGlobal(QPoint(0, 0)), win->size());-
542 if (globalGeometry.contains(event->globalPos())) {
globalGeometry...->globalPos())Description
TRUEnever evaluated
FALSEnever evaluated
0
543 // Use postEvent() to ensure the local QEventLoop terminates when called from QMenu::exec()-
544 const QPoint localPos = win->mapFromGlobal(event->globalPos());-
545 QMouseEvent *e = new QMouseEvent(QEvent::MouseButtonPress, localPos, localPos, event->globalPos(),-
546 event->button(), event->buttons(), event->modifiers(), event->source());-
547 QCoreApplicationPrivate::setEventSpontaneous(e, true);-
548 e->setTimestamp(event->timestamp());-
549 QCoreApplication::postEvent(win, e);-
550 }
never executed: end of block
0
551 }
never executed: end of block
0
552 }
never executed: end of block
0
553 }
never executed: end of block
0
554 qt_replay_popup_mouse_event = false;-
555#ifndef QT_NO_CONTEXTMENU-
556 } else if (event->type() == contextMenuTrigger
never executed: end of block
event->type() ...extMenuTriggerDescription
TRUEnever evaluated
FALSEnever evaluated
0
557 && event->button() == Qt::RightButton
event->button(...t::RightButtonDescription
TRUEnever evaluated
FALSEnever evaluated
0
558 && (openPopupCount == oldOpenPopupCount)) {
(openPopupCoun...penPopupCount)Description
TRUEnever evaluated
FALSEnever evaluated
0
559 QWidget *popupEvent = activePopupWidget;-
560 if (qt_button_down)
qt_button_downDescription
TRUEnever evaluated
FALSEnever evaluated
0
561 popupEvent = qt_button_down;
never executed: popupEvent = qt_button_down;
0
562 else if(popupChild)
popupChildDescription
TRUEnever evaluated
FALSEnever evaluated
0
563 popupEvent = popupChild;
never executed: popupEvent = popupChild;
0
564 QContextMenuEvent e(QContextMenuEvent::Mouse, mapped, event->globalPos(), event->modifiers());-
565 QApplication::sendSpontaneousEvent(popupEvent, &e);-
566#endif-
567 }
never executed: end of block
0
568-
569 if (releaseAfter) {
releaseAfterDescription
TRUEnever evaluated
FALSEnever evaluated
0
570 qt_button_down = 0;-
571 qt_popup_down = 0;-
572 }
never executed: end of block
0
573 return;
never executed: return;
0
574 }-
575-
576 // modal event handling-
577 if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type()))
QApplicationPr...->modalState()Description
TRUEnever evaluated
FALSEnever evaluated
!qt_try_modal(...event->type())Description
TRUEnever evaluated
FALSEnever evaluated
0
578 return;
never executed: return;
0
579-
580 // which child should have it?-
581 QWidget *widget = m_widget->childAt(event->pos());-
582 QPoint mapped = event->pos();-
583-
584 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
585 widget = m_widget;
never executed: widget = m_widget;
0
586-
587 if (event->type() == QEvent::MouseButtonPress)
event->type() ...useButtonPressDescription
TRUEnever evaluated
FALSEnever evaluated
0
588 qt_button_down = widget;
never executed: qt_button_down = widget;
0
589-
590 QWidget *receiver = QApplicationPrivate::pickMouseReceiver(m_widget, event->windowPos().toPoint(), &mapped, event->type(), event->buttons(),-
591 qt_button_down, widget);-
592-
593 if (!receiver) {
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
594 if (event->type() == QEvent::MouseButtonRelease)
event->type() ...eButtonReleaseDescription
TRUEnever evaluated
FALSEnever evaluated
0
595 QApplicationPrivate::mouse_buttons &= ~event->button();
never executed: QApplicationPrivate::mouse_buttons &= ~event->button();
0
596 return;
never executed: return;
0
597 }-
598 if ((event->type() != QEvent::MouseButtonPress)
(event->type()...seButtonPress)Description
TRUEnever evaluated
FALSEnever evaluated
0
599 || !(event->flags().testFlag(Qt::MouseEventCreatedDoubleClick))) {
!(event->flags...dDoubleClick))Description
TRUEnever evaluated
FALSEnever evaluated
0
600-
601 // The preceding statement excludes MouseButtonPress events which caused-
602 // creation of a MouseButtonDblClick event. QTBUG-25831-
603 QMouseEvent translated(event->type(), mapped, event->windowPos(), event->screenPos(),-
604 event->button(), event->buttons(), event->modifiers(), event->source());-
605 translated.setTimestamp(event->timestamp());-
606 QApplicationPrivate::sendMouseEvent(receiver, &translated, widget, m_widget,-
607 &qt_button_down, qt_last_mouse_receiver);-
608 event->setAccepted(translated.isAccepted());-
609 }
never executed: end of block
0
610#ifndef QT_NO_CONTEXTMENU-
611 if (event->type() == contextMenuTrigger && event->button() == Qt::RightButton
event->type() ...extMenuTriggerDescription
TRUEnever evaluated
FALSEnever evaluated
event->button(...t::RightButtonDescription
TRUEnever evaluated
FALSEnever evaluated
0
612 && m_widget->rect().contains(event->pos())) {
m_widget->rect...(event->pos())Description
TRUEnever evaluated
FALSEnever evaluated
0
613 QContextMenuEvent e(QContextMenuEvent::Mouse, mapped, event->globalPos(), event->modifiers());-
614 QGuiApplication::sendSpontaneousEvent(receiver, &e);-
615 }
never executed: end of block
0
616#endif-
617}
never executed: end of block
0
618-
619void QWidgetWindow::handleTouchEvent(QTouchEvent *event)-
620{-
621 if (event->type() == QEvent::TouchCancel) {
event->type() ...t::TouchCancelDescription
TRUEnever evaluated
FALSEnever evaluated
0
622 QApplicationPrivate::translateTouchCancel(event->device(), event->timestamp());-
623 event->accept();-
624 } else if (qApp->d_func()->inPopupMode()) {
never executed: end of block
(static_cast<Q...>inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
0
625 // Ignore touch events for popups. This will cause QGuiApplication to synthesise mouse-
626 // events instead, which QWidgetWindow::handleMouseEvent will forward correctly:-
627 event->ignore();-
628 } else {
never executed: end of block
0
629 event->setAccepted(QApplicationPrivate::translateRawTouchEvent(m_widget, event->device(), event->touchPoints(), event->timestamp()));-
630 }
never executed: end of block
0
631}-
632-
633void QWidgetWindow::handleKeyEvent(QKeyEvent *event)-
634{-
635 if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type()))
QApplicationPr...->modalState()Description
TRUEnever evaluated
FALSEnever evaluated
!qt_try_modal(...event->type())Description
TRUEnever evaluated
FALSEnever evaluated
0
636 return;
never executed: return;
0
637-
638 QObject *receiver = QWidget::keyboardGrabber();-
639 if (!receiver && QApplicationPrivate::inPopupMode()) {
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
QApplicationPr...:inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
0
640 QWidget *popup = QApplication::activePopupWidget();-
641 QWidget *popupFocusWidget = popup->focusWidget();-
642 receiver = popupFocusWidget ? popupFocusWidget : popup;
popupFocusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
643 }
never executed: end of block
0
644 if (!receiver)
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
645 receiver = focusObject();
never executed: receiver = focusObject();
0
646 QGuiApplication::sendSpontaneousEvent(receiver, event);-
647}
never executed: end of block
0
648-
649bool QWidgetWindow::updateSize()-
650{-
651 bool changed = false;-
652 if (m_widget->testAttribute(Qt::WA_OutsideWSRange))
m_widget->test...utsideWSRange)Description
TRUEnever evaluated
FALSEnever evaluated
0
653 return changed;
never executed: return changed;
0
654 if (m_widget->data->crect.size() != geometry().size()) {
m_widget->data...metry().size()Description
TRUEnever evaluated
FALSEnever evaluated
0
655 changed = true;-
656 m_widget->data->crect.setSize(geometry().size());-
657 }
never executed: end of block
0
658-
659 updateMargins();-
660 return changed;
never executed: return changed;
0
661}-
662-
663bool QWidgetWindow::updatePos()-
664{-
665 bool changed = false;-
666 if (m_widget->testAttribute(Qt::WA_OutsideWSRange))
m_widget->test...utsideWSRange)Description
TRUEnever evaluated
FALSEnever evaluated
0
667 return changed;
never executed: return changed;
0
668 if (m_widget->data->crect.topLeft() != geometry().topLeft()) {
m_widget->data...ry().topLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
669 changed = true;-
670 m_widget->data->crect.moveTopLeft(geometry().topLeft());-
671 }
never executed: end of block
0
672 updateMargins();-
673 return changed;
never executed: return changed;
0
674}-
675-
676void QWidgetWindow::updateMargins()-
677{-
678 const QMargins margins = frameMargins();-
679 QTLWExtra *te = m_widget->d_func()->topData();-
680 te->posIncludesFrame= false;-
681 te->frameStrut.setCoords(margins.left(), margins.top(), margins.right(), margins.bottom());-
682 m_widget->data->fstrut_dirty = false;-
683}
never executed: end of block
0
684-
685static void sendScreenChangeRecursively(QWidget *widget)-
686{-
687 QEvent e(QEvent::ScreenChangeInternal);-
688 QApplication::sendEvent(widget, &e);-
689 QWidgetPrivate *d = QWidgetPrivate::get(widget);-
690 for (int i = 0; i < d->children.size(); ++i) {
i < d->children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
691 QWidget *w = qobject_cast<QWidget *>(d->children.at(i));-
692 if (w)
wDescription
TRUEnever evaluated
FALSEnever evaluated
0
693 sendScreenChangeRecursively(w);
never executed: sendScreenChangeRecursively(w);
0
694 }
never executed: end of block
0
695}
never executed: end of block
0
696-
697void QWidgetWindow::handleScreenChange()-
698{-
699 // Send an event recursively to the widget and its children.-
700 sendScreenChangeRecursively(m_widget);-
701-
702 // Invalidate the backing store buffer and repaint immediately.-
703 if (screen())
screen()Description
TRUEnever evaluated
FALSEnever evaluated
0
704 repaintWindow();
never executed: repaintWindow();
0
705}
never executed: end of block
0
706-
707void QWidgetWindow::repaintWindow()-
708{-
709 if (!m_widget->isVisible() || !m_widget->updatesEnabled() || !m_widget->rect().isValid())
!m_widget->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
!m_widget->updatesEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
!m_widget->rect().isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
710 return;
never executed: return;
0
711-
712 QTLWExtra *tlwExtra = m_widget->window()->d_func()->maybeTopData();-
713 if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore)
tlwExtraDescription
TRUEnever evaluated
FALSEnever evaluated
!tlwExtra->inTopLevelResizeDescription
TRUEnever evaluated
FALSEnever evaluated
tlwExtra->backingStoreDescription
TRUEnever evaluated
FALSEnever evaluated
0
714 tlwExtra->backingStoreTracker->markDirty(m_widget->rect(), m_widget,
never executed: tlwExtra->backingStoreTracker->markDirty(m_widget->rect(), m_widget, QWidgetBackingStore::UpdateNow, QWidgetBackingStore::BufferInvalid);
0
715 QWidgetBackingStore::UpdateNow, QWidgetBackingStore::BufferInvalid);
never executed: tlwExtra->backingStoreTracker->markDirty(m_widget->rect(), m_widget, QWidgetBackingStore::UpdateNow, QWidgetBackingStore::BufferInvalid);
0
716}
never executed: end of block
0
717-
718Qt::WindowState effectiveState(Qt::WindowStates state);-
719-
720// Store normal geometry used for saving application settings.-
721void QWidgetWindow::updateNormalGeometry()-
722{-
723 QTLWExtra *tle = m_widget->d_func()->maybeTopData();-
724 if (!tle)
!tleDescription
TRUEnever evaluated
FALSEnever evaluated
0
725 return;
never executed: return;
0
726 // Ask platform window, default to widget geometry.-
727 QRect normalGeometry;-
728 if (const QPlatformWindow *pw = handle())
const QPlatfor...*pw = handle()Description
TRUEnever evaluated
FALSEnever evaluated
0
729 normalGeometry = QHighDpi::fromNativePixels(pw->normalGeometry(), this);
never executed: normalGeometry = QHighDpi::fromNativePixels(pw->normalGeometry(), this);
0
730 if (!normalGeometry.isValid() && effectiveState(m_widget->windowState()) == Qt::WindowNoState)
!normalGeometry.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
effectiveState...:WindowNoStateDescription
TRUEnever evaluated
FALSEnever evaluated
0
731 normalGeometry = m_widget->geometry();
never executed: normalGeometry = m_widget->geometry();
0
732 if (normalGeometry.isValid())
normalGeometry.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
733 tle->normalGeometry = normalGeometry;
never executed: tle->normalGeometry = normalGeometry;
0
734}
never executed: end of block
0
735-
736void QWidgetWindow::handleMoveEvent(QMoveEvent *event)-
737{-
738 if (updatePos())
updatePos()Description
TRUEnever evaluated
FALSEnever evaluated
0
739 QGuiApplication::sendSpontaneousEvent(m_widget, event);
never executed: QGuiApplication::sendSpontaneousEvent(m_widget, event);
0
740}
never executed: end of block
0
741-
742void QWidgetWindow::handleResizeEvent(QResizeEvent *event)-
743{-
744 QSize oldSize = m_widget->data->crect.size();-
745-
746 if (updateSize()) {
updateSize()Description
TRUEnever evaluated
FALSEnever evaluated
0
747 QGuiApplication::sendSpontaneousEvent(m_widget, event);-
748-
749 if (m_widget->d_func()->paintOnScreen()) {
m_widget->d_fu...aintOnScreen()Description
TRUEnever evaluated
FALSEnever evaluated
0
750 QRegion updateRegion(geometry());-
751 if (m_widget->testAttribute(Qt::WA_StaticContents))
m_widget->test...taticContents)Description
TRUEnever evaluated
FALSEnever evaluated
0
752 updateRegion -= QRect(0, 0, oldSize.width(), oldSize.height());
never executed: updateRegion -= QRect(0, 0, oldSize.width(), oldSize.height());
0
753 m_widget->d_func()->syncBackingStore(updateRegion);-
754 } else {
never executed: end of block
0
755 m_widget->d_func()->syncBackingStore();-
756 }
never executed: end of block
0
757 }-
758}
never executed: end of block
0
759-
760void QWidgetWindow::handleCloseEvent(QCloseEvent *event)-
761{-
762 bool is_closing = m_widget->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);-
763 event->setAccepted(is_closing);-
764}
never executed: end of block
0
765-
766#ifndef QT_NO_WHEELEVENT-
767-
768void QWidgetWindow::handleWheelEvent(QWheelEvent *event)-
769{-
770 if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type()))
QApplicationPr...->modalState()Description
TRUEnever evaluated
FALSEnever evaluated
!qt_try_modal(...event->type())Description
TRUEnever evaluated
FALSEnever evaluated
0
771 return;
never executed: return;
0
772-
773 QWidget *rootWidget = m_widget;-
774 QPoint pos = event->pos();-
775-
776 // Use proper popup window for wheel event. Some QPA sends the wheel-
777 // event to the root menu, so redirect it to the proper popup window.-
778 QWidget *activePopupWidget = QApplication::activePopupWidget();-
779 if (activePopupWidget && activePopupWidget != m_widget) {
activePopupWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
activePopupWidget != m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
780 rootWidget = activePopupWidget;-
781 pos = rootWidget->mapFromGlobal(event->globalPos());-
782 }
never executed: end of block
0
783-
784 // which child should have it?-
785 QWidget *widget = rootWidget->childAt(pos);-
786-
787 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
788 widget = rootWidget;
never executed: widget = rootWidget;
0
789-
790 QPoint mapped = widget->mapFrom(rootWidget, pos);-
791-
792 QWheelEvent translated(mapped, event->globalPos(), event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers(), event->phase(), event->source());-
793 QGuiApplication::sendSpontaneousEvent(widget, &translated);-
794}
never executed: end of block
0
795-
796#endif // QT_NO_WHEELEVENT-
797-
798#ifndef QT_NO_DRAGANDDROP-
799-
800void QWidgetWindow::handleDragEnterMoveEvent(QDragMoveEvent *event)-
801{-
802 Q_ASSERT(event->type() ==QEvent::DragMove || !m_dragTarget);-
803 // Find a target widget under mouse that accepts drops (QTBUG-22987).-
804 QWidget *widget = m_widget->childAt(event->pos());-
805 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
806 widget = m_widget;
never executed: widget = m_widget;
0
807 for ( ; widget && !widget->isWindow() && !widget->acceptDrops(); widget = widget->parentWidget()) ;
never executed: ;
widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!widget->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!widget->acceptDrops()Description
TRUEnever evaluated
FALSEnever evaluated
0
808 if (widget && !widget->acceptDrops())
widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!widget->acceptDrops()Description
TRUEnever evaluated
FALSEnever evaluated
0
809 widget = 0;
never executed: widget = 0;
0
810 // Target widget unchanged: DragMove-
811 if (widget && widget == m_dragTarget.data()) {
widgetDescription
TRUEnever evaluated
FALSEnever evaluated
widget == m_dragTarget.data()Description
TRUEnever evaluated
FALSEnever evaluated
0
812 Q_ASSERT(event->type() == QEvent::DragMove);-
813 const QPoint mapped = widget->mapFromGlobal(m_widget->mapToGlobal(event->pos()));-
814 QDragMoveEvent translated(mapped, event->possibleActions(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers());-
815 translated.setDropAction(event->dropAction());-
816 if (event->isAccepted()) { // Handling 'DragEnter' should suffice for the application.
event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
817 translated.accept();-
818 translated.setDropAction(event->dropAction());-
819 }
never executed: end of block
0
820 QGuiApplication::sendSpontaneousEvent(widget, &translated);-
821 if (translated.isAccepted()) {
translated.isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
822 event->accept();-
823 } else {
never executed: end of block
0
824 event->ignore();-
825 }
never executed: end of block
0
826 event->setDropAction(translated.dropAction());-
827 return;
never executed: return;
0
828 }-
829 // Target widget changed: Send DragLeave to previous, DragEnter to new if there is any-
830 if (m_dragTarget.data()) {
m_dragTarget.data()Description
TRUEnever evaluated
FALSEnever evaluated
0
831 QDragLeaveEvent le;-
832 QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), &le);-
833 m_dragTarget = 0;-
834 }
never executed: end of block
0
835 if (!widget) {
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
836 event->ignore();-
837 return;
never executed: return;
0
838 }-
839 m_dragTarget = widget;-
840 const QPoint mapped = widget->mapFromGlobal(m_widget->mapToGlobal(event->pos()));-
841 QDragEnterEvent translated(mapped, event->possibleActions(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers());-
842 QGuiApplication::sendSpontaneousEvent(widget, &translated);-
843 if (translated.isAccepted()) {
translated.isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
844 event->accept();-
845 } else {
never executed: end of block
0
846 event->ignore();-
847 }
never executed: end of block
0
848 event->setDropAction(translated.dropAction());-
849}
never executed: end of block
0
850-
851void QWidgetWindow::handleDragLeaveEvent(QDragLeaveEvent *event)-
852{-
853 if (m_dragTarget)
m_dragTargetDescription
TRUEnever evaluated
FALSEnever evaluated
0
854 QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), event);
never executed: QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), event);
0
855 m_dragTarget = 0;-
856}
never executed: end of block
0
857-
858void QWidgetWindow::handleDropEvent(QDropEvent *event)-
859{-
860 if (m_dragTarget.isNull()) {
m_dragTarget.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
0
861 qWarning() << m_widget << ": No drag target set.";-
862 event->ignore();-
863 return;
never executed: return;
0
864 }-
865 const QPoint mapped = m_dragTarget.data()->mapFromGlobal(m_widget->mapToGlobal(event->pos()));-
866 QDropEvent translated(mapped, event->possibleActions(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers());-
867 QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), &translated);-
868 if (translated.isAccepted())
translated.isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
869 event->accept();
never executed: event->accept();
0
870 event->setDropAction(translated.dropAction());-
871 m_dragTarget = 0;-
872}
never executed: end of block
0
873-
874#endif // QT_NO_DRAGANDDROP-
875-
876void QWidgetWindow::handleExposeEvent(QExposeEvent *event)-
877{-
878 QWidgetPrivate *wPriv = m_widget->d_func();-
879 const bool exposed = isExposed();-
880-
881 if (wPriv->childrenHiddenByWState) {
wPriv->childrenHiddenByWStateDescription
TRUEnever evaluated
FALSEnever evaluated
0
882 // If widgets has been previously hidden by window state change event-
883 // and they aren't yet shown...-
884 if (exposed) {
exposedDescription
TRUEnever evaluated
FALSEnever evaluated
0
885 // If the window becomes exposed...-
886 if (!wPriv->childrenShownByExpose) {
!wPriv->childrenShownByExposeDescription
TRUEnever evaluated
FALSEnever evaluated
0
887 // ... and they haven't been shown by this function yet - show it.-
888 wPriv->showChildren(true);-
889 QShowEvent showEvent;-
890 QCoreApplication::sendSpontaneousEvent(m_widget, &showEvent);-
891 wPriv->childrenShownByExpose = true;-
892 }
never executed: end of block
0
893 } else {
never executed: end of block
0
894 // If the window becomes not exposed...-
895 if (wPriv->childrenShownByExpose) {
wPriv->childrenShownByExposeDescription
TRUEnever evaluated
FALSEnever evaluated
0
896 // ... and child widgets was previously shown by the expose event - hide widgets again.-
897 // This is a workaround, because sometimes when window is minimized programatically,-
898 // the QPA can notify that the window is exposed after changing window state to minimized-
899 // and then, the QPA can send next expose event with null exposed region (not exposed).-
900 wPriv->hideChildren(true);-
901 QHideEvent hideEvent;-
902 QCoreApplication::sendSpontaneousEvent(m_widget, &hideEvent);-
903 wPriv->childrenShownByExpose = false;-
904 }
never executed: end of block
0
905 }
never executed: end of block
0
906 }-
907-
908 if (exposed) {
exposedDescription
TRUEnever evaluated
FALSEnever evaluated
0
909 m_widget->setAttribute(Qt::WA_Mapped);-
910 if (!event->region().isNull())
!event->region().isNull()Description
TRUEnever evaluated
FALSEnever evaluated
0
911 wPriv->syncBackingStore(event->region());
never executed: wPriv->syncBackingStore(event->region());
0
912 } else {
never executed: end of block
0
913 m_widget->setAttribute(Qt::WA_Mapped, false);-
914 }
never executed: end of block
0
915}-
916-
917void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event)-
918{-
919 // QWindow does currently not know 'active'.-
920 Qt::WindowStates eventState = event->oldState();-
921 Qt::WindowStates widgetState = m_widget->windowState();-
922 if (widgetState & Qt::WindowActive)
widgetState & Qt::WindowActiveDescription
TRUEnever evaluated
FALSEnever evaluated
0
923 eventState |= Qt::WindowActive;
never executed: eventState |= Qt::WindowActive;
0
924-
925 // Determine the new widget state, remember maximized/full screen-
926 // during minimized.-
927 switch (windowState()) {-
928 case Qt::WindowNoState:
never executed: case Qt::WindowNoState:
0
929 widgetState &= ~(Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen);-
930 break;
never executed: break;
0
931 case Qt::WindowMinimized:
never executed: case Qt::WindowMinimized:
0
932 widgetState |= Qt::WindowMinimized;-
933 break;
never executed: break;
0
934 case Qt::WindowMaximized:
never executed: case Qt::WindowMaximized:
0
935 updateNormalGeometry();-
936 widgetState |= Qt::WindowMaximized;-
937 widgetState &= ~(Qt::WindowMinimized | Qt::WindowFullScreen);-
938 break;
never executed: break;
0
939 case Qt::WindowFullScreen:
never executed: case Qt::WindowFullScreen:
0
940 updateNormalGeometry();-
941 widgetState |= Qt::WindowFullScreen;-
942 widgetState &= ~(Qt::WindowMinimized);-
943 break;
never executed: break;
0
944 case Qt::WindowActive: // Not handled by QWindow
never executed: case Qt::WindowActive:
0
945 break;
never executed: break;
0
946 }-
947-
948 // Sent event if the state changed (that is, it is not triggered by-
949 // QWidget::setWindowState(), which also sends an event to the widget).-
950 if (widgetState != int(m_widget->data->window_state)) {
widgetState !=...>window_state)Description
TRUEnever evaluated
FALSEnever evaluated
0
951 m_widget->data->window_state = widgetState;-
952 QWindowStateChangeEvent widgetEvent(eventState);-
953 QGuiApplication::sendSpontaneousEvent(m_widget, &widgetEvent);-
954 }
never executed: end of block
0
955}
never executed: end of block
0
956-
957bool QWidgetWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)-
958{-
959 return m_widget->nativeEvent(eventType, message, result);
never executed: return m_widget->nativeEvent(eventType, message, result);
0
960}-
961-
962#ifndef QT_NO_TABLETEVENT-
963void QWidgetWindow::handleTabletEvent(QTabletEvent *event)-
964{-
965 static QPointer<QWidget> qt_tablet_target = 0;-
966 if (event->type() == QEvent::TabletPress) {
event->type() ...t::TabletPressDescription
TRUEnever evaluated
FALSEnever evaluated
0
967 QWidget *widget = m_widget->childAt(event->pos());-
968 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
969 widget = m_widget;
never executed: widget = m_widget;
0
970-
971 qt_tablet_target = widget;-
972 }
never executed: end of block
0
973-
974 if (qt_tablet_target) {
qt_tablet_targetDescription
TRUEnever evaluated
FALSEnever evaluated
0
975 QPointF delta = event->globalPosF() - event->globalPos();-
976 QPointF mapped = qt_tablet_target->mapFromGlobal(event->globalPos()) + delta;-
977 QTabletEvent ev(event->type(), mapped, event->globalPosF(), event->device(), event->pointerType(),-
978 event->pressure(), event->xTilt(), event->yTilt(), event->tangentialPressure(),-
979 event->rotation(), event->z(), event->modifiers(), event->uniqueId(), event->button(), event->buttons());-
980 ev.setTimestamp(event->timestamp());-
981 QGuiApplication::sendSpontaneousEvent(qt_tablet_target, &ev);-
982 }
never executed: end of block
0
983-
984 if (event->type() == QEvent::TabletRelease && event->buttons() == Qt::NoButton)
event->type() ...:TabletReleaseDescription
TRUEnever evaluated
FALSEnever evaluated
event->buttons...= Qt::NoButtonDescription
TRUEnever evaluated
FALSEnever evaluated
0
985 qt_tablet_target = 0;
never executed: qt_tablet_target = 0;
0
986}
never executed: end of block
0
987#endif // QT_NO_TABLETEVENT-
988-
989#ifndef QT_NO_GESTURES-
990void QWidgetWindow::handleGestureEvent(QNativeGestureEvent *e)-
991{-
992 // copy-pasted code to find correct widget follows:-
993 QObject *receiver = 0;-
994 if (QApplicationPrivate::inPopupMode()) {
QApplicationPr...:inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
0
995 QWidget *popup = QApplication::activePopupWidget();-
996 QWidget *popupFocusWidget = popup->focusWidget();-
997 receiver = popupFocusWidget ? popupFocusWidget : popup;
popupFocusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
998 }
never executed: end of block
0
999 if (!receiver)
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
1000 receiver = QApplication::widgetAt(e->globalPos());
never executed: receiver = QApplication::widgetAt(e->globalPos());
0
1001 if (!receiver)
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
1002 receiver = m_widget; // last resort
never executed: receiver = m_widget;
0
1003-
1004 QApplication::sendSpontaneousEvent(receiver, e);-
1005}
never executed: end of block
0
1006#endif // QT_NO_GESTURES-
1007-
1008#ifndef QT_NO_CONTEXTMENU-
1009void QWidgetWindow::handleContextMenuEvent(QContextMenuEvent *e)-
1010{-
1011 // We are only interested in keyboard originating context menu events here,-
1012 // mouse originated context menu events for widgets are generated in mouse handling methods.-
1013 if (e->reason() != QContextMenuEvent::Keyboard)
e->reason() !=...vent::KeyboardDescription
TRUEnever evaluated
FALSEnever evaluated
0
1014 return;
never executed: return;
0
1015-
1016 QWidget *fw = QWidget::keyboardGrabber();-
1017 if (!fw) {
!fwDescription
TRUEnever evaluated
FALSEnever evaluated
0
1018 if (QApplication::activePopupWidget()) {
QApplication::...ePopupWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1019 fw = (QApplication::activePopupWidget()->focusWidget()
QApplication::...>focusWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1020 ? QApplication::activePopupWidget()->focusWidget()-
1021 : QApplication::activePopupWidget());-
1022 } else if (QApplication::focusWidget()) {
never executed: end of block
QApplication::focusWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1023 fw = QApplication::focusWidget();-
1024 } else {
never executed: end of block
0
1025 fw = m_widget;-
1026 }
never executed: end of block
0
1027 }-
1028 if (fw && fw->isEnabled()) {
fwDescription
TRUEnever evaluated
FALSEnever evaluated
fw->isEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
1029 QPoint pos = fw->inputMethodQuery(Qt::ImMicroFocus).toRect().center();-
1030 QContextMenuEvent widgetEvent(QContextMenuEvent::Keyboard, pos, fw->mapToGlobal(pos),-
1031 e->modifiers());-
1032 QGuiApplication::sendSpontaneousEvent(fw, &widgetEvent);-
1033 }
never executed: end of block
0
1034}
never executed: end of block
0
1035#endif // QT_NO_CONTEXTMENU-
1036-
1037void QWidgetWindow::updateObjectName()-
1038{-
1039 QString name = m_widget->objectName();-
1040 if (name.isEmpty())
name.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1041 name = QString::fromUtf8(m_widget->metaObject()->className()) + QStringLiteral("Class");
never executed: 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, sizeof(QStringData) }, u"" "Class" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());
never executed: return qstring_literal_temp;
0
1042 name += QStringLiteral("Window");
never executed: return qstring_literal_temp;
0
1043 setObjectName(name);-
1044}
never executed: end of block
0
1045-
1046QT_END_NAMESPACE-
1047-
1048#include "moc_qwidgetwindow_p.cpp"-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9