OpenCoverage

qwidget.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/kernel/qwidget.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 The Qt Company Ltd.-
4** Copyright (C) 2016 Intel Corporation.-
5** Contact: https://www.qt.io/licensing/-
6**-
7** This file is part of the QtWidgets module of the Qt Toolkit.-
8**-
9** $QT_BEGIN_LICENSE:LGPL$-
10** Commercial License Usage-
11** Licensees holding valid commercial Qt licenses may use this file in-
12** accordance with the commercial license agreement provided with the-
13** Software or, alternatively, in accordance with the terms contained in-
14** a written agreement between you and The Qt Company. For licensing terms-
15** and conditions see https://www.qt.io/terms-conditions. For further-
16** information use the contact form at https://www.qt.io/contact-us.-
17**-
18** GNU Lesser General Public License Usage-
19** Alternatively, this file may be used under the terms of the GNU Lesser-
20** General Public License version 3 as published by the Free Software-
21** Foundation and appearing in the file LICENSE.LGPL3 included in the-
22** packaging of this file. Please review the following information to-
23** ensure the GNU Lesser General Public License version 3 requirements-
24** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
25**-
26** GNU General Public License Usage-
27** Alternatively, this file may be used under the terms of the GNU-
28** General Public License version 2.0 or (at your option) the GNU General-
29** Public license version 3 or any later version approved by the KDE Free-
30** Qt Foundation. The licenses are as published by the Free Software-
31** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
32** included in the packaging of this file. Please review the following-
33** information to ensure the GNU General Public License requirements will-
34** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
35** https://www.gnu.org/licenses/gpl-3.0.html.-
36**-
37** $QT_END_LICENSE$-
38**-
39****************************************************************************/-
40-
41#include "qapplication.h"-
42#include "qapplication_p.h"-
43#include "qbrush.h"-
44#include "qcursor.h"-
45#include "qdesktopwidget_p.h"-
46#include "qevent.h"-
47#include "qlayout.h"-
48#include "qmenu.h"-
49#include "qmetaobject.h"-
50#include "qpixmap.h"-
51#include "qpointer.h"-
52#include "qstack.h"-
53#include "qstyle.h"-
54#include "qstylefactory.h"-
55#include "qvariant.h"-
56#include "qwidget.h"-
57#include "qstyleoption.h"-
58#include "qstylehints.h"-
59#ifndef QT_NO_ACCESSIBILITY-
60# include "qaccessible.h"-
61#endif-
62#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
63# include "qt_mac_p.h"-
64# include "qt_cocoa_helpers_mac_p.h"-
65# include "qmainwindow.h"-
66# include "qtoolbar.h"-
67# include <private/qmainwindowlayout_p.h>-
68#endif-
69#include <qpa/qplatformwindow.h>-
70#include <qpa/qplatformbackingstore.h>-
71#include "private/qwidgetwindow_p.h"-
72#include "qpainter.h"-
73#include "qtooltip.h"-
74#include "qwhatsthis.h"-
75#include "qdebug.h"-
76#include "private/qstylesheetstyle_p.h"-
77#include "private/qstyle_p.h"-
78#include "qfileinfo.h"-
79#include <QtGui/private/qhighdpiscaling_p.h>-
80#include <QtGui/qinputmethod.h>-
81#include <QtGui/qopenglcontext.h>-
82#include <QtGui/private/qopenglcontext_p.h>-
83#include <QtGui/qoffscreensurface.h>-
84-
85#include <private/qgraphicseffect_p.h>-
86#include <qbackingstore.h>-
87#include <private/qwidgetbackingstore_p.h>-
88#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
89# include <private/qpaintengine_mac_p.h>-
90#endif-
91#include <private/qpaintengine_raster_p.h>-
92-
93#include "qwidget_p.h"-
94#include <QtGui/private/qwindow_p.h>-
95#include "qaction_p.h"-
96#include "qlayout_p.h"-
97#include "QtWidgets/qgraphicsproxywidget.h"-
98#include "QtWidgets/qgraphicsscene.h"-
99#include "private/qgraphicsproxywidget_p.h"-
100#include "QtWidgets/qabstractscrollarea.h"-
101#include "private/qabstractscrollarea_p.h"-
102#include "private/qevent_p.h"-
103-
104#include "private/qgesturemanager_p.h"-
105-
106#ifdef QT_KEYPAD_NAVIGATION-
107#include "qtabwidget.h" // Needed in inTabWidget()-
108#endif // QT_KEYPAD_NAVIGATION-
109-
110#include "qwindowcontainer_p.h"-
111-
112#include <QtPlatformHeaders/qxcbwindowfunctions.h>-
113-
114// widget/widget data creation count-
115//#define QWIDGET_EXTRA_DEBUG-
116//#define ALIEN_DEBUG-
117-
118QT_BEGIN_NAMESPACE-
119-
120static bool qt_enable_backingstore = true;-
121#ifdef Q_DEAD_CODE_FROM_QT4_X11-
122// for compatibility with Qt 4.0-
123Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable)-
124{-
125 qt_enable_backingstore = enable;-
126}-
127#endif-
128-
129#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
130bool qt_mac_clearDirtyOnWidgetInsideDrawWidget = false;-
131#endif-
132-
133static inline bool qRectIntersects(const QRect &r1, const QRect &r2)-
134{-
135 return (qMax(r1.left(), r2.left()) <= qMin(r1.right(), r2.right()) &&
never executed: return (qMax(r1.left(), r2.left()) <= qMin(r1.right(), r2.right()) && qMax(r1.top(), r2.top()) <= qMin(r1.bottom(), r2.bottom()));
0
136 qMax(r1.top(), r2.top()) <= qMin(r1.bottom(), r2.bottom()));
never executed: return (qMax(r1.left(), r2.left()) <= qMin(r1.right(), r2.right()) && qMax(r1.top(), r2.top()) <= qMin(r1.bottom(), r2.bottom()));
0
137}-
138-
139static inline bool hasBackingStoreSupport()-
140{-
141 return true;
never executed: return true;
0
142}-
143-
144#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
145# define QT_NO_PAINT_DEBUG-
146#endif-
147-
148extern bool qt_sendSpontaneousEvent(QObject*, QEvent*); // qapplication.cpp-
149extern QDesktopWidget *qt_desktopWidget; // qapplication.cpp-
150-
151/*!-
152 \internal-
153 \class QWidgetBackingStoreTracker-
154 \brief Class which allows tracking of which widgets are using a given backing store-
155-
156 QWidgetBackingStoreTracker is a thin wrapper around a QWidgetBackingStore pointer,-
157 which maintains a list of the QWidgets which are currently using the backing-
158 store. This list is modified via the registerWidget and unregisterWidget functions.-
159 */-
160-
161QWidgetBackingStoreTracker::QWidgetBackingStoreTracker()-
162 : m_ptr(0)-
163{-
164-
165}
never executed: end of block
0
166-
167QWidgetBackingStoreTracker::~QWidgetBackingStoreTracker()-
168{-
169 delete m_ptr;-
170}
never executed: end of block
0
171-
172/*!-
173 \internal-
174 Destroy the contained QWidgetBackingStore, if not null, and clear the list of-
175 widgets using the backing store, then create a new QWidgetBackingStore, providing-
176 the QWidget.-
177 */-
178void QWidgetBackingStoreTracker::create(QWidget *widget)-
179{-
180 destroy();-
181 m_ptr = new QWidgetBackingStore(widget);-
182}
never executed: end of block
0
183-
184/*!-
185 \internal-
186 Destroy the contained QWidgetBackingStore, if not null, and clear the list of-
187 widgets using the backing store.-
188 */-
189void QWidgetBackingStoreTracker::destroy()-
190{-
191 delete m_ptr;-
192 m_ptr = 0;-
193 m_widgets.clear();-
194}
never executed: end of block
0
195-
196/*!-
197 \internal-
198 Add the widget to the list of widgets currently using the backing store.-
199 If the widget was already in the list, this function is a no-op.-
200 */-
201void QWidgetBackingStoreTracker::registerWidget(QWidget *w)-
202{-
203 Q_ASSERT(m_ptr);-
204 Q_ASSERT(w->internalWinId());-
205 Q_ASSERT(qt_widget_private(w)->maybeBackingStore() == m_ptr);-
206 m_widgets.insert(w);-
207}
never executed: end of block
0
208-
209/*!-
210 \internal-
211 Remove the widget from the list of widgets currently using the backing store.-
212 If the widget was in the list, and removing it causes the list to be empty,-
213 the backing store is deleted.-
214 If the widget was not in the list, this function is a no-op.-
215 */-
216void QWidgetBackingStoreTracker::unregisterWidget(QWidget *w)-
217{-
218 if (m_widgets.remove(w) && m_widgets.isEmpty()) {
m_widgets.remove(w)Description
TRUEnever evaluated
FALSEnever evaluated
m_widgets.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
219 delete m_ptr;-
220 m_ptr = 0;-
221 }
never executed: end of block
0
222}
never executed: end of block
0
223-
224/*!-
225 \internal-
226 Recursively remove widget and all of its descendents.-
227 */-
228void QWidgetBackingStoreTracker::unregisterWidgetSubtree(QWidget *widget)-
229{-
230 unregisterWidget(widget);-
231 foreach (QObject *child, widget->children())-
232 if (QWidget *childWidget = qobject_cast<QWidget *>(child))
QWidget *child...dget *>(child)Description
TRUEnever evaluated
FALSEnever evaluated
0
233 unregisterWidgetSubtree(childWidget);
never executed: unregisterWidgetSubtree(childWidget);
0
234}
never executed: end of block
0
235-
236QWidgetPrivate::QWidgetPrivate(int version)-
237 : QObjectPrivate(version)-
238 , extra(0)-
239 , focus_next(0)-
240 , focus_prev(0)-
241 , focus_child(0)-
242 , layout(0)-
243 , needsFlush(0)-
244 , redirectDev(0)-
245 , widgetItem(0)-
246 , extraPaintEngine(0)-
247 , polished(0)-
248 , graphicsEffect(0)-
249#if !defined(QT_NO_IM)-
250 , imHints(Qt::ImhNone)-
251#endif-
252#ifndef QT_NO_TOOLTIP-
253 , toolTipDuration(-1)-
254#endif-
255 , inheritedFontResolveMask(0)-
256 , inheritedPaletteResolveMask(0)-
257 , leftmargin(0)-
258 , topmargin(0)-
259 , rightmargin(0)-
260 , bottommargin(0)-
261 , leftLayoutItemMargin(0)-
262 , topLayoutItemMargin(0)-
263 , rightLayoutItemMargin(0)-
264 , bottomLayoutItemMargin(0)-
265 , hd(0)-
266 , size_policy(QSizePolicy::Preferred, QSizePolicy::Preferred)-
267 , fg_role(QPalette::NoRole)-
268 , bg_role(QPalette::NoRole)-
269 , dirtyOpaqueChildren(1)-
270 , isOpaque(0)-
271 , retainSizeWhenHiddenChanged(0)-
272 , inDirtyList(0)-
273 , isScrolled(0)-
274 , isMoved(0)-
275 , usesDoubleBufferedGLContext(0)-
276 , mustHaveWindowHandle(0)-
277 , renderToTexture(0)-
278 , textureChildSeen(0)-
279#ifndef QT_NO_IM-
280 , inheritsInputMethodHints(0)-
281#endif-
282#ifndef QT_NO_OPENGL-
283 , renderToTextureReallyDirty(1)-
284 , renderToTextureComposeActive(0)-
285#endif-
286 , childrenHiddenByWState(0)-
287 , childrenShownByExpose(0)-
288#if defined(Q_OS_WIN)-
289 , noPaintOnScreen(0)-
290#endif-
291#if defined(Q_DEAD_CODE_FROM_QT4_X11)-
292 , picture(0)-
293#elif defined(Q_DEAD_CODE_FROM_QT4_WIN)-
294 #ifndef QT_NO_GESTURES-
295 , nativeGesturePanEnabled(0)-
296 #endif-
297#elif defined(Q_DEAD_CODE_FROM_QT4_MAC)-
298 , needWindowChange(0)-
299 , window_event(0)-
300 , qd_hd(0)-
301#endif-
302{-
303 if (Q_UNLIKELY(!qApp)) {
__builtin_expe...e()))), false)Description
TRUEnever evaluated
FALSEnever evaluated
0
304 qFatal("QWidget: Must construct a QApplication before a QWidget");-
305 return;
never executed: return;
0
306 }-
307-
308#ifdef QT_BUILD_INTERNAL-
309 // Don't check the version parameter in internal builds.-
310 // This allows incompatible versions to be loaded, possibly for testing.-
311 Q_UNUSED(version);-
312#else-
313 if (Q_UNLIKELY(version != QObjectPrivateVersion))-
314 qFatal("Cannot mix incompatible Qt library (version 0x%x) with this library (version 0x%x)",-
315 version, QObjectPrivateVersion);-
316#endif-
317-
318 isWidget = true;-
319 memset(high_attributes, 0, sizeof(high_attributes));-
320#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
321 drawRectOriginalAdded = false;-
322 originalDrawMethod = true;-
323 changeMethods = false;-
324 isInUnifiedToolbar = false;-
325 unifiedSurface = 0;-
326 toolbar_ancestor = 0;-
327 flushRequested = false;-
328 touchEventsEnabled = false;-
329#endif // Q_DEAD_CODE_FROM_QT4_MAC-
330#ifdef QWIDGET_EXTRA_DEBUG-
331 static int count = 0;-
332 qDebug() << "widgets" << ++count;-
333#endif-
334}
never executed: end of block
0
335-
336-
337QWidgetPrivate::~QWidgetPrivate()-
338{-
339 if (widgetItem)
widgetItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
340 widgetItem->wid = 0;
never executed: widgetItem->wid = 0;
0
341-
342 if (extra)
extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
343 deleteExtra();
never executed: deleteExtra();
0
344-
345#ifndef QT_NO_GRAPHICSEFFECT-
346 delete graphicsEffect;-
347#endif //QT_NO_GRAPHICSEFFECT-
348}
never executed: end of block
0
349-
350/*!-
351 \internal-
352*/-
353void QWidgetPrivate::scrollChildren(int dx, int dy)-
354{-
355 Q_Q(QWidget);-
356 if (q->children().size() > 0) { // scroll children
q->children().size() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
357 QPoint pd(dx, dy);-
358 QObjectList childObjects = q->children();-
359 for (int i = 0; i < childObjects.size(); ++i) { // move all children
i < childObjects.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
360 QWidget *w = qobject_cast<QWidget*>(childObjects.at(i));-
361 if (w && !w->isWindow()) {
wDescription
TRUEnever evaluated
FALSEnever evaluated
!w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
362 QPoint oldp = w->pos();-
363 QRect r(w->pos() + pd, w->size());-
364 w->data->crect = r;-
365 if (w->testAttribute(Qt::WA_WState_Created))
w->testAttribu...State_Created)Description
TRUEnever evaluated
FALSEnever evaluated
0
366 w->d_func()->setWSGeometry();
never executed: w->d_func()->setWSGeometry();
0
367 w->d_func()->setDirtyOpaqueRegion();-
368 QMoveEvent e(r.topLeft(), oldp);-
369 QApplication::sendEvent(w, &e);-
370 }
never executed: end of block
0
371 }
never executed: end of block
0
372 }
never executed: end of block
0
373}
never executed: end of block
0
374-
375void QWidgetPrivate::setWSGeometry()-
376{-
377 Q_Q(QWidget);-
378 if (QWindow *window = q->windowHandle())
QWindow *windo...windowHandle()Description
TRUEnever evaluated
FALSEnever evaluated
0
379 window->setGeometry(data.crect);
never executed: window->setGeometry(data.crect);
0
380}
never executed: end of block
0
381-
382void QWidgetPrivate::updateWidgetTransform(QEvent *event)-
383{-
384 Q_Q(QWidget);-
385 if (q == QGuiApplication::focusObject() || event->type() == QEvent::FocusIn) {
q == QGuiAppli...:focusObject()Description
TRUEnever evaluated
FALSEnever evaluated
event->type() ...Event::FocusInDescription
TRUEnever evaluated
FALSEnever evaluated
0
386 QTransform t;-
387 QPoint p = q->mapTo(q->topLevelWidget(), QPoint(0,0));-
388 t.translate(p.x(), p.y());-
389 QGuiApplication::inputMethod()->setInputItemTransform(t);-
390 QGuiApplication::inputMethod()->setInputItemRectangle(q->rect());-
391 QGuiApplication::inputMethod()->update(Qt::ImInputItemClipRectangle);-
392 }
never executed: end of block
0
393}
never executed: end of block
0
394-
395#ifdef QT_KEYPAD_NAVIGATION-
396QPointer<QWidget> QWidgetPrivate::editingWidget;-
397-
398/*!-
399 Returns \c true if this widget currently has edit focus; otherwise false.-
400-
401 This feature is only available in Qt for Embedded Linux.-
402-
403 \sa setEditFocus(), QApplication::keypadNavigationEnabled()-
404*/-
405bool QWidget::hasEditFocus() const-
406{-
407 const QWidget* w = this;-
408 while (w->d_func()->extra && w->d_func()->extra->focus_proxy)-
409 w = w->d_func()->extra->focus_proxy;-
410 return QWidgetPrivate::editingWidget == w;-
411}-
412-
413/*!-
414 \fn void QWidget::setEditFocus(bool enable)-
415-
416 If \a enable is true, make this widget have edit focus, in which-
417 case Qt::Key_Up and Qt::Key_Down will be delivered to the widget-
418 normally; otherwise, Qt::Key_Up and Qt::Key_Down are used to-
419 change focus.-
420-
421 This feature is only available in Qt for Embedded Linux.-
422-
423 \sa hasEditFocus(), QApplication::keypadNavigationEnabled()-
424*/-
425void QWidget::setEditFocus(bool on)-
426{-
427 QWidget *f = this;-
428 while (f->d_func()->extra && f->d_func()->extra->focus_proxy)-
429 f = f->d_func()->extra->focus_proxy;-
430-
431 if (QWidgetPrivate::editingWidget && QWidgetPrivate::editingWidget != f)-
432 QWidgetPrivate::editingWidget->setEditFocus(false);-
433-
434 if (on && !f->hasFocus())-
435 f->setFocus();-
436-
437 if ((!on && !QWidgetPrivate::editingWidget)-
438 || (on && QWidgetPrivate::editingWidget == f)) {-
439 return;-
440 }-
441-
442 if (!on && QWidgetPrivate::editingWidget == f) {-
443 QWidgetPrivate::editingWidget = 0;-
444 QEvent event(QEvent::LeaveEditFocus);-
445 QApplication::sendEvent(f, &event);-
446 QApplication::sendEvent(f->style(), &event);-
447 } else if (on) {-
448 QWidgetPrivate::editingWidget = f;-
449 QEvent event(QEvent::EnterEditFocus);-
450 QApplication::sendEvent(f, &event);-
451 QApplication::sendEvent(f->style(), &event);-
452 }-
453}-
454#endif-
455-
456/*!-
457 \property QWidget::autoFillBackground-
458 \brief whether the widget background is filled automatically-
459 \since 4.1-
460-
461 If enabled, this property will cause Qt to fill the background of the-
462 widget before invoking the paint event. The color used is defined by the-
463 QPalette::Window color role from the widget's \l{QPalette}{palette}.-
464-
465 In addition, Windows are always filled with QPalette::Window, unless the-
466 WA_OpaquePaintEvent or WA_NoSystemBackground attributes are set.-
467-
468 This property cannot be turned off (i.e., set to false) if a widget's-
469 parent has a static gradient for its background.-
470-
471 \warning Use this property with caution in conjunction with-
472 \l{Qt Style Sheets}. When a widget has a style sheet with a valid-
473 background or a border-image, this property is automatically disabled.-
474-
475 By default, this property is \c false.-
476-
477 \sa Qt::WA_OpaquePaintEvent, Qt::WA_NoSystemBackground,-
478 {QWidget#Transparency and Double Buffering}{Transparency and Double Buffering}-
479*/-
480bool QWidget::autoFillBackground() const-
481{-
482 Q_D(const QWidget);-
483 return d->extra && d->extra->autoFillBackground;
never executed: return d->extra && d->extra->autoFillBackground;
0
484}-
485-
486void QWidget::setAutoFillBackground(bool enabled)-
487{-
488 Q_D(QWidget);-
489 if (!d->extra)
!d->extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
490 d->createExtra();
never executed: d->createExtra();
0
491 if (d->extra->autoFillBackground == enabled)
d->extra->auto...und == enabledDescription
TRUEnever evaluated
FALSEnever evaluated
0
492 return;
never executed: return;
0
493-
494 d->extra->autoFillBackground = enabled;-
495 d->updateIsOpaque();-
496 update();-
497 d->updateIsOpaque();-
498}
never executed: end of block
0
499-
500/*!-
501 \class QWidget-
502 \brief The QWidget class is the base class of all user interface objects.-
503-
504 \ingroup basicwidgets-
505 \inmodule QtWidgets-
506-
507 The widget is the atom of the user interface: it receives mouse, keyboard-
508 and other events from the window system, and paints a representation of-
509 itself on the screen. Every widget is rectangular, and they are sorted in a-
510 Z-order. A widget is clipped by its parent and by the widgets in front of-
511 it.-
512-
513 A widget that is not embedded in a parent widget is called a window.-
514 Usually, windows have a frame and a title bar, although it is also possible-
515 to create windows without such decoration using suitable-
516 \l{Qt::WindowFlags}{window flags}). In Qt, QMainWindow and the various-
517 subclasses of QDialog are the most common window types.-
518-
519 Every widget's constructor accepts one or two standard arguments:-
520-
521 \list 1-
522 \li \c{QWidget *parent = 0} is the parent of the new widget. If it is 0-
523 (the default), the new widget will be a window. If not, it will be-
524 a child of \e parent, and be constrained by \e parent's geometry-
525 (unless you specify Qt::Window as window flag).-
526 \li \c{Qt::WindowFlags f = 0} (where available) sets the window flags;-
527 the default is suitable for almost all widgets, but to get, for-
528 example, a window without a window system frame, you must use-
529 special flags.-
530 \endlist-
531-
532 QWidget has many member functions, but some of them have little direct-
533 functionality; for example, QWidget has a font property, but never uses-
534 this itself. There are many subclasses which provide real functionality,-
535 such as QLabel, QPushButton, QListWidget, and QTabWidget.-
536-
537-
538 \section1 Top-Level and Child Widgets-
539-
540 A widget without a parent widget is always an independent window (top-level-
541 widget). For these widgets, setWindowTitle() and setWindowIcon() set the-
542 title bar and icon respectively.-
543-
544 Non-window widgets are child widgets, displayed within their parent-
545 widgets. Most widgets in Qt are mainly useful as child widgets. For-
546 example, it is possible to display a button as a top-level window, but most-
547 people prefer to put their buttons inside other widgets, such as QDialog.-
548-
549 \image parent-child-widgets.png A parent widget containing various child widgets.-
550-
551 The diagram above shows a QGroupBox widget being used to hold various child-
552 widgets in a layout provided by QGridLayout. The QLabel child widgets have-
553 been outlined to indicate their full sizes.-
554-
555 If you want to use a QWidget to hold child widgets you will usually want to-
556 add a layout to the parent QWidget. See \l{Layout Management} for more-
557 information.-
558-
559-
560 \section1 Composite Widgets-
561-
562 When a widget is used as a container to group a number of child widgets, it-
563 is known as a composite widget. These can be created by constructing a-
564 widget with the required visual properties - a QFrame, for example - and-
565 adding child widgets to it, usually managed by a layout. The above diagram-
566 shows such a composite widget that was created using Qt Designer.-
567-
568 Composite widgets can also be created by subclassing a standard widget,-
569 such as QWidget or QFrame, and adding the necessary layout and child-
570 widgets in the constructor of the subclass. Many of the \l{Qt Widgets Examples}-
571 {examples provided with Qt} use this approach, and it is also covered in-
572 the Qt \l{Tutorials}.-
573-
574-
575 \section1 Custom Widgets and Painting-
576-
577 Since QWidget is a subclass of QPaintDevice, subclasses can be used to-
578 display custom content that is composed using a series of painting-
579 operations with an instance of the QPainter class. This approach contrasts-
580 with the canvas-style approach used by the \l{Graphics View}-
581 {Graphics View Framework} where items are added to a scene by the-
582 application and are rendered by the framework itself.-
583-
584 Each widget performs all painting operations from within its paintEvent()-
585 function. This is called whenever the widget needs to be redrawn, either-
586 as a result of some external change or when requested by the application.-
587-
588 The \l{widgets/analogclock}{Analog Clock example} shows how a simple widget-
589 can handle paint events.-
590-
591-
592 \section1 Size Hints and Size Policies-
593-
594 When implementing a new widget, it is almost always useful to reimplement-
595 sizeHint() to provide a reasonable default size for the widget and to set-
596 the correct size policy with setSizePolicy().-
597-
598 By default, composite widgets which do not provide a size hint will be-
599 sized according to the space requirements of their child widgets.-
600-
601 The size policy lets you supply good default behavior for the layout-
602 management system, so that other widgets can contain and manage yours-
603 easily. The default size policy indicates that the size hint represents-
604 the preferred size of the widget, and this is often good enough for many-
605 widgets.-
606-
607 \note The size of top-level widgets are constrained to 2/3 of the desktop's-
608 height and width. You can resize() the widget manually if these bounds are-
609 inadequate.-
610-
611-
612 \section1 Events-
613-
614 Widgets respond to events that are typically caused by user actions. Qt-
615 delivers events to widgets by calling specific event handler functions with-
616 instances of QEvent subclasses containing information about each event.-
617-
618 If your widget only contains child widgets, you probably do not need to-
619 implement any event handlers. If you want to detect a mouse click in a-
620 child widget call the child's underMouse() function inside the widget's-
621 mousePressEvent().-
622-
623 The \l{widgets/scribble}{Scribble example} implements a wider set of-
624 events to handle mouse movement, button presses, and window resizing.-
625-
626 You will need to supply the behavior and content for your own widgets, but-
627 here is a brief overview of the events that are relevant to QWidget,-
628 starting with the most common ones:-
629-
630 \list-
631 \li paintEvent() is called whenever the widget needs to be repainted.-
632 Every widget displaying custom content must implement it. Painting-
633 using a QPainter can only take place in a paintEvent() or a-
634 function called by a paintEvent().-
635 \li resizeEvent() is called when the widget has been resized.-
636 \li mousePressEvent() is called when a mouse button is pressed while-
637 the mouse cursor is inside the widget, or when the widget has-
638 grabbed the mouse using grabMouse(). Pressing the mouse without-
639 releasing it is effectively the same as calling grabMouse().-
640 \li mouseReleaseEvent() is called when a mouse button is released. A-
641 widget receives mouse release events when it has received the-
642 corresponding mouse press event. This means that if the user-
643 presses the mouse inside \e your widget, then drags the mouse-
644 somewhere else before releasing the mouse button, \e your widget-
645 receives the release event. There is one exception: if a popup menu-
646 appears while the mouse button is held down, this popup immediately-
647 steals the mouse events.-
648 \li mouseDoubleClickEvent() is called when the user double-clicks in-
649 the widget. If the user double-clicks, the widget receives a mouse-
650 press event, a mouse release event, (a mouse click event,) a second-
651 mouse press, this event and finally a second mouse release event.-
652 (Some mouse move events may also be-
653 received if the mouse is not held steady during this operation.) It-
654 is \e{not possible} to distinguish a click from a double-click-
655 until the second click arrives. (This is one reason why most GUI-
656 books recommend that double-clicks be an extension of-
657 single-clicks, rather than trigger a different action.)-
658 \endlist-
659-
660 Widgets that accept keyboard input need to reimplement a few more event-
661 handlers:-
662-
663 \list-
664 \li keyPressEvent() is called whenever a key is pressed, and again when-
665 a key has been held down long enough for it to auto-repeat. The-
666 \uicontrol Tab and \uicontrol Shift+Tab keys are only passed to the widget if-
667 they are not used by the focus-change mechanisms. To force those-
668 keys to be processed by your widget, you must reimplement-
669 QWidget::event().-
670 \li focusInEvent() is called when the widget gains keyboard focus-
671 (assuming you have called setFocusPolicy()). Well-behaved widgets-
672 indicate that they own the keyboard focus in a clear but discreet-
673 way.-
674 \li focusOutEvent() is called when the widget loses keyboard focus.-
675 \endlist-
676-
677 You may be required to also reimplement some of the less common event-
678 handlers:-
679-
680 \list-
681 \li mouseMoveEvent() is called whenever the mouse moves while a mouse-
682 button is held down. This can be useful during drag and drop-
683 operations. If you call \l{setMouseTracking()}{setMouseTracking}(true),-
684 you get mouse move events even when no buttons are held down.-
685 (See also the \l{Drag and Drop} guide.)-
686 \li keyReleaseEvent() is called whenever a key is released and while it-
687 is held down (if the key is auto-repeating). In that case, the-
688 widget will receive a pair of key release and key press event for-
689 every repeat. The \uicontrol Tab and \uicontrol Shift+Tab keys are only passed-
690 to the widget if they are not used by the focus-change mechanisms.-
691 To force those keys to be processed by your widget, you must-
692 reimplement QWidget::event().-
693 \li wheelEvent() is called whenever the user turns the mouse wheel-
694 while the widget has the focus.-
695 \li enterEvent() is called when the mouse enters the widget's screen-
696 space. (This excludes screen space owned by any of the widget's-
697 children.)-
698 \li leaveEvent() is called when the mouse leaves the widget's screen-
699 space. If the mouse enters a child widget it will not cause a-
700 leaveEvent().-
701 \li moveEvent() is called when the widget has been moved relative to-
702 its parent.-
703 \li closeEvent() is called when the user closes the widget (or when-
704 close() is called).-
705 \endlist-
706-
707 There are also some rather obscure events described in the documentation-
708 for QEvent::Type. To handle these events, you need to reimplement event()-
709 directly.-
710-
711 The default implementation of event() handles \uicontrol Tab and \uicontrol Shift+Tab-
712 (to move the keyboard focus), and passes on most of the other events to-
713 one of the more specialized handlers above.-
714-
715 Events and the mechanism used to deliver them are covered in-
716 \l{The Event System}.-
717-
718 \section1 Groups of Functions and Properties-
719-
720 \table-
721 \header \li Context \li Functions and Properties-
722-
723 \row \li Window functions \li-
724 show(),-
725 hide(),-
726 raise(),-
727 lower(),-
728 close().-
729-
730 \row \li Top-level windows \li-
731 \l windowModified, \l windowTitle, \l windowIcon,-
732 \l isActiveWindow, activateWindow(), \l minimized, showMinimized(),-
733 \l maximized, showMaximized(), \l fullScreen, showFullScreen(),-
734 showNormal().-
735-
736 \row \li Window contents \li-
737 update(),-
738 repaint(),-
739 scroll().-
740-
741 \row \li Geometry \li-
742 \l pos, x(), y(), \l rect, \l size, width(), height(), move(), resize(),-
743 \l sizePolicy, sizeHint(), minimumSizeHint(),-
744 updateGeometry(), layout(),-
745 \l frameGeometry, \l geometry, \l childrenRect, \l childrenRegion,-
746 adjustSize(),-
747 mapFromGlobal(), mapToGlobal(),-
748 mapFromParent(), mapToParent(),-
749 \l maximumSize, \l minimumSize, \l sizeIncrement,-
750 \l baseSize, setFixedSize()-
751-
752 \row \li Mode \li-
753 \l visible, isVisibleTo(),-
754 \l enabled, isEnabledTo(),-
755 \l modal,-
756 isWindow(),-
757 \l mouseTracking,-
758 \l updatesEnabled,-
759 visibleRegion().-
760-
761 \row \li Look and feel \li-
762 style(),-
763 setStyle(),-
764 \l styleSheet,-
765 \l cursor,-
766 \l font,-
767 \l palette,-
768 backgroundRole(), setBackgroundRole(),-
769 fontInfo(), fontMetrics().-
770-
771 \row \li Keyboard focus functions \li-
772 \l focus, \l focusPolicy,-
773 setFocus(), clearFocus(), setTabOrder(), setFocusProxy(),-
774 focusNextChild(), focusPreviousChild().-
775-
776 \row \li Mouse and keyboard grabbing \li-
777 grabMouse(), releaseMouse(),-
778 grabKeyboard(), releaseKeyboard(),-
779 mouseGrabber(), keyboardGrabber().-
780-
781 \row \li Event handlers \li-
782 event(),-
783 mousePressEvent(),-
784 mouseReleaseEvent(),-
785 mouseDoubleClickEvent(),-
786 mouseMoveEvent(),-
787 keyPressEvent(),-
788 keyReleaseEvent(),-
789 focusInEvent(),-
790 focusOutEvent(),-
791 wheelEvent(),-
792 enterEvent(),-
793 leaveEvent(),-
794 paintEvent(),-
795 moveEvent(),-
796 resizeEvent(),-
797 closeEvent(),-
798 dragEnterEvent(),-
799 dragMoveEvent(),-
800 dragLeaveEvent(),-
801 dropEvent(),-
802 childEvent(),-
803 showEvent(),-
804 hideEvent(),-
805 customEvent().-
806 changeEvent(),-
807-
808 \row \li System functions \li-
809 parentWidget(), window(), setParent(), winId(),-
810 find(), metric().-
811-
812 \row \li Context menu \li-
813 contextMenuPolicy, contextMenuEvent(),-
814 customContextMenuRequested(), actions()-
815-
816 \row \li Interactive help \li-
817 setToolTip(), setWhatsThis()-
818-
819 \endtable-
820-
821-
822 \section1 Widget Style Sheets-
823-
824 In addition to the standard widget styles for each platform, widgets can-
825 also be styled according to rules specified in a \l{styleSheet}-
826 {style sheet}. This feature enables you to customize the appearance of-
827 specific widgets to provide visual cues to users about their purpose. For-
828 example, a button could be styled in a particular way to indicate that it-
829 performs a destructive action.-
830-
831 The use of widget style sheets is described in more detail in the-
832 \l{Qt Style Sheets} document.-
833-
834-
835 \section1 Transparency and Double Buffering-
836-
837 Since Qt 4.0, QWidget automatically double-buffers its painting, so there-
838 is no need to write double-buffering code in paintEvent() to avoid-
839 flicker.-
840-
841 Since Qt 4.1, the Qt::WA_ContentsPropagated widget attribute has been-
842 deprecated. Instead, the contents of parent widgets are propagated by-
843 default to each of their children as long as Qt::WA_PaintOnScreen is not-
844 set. Custom widgets can be written to take advantage of this feature by-
845 updating irregular regions (to create non-rectangular child widgets), or-
846 painting with colors that have less than full alpha component. The-
847 following diagram shows how attributes and properties of a custom widget-
848 can be fine-tuned to achieve different effects.-
849-
850 \image propagation-custom.png-
851-
852 In the above diagram, a semi-transparent rectangular child widget with an-
853 area removed is constructed and added to a parent widget (a QLabel showing-
854 a pixmap). Then, different properties and widget attributes are set to-
855 achieve different effects:-
856-
857 \list-
858 \li The left widget has no additional properties or widget attributes-
859 set. This default state suits most custom widgets using-
860 transparency, are irregularly-shaped, or do not paint over their-
861 entire area with an opaque brush.-
862 \li The center widget has the \l autoFillBackground property set. This-
863 property is used with custom widgets that rely on the widget to-
864 supply a default background, and do not paint over their entire-
865 area with an opaque brush.-
866 \li The right widget has the Qt::WA_OpaquePaintEvent widget attribute-
867 set. This indicates that the widget will paint over its entire area-
868 with opaque colors. The widget's area will initially be-
869 \e{uninitialized}, represented in the diagram with a red diagonal-
870 grid pattern that shines through the overpainted area. The-
871 Qt::WA_OpaquePaintArea attribute is useful for widgets that need to-
872 paint their own specialized contents quickly and do not need a-
873 default filled background.-
874 \endlist-
875-
876 To rapidly update custom widgets with simple background colors, such as-
877 real-time plotting or graphing widgets, it is better to define a suitable-
878 background color (using setBackgroundRole() with the-
879 QPalette::Window role), set the \l autoFillBackground property, and only-
880 implement the necessary drawing functionality in the widget's paintEvent().-
881-
882 To rapidly update custom widgets that constantly paint over their entire-
883 areas with opaque content, e.g., video streaming widgets, it is better to-
884 set the widget's Qt::WA_OpaquePaintEvent, avoiding any unnecessary overhead-
885 associated with repainting the widget's background.-
886-
887 If a widget has both the Qt::WA_OpaquePaintEvent widget attribute \e{and}-
888 the \l autoFillBackground property set, the Qt::WA_OpaquePaintEvent-
889 attribute takes precedence. Depending on your requirements, you should-
890 choose either one of them.-
891-
892 Since Qt 4.1, the contents of parent widgets are also propagated to-
893 standard Qt widgets. This can lead to some unexpected results if the-
894 parent widget is decorated in a non-standard way, as shown in the diagram-
895 below.-
896-
897 \image propagation-standard.png-
898-
899 The scope for customizing the painting behavior of standard Qt widgets,-
900 without resorting to subclassing, is slightly less than that possible for-
901 custom widgets. Usually, the desired appearance of a standard widget can be-
902 achieved by setting its \l autoFillBackground property.-
903-
904-
905 \section1 Creating Translucent Windows-
906-
907 Since Qt 4.5, it has been possible to create windows with translucent regions-
908 on window systems that support compositing.-
909-
910 To enable this feature in a top-level widget, set its Qt::WA_TranslucentBackground-
911 attribute with setAttribute() and ensure that its background is painted with-
912 non-opaque colors in the regions you want to be partially transparent.-
913-
914 Platform notes:-
915-
916 \list-
917 \li X11: This feature relies on the use of an X server that supports ARGB visuals-
918 and a compositing window manager.-
919 \li Windows: The widget needs to have the Qt::FramelessWindowHint window flag set-
920 for the translucency to work.-
921 \endlist-
922-
923-
924 \section1 Native Widgets vs Alien Widgets-
925-
926 Introduced in Qt 4.4, alien widgets are widgets unknown to the windowing-
927 system. They do not have a native window handle associated with them. This-
928 feature significantly speeds up widget painting, resizing, and removes flicker.-
929-
930 Should you require the old behavior with native windows, you can choose-
931 one of the following options:-
932-
933 \list 1-
934 \li Use the \c{QT_USE_NATIVE_WINDOWS=1} in your environment.-
935 \li Set the Qt::AA_NativeWindows attribute on your application. All-
936 widgets will be native widgets.-
937 \li Set the Qt::WA_NativeWindow attribute on widgets: The widget itself-
938 and all of its ancestors will become native (unless-
939 Qt::WA_DontCreateNativeAncestors is set).-
940 \li Call QWidget::winId to enforce a native window (this implies 3).-
941 \li Set the Qt::WA_PaintOnScreen attribute to enforce a native window-
942 (this implies 3).-
943 \endlist-
944-
945 \sa QEvent, QPainter, QGridLayout, QBoxLayout-
946-
947*/-
948-
949QWidgetMapper *QWidgetPrivate::mapper = 0; // widget with wid-
950QWidgetSet *QWidgetPrivate::allWidgets = 0; // widgets with no wid-
951-
952-
953/*****************************************************************************-
954 QWidget utility functions-
955 *****************************************************************************/-
956-
957QRegion qt_dirtyRegion(QWidget *widget)-
958{-
959 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
960 return QRegion();
never executed: return QRegion();
0
961-
962 QWidgetBackingStore *bs = qt_widget_private(widget)->maybeBackingStore();-
963 if (!bs)
!bsDescription
TRUEnever evaluated
FALSEnever evaluated
0
964 return QRegion();
never executed: return QRegion();
0
965-
966 return bs->dirtyRegion(widget);
never executed: return bs->dirtyRegion(widget);
0
967}-
968-
969/*****************************************************************************-
970 QWidget member functions-
971 *****************************************************************************/-
972-
973/*-
974 Widget state flags:-
975 \list-
976 \li Qt::WA_WState_Created The widget has a valid winId().-
977 \li Qt::WA_WState_Visible The widget is currently visible.-
978 \li Qt::WA_WState_Hidden The widget is hidden, i.e. it won't-
979 become visible unless you call show() on it. Qt::WA_WState_Hidden-
980 implies !Qt::WA_WState_Visible.-
981 \li Qt::WA_WState_CompressKeys Compress keyboard events.-
982 \li Qt::WA_WState_BlockUpdates Repaints and updates are disabled.-
983 \li Qt::WA_WState_InPaintEvent Currently processing a paint event.-
984 \li Qt::WA_WState_Reparented The widget has been reparented.-
985 \li Qt::WA_WState_ConfigPending A configuration (resize/move) event is pending.-
986 \li Qt::WA_WState_DND (Deprecated) The widget supports drag and drop, see setAcceptDrops().-
987 \endlist-
988*/-
989-
990struct QWidgetExceptionCleaner-
991{-
992 /* this cleans up when the constructor throws an exception */-
993 static inline void cleanup(QWidget *that, QWidgetPrivate *d)-
994 {-
995#ifdef QT_NO_EXCEPTIONS-
996 Q_UNUSED(that);-
997 Q_UNUSED(d);-
998#else-
999 QWidgetPrivate::allWidgets->remove(that);-
1000 if (d->focus_next != that) {-
1001 if (d->focus_next)-
1002 d->focus_next->d_func()->focus_prev = d->focus_prev;-
1003 if (d->focus_prev)-
1004 d->focus_prev->d_func()->focus_next = d->focus_next;-
1005 }-
1006#endif-
1007 }
never executed: end of block
0
1008};-
1009-
1010/*!-
1011 Constructs a widget which is a child of \a parent, with widget-
1012 flags set to \a f.-
1013-
1014 If \a parent is 0, the new widget becomes a window. If-
1015 \a parent is another widget, this widget becomes a child window-
1016 inside \a parent. The new widget is deleted when its \a parent is-
1017 deleted.-
1018-
1019 The widget flags argument, \a f, is normally 0, but it can be set-
1020 to customize the frame of a window (i.e. \a-
1021 parent must be 0). To customize the frame, use a value composed-
1022 from the bitwise OR of any of the \l{Qt::WindowFlags}{window flags}.-
1023-
1024 If you add a child widget to an already visible widget you must-
1025 explicitly show the child to make it visible.-
1026-
1027 Note that the X11 version of Qt may not be able to deliver all-
1028 combinations of style flags on all systems. This is because on-
1029 X11, Qt can only ask the window manager, and the window manager-
1030 can override the application's settings. On Windows, Qt can set-
1031 whatever flags you want.-
1032-
1033 \sa windowFlags-
1034*/-
1035QWidget::QWidget(QWidget *parent, Qt::WindowFlags f)-
1036 : QObject(*new QWidgetPrivate, 0), QPaintDevice()-
1037{-
1038 QT_TRY {-
1039 d_func()->init(parent, f);-
1040 } QT_CATCH(...) {
never executed: end of block
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1041 QWidgetExceptionCleaner::cleanup(this, d_func());
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1042 QT_RETHROW;
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1043 }
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1044}-
1045-
1046-
1047/*! \internal-
1048*/-
1049QWidget::QWidget(QWidgetPrivate &dd, QWidget* parent, Qt::WindowFlags f)-
1050 : QObject(dd, 0), QPaintDevice()-
1051{-
1052 Q_D(QWidget);-
1053 QT_TRY {-
1054 d->init(parent, f);-
1055 } QT_CATCH(...) {
never executed: end of block
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1056 QWidgetExceptionCleaner::cleanup(this, d_func());
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1057 QT_RETHROW;
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1058 }
dead code: { QWidgetExceptionCleaner::cleanup(this, d_func()); qt_noop(); }
-
1059}-
1060-
1061/*!-
1062 \internal-
1063*/-
1064int QWidget::devType() const-
1065{-
1066 return QInternal::Widget;
never executed: return QInternal::Widget;
0
1067}-
1068-
1069-
1070//### w is a "this" ptr, passed as a param because QWorkspace needs special logic-
1071void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w)-
1072{-
1073 bool customize = (flags & (Qt::CustomizeWindowHint-
1074 | Qt::FramelessWindowHint-
1075 | Qt::WindowTitleHint-
1076 | Qt::WindowSystemMenuHint-
1077 | Qt::WindowMinimizeButtonHint-
1078 | Qt::WindowMaximizeButtonHint-
1079 | Qt::WindowCloseButtonHint-
1080 | Qt::WindowContextHelpButtonHint));-
1081-
1082 uint type = (flags & Qt::WindowType_Mask);-
1083-
1084 if ((type == Qt::Widget || type == Qt::SubWindow) && w && !w->parent()) {
type == Qt::WidgetDescription
TRUEnever evaluated
FALSEnever evaluated
type == Qt::SubWindowDescription
TRUEnever evaluated
FALSEnever evaluated
wDescription
TRUEnever evaluated
FALSEnever evaluated
!w->parent()Description
TRUEnever evaluated
FALSEnever evaluated
0
1085 type = Qt::Window;-
1086 flags |= Qt::Window;-
1087 }
never executed: end of block
0
1088-
1089 if (flags & Qt::CustomizeWindowHint) {
flags & Qt::Cu...mizeWindowHintDescription
TRUEnever evaluated
FALSEnever evaluated
0
1090 // modify window flags to make them consistent.-
1091 // Only enable this on non-Mac platforms. Since the old way of doing this would-
1092 // interpret WindowSystemMenuHint as a close button and we can't change that behavior-
1093 // we can't just add this in.-
1094#ifndef Q_DEAD_CODE_FROM_QT4_MAC-
1095 if ((flags & (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint))
(flags & (Qt::...lpButtonHint))Description
TRUEnever evaluated
FALSEnever evaluated
0
1096# ifdef Q_OS_WIN-
1097 && type != Qt::Dialog // QTBUG-2027, allow for menu-less dialogs.-
1098# endif-
1099 ) {-
1100 flags |= Qt::WindowSystemMenuHint;-
1101#else-
1102 if (flags & (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint-
1103 | Qt::WindowSystemMenuHint)) {-
1104#endif-
1105 flags |= Qt::WindowTitleHint;-
1106 flags &= ~Qt::FramelessWindowHint;-
1107 }
never executed: end of block
0
1108 } else if (customize && !(flags & Qt::FramelessWindowHint)) {
never executed: end of block
customizeDescription
TRUEnever evaluated
FALSEnever evaluated
!(flags & Qt::...essWindowHint)Description
TRUEnever evaluated
FALSEnever evaluated
0
1109 // if any of the window hints that affect the titlebar are set-
1110 // and the window is supposed to have frame, we add a titlebar-
1111 // and system menu by default.-
1112 flags |= Qt::WindowSystemMenuHint;-
1113 flags |= Qt::WindowTitleHint;-
1114 }
never executed: end of block
0
1115 if (customize)
customizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
1116 ; // don't modify window flags if the user explicitly set them.
never executed: ;
0
1117 else if (type == Qt::Dialog || type == Qt::Sheet)
type == Qt::DialogDescription
TRUEnever evaluated
FALSEnever evaluated
type == Qt::SheetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1118#ifndef Q_OS_WINCE-
1119 flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint;
never executed: flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint;
0
1120#else-
1121 flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint;-
1122#endif-
1123 else if (type == Qt::Tool)
type == Qt::ToolDescription
TRUEnever evaluated
FALSEnever evaluated
0
1124 flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint;
never executed: flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint;
0
1125 else-
1126 flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint |
never executed: flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint;
0
1127 Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint;
never executed: flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint;
0
1128 if (w->testAttribute(Qt::WA_TransparentForMouseEvents))
w->testAttribu...orMouseEvents)Description
TRUEnever evaluated
FALSEnever evaluated
0
1129 flags |= Qt::WindowTransparentForInput;
never executed: flags |= Qt::WindowTransparentForInput;
0
1130}
never executed: end of block
0
1131-
1132void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)-
1133{-
1134 Q_Q(QWidget);-
1135 if (Q_UNLIKELY(!qobject_cast<QApplication *>(QCoreApplication::instance())))
__builtin_expe...ce())), false)Description
TRUEnever evaluated
FALSEnever evaluated
0
1136 qFatal("QWidget: Cannot create a QWidget without QApplication");
never executed: QMessageLogger(__FILE__, 1136, __PRETTY_FUNCTION__).fatal("QWidget: Cannot create a QWidget without QApplication");
0
1137-
1138 Q_ASSERT(allWidgets);-
1139 if (allWidgets)
allWidgetsDescription
TRUEnever evaluated
FALSEnever evaluated
0
1140 allWidgets->insert(q);
never executed: allWidgets->insert(q);
0
1141-
1142 int targetScreen = -1;-
1143 if (parentWidget && parentWidget->windowType() == Qt::Desktop) {
parentWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
parentWidget->...== Qt::DesktopDescription
TRUEnever evaluated
FALSEnever evaluated
0
1144 const QDesktopScreenWidget *sw = qobject_cast<const QDesktopScreenWidget *>(parentWidget);-
1145 targetScreen = sw ? sw->screenNumber() : 0;
swDescription
TRUEnever evaluated
FALSEnever evaluated
0
1146 parentWidget = 0;-
1147 }
never executed: end of block
0
1148-
1149 q->data = &data;-
1150-
1151#ifndef QT_NO_THREAD-
1152 if (!parent) {
!parentDescription
TRUEnever evaluated
FALSEnever evaluated
0
1153 Q_ASSERT_X(q->thread() == qApp->thread(), "QWidget",-
1154 "Widgets must be created in the GUI thread.");-
1155 }
never executed: end of block
0
1156#endif-
1157-
1158#if defined(Q_DEAD_CODE_FROM_QT4_X11)-
1159 if (desktopWidget) {-
1160 // make sure the widget is created on the same screen as the-
1161 // programmer specified desktop widget-
1162 xinfo = desktopWidget->d_func()->xinfo;-
1163 }-
1164#endif-
1165 if (targetScreen >= 0) {
targetScreen >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1166 topData()->initialScreenIndex = targetScreen;-
1167 if (QWindow *window = q->windowHandle())
QWindow *windo...windowHandle()Description
TRUEnever evaluated
FALSEnever evaluated
0
1168 window->setScreen(QGuiApplication::screens().value(targetScreen, Q_NULLPTR));
never executed: window->setScreen(QGuiApplication::screens().value(targetScreen, nullptr));
0
1169 }
never executed: end of block
0
1170-
1171 data.fstrut_dirty = true;-
1172-
1173 data.winid = 0;-
1174 data.widget_attributes = 0;-
1175 data.window_flags = f;-
1176 data.window_state = 0;-
1177 data.focus_policy = 0;-
1178 data.context_menu_policy = Qt::DefaultContextMenu;-
1179 data.window_modality = Qt::NonModal;-
1180-
1181 data.sizehint_forced = 0;-
1182 data.is_closing = 0;-
1183 data.in_show = 0;-
1184 data.in_set_window_state = 0;-
1185 data.in_destructor = false;-
1186-
1187 // Widgets with Qt::MSWindowsOwnDC (typically QGLWidget) must have a window handle.-
1188 if (f & Qt::MSWindowsOwnDC) {
f & Qt::MSWindowsOwnDCDescription
TRUEnever evaluated
FALSEnever evaluated
0
1189 mustHaveWindowHandle = 1;-
1190 q->setAttribute(Qt::WA_NativeWindow);-
1191 }
never executed: end of block
0
1192//#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
1193// q->setAttribute(Qt::WA_NativeWindow);-
1194//#endif-
1195-
1196 q->setAttribute(Qt::WA_QuitOnClose); // might be cleared in adjustQuitOnCloseAttribute()-
1197 adjustQuitOnCloseAttribute();-
1198-
1199 q->setAttribute(Qt::WA_WState_Hidden);-
1200-
1201 //give potential windows a bigger "pre-initial" size; create_sys() will give them a new size later-
1202 data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,640,480);
parentWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1203 focus_next = focus_prev = q;-
1204-
1205 if ((f & Qt::WindowType_Mask) == Qt::Desktop)
(f & Qt::Windo...== Qt::DesktopDescription
TRUEnever evaluated
FALSEnever evaluated
0
1206 q->create();
never executed: q->create();
0
1207 else if (parentWidget)
parentWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1208 q->setParent(parentWidget, data.window_flags);
never executed: q->setParent(parentWidget, data.window_flags);
0
1209 else {-
1210 adjustFlags(data.window_flags, q);-
1211 resolveLayoutDirection();-
1212 // opaque system background?-
1213 const QBrush &background = q->palette().brush(QPalette::Window);-
1214 setOpaque(q->isWindow() && background.style() != Qt::NoBrush && background.isOpaque());-
1215 }
never executed: end of block
0
1216 data.fnt = QFont(data.fnt, q);-
1217#if defined(Q_DEAD_CODE_FROM_QT4_X11)-
1218 data.fnt.x11SetScreen(xinfo.screen());-
1219#endif // Q_DEAD_CODE_FROM_QT4_X11-
1220-
1221 q->setAttribute(Qt::WA_PendingMoveEvent);-
1222 q->setAttribute(Qt::WA_PendingResizeEvent);-
1223-
1224 if (++QWidgetPrivate::instanceCounter > QWidgetPrivate::maxInstances)
++QWidgetPriva...::maxInstancesDescription
TRUEnever evaluated
FALSEnever evaluated
0
1225 QWidgetPrivate::maxInstances = QWidgetPrivate::instanceCounter;
never executed: QWidgetPrivate::maxInstances = QWidgetPrivate::instanceCounter;
0
1226-
1227 if (QApplicationPrivate::testAttribute(Qt::AA_ImmediateWidgetCreation)) // ### fixme: Qt 6: Remove AA_ImmediateWidgetCreation.
QApplicationPr...idgetCreation)Description
TRUEnever evaluated
FALSEnever evaluated
0
1228 q->create();
never executed: q->create();
0
1229-
1230 QEvent e(QEvent::Create);-
1231 QApplication::sendEvent(q, &e);-
1232 QApplication::postEvent(q, new QEvent(QEvent::PolishRequest));-
1233-
1234 extraPaintEngine = 0;-
1235-
1236#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
1237 // If we add a child to the unified toolbar, we have to redirect the painting.-
1238 if (parentWidget && parentWidget->d_func() && parentWidget->d_func()->isInUnifiedToolbar) {-
1239 if (parentWidget->d_func()->unifiedSurface) {-
1240 QWidget *toolbar = parentWidget->d_func()->toolbar_ancestor;-
1241 parentWidget->d_func()->unifiedSurface->recursiveRedirect(toolbar, toolbar, toolbar->d_func()->toolbar_offset);-
1242 }-
1243 }-
1244#endif // Q_DEAD_CODE_FROM_QT4_MAC-
1245}
never executed: end of block
0
1246-
1247-
1248-
1249void QWidgetPrivate::createRecursively()-
1250{-
1251 Q_Q(QWidget);-
1252 q->create(0, true, true);-
1253 for (int i = 0; i < children.size(); ++i) {
i < children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1254 QWidget *child = qobject_cast<QWidget *>(children.at(i));-
1255 if (child && !child->isHidden() && !child->isWindow() && !child->testAttribute(Qt::WA_WState_Created))
childDescription
TRUEnever evaluated
FALSEnever evaluated
!child->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
!child->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!child->testAt...State_Created)Description
TRUEnever evaluated
FALSEnever evaluated
0
1256 child->d_func()->createRecursively();
never executed: child->d_func()->createRecursively();
0
1257 }
never executed: end of block
0
1258}
never executed: end of block
0
1259-
1260-
1261// ### fixme: Qt 6: Remove parameter window from QWidget::create()-
1262-
1263/*!-
1264 Creates a new widget window.-
1265-
1266 The parameter \a window is ignored in Qt 5. Please use-
1267 QWindow::fromWinId() to create a QWindow wrapping a foreign-
1268 window and pass it to QWidget::createWindowContainer() instead.-
1269-
1270 Initializes the window (sets the geometry etc.) if \a-
1271 initializeWindow is true. If \a initializeWindow is false, no-
1272 initialization is performed. This parameter only makes sense if \a-
1273 window is a valid window.-
1274-
1275 Destroys the old window if \a destroyOldWindow is true. If \a-
1276 destroyOldWindow is false, you are responsible for destroying the-
1277 window yourself (using platform native code).-
1278-
1279 The QWidget constructor calls create(0,true,true) to create a-
1280 window for this widget.-
1281-
1282 \sa createWindowContainer(), QWindow::fromWinId()-
1283*/-
1284-
1285void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow)-
1286{-
1287 Q_D(QWidget);-
1288 if (Q_UNLIKELY(window))
__builtin_expe...indow), false)Description
TRUEnever evaluated
FALSEnever evaluated
0
1289 qWarning("QWidget::create(): Parameter 'window' does not have any effect.");
never executed: QMessageLogger(__FILE__, 1289, __PRETTY_FUNCTION__).warning("QWidget::create(): Parameter 'window' does not have any effect.");
0
1290 if (testAttribute(Qt::WA_WState_Created) && window == 0 && internalWinId())
testAttribute(...State_Created)Description
TRUEnever evaluated
FALSEnever evaluated
window == 0Description
TRUEnever evaluated
FALSEnever evaluated
internalWinId()Description
TRUEnever evaluated
FALSEnever evaluated
0
1291 return;
never executed: return;
0
1292-
1293 if (d->data.in_destructor)
d->data.in_destructorDescription
TRUEnever evaluated
FALSEnever evaluated
0
1294 return;
never executed: return;
0
1295-
1296 Qt::WindowType type = windowType();-
1297 Qt::WindowFlags &flags = data->window_flags;-
1298-
1299 if ((type == Qt::Widget || type == Qt::SubWindow) && !parentWidget()) {
type == Qt::WidgetDescription
TRUEnever evaluated
FALSEnever evaluated
type == Qt::SubWindowDescription
TRUEnever evaluated
FALSEnever evaluated
!parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1300 type = Qt::Window;-
1301 flags |= Qt::Window;-
1302 }
never executed: end of block
0
1303-
1304 if (QWidget *parent = parentWidget()) {
QWidget *paren...parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1305 if (type & Qt::Window) {
type & Qt::WindowDescription
TRUEnever evaluated
FALSEnever evaluated
0
1306 if (!parent->testAttribute(Qt::WA_WState_Created))
!parent->testA...State_Created)Description
TRUEnever evaluated
FALSEnever evaluated
0
1307 parent->createWinId();
never executed: parent->createWinId();
0
1308 } else if (testAttribute(Qt::WA_NativeWindow) && !parent->internalWinId()
never executed: end of block
testAttribute(..._NativeWindow)Description
TRUEnever evaluated
FALSEnever evaluated
!parent->internalWinId()Description
TRUEnever evaluated
FALSEnever evaluated
0
1309 && !testAttribute(Qt::WA_DontCreateNativeAncestors)) {
!testAttribute...tiveAncestors)Description
TRUEnever evaluated
FALSEnever evaluated
0
1310 // We're about to create a native child widget that doesn't have a native parent;-
1311 // enforce a native handle for the parent unless the Qt::WA_DontCreateNativeAncestors-
1312 // attribute is set.-
1313 d->createWinId();-
1314 // Nothing more to do.-
1315 Q_ASSERT(testAttribute(Qt::WA_WState_Created));-
1316 Q_ASSERT(internalWinId());-
1317 return;
never executed: return;
0
1318 }-
1319 }
never executed: end of block
0
1320-
1321-
1322 static const bool paintOnScreenEnv = qEnvironmentVariableIntValue("QT_ONSCREEN_PAINT") > 0;-
1323 if (paintOnScreenEnv)
paintOnScreenEnvDescription
TRUEnever evaluated
FALSEnever evaluated
0
1324 setAttribute(Qt::WA_PaintOnScreen);
never executed: setAttribute(Qt::WA_PaintOnScreen);
0
1325-
1326 if (QApplicationPrivate::testAttribute(Qt::AA_NativeWindows))
QApplicationPr...NativeWindows)Description
TRUEnever evaluated
FALSEnever evaluated
0
1327 setAttribute(Qt::WA_NativeWindow);
never executed: setAttribute(Qt::WA_NativeWindow);
0
1328-
1329#ifdef ALIEN_DEBUG-
1330 qDebug() << "QWidget::create:" << this << "parent:" << parentWidget()-
1331 << "Alien?" << !testAttribute(Qt::WA_NativeWindow);-
1332#endif-
1333-
1334#if defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP)-
1335 // Unregister the dropsite (if already registered) before we-
1336 // re-create the widget with a native window.-
1337 if (testAttribute(Qt::WA_WState_Created) && !internalWinId() && testAttribute(Qt::WA_NativeWindow)-
1338 && d->extra && d->extra->dropTarget) {-
1339 d->registerDropSite(false);-
1340 }-
1341#endif // defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP)-
1342-
1343 d->updateIsOpaque();-
1344-
1345 setAttribute(Qt::WA_WState_Created); // set created flag-
1346 d->create_sys(window, initializeWindow, destroyOldWindow);-
1347-
1348 // a real toplevel window needs a backing store-
1349 if (isWindow() && windowType() != Qt::Desktop) {
isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
windowType() != Qt::DesktopDescription
TRUEnever evaluated
FALSEnever evaluated
0
1350 d->topData()->backingStoreTracker.destroy();-
1351 if (hasBackingStoreSupport())
hasBackingStoreSupport()Description
TRUEnever evaluated
FALSEnever evaluated
0
1352 d->topData()->backingStoreTracker.create(this);
never executed: d->topData()->backingStoreTracker.create(this);
0
1353 }
never executed: end of block
0
1354-
1355 d->setModal_sys();-
1356-
1357 if (!isWindow() && parentWidget() && parentWidget()->testAttribute(Qt::WA_DropSiteRegistered))
!isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
parentWidget()...iteRegistered)Description
TRUEnever evaluated
FALSEnever evaluated
0
1358 setAttribute(Qt::WA_DropSiteRegistered, true);
never executed: setAttribute(Qt::WA_DropSiteRegistered, true);
0
1359-
1360#ifdef QT_EVAL-
1361 extern void qt_eval_init_widget(QWidget *w);-
1362 qt_eval_init_widget(this);-
1363#endif-
1364-
1365 // need to force the resting of the icon after changing parents-
1366 if (testAttribute(Qt::WA_SetWindowIcon))
testAttribute(...SetWindowIcon)Description
TRUEnever evaluated
FALSEnever evaluated
0
1367 d->setWindowIcon_sys();
never executed: d->setWindowIcon_sys();
0
1368-
1369 if (isWindow() && !d->topData()->iconText.isEmpty())
isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!d->topData()-...Text.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1370 d->setWindowIconText_helper(d->topData()->iconText);
never executed: d->setWindowIconText_helper(d->topData()->iconText);
0
1371 if (isWindow() && !d->topData()->caption.isEmpty())
isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!d->topData()-...tion.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1372 d->setWindowTitle_helper(d->topData()->caption);
never executed: d->setWindowTitle_helper(d->topData()->caption);
0
1373 if (windowType() != Qt::Desktop) {
windowType() != Qt::DesktopDescription
TRUEnever evaluated
FALSEnever evaluated
0
1374 d->updateSystemBackground();-
1375-
1376 if (isWindow() && !testAttribute(Qt::WA_SetWindowIcon))
isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!testAttribute...SetWindowIcon)Description
TRUEnever evaluated
FALSEnever evaluated
0
1377 d->setWindowIcon_sys();
never executed: d->setWindowIcon_sys();
0
1378 }
never executed: end of block
0
1379-
1380 // Frame strut update needed in cases where there are native widgets such as QGLWidget,-
1381 // as those force native window creation on their ancestors before they are shown.-
1382 // If the strut is not updated, any subsequent move of the top level window before show-
1383 // will cause window frame to be ignored when positioning the window.-
1384 // Note that this only helps on platforms that handle window creation synchronously.-
1385 d->updateFrameStrut();-
1386}
never executed: end of block
0
1387-
1388void q_createNativeChildrenAndSetParent(const QWidget *parentWidget)-
1389{-
1390 QObjectList children = parentWidget->children();-
1391 for (int i = 0; i < children.size(); i++) {
i < children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1392 if (children.at(i)->isWidgetType()) {
children.at(i)->isWidgetType()Description
TRUEnever evaluated
FALSEnever evaluated
0
1393 const QWidget *childWidget = qobject_cast<const QWidget *>(children.at(i));-
1394 if (childWidget) { // should not be necessary
childWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1395 if (childWidget->testAttribute(Qt::WA_NativeWindow)) {
childWidget->t..._NativeWindow)Description
TRUEnever evaluated
FALSEnever evaluated
0
1396 if (!childWidget->internalWinId())
!childWidget->internalWinId()Description
TRUEnever evaluated
FALSEnever evaluated
0
1397 childWidget->winId();
never executed: childWidget->winId();
0
1398 if (childWidget->windowHandle()) {
childWidget->windowHandle()Description
TRUEnever evaluated
FALSEnever evaluated
0
1399 if (childWidget->isWindow()) {
childWidget->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
1400 childWidget->windowHandle()->setTransientParent(parentWidget->window()->windowHandle());-
1401 } else {
never executed: end of block
0
1402 childWidget->windowHandle()->setParent(childWidget->nativeParentWidget()->windowHandle());-
1403 }
never executed: end of block
0
1404 }-
1405 } else {
never executed: end of block
0
1406 q_createNativeChildrenAndSetParent(childWidget);-
1407 }
never executed: end of block
0
1408 }-
1409 }
never executed: end of block
0
1410 }
never executed: end of block
0
1411-
1412}
never executed: end of block
0
1413-
1414void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow)-
1415{-
1416 Q_Q(QWidget);-
1417-
1418 Q_UNUSED(window);-
1419 Q_UNUSED(initializeWindow);-
1420 Q_UNUSED(destroyOldWindow);-
1421-
1422 Qt::WindowFlags flags = data.window_flags;-
1423-
1424 if (!q->testAttribute(Qt::WA_NativeWindow) && !q->isWindow())
!q->testAttrib..._NativeWindow)Description
TRUEnever evaluated
FALSEnever evaluated
!q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
1425 return; // we only care about real toplevels
never executed: return;
0
1426-
1427 QWindow *win = topData()->window;-
1428 // topData() ensures the extra is created but does not ensure 'window' is non-null-
1429 // in case the extra was already valid.-
1430 if (!win) {
!winDescription
TRUEnever evaluated
FALSEnever evaluated
0
1431 createTLSysExtra();-
1432 win = topData()->window;-
1433 }
never executed: end of block
0
1434-
1435 const auto dynamicPropertyNames = q->dynamicPropertyNames();-
1436 for (const QByteArray &propertyName : dynamicPropertyNames) {-
1437 if (!qstrncmp(propertyName, "_q_platform_", 12))
!qstrncmp(prop...latform_", 12)Description
TRUEnever evaluated
FALSEnever evaluated
0
1438 win->setProperty(propertyName, q->property(propertyName));
never executed: win->setProperty(propertyName, q->property(propertyName));
0
1439 }
never executed: end of block
0
1440-
1441 if (q->testAttribute(Qt::WA_ShowWithoutActivating))
q->testAttribu...outActivating)Description
TRUEnever evaluated
FALSEnever evaluated
0
1442 win->setProperty("_q_showWithoutActivating", QVariant(true));
never executed: win->setProperty("_q_showWithoutActivating", QVariant(true));
0
1443 if (q->testAttribute(Qt::WA_MacAlwaysShowToolWindow))
q->testAttribu...howToolWindow)Description
TRUEnever evaluated
FALSEnever evaluated
0
1444 win->setProperty("_q_macAlwaysShowToolWindow", QVariant::fromValue(QVariant(true)));
never executed: win->setProperty("_q_macAlwaysShowToolWindow", QVariant::fromValue(QVariant(true)));
0
1445 setNetWmWindowTypes(true); // do nothing if none of WA_X11NetWmWindowType* is set-
1446 win->setFlags(data.window_flags);-
1447 fixPosIncludesFrame();-
1448 if (q->testAttribute(Qt::WA_Moved)
q->testAttribute(Qt::WA_Moved)Description
TRUEnever evaluated
FALSEnever evaluated
0
1449 || !QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowManagement))
!QGuiApplicati...dowManagement)Description
TRUEnever evaluated
FALSEnever evaluated
0
1450 win->setGeometry(q->geometry());
never executed: win->setGeometry(q->geometry());
0
1451 else-
1452 win->resize(q->size());
never executed: win->resize(q->size());
0
1453 if (win->isTopLevel()) {
win->isTopLevel()Description
TRUEnever evaluated
FALSEnever evaluated
0
1454 int screenNumber = topData()->initialScreenIndex;-
1455 topData()->initialScreenIndex = -1;-
1456 if (screenNumber < 0) {
screenNumber < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1457 screenNumber = q->windowType() != Qt::Desktop
q->windowType() != Qt::DesktopDescription
TRUEnever evaluated
FALSEnever evaluated
0
1458 ? QApplication::desktop()->screenNumber(q) : 0;-
1459 }
never executed: end of block
0
1460 win->setScreen(QGuiApplication::screens().value(screenNumber, Q_NULLPTR));-
1461 }
never executed: end of block
0
1462-
1463 QSurfaceFormat format = win->requestedFormat();-
1464 if ((flags & Qt::Window) && win->surfaceType() != QSurface::OpenGLSurface
(flags & Qt::Window)Description
TRUEnever evaluated
FALSEnever evaluated
win->surfaceTy...:OpenGLSurfaceDescription
TRUEnever evaluated
FALSEnever evaluated
0
1465 && q->testAttribute(Qt::WA_TranslucentBackground)) {
q->testAttribu...entBackground)Description
TRUEnever evaluated
FALSEnever evaluated
0
1466 format.setAlphaBufferSize(8);-
1467 }
never executed: end of block
0
1468 win->setFormat(format);-
1469-
1470 if (QWidget *nativeParent = q->nativeParentWidget()) {
QWidget *nativ...ParentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1471 if (nativeParent->windowHandle()) {
nativeParent->windowHandle()Description
TRUEnever evaluated
FALSEnever evaluated
0
1472 if (flags & Qt::Window) {
flags & Qt::WindowDescription
TRUEnever evaluated
FALSEnever evaluated
0
1473 win->setTransientParent(nativeParent->window()->windowHandle());-
1474 win->setParent(0);-
1475 } else {
never executed: end of block
0
1476 win->setTransientParent(0);-
1477 win->setParent(nativeParent->windowHandle());-
1478 }
never executed: end of block
0
1479 }-
1480 }
never executed: end of block
0
1481-
1482 qt_window_private(win)->positionPolicy = topData()->posIncludesFrame ?
topData()->posIncludesFrameDescription
TRUEnever evaluated
FALSEnever evaluated
0
1483 QWindowPrivate::WindowFrameInclusive : QWindowPrivate::WindowFrameExclusive;-
1484 win->create();-
1485 // Enable nonclient-area events for QDockWidget and other NonClientArea-mouse event processing.-
1486 if ((flags & Qt::Desktop) == Qt::Window)
(flags & Qt::D... == Qt::WindowDescription
TRUEnever evaluated
FALSEnever evaluated
0
1487 win->handle()->setFrameStrutEventsEnabled(true);
never executed: win->handle()->setFrameStrutEventsEnabled(true);
0
1488-
1489 data.window_flags = win->flags();-
1490-
1491 if (!topData()->role.isNull())
!topData()->role.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
0
1492 QXcbWindowFunctions::setWmWindowRole(win, topData()->role.toLatin1());
never executed: QXcbWindowFunctions::setWmWindowRole(win, topData()->role.toLatin1());
0
1493-
1494 QBackingStore *store = q->backingStore();-
1495-
1496 if (!store) {
!storeDescription
TRUEnever evaluated
FALSEnever evaluated
0
1497 if (win && q->windowType() != Qt::Desktop) {
winDescription
TRUEnever evaluated
FALSEnever evaluated
q->windowType() != Qt::DesktopDescription
TRUEnever evaluated
FALSEnever evaluated
0
1498 if (q->isTopLevel())
q->isTopLevel()Description
TRUEnever evaluated
FALSEnever evaluated
0
1499 q->setBackingStore(new QBackingStore(win));
never executed: q->setBackingStore(new QBackingStore(win));
0
1500 } else {
never executed: end of block
0
1501 q->setAttribute(Qt::WA_PaintOnScreen, true);-
1502 }
never executed: end of block
0
1503 }-
1504-
1505 setWindowModified_helper();-
1506 WId id = win->winId();-
1507 // See the QPlatformWindow::winId() documentation-
1508 Q_ASSERT(id != WId(0));-
1509 setWinId(id);-
1510-
1511 // Check children and create windows for them if necessary-
1512 q_createNativeChildrenAndSetParent(q);-
1513-
1514 if (extra && !extra->mask.isEmpty())
extraDescription
TRUEnever evaluated
FALSEnever evaluated
!extra->mask.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1515 setMask_sys(extra->mask);
never executed: setMask_sys(extra->mask);
0
1516-
1517 if (data.crect.width() == 0 || data.crect.height() == 0) {
data.crect.width() == 0Description
TRUEnever evaluated
FALSEnever evaluated
data.crect.height() == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1518 q->setAttribute(Qt::WA_OutsideWSRange, true);-
1519 } else if (q->isVisible()) {
never executed: end of block
q->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
1520 // If widget is already shown, set window visible, too-
1521 win->setVisible(true);-
1522 }
never executed: end of block
0
1523}
never executed: end of block
0
1524-
1525#ifdef Q_OS_WIN-
1526static const char activeXNativeParentHandleProperty[] = "_q_embedded_native_parent_handle";-
1527#endif-
1528-
1529void QWidgetPrivate::createTLSysExtra()-
1530{-
1531 Q_Q(QWidget);-
1532 if (!extra->topextra->window && (q->testAttribute(Qt::WA_NativeWindow) || q->isWindow())) {
!extra->topextra->windowDescription
TRUEnever evaluated
FALSEnever evaluated
q->testAttribu..._NativeWindow)Description
TRUEnever evaluated
FALSEnever evaluated
q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
1533 extra->topextra->window = new QWidgetWindow(q);-
1534 if (extra->minw || extra->minh)
extra->minwDescription
TRUEnever evaluated
FALSEnever evaluated
extra->minhDescription
TRUEnever evaluated
FALSEnever evaluated
0
1535 extra->topextra->window->setMinimumSize(QSize(extra->minw, extra->minh));
never executed: extra->topextra->window->setMinimumSize(QSize(extra->minw, extra->minh));
0
1536 if (extra->maxw != QWIDGETSIZE_MAX || extra->maxh != QWIDGETSIZE_MAX)
extra->maxw != ((1<<24)-1)Description
TRUEnever evaluated
FALSEnever evaluated
extra->maxh != ((1<<24)-1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1537 extra->topextra->window->setMaximumSize(QSize(extra->maxw, extra->maxh));
never executed: extra->topextra->window->setMaximumSize(QSize(extra->maxw, extra->maxh));
0
1538 if (extra->topextra->opacity != 255 && q->isWindow())
extra->topextr...opacity != 255Description
TRUEnever evaluated
FALSEnever evaluated
q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
1539 extra->topextra->window->setOpacity(qreal(extra->topextra->opacity) / qreal(255));
never executed: extra->topextra->window->setOpacity(qreal(extra->topextra->opacity) / qreal(255));
0
1540#ifdef Q_OS_WIN-
1541 // Pass on native parent handle for Widget embedded into Active X.-
1542 const QVariant activeXNativeParentHandle = q->property(activeXNativeParentHandleProperty);-
1543 if (activeXNativeParentHandle.isValid())-
1544 extra->topextra->window->setProperty(activeXNativeParentHandleProperty, activeXNativeParentHandle);-
1545 if (q->inherits("QTipLabel") || q->inherits("QAlphaWidget"))-
1546 extra->topextra->window->setProperty("_q_windowsDropShadow", QVariant(true));-
1547#endif-
1548 }
never executed: end of block
0
1549-
1550}
never executed: end of block
0
1551-
1552/*!-
1553 Destroys the widget.-
1554-
1555 All this widget's children are deleted first. The application-
1556 exits if this widget is the main widget.-
1557*/-
1558-
1559QWidget::~QWidget()-
1560{-
1561 Q_D(QWidget);-
1562 d->data.in_destructor = true;-
1563-
1564#if defined (QT_CHECK_STATE)-
1565 if (Q_UNLIKELY(paintingActive()))-
1566 qWarning("QWidget: %s (%s) deleted while being painted", className(), name());-
1567#endif-
1568-
1569#ifndef QT_NO_GESTURES-
1570 if (QGestureManager *manager = QGestureManager::instance()) {
QGestureManage...er::instance()Description
TRUEnever evaluated
FALSEnever evaluated
0
1571 // \forall Qt::GestureType type : ungrabGesture(type) (inlined)-
1572 for (auto it = d->gestureContext.keyBegin(), end = d->gestureContext.keyEnd(); it != end; ++it)
it != endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1573 manager->cleanupCachedGestures(this, *it);
never executed: manager->cleanupCachedGestures(this, *it);
0
1574 }
never executed: end of block
0
1575 d->gestureContext.clear();-
1576#endif-
1577-
1578 // force acceptDrops false before winId is destroyed.-
1579 d->registerDropSite(false);-
1580-
1581#ifndef QT_NO_ACTION-
1582 // remove all actions from this widget-
1583 for (int i = 0; i < d->actions.size(); ++i) {
i < d->actions.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1584 QActionPrivate *apriv = d->actions.at(i)->d_func();-
1585 apriv->widgets.removeAll(this);-
1586 }
never executed: end of block
0
1587 d->actions.clear();-
1588#endif-
1589-
1590#ifndef QT_NO_SHORTCUT-
1591 // Remove all shortcuts grabbed by this-
1592 // widget, unless application is closing-
1593 if (!QApplicationPrivate::is_app_closing && testAttribute(Qt::WA_GrabbedShortcut))
!QApplicationP...is_app_closingDescription
TRUEnever evaluated
FALSEnever evaluated
testAttribute(...abbedShortcut)Description
TRUEnever evaluated
FALSEnever evaluated
0
1594 qApp->d_func()->shortcutMap.removeShortcut(0, this, QKeySequence());
never executed: (static_cast<QApplication *>(QCoreApplication::instance()))->d_func()->shortcutMap.removeShortcut(0, this, QKeySequence());
0
1595#endif-
1596-
1597 // delete layout while we still are a valid widget-
1598 delete d->layout;-
1599 d->layout = 0;-
1600 // Remove myself from focus list-
1601-
1602 Q_ASSERT(d->focus_next->d_func()->focus_prev == this);-
1603 Q_ASSERT(d->focus_prev->d_func()->focus_next == this);-
1604-
1605 if (d->focus_next != this) {
d->focus_next != thisDescription
TRUEnever evaluated
FALSEnever evaluated
0
1606 d->focus_next->d_func()->focus_prev = d->focus_prev;-
1607 d->focus_prev->d_func()->focus_next = d->focus_next;-
1608 d->focus_next = d->focus_prev = 0;-
1609 }
never executed: end of block
0
1610-
1611-
1612 QT_TRY {-
1613#ifndef QT_NO_GRAPHICSVIEW-
1614 const QWidget* w = this;-
1615 while (w->d_func()->extra && w->d_func()->extra->focus_proxy)
w->d_func()->extraDescription
TRUEnever evaluated
FALSEnever evaluated
w->d_func()->e...a->focus_proxyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1616 w = w->d_func()->extra->focus_proxy;
never executed: w = w->d_func()->extra->focus_proxy;
0
1617 QWidget *window = w->window();-
1618 QWExtra *e = window ? window->d_func()->extra : 0;
windowDescription
TRUEnever evaluated
FALSEnever evaluated
0
1619 if (!e || !e->proxyWidget || (w->parentWidget() && w->parentWidget()->d_func()->focus_child == this))
!eDescription
TRUEnever evaluated
FALSEnever evaluated
!e->proxyWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
w->parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
w->parentWidge..._child == thisDescription
TRUEnever evaluated
FALSEnever evaluated
0
1620#endif-
1621 clearFocus();
never executed: clearFocus();
0
1622 } QT_CATCH(...) {
never executed: end of block
dead code: { }
-
1623 // swallow this problem because we are in a destructor
dead code: { }
-
1624 }
dead code: { }
-
1625-
1626 d->setDirtyOpaqueRegion();-
1627-
1628 if (isWindow() && isVisible() && internalWinId()) {
isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
internalWinId()Description
TRUEnever evaluated
FALSEnever evaluated
0
1629 QT_TRY {-
1630 d->close_helper(QWidgetPrivate::CloseNoEvent);-
1631 } QT_CATCH(...) {
never executed: end of block
dead code: { if (true) { hide(); } else { } }
-
1632 // if we're out of memory, at least hide the window.
dead code: { if (true) { hide(); } else { } }
-
1633 QT_TRY {
dead code: { if (true) { hide(); } else { } }
-
1634 hide();
dead code: { if (true) { hide(); } else { } }
-
1635 } QT_CATCH(...) {
dead code: { if (true) { hide(); } else { } }
dead code: { }
-
1636 // and if that also doesn't work, then give up
dead code: { if (true) { hide(); } else { } }
dead code: { }
-
1637 }
dead code: { if (true) { hide(); } else { } }
dead code: { }
-
1638 }
dead code: { if (true) { hide(); } else { } }
-
1639 }-
1640-
1641#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11)|| defined(Q_DEAD_CODE_FROM_QT4_MAC)-
1642 else if (!internalWinId() && isVisible()) {-
1643 qApp->d_func()->sendSyntheticEnterLeave(this);-
1644 }-
1645#endif-
1646 else if (isVisible()) {
isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
1647 qApp->d_func()->sendSyntheticEnterLeave(this);-
1648 }
never executed: end of block
0
1649-
1650 if (QWidgetBackingStore *bs = d->maybeBackingStore()) {
QWidgetBacking...BackingStore()Description
TRUEnever evaluated
FALSEnever evaluated
0
1651 bs->removeDirtyWidget(this);-
1652 if (testAttribute(Qt::WA_StaticContents))
testAttribute(...taticContents)Description
TRUEnever evaluated
FALSEnever evaluated
0
1653 bs->removeStaticWidget(this);
never executed: bs->removeStaticWidget(this);
0
1654 }
never executed: end of block
0
1655-
1656 delete d->needsFlush;-
1657 d->needsFlush = 0;-
1658-
1659 // The next 20 lines are duplicated from QObject, but required here-
1660 // since QWidget deletes is children itself-
1661 bool blocked = d->blockSig;-
1662 d->blockSig = 0; // unblock signals so we always emit destroyed()-
1663-
1664 if (d->isSignalConnected(0)) {
d->isSignalConnected(0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1665 QT_TRY {-
1666 emit destroyed(this);-
1667 } QT_CATCH(...) {
never executed: end of block
dead code: { QMessageLogger(__FILE__, 1670, __PRETTY_FUNCTION__).warning("Detected an unexpected exception in ~QWidget while emitting destroyed()."); qt_noop(); }
-
1668 // all the signal/slots connections are still in place - if we don't
dead code: { QMessageLogger(__FILE__, 1670, __PRETTY_FUNCTION__).warning("Detected an unexpected exception in ~QWidget while emitting destroyed()."); qt_noop(); }
-
1669 // quit now, we will crash pretty soon.
dead code: { QMessageLogger(__FILE__, 1670, __PRETTY_FUNCTION__).warning("Detected an unexpected exception in ~QWidget while emitting destroyed()."); qt_noop(); }
-
1670 qWarning("Detected an unexpected exception in ~QWidget while emitting destroyed().");
dead code: { QMessageLogger(__FILE__, 1670, __PRETTY_FUNCTION__).warning("Detected an unexpected exception in ~QWidget while emitting destroyed()."); qt_noop(); }
-
1671 QT_RETHROW;
dead code: { QMessageLogger(__FILE__, 1670, __PRETTY_FUNCTION__).warning("Detected an unexpected exception in ~QWidget while emitting destroyed()."); qt_noop(); }
-
1672 }
dead code: { QMessageLogger(__FILE__, 1670, __PRETTY_FUNCTION__).warning("Detected an unexpected exception in ~QWidget while emitting destroyed()."); qt_noop(); }
-
1673 }-
1674-
1675 if (d->declarativeData) {
d->declarativeDataDescription
TRUEnever evaluated
FALSEnever evaluated
0
1676 if (static_cast<QAbstractDeclarativeDataImpl*>(d->declarativeData)->ownedByQml1) {
static_cast<QA...)->ownedByQml1Description
TRUEnever evaluated
FALSEnever evaluated
0
1677 if (QAbstractDeclarativeData::destroyed_qml1)
QAbstractDecla...destroyed_qml1Description
TRUEnever evaluated
FALSEnever evaluated
0
1678 QAbstractDeclarativeData::destroyed_qml1(d->declarativeData, this);
never executed: QAbstractDeclarativeData::destroyed_qml1(d->declarativeData, this);
0
1679 } else {
never executed: end of block
0
1680 if (QAbstractDeclarativeData::destroyed)
QAbstractDecla...ata::destroyedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1681 QAbstractDeclarativeData::destroyed(d->declarativeData, this);
never executed: QAbstractDeclarativeData::destroyed(d->declarativeData, this);
0
1682 }
never executed: end of block
0
1683 d->declarativeData = 0; // don't activate again in ~QObject-
1684 }
never executed: end of block
0
1685-
1686 d->blockSig = blocked;-
1687-
1688#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
1689 // QCocoaView holds a pointer back to this widget. Clear it now-
1690 // to make sure it's not followed later on. The lifetime of the-
1691 // QCocoaView might exceed the lifetime of this widget in cases-
1692 // where Cocoa itself holds references to it.-
1693 extern void qt_mac_clearCocoaViewQWidgetPointers(QWidget *);-
1694 qt_mac_clearCocoaViewQWidgetPointers(this);-
1695#endif-
1696-
1697 if (!d->children.isEmpty())
!d->children.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1698 d->deleteChildren();
never executed: d->deleteChildren();
0
1699-
1700 QApplication::removePostedEvents(this);-
1701-
1702 QT_TRY {-
1703 destroy(); // platform-dependent cleanup-
1704 } QT_CATCH(...) {
never executed: end of block
dead code: { }
-
1705 // if this fails we can't do anything about it but at least we are not allowed to throw.
dead code: { }
-
1706 }
dead code: { }
-
1707 --QWidgetPrivate::instanceCounter;-
1708-
1709 if (QWidgetPrivate::allWidgets) // might have been deleted by ~QApplication
QWidgetPrivate::allWidgetsDescription
TRUEnever evaluated
FALSEnever evaluated
0
1710 QWidgetPrivate::allWidgets->remove(this);
never executed: QWidgetPrivate::allWidgets->remove(this);
0
1711-
1712 QT_TRY {-
1713 QEvent e(QEvent::Destroy);-
1714 QCoreApplication::sendEvent(this, &e);-
1715 } QT_CATCH(const std::exception&) {
never executed: end of block
dead code: { }
-
1716 // if this fails we can't do anything about it but at least we are not allowed to throw.
dead code: { }
-
1717 }
dead code: { }
-
1718}-
1719-
1720int QWidgetPrivate::instanceCounter = 0; // Current number of widget instances-
1721int QWidgetPrivate::maxInstances = 0; // Maximum number of widget instances-
1722-
1723void QWidgetPrivate::setWinId(WId id) // set widget identifier-
1724{-
1725 Q_Q(QWidget);-
1726 // the user might create a widget with Qt::Desktop window-
1727 // attribute (or create another QDesktopWidget instance), which-
1728 // will have the same windowid (the root window id) as the-
1729 // qt_desktopWidget. We should not add the second desktop widget-
1730 // to the mapper.-
1731 bool userDesktopWidget = qt_desktopWidget != 0 && qt_desktopWidget != q && q->windowType() == Qt::Desktop;
qt_desktopWidget != 0Description
TRUEnever evaluated
FALSEnever evaluated
qt_desktopWidget != qDescription
TRUEnever evaluated
FALSEnever evaluated
q->windowType() == Qt::DesktopDescription
TRUEnever evaluated
FALSEnever evaluated
0
1732 if (mapper && data.winid && !userDesktopWidget) {
mapperDescription
TRUEnever evaluated
FALSEnever evaluated
data.winidDescription
TRUEnever evaluated
FALSEnever evaluated
!userDesktopWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1733 mapper->remove(data.winid);-
1734 }
never executed: end of block
0
1735-
1736 const WId oldWinId = data.winid;-
1737-
1738 data.winid = id;-
1739#if defined(Q_DEAD_CODE_FROM_QT4_X11)-
1740 hd = id; // X11: hd == ident-
1741#endif-
1742 if (mapper && id && !userDesktopWidget) {
mapperDescription
TRUEnever evaluated
FALSEnever evaluated
idDescription
TRUEnever evaluated
FALSEnever evaluated
!userDesktopWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1743 mapper->insert(data.winid, q);-
1744 }
never executed: end of block
0
1745-
1746 if(oldWinId != id) {
oldWinId != idDescription
TRUEnever evaluated
FALSEnever evaluated
0
1747 QEvent e(QEvent::WinIdChange);-
1748 QCoreApplication::sendEvent(q, &e);-
1749 }
never executed: end of block
0
1750}
never executed: end of block
0
1751-
1752void QWidgetPrivate::createTLExtra()-
1753{-
1754 if (!extra)
!extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
1755 createExtra();
never executed: createExtra();
0
1756 if (!extra->topextra) {
!extra->topextraDescription
TRUEnever evaluated
FALSEnever evaluated
0
1757 QTLWExtra* x = extra->topextra = new QTLWExtra;-
1758 x->icon = 0;-
1759 x->backingStore = 0;-
1760 x->sharedPainter = 0;-
1761 x->incw = x->inch = 0;-
1762 x->basew = x->baseh = 0;-
1763 x->frameStrut.setCoords(0, 0, 0, 0);-
1764 x->normalGeometry = QRect(0,0,-1,-1);-
1765 x->savedFlags = 0;-
1766 x->opacity = 255;-
1767 x->posIncludesFrame = 0;-
1768 x->sizeAdjusted = false;-
1769 x->inTopLevelResize = false;-
1770 x->inRepaint = false;-
1771 x->embedded = 0;-
1772 x->window = 0;-
1773 x->shareContext = 0;-
1774 x->initialScreenIndex = -1;-
1775#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
1776 x->wasMaximized = false;-
1777#endif // Q_DEAD_CODE_FROM_QT4_MAC-
1778#ifdef QWIDGET_EXTRA_DEBUG-
1779 static int count = 0;-
1780 qDebug() << "tlextra" << ++count;-
1781#endif-
1782 }
never executed: end of block
0
1783}
never executed: end of block
0
1784-
1785/*!-
1786 \internal-
1787 Creates the widget extra data.-
1788*/-
1789-
1790void QWidgetPrivate::createExtra()-
1791{-
1792 if (!extra) { // if not exists
!extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
1793 extra = new QWExtra;-
1794 extra->glContext = 0;-
1795 extra->topextra = 0;-
1796#ifndef QT_NO_GRAPHICSVIEW-
1797 extra->proxyWidget = 0;-
1798#endif-
1799#ifndef QT_NO_CURSOR-
1800 extra->curs = 0;-
1801#endif-
1802 extra->minw = 0;-
1803 extra->minh = 0;-
1804 extra->maxw = QWIDGETSIZE_MAX;-
1805 extra->maxh = QWIDGETSIZE_MAX;-
1806 extra->customDpiX = 0;-
1807 extra->customDpiY = 0;-
1808 extra->explicitMinSize = 0;-
1809 extra->explicitMaxSize = 0;-
1810 extra->autoFillBackground = 0;-
1811 extra->nativeChildrenForced = 0;-
1812 extra->inRenderWithPainter = 0;-
1813 extra->hasWindowContainer = false;-
1814 extra->hasMask = 0;-
1815 createSysExtra();-
1816#ifdef QWIDGET_EXTRA_DEBUG-
1817 static int count = 0;-
1818 qDebug() << "extra" << ++count;-
1819#endif-
1820 }
never executed: end of block
0
1821}
never executed: end of block
0
1822-
1823void QWidgetPrivate::createSysExtra()-
1824{-
1825}-
1826-
1827/*!-
1828 \internal-
1829 Deletes the widget extra data.-
1830*/-
1831-
1832void QWidgetPrivate::deleteExtra()-
1833{-
1834 if (extra) { // if exists
extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
1835#ifndef QT_NO_CURSOR-
1836 delete extra->curs;-
1837#endif-
1838 deleteSysExtra();-
1839#ifndef QT_NO_STYLE_STYLESHEET-
1840 // dereference the stylesheet style-
1841 if (QStyleSheetStyle *proxy = qobject_cast<QStyleSheetStyle *>(extra->style))
QStyleSheetSty...(extra->style)Description
TRUEnever evaluated
FALSEnever evaluated
0
1842 proxy->deref();
never executed: proxy->deref();
0
1843#endif-
1844 if (extra->topextra) {
extra->topextraDescription
TRUEnever evaluated
FALSEnever evaluated
0
1845 deleteTLSysExtra();-
1846 // extra->topextra->backingStore destroyed in QWidgetPrivate::deleteTLSysExtra()-
1847 delete extra->topextra->icon;-
1848 delete extra->topextra;-
1849 }
never executed: end of block
0
1850 delete extra;-
1851 // extra->xic destroyed in QWidget::destroy()-
1852 extra = 0;-
1853 }
never executed: end of block
0
1854}
never executed: end of block
0
1855-
1856void QWidgetPrivate::deleteSysExtra()-
1857{-
1858}-
1859-
1860static void deleteBackingStore(QWidgetPrivate *d)-
1861{-
1862 QTLWExtra *topData = d->topData();-
1863-
1864 // The context must be current when destroying the backing store as it may attempt to-
1865 // release resources like textures and shader programs. The window may not be suitable-
1866 // anymore as there will often not be a platform window underneath at this stage. Fall-
1867 // back to a QOffscreenSurface in this case.-
1868 QScopedPointer<QOffscreenSurface> tempSurface;-
1869#ifndef QT_NO_OPENGL-
1870 if (d->textureChildSeen && topData->shareContext) {
d->textureChildSeenDescription
TRUEnever evaluated
FALSEnever evaluated
topData->shareContextDescription
TRUEnever evaluated
FALSEnever evaluated
0
1871 if (topData->window->handle()) {
topData->window->handle()Description
TRUEnever evaluated
FALSEnever evaluated
0
1872 topData->shareContext->makeCurrent(topData->window);-
1873 } else {
never executed: end of block
0
1874 tempSurface.reset(new QOffscreenSurface);-
1875 tempSurface->setFormat(topData->shareContext->format());-
1876 tempSurface->create();-
1877 topData->shareContext->makeCurrent(tempSurface.data());-
1878 }
never executed: end of block
0
1879 }-
1880#endif-
1881-
1882 delete topData->backingStore;-
1883 topData->backingStore = 0;-
1884-
1885#ifndef QT_NO_OPENGL-
1886 if (d->textureChildSeen && topData->shareContext)
d->textureChildSeenDescription
TRUEnever evaluated
FALSEnever evaluated
topData->shareContextDescription
TRUEnever evaluated
FALSEnever evaluated
0
1887 topData->shareContext->doneCurrent();
never executed: topData->shareContext->doneCurrent();
0
1888#endif-
1889}
never executed: end of block
0
1890-
1891void QWidgetPrivate::deleteTLSysExtra()-
1892{-
1893 if (extra && extra->topextra) {
extraDescription
TRUEnever evaluated
FALSEnever evaluated
extra->topextraDescription
TRUEnever evaluated
FALSEnever evaluated
0
1894 //the qplatformbackingstore may hold a reference to the window, so the backingstore-
1895 //needs to be deleted first. If the backingstore holds GL resources, we need to-
1896 // make the context current here. This is taken care of by deleteBackingStore().-
1897-
1898 extra->topextra->backingStoreTracker.destroy();-
1899 deleteBackingStore(this);-
1900#ifndef QT_NO_OPENGL-
1901 qDeleteAll(extra->topextra->widgetTextures);-
1902 extra->topextra->widgetTextures.clear();-
1903 delete extra->topextra->shareContext;-
1904 extra->topextra->shareContext = 0;-
1905#endif-
1906-
1907 //the toplevel might have a context with a "qglcontext associated with it. We need to-
1908 //delete the qglcontext before we delete the qplatformopenglcontext.-
1909 //One unfortunate thing about this is that we potentially create a glContext just to-
1910 //delete it straight afterwards.-
1911 if (extra->topextra->window) {
extra->topextra->windowDescription
TRUEnever evaluated
FALSEnever evaluated
0
1912 extra->topextra->window->destroy();-
1913 }
never executed: end of block
0
1914 delete extra->topextra->window;-
1915 extra->topextra->window = 0;-
1916-
1917 }
never executed: end of block
0
1918}
never executed: end of block
0
1919-
1920/*-
1921 Returns \c true if there are widgets above this which overlap with-
1922 \a rect, which is in parent's coordinate system (same as crect).-
1923*/-
1924-
1925bool QWidgetPrivate::isOverlapped(const QRect &rect) const-
1926{-
1927 Q_Q(const QWidget);-
1928-
1929 const QWidget *w = q;-
1930 QRect r = rect;-
1931 while (w) {
wDescription
TRUEnever evaluated
FALSEnever evaluated
0
1932 if (w->isWindow())
w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
1933 return false;
never executed: return false;
0
1934 QWidgetPrivate *pd = w->parentWidget()->d_func();-
1935 bool above = false;-
1936 for (int i = 0; i < pd->children.size(); ++i) {
i < pd->children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1937 QWidget *sibling = qobject_cast<QWidget *>(pd->children.at(i));-
1938 if (!sibling || !sibling->isVisible() || sibling->isWindow())
!siblingDescription
TRUEnever evaluated
FALSEnever evaluated
!sibling->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
sibling->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
1939 continue;
never executed: continue;
0
1940 if (!above) {
!aboveDescription
TRUEnever evaluated
FALSEnever evaluated
0
1941 above = (sibling == w);-
1942 continue;
never executed: continue;
0
1943 }-
1944-
1945 if (qRectIntersects(sibling->d_func()->effectiveRectFor(sibling->data->crect), r)) {
qRectIntersect...ta->crect), r)Description
TRUEnever evaluated
FALSEnever evaluated
0
1946 const QWExtra *siblingExtra = sibling->d_func()->extra;-
1947 if (siblingExtra && siblingExtra->hasMask && !sibling->d_func()->graphicsEffect
siblingExtraDescription
TRUEnever evaluated
FALSEnever evaluated
siblingExtra->hasMaskDescription
TRUEnever evaluated
FALSEnever evaluated
!sibling->d_fu...graphicsEffectDescription
TRUEnever evaluated
FALSEnever evaluated
0
1948 && !siblingExtra->mask.translated(sibling->data->crect.topLeft()).intersects(r)) {
!siblingExtra-....intersects(r)Description
TRUEnever evaluated
FALSEnever evaluated
0
1949 continue;
never executed: continue;
0
1950 }-
1951 return true;
never executed: return true;
0
1952 }-
1953 }
never executed: end of block
0
1954 w = w->parentWidget();-
1955 r.translate(pd->data.crect.topLeft());-
1956 }
never executed: end of block
0
1957 return false;
never executed: return false;
0
1958}-
1959-
1960void QWidgetPrivate::syncBackingStore()-
1961{-
1962 if (paintOnScreen()) {
paintOnScreen()Description
TRUEnever evaluated
FALSEnever evaluated
0
1963 repaint_sys(dirty);-
1964 dirty = QRegion();-
1965 } else if (QWidgetBackingStore *bs = maybeBackingStore()) {
never executed: end of block
QWidgetBacking...BackingStore()Description
TRUEnever evaluated
FALSEnever evaluated
0
1966 bs->sync();-
1967 }
never executed: end of block
0
1968}
never executed: end of block
0
1969-
1970void QWidgetPrivate::syncBackingStore(const QRegion &region)-
1971{-
1972 if (paintOnScreen())
paintOnScreen()Description
TRUEnever evaluated
FALSEnever evaluated
0
1973 repaint_sys(region);
never executed: repaint_sys(region);
0
1974 else if (QWidgetBackingStore *bs = maybeBackingStore()) {
QWidgetBacking...BackingStore()Description
TRUEnever evaluated
FALSEnever evaluated
0
1975 bs->sync(q_func(), region);-
1976 }
never executed: end of block
0
1977}
never executed: end of block
0
1978-
1979void QWidgetPrivate::setUpdatesEnabled_helper(bool enable)-
1980{-
1981 Q_Q(QWidget);-
1982-
1983 if (enable && !q->isWindow() && q->parentWidget() && !q->parentWidget()->updatesEnabled())
enableDescription
TRUEnever evaluated
FALSEnever evaluated
!q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
q->parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
!q->parentWidg...datesEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
1984 return; // nothing we can do
never executed: return;
0
1985-
1986 if (enable != q->testAttribute(Qt::WA_UpdatesDisabled))
enable != q->t...datesDisabled)Description
TRUEnever evaluated
FALSEnever evaluated
0
1987 return; // nothing to do
never executed: return;
0
1988-
1989 q->setAttribute(Qt::WA_UpdatesDisabled, !enable);-
1990 if (enable)
enableDescription
TRUEnever evaluated
FALSEnever evaluated
0
1991 q->update();
never executed: q->update();
0
1992-
1993 Qt::WidgetAttribute attribute = enable ? Qt::WA_ForceUpdatesDisabled : Qt::WA_UpdatesDisabled;
enableDescription
TRUEnever evaluated
FALSEnever evaluated
0
1994 for (int i = 0; i < children.size(); ++i) {
i < children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1995 QWidget *w = qobject_cast<QWidget *>(children.at(i));-
1996 if (w && !w->isWindow() && !w->testAttribute(attribute))
wDescription
TRUEnever evaluated
FALSEnever evaluated
!w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!w->testAttribute(attribute)Description
TRUEnever evaluated
FALSEnever evaluated
0
1997 w->d_func()->setUpdatesEnabled_helper(enable);
never executed: w->d_func()->setUpdatesEnabled_helper(enable);
0
1998 }
never executed: end of block
0
1999}
never executed: end of block
0
2000-
2001/*!-
2002 \internal-
2003-
2004 Propagate this widget's palette to all children, except style sheet-
2005 widgets, and windows that don't enable window propagation (palettes don't-
2006 normally propagate to windows).-
2007*/-
2008void QWidgetPrivate::propagatePaletteChange()-
2009{-
2010 Q_Q(QWidget);-
2011 // Propagate a new inherited mask to all children.-
2012#ifndef QT_NO_GRAPHICSVIEW-
2013 if (!q->parentWidget() && extra && extra->proxyWidget) {
!q->parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
extraDescription
TRUEnever evaluated
FALSEnever evaluated
extra->proxyWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
2014 QGraphicsProxyWidget *p = extra->proxyWidget;-
2015 inheritedPaletteResolveMask = p->d_func()->inheritedPaletteResolveMask | p->palette().resolve();-
2016 } else
never executed: end of block
0
2017#endif //QT_NO_GRAPHICSVIEW-
2018 if (q->isWindow() && !q->testAttribute(Qt::WA_WindowPropagation)) {
q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
!q->testAttrib...owPropagation)Description
TRUEnever evaluated
FALSEnever evaluated
0
2019 inheritedPaletteResolveMask = 0;-
2020 }
never executed: end of block
0
2021 int mask = data.pal.resolve() | inheritedPaletteResolveMask;-
2022-
2023 const bool useStyleSheetPropagationInWidgetStyles =-
2024 QCoreApplication::testAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles);-
2025-
2026 QEvent pc(QEvent::PaletteChange);-
2027 QApplication::sendEvent(q, &pc);-
2028 for (int i = 0; i < children.size(); ++i) {
i < children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
2029 QWidget *w = qobject_cast<QWidget*>(children.at(i));-
2030 if (w && (!w->testAttribute(Qt::WA_StyleSheet) || useStyleSheetPropagationInWidgetStyles)
wDescription
TRUEnever evaluated
FALSEnever evaluated
!w->testAttrib...WA_StyleSheet)Description
TRUEnever evaluated
FALSEnever evaluated
useStyleSheetP...InWidgetStylesDescription
TRUEnever evaluated
FALSEnever evaluated
0
2031 && (!w->isWindow() || w->testAttribute(Qt::WA_WindowPropagation))) {
!w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
w->testAttribu...owPropagation)Description
TRUEnever evaluated
FALSEnever evaluated
0
2032 QWidgetPrivate *wd = w->d_func();-
2033 wd->inheritedPaletteResolveMask = mask;-
2034 wd->resolvePalette();-
2035 }
never executed: end of block
0
2036 }
never executed: end of block
0
2037}
never executed: end of block
0
2038-
2039/*-
2040 Returns the widget's clipping rectangle.-
2041*/-
2042QRect QWidgetPrivate::clipRect() const-
2043{-
2044 Q_Q(const QWidget);-
2045 const QWidget * w = q;-
2046 if (!w->isVisible())
!w->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
2047 return QRect();
never executed: return QRect();
0
2048 QRect r = effectiveRectFor(q->rect());-
2049 int ox = 0;-
2050 int oy = 0;-
2051 while (w
wDescription
TRUEnever evaluated
FALSEnever evaluated
0
2052 && w->isVisible()
w->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
2053 && !w->isWindow()
!w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2054 && w->parentWidget()) {
w->parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
2055 ox -= w->x();-
2056 oy -= w->y();-
2057 w = w->parentWidget();-
2058 r &= QRect(ox, oy, w->width(), w->height());-
2059 }
never executed: end of block
0
2060 return r;
never executed: return r;
0
2061}-
2062-
2063/*-
2064 Returns the widget's clipping region (without siblings).-
2065*/-
2066QRegion QWidgetPrivate::clipRegion() const-
2067{-
2068 Q_Q(const QWidget);-
2069 if (!q->isVisible())
!q->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
2070 return QRegion();
never executed: return QRegion();
0
2071 QRegion r(q->rect());-
2072 const QWidget * w = q;-
2073 const QWidget *ignoreUpTo;-
2074 int ox = 0;-
2075 int oy = 0;-
2076 while (w
wDescription
TRUEnever evaluated
FALSEnever evaluated
0
2077 && w->isVisible()
w->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
2078 && !w->isWindow()
!w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2079 && w->parentWidget()) {
w->parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
2080 ox -= w->x();-
2081 oy -= w->y();-
2082 ignoreUpTo = w;-
2083 w = w->parentWidget();-
2084 r &= QRegion(ox, oy, w->width(), w->height());-
2085-
2086 int i = 0;-
2087 while(w->d_func()->children.at(i++) != static_cast<const QObject *>(ignoreUpTo))
w->d_func()->c...*>(ignoreUpTo)Description
TRUEnever evaluated
FALSEnever evaluated
0
2088 ;
never executed: ;
0
2089 for ( ; i < w->d_func()->children.size(); ++i) {
i < w->d_func(...hildren.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
2090 if(QWidget *sibling = qobject_cast<QWidget *>(w->d_func()->children.at(i))) {
QWidget *sibli...hildren.at(i))Description
TRUEnever evaluated
FALSEnever evaluated
0
2091 if(sibling->isVisible() && !sibling->isWindow()) {
sibling->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
!sibling->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2092 QRect siblingRect(ox+sibling->x(), oy+sibling->y(),-
2093 sibling->width(), sibling->height());-
2094 if (qRectIntersects(siblingRect, q->rect()))
qRectIntersect...ct, q->rect())Description
TRUEnever evaluated
FALSEnever evaluated
0
2095 r -= QRegion(siblingRect);
never executed: r -= QRegion(siblingRect);
0
2096 }
never executed: end of block
0
2097 }
never executed: end of block
0
2098 }
never executed: end of block
0
2099 }
never executed: end of block
0
2100 return r;
never executed: return r;
0
2101}-
2102-
2103void QWidgetPrivate::setSystemClip(QPaintDevice *paintDevice, const QRegion &region)-
2104{-
2105// Transform the system clip region from device-independent pixels to device pixels-
2106 QPaintEngine *paintEngine = paintDevice->paintEngine();-
2107 QTransform scaleTransform;-
2108 const qreal devicePixelRatio = paintDevice->devicePixelRatioF();-
2109 scaleTransform.scale(devicePixelRatio, devicePixelRatio);-
2110 paintEngine->d_func()->systemClip = scaleTransform.map(region);-
2111}
never executed: end of block
0
2112-
2113#ifndef QT_NO_GRAPHICSEFFECT-
2114void QWidgetPrivate::invalidateGraphicsEffectsRecursively()-
2115{-
2116 Q_Q(QWidget);-
2117 QWidget *w = q;-
2118 do {-
2119 if (w->graphicsEffect()) {
w->graphicsEffect()Description
TRUEnever evaluated
FALSEnever evaluated
0
2120 QWidgetEffectSourcePrivate *sourced =-
2121 static_cast<QWidgetEffectSourcePrivate *>(w->graphicsEffect()->source()->d_func());-
2122 if (!sourced->updateDueToGraphicsEffect)
!sourced->upda...GraphicsEffectDescription
TRUEnever evaluated
FALSEnever evaluated
0
2123 w->graphicsEffect()->source()->d_func()->invalidateCache();
never executed: w->graphicsEffect()->source()->d_func()->invalidateCache();
0
2124 }
never executed: end of block
0
2125 w = w->parentWidget();-
2126 } while (w);
never executed: end of block
wDescription
TRUEnever evaluated
FALSEnever evaluated
0
2127}
never executed: end of block
0
2128#endif //QT_NO_GRAPHICSEFFECT-
2129-
2130void QWidgetPrivate::setDirtyOpaqueRegion()-
2131{-
2132 Q_Q(QWidget);-
2133-
2134 dirtyOpaqueChildren = true;-
2135-
2136#ifndef QT_NO_GRAPHICSEFFECT-
2137 invalidateGraphicsEffectsRecursively();-
2138#endif //QT_NO_GRAPHICSEFFECT-
2139-
2140 if (q->isWindow())
q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2141 return;
never executed: return;
0
2142-
2143 QWidget *parent = q->parentWidget();-
2144 if (!parent)
!parentDescription
TRUEnever evaluated
FALSEnever evaluated
0
2145 return;
never executed: return;
0
2146-
2147 // TODO: instead of setting dirtyflag, manipulate the dirtyregion directly?-
2148 QWidgetPrivate *pd = parent->d_func();-
2149 if (!pd->dirtyOpaqueChildren)
!pd->dirtyOpaqueChildrenDescription
TRUEnever evaluated
FALSEnever evaluated
0
2150 pd->setDirtyOpaqueRegion();
never executed: pd->setDirtyOpaqueRegion();
0
2151}
never executed: end of block
0
2152-
2153const QRegion &QWidgetPrivate::getOpaqueChildren() const-
2154{-
2155 if (!dirtyOpaqueChildren)
!dirtyOpaqueChildrenDescription
TRUEnever evaluated
FALSEnever evaluated
0
2156 return opaqueChildren;
never executed: return opaqueChildren;
0
2157-
2158 QWidgetPrivate *that = const_cast<QWidgetPrivate*>(this);-
2159 that->opaqueChildren = QRegion();-
2160-
2161 for (int i = 0; i < children.size(); ++i) {
i < children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
2162 QWidget *child = qobject_cast<QWidget *>(children.at(i));-
2163 if (!child || !child->isVisible() || child->isWindow())
!childDescription
TRUEnever evaluated
FALSEnever evaluated
!child->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
child->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2164 continue;
never executed: continue;
0
2165-
2166 const QPoint offset = child->geometry().topLeft();-
2167 QWidgetPrivate *childd = child->d_func();-
2168 QRegion r = childd->isOpaque ? child->rect() : childd->getOpaqueChildren();
childd->isOpaqueDescription
TRUEnever evaluated
FALSEnever evaluated
0
2169 if (childd->extra && childd->extra->hasMask)
childd->extraDescription
TRUEnever evaluated
FALSEnever evaluated
childd->extra->hasMaskDescription
TRUEnever evaluated
FALSEnever evaluated
0
2170 r &= childd->extra->mask;
never executed: r &= childd->extra->mask;
0
2171 if (r.isEmpty())
r.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2172 continue;
never executed: continue;
0
2173 r.translate(offset);-
2174 that->opaqueChildren += r;-
2175 }
never executed: end of block
0
2176-
2177 that->opaqueChildren &= q_func()->rect();-
2178 that->dirtyOpaqueChildren = false;-
2179-
2180 return that->opaqueChildren;
never executed: return that->opaqueChildren;
0
2181}-
2182-
2183void QWidgetPrivate::subtractOpaqueChildren(QRegion &source, const QRect &clipRect) const-
2184{-
2185 if (children.isEmpty() || clipRect.isEmpty())
children.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
clipRect.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2186 return;
never executed: return;
0
2187-
2188 const QRegion &r = getOpaqueChildren();-
2189 if (!r.isEmpty())
!r.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2190 source -= (r & clipRect);
never executed: source -= (r & clipRect);
0
2191}
never executed: end of block
0
2192-
2193//subtract any relatives that are higher up than me --- this is too expensive !!!-
2194void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirtySiblingsAbove,-
2195 bool alsoNonOpaque) const-
2196{-
2197 Q_Q(const QWidget);-
2198 static int disableSubtractOpaqueSiblings = qEnvironmentVariableIntValue("QT_NO_SUBTRACTOPAQUESIBLINGS");-
2199 if (disableSubtractOpaqueSiblings || q->isWindow())
disableSubtractOpaqueSiblingsDescription
TRUEnever evaluated
FALSEnever evaluated
q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2200 return;
never executed: return;
0
2201-
2202#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
2203 if (q->d_func()->isInUnifiedToolbar)-
2204 return;-
2205#endif // Q_DEAD_CODE_FROM_QT4_MAC-
2206-
2207 QRect clipBoundingRect;-
2208 bool dirtyClipBoundingRect = true;-
2209-
2210 QRegion parentClip;-
2211 bool dirtyParentClip = true;-
2212-
2213 QPoint parentOffset = data.crect.topLeft();-
2214-
2215 const QWidget *w = q;-
2216-
2217 while (w) {
wDescription
TRUEnever evaluated
FALSEnever evaluated
0
2218 if (w->isWindow())
w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2219 break;
never executed: break;
0
2220 QWidgetPrivate *pd = w->parentWidget()->d_func();-
2221 const int myIndex = pd->children.indexOf(const_cast<QWidget *>(w));-
2222 const QRect widgetGeometry = w->d_func()->effectiveRectFor(w->data->crect);-
2223 for (int i = myIndex + 1; i < pd->children.size(); ++i) {
i < pd->children.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
2224 QWidget *sibling = qobject_cast<QWidget *>(pd->children.at(i));-
2225 if (!sibling || !sibling->isVisible() || sibling->isWindow())
!siblingDescription
TRUEnever evaluated
FALSEnever evaluated
!sibling->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
sibling->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
2226 continue;
never executed: continue;
0
2227-
2228 const QRect siblingGeometry = sibling->d_func()->effectiveRectFor(sibling->data->crect);-
2229 if (!qRectIntersects(siblingGeometry, widgetGeometry))
!qRectIntersec...idgetGeometry)Description
TRUEnever evaluated
FALSEnever evaluated
0
2230 continue;
never executed: continue;
0
2231-
2232 if (dirtyClipBoundingRect) {
dirtyClipBoundingRectDescription
TRUEnever evaluated
FALSEnever evaluated
0
2233 clipBoundingRect = sourceRegion.boundingRect();-
2234 dirtyClipBoundingRect = false;-
2235 }
never executed: end of block
0
2236-
2237 if (!qRectIntersects(siblingGeometry, clipBoundingRect.translated(parentOffset)))
!qRectIntersec...parentOffset))Description
TRUEnever evaluated
FALSEnever evaluated
0
2238 continue;
never executed: continue;
0
2239-
2240 if (dirtyParentClip) {
dirtyParentClipDescription
TRUEnever evaluated
FALSEnever evaluated
0
2241 parentClip = sourceRegion.translated(parentOffset);-
2242 dirtyParentClip = false;-
2243 }
never executed: end of block
0
2244-
2245 const QPoint siblingPos(sibling->data->crect.topLeft());-
2246 const QRect siblingClipRect(sibling->d_func()->clipRect());-
2247 QRegion siblingDirty(parentClip);-
2248 siblingDirty &= (siblingClipRect.translated(siblingPos));-
2249 const bool hasMask = sibling->d_func()->extra && sibling->d_func()->extra->hasMask
sibling->d_func()->extraDescription
TRUEnever evaluated
FALSEnever evaluated
sibling->d_fun...extra->hasMaskDescription
TRUEnever evaluated
FALSEnever evaluated
0
2250 && !sibling->d_func()->graphicsEffect;
!sibling->d_fu...graphicsEffectDescription
TRUEnever evaluated
FALSEnever evaluated
0
2251 if (hasMask)
hasMaskDescription
TRUEnever evaluated
FALSEnever evaluated
0
2252 siblingDirty &= sibling->d_func()->extra->mask.translated(siblingPos);
never executed: siblingDirty &= sibling->d_func()->extra->mask.translated(siblingPos);
0
2253 if (siblingDirty.isEmpty())
siblingDirty.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2254 continue;
never executed: continue;
0
2255-
2256 if (sibling->d_func()->isOpaque || alsoNonOpaque) {
sibling->d_func()->isOpaqueDescription
TRUEnever evaluated
FALSEnever evaluated
alsoNonOpaqueDescription
TRUEnever evaluated
FALSEnever evaluated
0
2257 if (hasMask) {
hasMaskDescription
TRUEnever evaluated
FALSEnever evaluated
0
2258 siblingDirty.translate(-parentOffset);-
2259 sourceRegion -= siblingDirty;-
2260 } else {
never executed: end of block
0
2261 sourceRegion -= siblingGeometry.translated(-parentOffset);-
2262 }
never executed: end of block
0
2263 } else {-
2264 if (hasDirtySiblingsAbove)
hasDirtySiblingsAboveDescription
TRUEnever evaluated
FALSEnever evaluated
0
2265 *hasDirtySiblingsAbove = true;
never executed: *hasDirtySiblingsAbove = true;
0
2266 if (sibling->d_func()->children.isEmpty())
sibling->d_fun...dren.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2267 continue;
never executed: continue;
0
2268 QRegion opaqueSiblingChildren(sibling->d_func()->getOpaqueChildren());-
2269 opaqueSiblingChildren.translate(-parentOffset + siblingPos);-
2270 sourceRegion -= opaqueSiblingChildren;-
2271 }
never executed: end of block
0
2272 if (sourceRegion.isEmpty())
sourceRegion.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2273 return;
never executed: return;
0
2274-
2275 dirtyClipBoundingRect = true;-
2276 dirtyParentClip = true;-
2277 }
never executed: end of block
0
2278-
2279 w = w->parentWidget();-
2280 parentOffset += pd->data.crect.topLeft();-
2281 dirtyParentClip = true;-
2282 }
never executed: end of block
0
2283}
never executed: end of block
0
2284-
2285void QWidgetPrivate::clipToEffectiveMask(QRegion &region) const-
2286{-
2287 Q_Q(const QWidget);-
2288-
2289 const QWidget *w = q;-
2290 QPoint offset;-
2291-
2292#ifndef QT_NO_GRAPHICSEFFECT-
2293 if (graphicsEffect) {
graphicsEffectDescription
TRUEnever evaluated
FALSEnever evaluated
0
2294 w = q->parentWidget();-
2295 offset -= data.crect.topLeft();-
2296 }
never executed: end of block
0
2297#endif //QT_NO_GRAPHICSEFFECT-
2298-
2299 while (w) {
wDescription
TRUEnever evaluated
FALSEnever evaluated