qwidgetwindow.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7__attribute__((visibility("default"))) extern bool qt_tab_all_widgets();-
8-
9QWidget *qt_button_down = 0;-
10-
11-
12QWidget *qt_popup_down = 0;-
13extern int openPopupCount;-
14bool qt_replay_popup_mouse_event = false;-
15extern bool qt_try_modal(QWidget *widget, QEvent::Type type);-
16-
17class 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;-
20public:-
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-
41QRectF 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-
70QWidgetWindow::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-
85QWidgetWindow::~QWidgetWindow()-
86{-
87}-
88-
89-
90QAccessibleInterface *QWidgetWindow::accessibleRoot() const-
91{-
92 if (m_widget)-
93 return QAccessible::queryAccessibleInterface(m_widget);-
94 return 0;-
95}-
96-
97-
98QObject *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-
116static 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-
132bool 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-
286QPointer<QWidget> qt_last_mouse_receiver = 0;-
287-
288void 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-
351QWidget *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-
375void 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-
387void QWidgetWindow::handleNonClientAreaMouseEvent(QMouseEvent *e)-
388{-
389 QApplication::sendSpontaneousEvent(m_widget, e);-
390}-
391-
392void 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<
(static_cast<Q...>inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
QApplication *>(QCoreApplication::instance()))->d_func()->inPopupMode()
(static_cast<Q...>inPopupMode()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
398 QWidget *activePopupWidget = (static_cast<QApplication *>(QCoreApplication::instance()))->activePopupWidget();-
399 QPoint mapped = event->pos();-
400 if (activePopupWidget != m_widget
activePopupWidget != m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
)
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
activePopupWid... qt_popup_downDescription
TRUEnever evaluated
FALSEnever evaluated
) {
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: case QEvent::MouseButtonPress:
QEvent::MouseButtonPress:
never executed: case QEvent::MouseButtonPress:
0
412 case
never executed: case QEvent::MouseButtonDblClick:
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: case QEvent::MouseButtonRelease:
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()
activePopupWidget->isEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
426-
427 qt_replay_popup_mouse_event = false;-
428 QWidget *receiver = activePopupWidget;-
429 QPoint widgetPos = mapped;-
430 if (qt_button_down
qt_button_downDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
431 receiver = qt_button_down;
never executed: receiver = qt_button_down;
0
432 else if (popupChild
popupChildDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
433 receiver = popupChild;
never executed: receiver = popupChild;
0
434 if (receiver != activePopupWidget
receiver != activePopupWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
)
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
underMouse != reallyUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
441 if (reallyUnderMouse
reallyUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
442 const QPoint receiverMapped = receiver->mapFromGlobal(event->screenPos().toPoint());-
443-
444-
445 if (receiverMapped.x() >= 0
receiverMapped.x() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
&& receiverMapped.y() >= 0
receiverMapped.y() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
446 QApplicationPrivate::dispatchEnterLeave(receiver, nullptr, event->screenPos());-
447 qt_last_mouse_receiver = receiver;-
448 }
never executed: end of block
0
449 }
never executed: end of block
else {
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: end of block
else {
0
463-
464 switch (event->type()) {-
465 case
never executed: case QEvent::MouseButtonPress:
QEvent::MouseButtonPress:
never executed: case QEvent::MouseButtonPress:
0
466 case
never executed: case QEvent::MouseButtonDblClick:
QEvent::MouseButtonDblClick:
never executed: case QEvent::MouseButtonDblClick:
0
467 case
never executed: case QEvent::MouseButtonRelease:
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<
(static_cast<Q...ivePopupWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
QApplication *>(QCoreApplication::instance()))->activePopupWidget() != activePopupWidget
(static_cast<Q...ivePopupWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
476 && qt_replay_popup_mouse_event
qt_replay_popup_mouse_eventDescription
TRUEnever evaluated
FALSEnever evaluated
0
477 && QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::ReplayMousePressOutsidePopup).toBool()
QGuiApplicatio...opup).toBool()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
478 if (m_widget->windowType() != Qt::Popup
m_widget->wind...) != Qt::PopupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
479 qt_button_down = 0;
never executed: qt_button_down = 0;
0
480 if (event->type() == QEvent::MouseButtonPress
event->type() ...useButtonPressDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
481-
482 QWidget *w = QApplication::widgetAt(event->globalPos());-
483 if (w
wDescription
TRUEnever evaluated
FALSEnever evaluated
&& !QApplicationPrivate::isBlockedByModal(w)
!QApplicationP...ckedByModal(w)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
484-
485 if (!w->isActiveWindow()
!w->isActiveWindow()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
486 w->activateWindow();-
487 w->window()->raise();-
488 }
never executed: end of block
0
489-
490 QWindow *win = w->windowHandle();-
491 if (!win
!winDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
492 win = w->nativeParentWidget()->windowHandle();
never executed: win = w->nativeParentWidget()->windowHandle();
0
493 if (win
winDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
494 const QRect globalGeometry = win->isTopLevel()
win->isTopLevel()Description
TRUEnever evaluated
FALSEnever evaluated
0
495 ? win->geometry()-
496 : QRect(win->mapToGlobal(QPoint(0, 0)), win->size());-
497 if (globalGeometry.contains(event->globalPos())
globalGeometry...->globalPos())Description
TRUEnever evaluated
FALSEnever evaluated
) {
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: end of block
else if (event->type() == contextMenuTrigger
event->type() ...extMenuTriggerDescription
TRUEnever evaluated
FALSEnever evaluated
0
512 && event->button() == Qt::RightButton
event->button(...t::RightButtonDescription
TRUEnever evaluated
FALSEnever evaluated
0
513 && (
(openPopupCoun...penPopupCount)Description
TRUEnever evaluated
FALSEnever evaluated
openPopupCount == oldOpenPopupCount)
(openPopupCoun...penPopupCount)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
514 QWidget *popupEvent = activePopupWidget;-
515 if (qt_button_down
qt_button_downDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
516 popupEvent = qt_button_down;
never executed: popupEvent = qt_button_down;
0
517 else if(popupChild
popupChildDescription
TRUEnever evaluated
FALSEnever evaluated
)
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
releaseAfterDescription
TRUEnever evaluated
FALSEnever evaluated
) {
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()
QApplicationPr...->modalState()Description
TRUEnever evaluated
FALSEnever evaluated
&& !qt_try_modal(m_widget, event->type())
!qt_try_modal(...event->type())Description
TRUEnever evaluated
FALSEnever evaluated
)
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
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
544 widget = m_widget;
never executed: widget = m_widget;
0
545-
546 if (event->type() == QEvent::MouseButtonPress
event->type() ...useButtonPressDescription
TRUEnever evaluated
FALSEnever evaluated
)
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
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
553 if (event->type() == QEvent::MouseButtonRelease
event->type() ...eButtonReleaseDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
554 QApplicationPrivate::mouse_buttons &= ~event->button();
never executed: QApplicationPrivate::mouse_buttons &= ~event->button();
0
555 return;
never executed: return;
0
556 }-
557 if ((
(event->type()...seButtonPress)Description
TRUEnever evaluated
FALSEnever evaluated
event->type() != QEvent::MouseButtonPress)
(event->type()...seButtonPress)Description
TRUEnever evaluated
FALSEnever evaluated
0
558 || !(event->flags().testFlag(Qt::MouseEventCreatedDoubleClick))
!(event->flags...dDoubleClick))Description
TRUEnever evaluated
FALSEnever evaluated
) {
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
event->type() ...extMenuTriggerDescription
TRUEnever evaluated
FALSEnever evaluated
&& event->button() == Qt::RightButton
event->button(...t::RightButtonDescription
TRUEnever evaluated
FALSEnever evaluated
0
571 && m_widget->rect().contains(event->pos())
m_widget->rect...(event->pos())Description
TRUEnever evaluated
FALSEnever evaluated
) {
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-
578void 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-
592void 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-
608bool 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-
622bool 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-
635void 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-
644static 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-
656void QWidgetWindow::handleScreenChange()-
657{-
658-
659 sendScreenChangeRecursively(m_widget);-
660-
661-
662 if (screen())-
663 repaintWindow();-
664}-
665-
666void 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-
677Qt::WindowState effectiveState(Qt::WindowStates state);-
678-
679-
680void 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-
695void QWidgetWindow::handleMoveEvent(QMoveEvent *event)-
696{-
697 if (updatePos())-
698 QGuiApplication::sendSpontaneousEvent(m_widget, event);-
699}-
700-
701void 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-
719void 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-
727void QWidgetWindow::handleWheelEvent(QWheelEvent *event)-
728{-
729 if (QApplicationPrivate::instance()->modalState()
QApplicationPr...->modalState()Description
TRUEnever evaluated
FALSEnever evaluated
&& !qt_try_modal(m_widget, event->type())
!qt_try_modal(...event->type())Description
TRUEnever evaluated
FALSEnever evaluated
)
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
activePopupWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
&& activePopupWidget != m_widget
activePopupWidget != m_widgetDescription
TRUEnever evaluated
FALSEnever evaluated
) {
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
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
)
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-
759void 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-
810void QWidgetWindow::handleDragLeaveEvent(QDragLeaveEvent *event)-
811{-
812 if (m_dragTarget)-
813 QGuiApplication::sendSpontaneousEvent(m_dragTarget.data(), event);-
814 m_dragTarget = 0;-
815}-
816-
817void QWidgetWindow::handleDropEvent(QDropEvent *event)-
818{-
819 if (__builtin_expect(!!(
__builtin_expe...ull()), false)Description
TRUEnever evaluated
FALSEnever evaluated
m_dragTarget.isNull())()), false)
__builtin_expe...ull()), false)Description
TRUEnever evaluated
FALSEnever evaluated
) {
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()
translated.isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
)
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-
835void 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-
876void 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-
916bool QWidgetWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)-
917{-
918 return m_widget->nativeEvent(eventType, message, result);-
919}-
920-
921-
922void QWidgetWindow::handleTabletEvent(QTabletEvent *event)-
923{-
924 static QPointer<QWidget> qt_tablet_target = 0;-
925 if (event->type() == QEvent::TabletPress
event->type() ...t::TabletPressDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
926 QWidget *widget = m_widget->childAt(event->pos());-
927 if (!widget
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
)
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
qt_tablet_targetDescription
TRUEnever evaluated
FALSEnever evaluated
) {
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
event->type() ...:TabletReleaseDescription
TRUEnever evaluated
FALSEnever evaluated
&& event->buttons() == Qt::NoButton
event->buttons...= Qt::NoButtonDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
945 qt_tablet_target = 0;
never executed: qt_tablet_target = 0;
0
946}
never executed: end of block
0
947-
948-
949-
950void 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-
969void 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-
997void QWidgetWindow::updateObjectName()-
998{-
999 QString name = m_widget->objectName();-
1000 if (name.isEmpty()
name.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
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 codePreprocessed file

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