qdesktopwidget.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/kernel/qdesktopwidget.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5QDesktopScreenWidget::QDesktopScreenWidget(QScreen *screen, const QRect &geometry)-
6 : QWidget(nullptr, Qt::Desktop), m_screen(screen)-
7{-
8 setVisible(false);-
9 if (QWindow *winHandle = windowHandle())-
10 winHandle->setScreen(screen);-
11 setScreenGeometry(geometry);-
12}-
13-
14void QDesktopScreenWidget::setScreenGeometry(const QRect &geometry)-
15{-
16 m_geometry = geometry;-
17 setGeometry(geometry);-
18}-
19-
20int QDesktopScreenWidget::screenNumber() const-
21{-
22 const QDesktopWidgetPrivate *desktopWidgetP-
23 = static_cast<const QDesktopWidgetPrivate *>(qt_widget_private(QApplication::desktop()));-
24 return desktopWidgetP->screens.indexOf(const_cast<QDesktopScreenWidget *>(this));-
25}-
26-
27const QRect QDesktopWidget::screenGeometry(const QWidget *widget) const-
28{-
29 if (!(__builtin_expect(!!(!
__builtin_expe...idget), false)Description
TRUEnever evaluated
FALSEnever evaluated
widget)), false)
__builtin_expe...idget), false)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
30 QMessageLogger(__FILE__, 7177, __PRETTY_FUNCTION__).warning("QDesktopWidget::screenGeometry(): Attempt "-
31 "to get the screen geometry of a null widget");-
32 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
33 }-
34 QRect rect = QWidgetPrivate::screenGeometry(widget);-
35 if (rect.isNull()
rect.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
36 return
never executed: return screenGeometry(screenNumber(widget));
screenGeometry(screenNumber(widget));
never executed: return screenGeometry(screenNumber(widget));
0
37 else return
never executed: return rect;
rect;
never executed: return rect;
0
38}-
39-
40const QRect QDesktopWidget::availableGeometry(const QWidget *widget) const-
41{-
42 if (!(__builtin_expect(!!(!
__builtin_expe...idget), false)Description
TRUEnever evaluated
FALSEnever evaluated
widget)), false)
__builtin_expe...idget), false)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
43 QMessageLogger(__FILE__, 8490, __PRETTY_FUNCTION__).warning("QDesktopWidget::availableGeometry(): Attempt "-
44 "to get the available geometry of a null widget");-
45 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
46 }-
47 QRect rect = QWidgetPrivate::screenGeometry(widget);-
48 if (rect.isNull()
rect.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
49 return
never executed: return availableGeometry(screenNumber(widget));
availableGeometry(screenNumber(widget));
never executed: return availableGeometry(screenNumber(widget));
0
50 else-
51 return
never executed: return rect;
rect;
never executed: return rect;
0
52}-
53-
54QDesktopScreenWidget *QDesktopWidgetPrivate::widgetForScreen(QScreen *qScreen) const-
55{-
56 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(screens)>::type> _container_((screens)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QDesktopScreenWidget *widget = *_container_.i; _container_.control; _container_.control = 0) {-
57 if (widget->screen() == qScreen)-
58 return widget;-
59 }-
60 return nullptr;-
61}-
62-
63void QDesktopWidgetPrivate::_q_updateScreens()-
64{-
65 QDesktopWidget * const q = q_func();-
66 const QList<QScreen *> screenList = QGuiApplication::screens();-
67 const int targetLength = screenList.length();-
68 bool screenCountChanged = false;-
69-
70-
71-
72-
73-
74 QList<QDesktopScreenWidget *> newScreens;-
75 QList<int> changedScreens;-
76 QRegion virtualGeometry;-
77-
78 for (int i = 0; i < targetLength; ++i) {-
79 QScreen *qScreen = screenList.at(i);-
80 const QRect screenGeometry = qScreen->geometry();-
81 QDesktopScreenWidget *screenWidget = widgetForScreen(qScreen);-
82 if (screenWidget) {-
83-
84 if (screenGeometry != screenWidget->screenGeometry()) {-
85 screenWidget->setScreenGeometry(screenGeometry);-
86 changedScreens.push_back(i);-
87 }-
88 } else {-
89-
90 screenWidget = new QDesktopScreenWidget(qScreen, screenGeometry);-
91 QObject::connect(qScreen, qFlagLocation("2""geometryChanged(QRect)" "\0" __FILE__ ":" "132""138"),-
92 q, qFlagLocation("1""_q_updateScreens()" "\0" __FILE__ ":" "133""139"), Qt::QueuedConnection);-
93 QObject::connect(qScreen, qFlagLocation("2""availableGeometryChanged(QRect)" "\0" __FILE__ ":" "134""140"),-
94 q, qFlagLocation("1""_q_availableGeometryChanged()" "\0" __FILE__ ":" "135""141"), Qt::QueuedConnection);-
95 QObject::connect(qScreen, qFlagLocation("2""destroyed()" "\0" __FILE__ ":" "136""142"),-
96 q, qFlagLocation("1""_q_updateScreens()" "\0" __FILE__ ":" "137""143"), Qt::QueuedConnection);-
97 screenCountChanged = true;-
98 }-
99-
100 newScreens.push_back(screenWidget);-
101 virtualGeometry += screenGeometry;-
102 }-
103-
104-
105 screens.swap(newScreens);-
106 ((!(screens.size() == targetLength)) ? qt_assert("screens.size() == targetLength",__FILE__,147153) : qt_noop());-
107 q->setGeometry(virtualGeometry.boundingRect());-
108-
109-
110 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(newScreens)>::type> _container_((newScreens)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QDesktopScreenWidget *screen = *_container_.i; _container_.control; _container_.control = 0) {-
111 if (!screens.contains(screen)) {-
112 delete screen;-
113 screenCountChanged = true;-
114 }-
115 }-
116-
117-
118 if (screenCountChanged) {-
119-
120-
121-
122 q->screenCountChanged(targetLength);-
123 }-
124 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(changedScreens)>::type> _container_((changedScreens)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (int changedScreen = *_container_.i; _container_.control; _container_.control = 0)-
125 q->resized(changedScreen);-
126}-
127-
128void QDesktopWidgetPrivate::_q_availableGeometryChanged()-
129{-
130 QDesktopWidget * const q = q_func();-
131 if (QScreen *screen = qobject_cast<QScreen *>(q->sender()))-
132 q->workAreaResized(QGuiApplication::screens().indexOf(screen));-
133}-
134-
135QDesktopWidget::QDesktopWidget()-
136 : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop)-
137{-
138 QDesktopWidgetPrivate * const d = d_func();-
139 setObjectName(QLatin1String("desktop"));-
140 d->_q_updateScreens();-
141 connect((static_cast<QApplication *>(QCoreApplication::instance())), qFlagLocation("2""screenAdded(QScreen*)" "\0" __FILE__ ":" "182""188"), this, qFlagLocation("1""_q_updateScreens()" "\0" __FILE__ ":" "182""188"));-
142 connect((static_cast<QApplication *>(QCoreApplication::instance())), qFlagLocation("2""primaryScreenChanged(QScreen*)" "\0" __FILE__ ":" "183""189"), this, qFlagLocation("2""primaryScreenChanged()" "\0" __FILE__ ":" "183""189"));-
143}-
144-
145QDesktopWidget::~QDesktopWidget()-
146{-
147}-
148-
149bool QDesktopWidget::isVirtualDesktop() const-
150{-
151 return QGuiApplication::primaryScreen()->virtualSiblings().size() > 1;-
152}-
153-
154int QDesktopWidget::primaryScreen() const-
155{-
156 return 0;-
157}-
158-
159int QDesktopWidget::numScreens() const-
160{-
161 return qMax(QGuiApplication::screens().size(), 1);-
162}-
163-
164QWidget *QDesktopWidget::screen(int screen)-
165{-
166 QDesktopWidgetPrivate * const d = d_func();-
167 if (screen < 0 || screen >= d->screens.length())-
168 return d->screens.at(0);-
169 return d->screens.at(screen);-
170}-
171-
172const QRect QDesktopWidget::availableGeometry(int screenNo) const-
173{-
174 QList<QScreen *> screens = QGuiApplication::screens();-
175 if (screenNo == -1)-
176 screenNo = 0;-
177 if (screenNo < 0 || screenNo >= screens.size())-
178 return QRect();-
179 else-
180 return screens.at(screenNo)->availableGeometry();-
181}-
182-
183const QRect QDesktopWidget::screenGeometry(int screenNo) const-
184{-
185 QList<QScreen *> screens = QGuiApplication::screens();-
186 if (screenNo == -1)-
187 screenNo = 0;-
188 if (screenNo < 0 || screenNo >= screens.size())-
189 return QRect();-
190 else-
191 return screens.at(screenNo)->geometry();-
192}-
193-
194int QDesktopWidget::screenNumber(const QWidget *w) const-
195{-
196 if (!w
!wDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
197 return
never executed: return primaryScreen();
primaryScreen();
never executed: return primaryScreen();
0
198-
199 const QList<QScreen *> allScreens = QGuiApplication::screens();-
200 QList<QScreen *> screens = allScreens;-
201 if (screens.isEmpty()
screens.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
202 return
never executed: return primaryScreen();
primaryScreen();
never executed: return primaryScreen();
0
203-
204 const QWindow *winHandle = w->windowHandle();-
205 if (!winHandle
!winHandleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
206 if (const
const QWidget ...ParentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
QWidget *nativeParent = w->nativeParentWidget()
const QWidget ...ParentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
207 winHandle = nativeParent->windowHandle();
never executed: winHandle = nativeParent->windowHandle();
0
208 }
never executed: end of block
0
209-
210-
211 if (screens.count() != screens.constFirst()->virtualSiblings().count()
screens.count(...ings().count()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
212-
213-
214 if (winHandle
winHandleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
215 if (const
const QScreen ...ndle->screen()Description
TRUEnever evaluated
FALSEnever evaluated
QScreen *winScreen = winHandle->screen()
const QScreen ...ndle->screen()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
216 screens = winScreen->virtualSiblings();
never executed: screens = winScreen->virtualSiblings();
0
217 }
never executed: end of block
0
218 }
never executed: end of block
0
219-
220-
221-
222 QRect frame = w->frameGeometry();-
223 if (!w->isWindow()
!w->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
224 frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0)));
never executed: frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0)));
0
225 const QRect nativeFrame = QHighDpi::toNativePixels(frame, winHandle);-
226-
227 QScreen *widgetScreen = nullptr;-
228 int largestArea = 0;-
229 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(screens)>::type> _container_((screens)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QScreen *screen = *_container_.i; _container_.control; _container_.control = 0) {-
230 const QRect deviceIndependentScreenGeometryintersected = QHighDpi::fromNativePixels(screen->handle()->geometry(), screen);-
const QRect intersected = deviceIndependentScreenGeometry.().intersected(framenativeFrame);
231 int area = intersected.width() * intersected.height();-
232 if (largestArea < area
largestArea < areaDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
233 widgetScreen = screen;-
234 largestArea = area;-
235 }
never executed: end of block
0
236 }
never executed: end of block
0
237 return
never executed: return allScreens.indexOf(widgetScreen);
allScreens.indexOf(widgetScreen);
never executed: return allScreens.indexOf(widgetScreen);
0
238}-
239-
240int QDesktopWidget::screenNumber(const QPoint &p) const-
241{-
242 const QList<QScreen *> screens = QGuiApplication::screens();-
243 if (!screens.isEmpty()) {-
244 const QList<QScreen *> primaryScreens = screens.first()->virtualSiblings();-
245-
246 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(primaryScreens)>::type> _container_((primaryScreens)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QScreen *screen = *_container_.i; _container_.control; _container_.control = 0) {-
247 if (screen->geometry().contains(p))-
248 return screens.indexOf(screen);-
249 }-
250-
251-
252-
253-
254 if (screens.count() != primaryScreens.count()) {-
255 for (int i = 1; i < screens.size(); ++i) {-
256 if (screens[i]->geometry().contains(p))-
257 return i;-
258 }-
259 }-
260 }-
261 return primaryScreen();-
262}-
263-
264void QDesktopWidget::resizeEvent(QResizeEvent *)-
265{-
266}-
267-
268-
269-
Switch to Source codePreprocessed file

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