1 | /* |
2 | SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org> |
3 | |
4 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
5 | */ |
6 | #ifndef WAYLAND_PLASMAWINDOWMANAGEMENT_H |
7 | #define WAYLAND_PLASMAWINDOWMANAGEMENT_H |
8 | |
9 | #include <QIcon> |
10 | #include <QObject> |
11 | #include <QSize> |
12 | |
13 | #include "KWayland/Client/kwaylandclient_export.h" |
14 | |
15 | struct org_kde_plasma_activation_feedback; |
16 | struct org_kde_plasma_activation; |
17 | struct org_kde_plasma_window_management; |
18 | struct org_kde_plasma_window; |
19 | |
20 | namespace KWayland |
21 | { |
22 | namespace Client |
23 | { |
24 | class EventQueue; |
25 | class Output; |
26 | class PlasmaActivationFeedback; |
27 | class PlasmaWindow; |
28 | class PlasmaWindowModel; |
29 | class Surface; |
30 | |
31 | /** |
32 | * @short Wrapper for the org_kde_plasma_window_management interface. |
33 | * |
34 | * PlasmaWindowManagement is a privileged interface. A Wayland compositor is allowed to ignore |
35 | * any requests. The PlasmaWindowManagement allows to get information about the overall windowing |
36 | * system. It allows to see which windows are currently available and thus is the base to implement |
37 | * e.g. a task manager. |
38 | * |
39 | * This class provides a convenient wrapper for the org_kde_plasma_window_management interface. |
40 | * It's main purpose is to create a PlasmaWindowManagementSurface. |
41 | * |
42 | * To use this class one needs to interact with the Registry. There are two |
43 | * possible ways to create the Shell interface: |
44 | * @code |
45 | * PlasmaWindowManagement *s = registry->createPlasmaWindowManagement(name, version); |
46 | * @endcode |
47 | * |
48 | * This creates the PlasmaWindowManagement and sets it up directly. As an alternative this |
49 | * can also be done in a more low level way: |
50 | * @code |
51 | * PlasmaWindowManagement *s = new PlasmaWindowManagement; |
52 | * s->setup(registry->bindPlasmaWindowManagement(name, version)); |
53 | * @endcode |
54 | * |
55 | * The PlasmaWindowManagement can be used as a drop-in replacement for any org_kde_plasma_window_management |
56 | * pointer as it provides matching cast operators. |
57 | * |
58 | * @see Registry |
59 | * @see PlasmaWindowManagementSurface |
60 | **/ |
61 | class KWAYLANDCLIENT_EXPORT PlasmaWindowManagement : public QObject |
62 | { |
63 | Q_OBJECT |
64 | public: |
65 | explicit PlasmaWindowManagement(QObject *parent = nullptr); |
66 | ~PlasmaWindowManagement() override; |
67 | |
68 | /** |
69 | * @returns @c true if managing a org_kde_plasma_window_management. |
70 | **/ |
71 | bool isValid() const; |
72 | /** |
73 | * Releases the org_kde_plasma_window_management interface. |
74 | * After the interface has been released the PlasmaWindowManagement instance is no |
75 | * longer valid and can be setup with another org_kde_plasma_window_management interface. |
76 | * |
77 | * Right before the interface is released the signal interfaceAboutToBeReleased is emitted. |
78 | * @see interfaceAboutToBeReleased |
79 | **/ |
80 | void release(); |
81 | /** |
82 | * Destroys the data held by this PlasmaWindowManagement. |
83 | * This method is supposed to be used when the connection to the Wayland |
84 | * server goes away. Once the connection becomes invalid, it's not |
85 | * possible to call release anymore as that calls into the Wayland |
86 | * connection and the call would fail. This method cleans up the data, so |
87 | * that the instance can be deleted or set up to a new org_kde_plasma_window_management interface |
88 | * once there is a new connection available. |
89 | * |
90 | * This method is automatically invoked when the Registry which created this |
91 | * PlasmaWindowManagement gets destroyed. |
92 | * |
93 | * Right before the data is destroyed, the signal interfaceAboutToBeDestroyed is emitted. |
94 | * |
95 | * @see release |
96 | * @see interfaceAboutToBeDestroyed |
97 | **/ |
98 | void destroy(); |
99 | /** |
100 | * Setup this Shell to manage the @p shell. |
101 | * When using Registry::createShell there is no need to call this |
102 | * method. |
103 | **/ |
104 | void setup(org_kde_plasma_window_management *shell); |
105 | |
106 | /** |
107 | * Sets the @p queue to use for creating a Surface. |
108 | **/ |
109 | void setEventQueue(EventQueue *queue); |
110 | /** |
111 | * @returns The event queue to use for creating a Surface. |
112 | **/ |
113 | EventQueue *eventQueue(); |
114 | |
115 | operator org_kde_plasma_window_management *(); |
116 | operator org_kde_plasma_window_management *() const; |
117 | |
118 | /** |
119 | * Whether the system is currently showing the desktop. |
120 | * This means that the system focuses on the desktop and hides other windows. |
121 | * @see setShowingDesktop |
122 | * @see showDesktop |
123 | * @see hideDesktop |
124 | * @see showingDesktopChanged |
125 | **/ |
126 | bool isShowingDesktop() const; |
127 | /** |
128 | * Requests to change the showing desktop state to @p show. |
129 | * @see isShowingDesktop |
130 | * @see showDesktop |
131 | * @see hideDesktop |
132 | **/ |
133 | void setShowingDesktop(bool show); |
134 | /** |
135 | * Same as calling setShowingDesktop with @c true. |
136 | * @see setShowingDesktop |
137 | **/ |
138 | void showDesktop(); |
139 | /** |
140 | * Same as calling setShowingDesktop with @c false. |
141 | * @see setShowingDesktop |
142 | **/ |
143 | void hideDesktop(); |
144 | |
145 | /** |
146 | * @returns All windows currently known to the PlasmaWindowManagement |
147 | * @see windowCreated |
148 | **/ |
149 | QList<PlasmaWindow *> windows() const; |
150 | /** |
151 | * @returns The currently active PlasmaWindow, the PlasmaWindow which |
152 | * returns @c true in {@link PlasmaWindow::isActive} or @c nullptr in case |
153 | * there is no active window. |
154 | **/ |
155 | PlasmaWindow *activeWindow() const; |
156 | /** |
157 | * Factory method to create a PlasmaWindowModel. |
158 | * @returns a new created PlasmaWindowModel |
159 | **/ |
160 | PlasmaWindowModel *createWindowModel(); |
161 | |
162 | /** |
163 | * @returns windows stacking order |
164 | * |
165 | * @since 5.73 |
166 | */ |
167 | QList<QByteArray> stackingOrderUuids() const; |
168 | |
169 | Q_SIGNALS: |
170 | /** |
171 | * This signal is emitted right before the interface is released. |
172 | **/ |
173 | void interfaceAboutToBeReleased(); |
174 | /** |
175 | * This signal is emitted right before the data is destroyed. |
176 | **/ |
177 | void interfaceAboutToBeDestroyed(); |
178 | /** |
179 | * The showing desktop state changed. |
180 | * @see isShowingDesktop |
181 | **/ |
182 | void showingDesktopChanged(bool); |
183 | |
184 | /** |
185 | * A new @p window got created. |
186 | * @see windows |
187 | **/ |
188 | void windowCreated(KWayland::Client::PlasmaWindow *window); |
189 | /** |
190 | * The active window changed. |
191 | * @see activeWindow |
192 | **/ |
193 | void activeWindowChanged(); |
194 | |
195 | /** |
196 | * The corresponding global for this interface on the Registry got removed. |
197 | * |
198 | * This signal gets only emitted if the Compositor got created by |
199 | * Registry::createPlasmaWindowManagement |
200 | * |
201 | * @since 5.5 |
202 | **/ |
203 | void removed(); |
204 | |
205 | /** |
206 | * The stacking order uuids changed |
207 | * @since 5.73 |
208 | **/ |
209 | void stackingOrderUuidsChanged(); |
210 | |
211 | public: |
212 | class Private; |
213 | |
214 | private: |
215 | QScopedPointer<Private> d; |
216 | }; |
217 | |
218 | /** |
219 | * @short Wrapper for the org_kde_plasma_window interface. |
220 | * |
221 | * A PlasmaWindow gets created by the PlasmaWindowManagement and announced through |
222 | * the {@link PlasmaWindowManagement::windowCreated} signal. The PlasmaWindow encapsulates |
223 | * state about a window managed by the Wayland server and allows to request state changes. |
224 | * |
225 | * The PlasmaWindow will be automatically deleted when the PlasmaWindow gets unmapped. |
226 | * |
227 | * This class is a convenient wrapper for the org_kde_plasma_window interface. |
228 | * The PlasmaWindow gets created by PlasmaWindowManagement. |
229 | * |
230 | * @see PlasmaWindowManager |
231 | **/ |
232 | class KWAYLANDCLIENT_EXPORT PlasmaWindow : public QObject |
233 | { |
234 | Q_OBJECT |
235 | public: |
236 | ~PlasmaWindow() override; |
237 | |
238 | /** |
239 | * Releases the org_kde_plasma_window interface. |
240 | * After the interface has been released the PlasmaWindow instance is no |
241 | * longer valid and can be setup with another org_kde_plasma_window interface. |
242 | **/ |
243 | void release(); |
244 | /** |
245 | * Destroys the data held by this PlasmaWindow. |
246 | * This method is supposed to be used when the connection to the Wayland |
247 | * server goes away. If the connection is not valid anymore, it's not |
248 | * possible to call release anymore as that calls into the Wayland |
249 | * connection and the call would fail. This method cleans up the data, so |
250 | * that the instance can be deleted or set up to a new org_kde_plasma_window interface |
251 | * once there is a new connection available. |
252 | * |
253 | * It is suggested to connect this method to ConnectionThread::connectionDied: |
254 | * @code |
255 | * connect(connection, &ConnectionThread::connectionDied, source, &PlasmaWindow::destroy); |
256 | * @endcode |
257 | * |
258 | * @see release |
259 | **/ |
260 | void destroy(); |
261 | /** |
262 | * @returns @c true if managing a org_kde_plasma_window. |
263 | **/ |
264 | bool isValid() const; |
265 | |
266 | operator org_kde_plasma_window *(); |
267 | operator org_kde_plasma_window *() const; |
268 | |
269 | /** |
270 | * @returns the window title. |
271 | * @see titleChanged |
272 | **/ |
273 | QString title() const; |
274 | /** |
275 | * @returns the application id which should reflect the name of a desktop file. |
276 | * @see appIdChanged |
277 | **/ |
278 | QString appId() const; |
279 | /** |
280 | * @returns Whether the window is currently the active Window. |
281 | * @see activeChanged |
282 | **/ |
283 | bool isActive() const; |
284 | /** |
285 | * @returns Whether the window is fullscreen |
286 | * @see fullscreenChanged |
287 | **/ |
288 | bool isFullscreen() const; |
289 | /** |
290 | * @returns Whether the window is kept above other windows. |
291 | * @see keepAboveChanged |
292 | **/ |
293 | bool isKeepAbove() const; |
294 | /** |
295 | * @returns Whether the window is kept below other window |
296 | * @see keepBelowChanged |
297 | **/ |
298 | bool isKeepBelow() const; |
299 | /** |
300 | * @returns Whether the window is currently minimized |
301 | * @see minimizedChanged |
302 | **/ |
303 | bool isMinimized() const; |
304 | /** |
305 | * @returns Whether the window is maximized. |
306 | * @see maximizedChanged |
307 | **/ |
308 | bool isMaximized() const; |
309 | /** |
310 | * @returns Whether the window is shown on all desktops. |
311 | * @see virtualDesktop |
312 | * @see onAllDesktopsChanged |
313 | **/ |
314 | bool isOnAllDesktops() const; |
315 | /** |
316 | * @returns Whether the window is demanding attention. |
317 | * @see demandsAttentionChanged |
318 | **/ |
319 | bool isDemandingAttention() const; |
320 | /** |
321 | * @returns Whether the window can be closed. |
322 | * @see closeableChanged |
323 | **/ |
324 | bool isCloseable() const; |
325 | /** |
326 | * @returns Whether the window can be maximized. |
327 | * @see maximizeableChanged |
328 | **/ |
329 | bool isMaximizeable() const; |
330 | /** |
331 | * @returns Whether the window can be minimized. |
332 | * @see minimizeableChanged |
333 | **/ |
334 | bool isMinimizeable() const; |
335 | /** |
336 | * @returns Whether the window can be set to fullscreen. |
337 | * @see fullscreenableChanged |
338 | **/ |
339 | bool isFullscreenable() const; |
340 | /** |
341 | * @returns Whether the window should be ignored by a task bar. |
342 | * @see skipTaskbarChanged |
343 | **/ |
344 | bool skipTaskbar() const; |
345 | /** |
346 | * @returns Whether the window should be ignored by a switcher. |
347 | * @see skipSwitcherChanged |
348 | **/ |
349 | bool skipSwitcher() const; |
350 | /** |
351 | * @returns The icon of the window. |
352 | * @see iconChanged |
353 | **/ |
354 | QIcon icon() const; |
355 | /** |
356 | * @returns Whether the window can be set to the shaded state. |
357 | * @see isShaded |
358 | * @see shadeableChanged |
359 | * @since 5.22 |
360 | */ |
361 | bool isShadeable() const; |
362 | /** |
363 | * @returns Whether the window is shaded, that is reduced to the window decoration |
364 | * @see shadedChanged |
365 | * @since 5.22 |
366 | */ |
367 | bool isShaded() const; |
368 | /** |
369 | * @returns Whether the window can be moved. |
370 | * @see movableChanged |
371 | * @since 5.22 |
372 | */ |
373 | bool isMovable() const; |
374 | /** |
375 | * @returns Whether the window can be resized. |
376 | * @see resizableChanged |
377 | * @since 5.22 |
378 | */ |
379 | bool isResizable() const; |
380 | /** |
381 | * @returns Whether the virtual desktop can be changed. |
382 | * @see virtualDesktopChangeableChanged |
383 | * @since 5.22 |
384 | */ |
385 | bool isVirtualDesktopChangeable() const; |
386 | /** |
387 | * @returns The process id this window belongs to. |
388 | * or 0 if unset |
389 | * @since 5.35 |
390 | */ |
391 | quint32 pid() const; |
392 | /** |
393 | * @returns The X11 resource name for this window. |
394 | * This is only set for X11 windows. |
395 | * @since 5.94 |
396 | */ |
397 | QString resourceName() const; |
398 | |
399 | /** |
400 | * Requests to activate the window. |
401 | **/ |
402 | void requestActivate(); |
403 | /** |
404 | * Requests to close the window. |
405 | **/ |
406 | void requestClose(); |
407 | /** |
408 | * Requests to start an interactive window move operation. |
409 | * @since 5.22 |
410 | */ |
411 | void requestMove(); |
412 | /** |
413 | * Requests to start an interactive resize operation. |
414 | * @since 5.22 |
415 | */ |
416 | void requestResize(); |
417 | |
418 | /** |
419 | * Requests the window at this model row index have its keep above state toggled. |
420 | * @since 5.35 |
421 | */ |
422 | void requestToggleKeepAbove(); |
423 | |
424 | /** |
425 | * Requests the window at this model row index have its keep below state toggled. |
426 | * @since 5.35 |
427 | */ |
428 | void requestToggleKeepBelow(); |
429 | |
430 | /** |
431 | * Requests the window at this model row index have its minimized state toggled. |
432 | */ |
433 | void requestToggleMinimized(); |
434 | |
435 | /** |
436 | * Requests the window at this model row index have its maximized state toggled. |
437 | */ |
438 | void requestToggleMaximized(); |
439 | |
440 | /** |
441 | * Requests the window at this model row index have its fullscreen state toggled. |
442 | * @since 6.0 |
443 | */ |
444 | void requestToggleFullscreen(); |
445 | |
446 | /** |
447 | * Sets the geometry of the taskbar entry for this window |
448 | * relative to a panel in particular |
449 | * @since 5.5 |
450 | */ |
451 | void setMinimizedGeometry(Surface *panel, const QRect &geom); |
452 | |
453 | /** |
454 | * Remove the task geometry information for a particular panel |
455 | * @since 5.5 |
456 | */ |
457 | void unsetMinimizedGeometry(Surface *panel); |
458 | |
459 | /** |
460 | * Requests the window at this model row index have its shaded state toggled. |
461 | * @since 5.22 |
462 | */ |
463 | void requestToggleShaded(); |
464 | |
465 | /** |
466 | * A unique identifier for the window |
467 | * |
468 | * @see QUuid |
469 | * @since 5.73 |
470 | */ |
471 | QByteArray uuid() const; |
472 | |
473 | /** |
474 | * The parent window of this PlasmaWindow. |
475 | * |
476 | * If there is a parent window, this window is a transient window for the |
477 | * parent window. If this method returns a null PlasmaWindow it means this |
478 | * window is a top level window and is not a transient window. |
479 | * |
480 | * @see parentWindowChanged |
481 | * @since 5.24 |
482 | **/ |
483 | QPointer<PlasmaWindow> parentWindow() const; |
484 | |
485 | /** |
486 | * @returns The window geometry in absolute coordinates. |
487 | * @see geometryChanged |
488 | * @since 5.25 |
489 | **/ |
490 | QRect geometry() const; |
491 | |
492 | /** |
493 | * Ask the server to make the window enter a virtual desktop. |
494 | * The server may or may not consent. |
495 | * A window can enter more than one virtual desktop. |
496 | * |
497 | * @since 5.52 |
498 | */ |
499 | void requestEnterVirtualDesktop(const QString &id); |
500 | |
501 | /** |
502 | * Make the window enter a new virtual desktop. If the server consents the request, |
503 | * it will create a new virtual desktop and assign the window to it. |
504 | * @since 5.52 |
505 | */ |
506 | void requestEnterNewVirtualDesktop(); |
507 | |
508 | /** |
509 | * Ask the server to make the window the window exit a virtual desktop. |
510 | * The server may or may not consent. |
511 | * If it exits all desktops it will be considered on all of them. |
512 | * |
513 | * @since 5.52 |
514 | */ |
515 | void requestLeaveVirtualDesktop(const QString &id); |
516 | |
517 | /** |
518 | * Return all the virtual desktop ids this window is associated to. |
519 | * When a desktop gets deleted, it will be automatically removed from this list. |
520 | * If this list is empty, assume it's on all desktops. |
521 | * |
522 | * @since 5.52 |
523 | */ |
524 | QStringList plasmaVirtualDesktops() const; |
525 | |
526 | /** |
527 | * Ask the server to make the window enter an activity. |
528 | * The server may or may not consent. |
529 | * A window can enter more than one activity. |
530 | * |
531 | * @since 5.81 |
532 | */ |
533 | void requestEnterActivity(const QString &id); |
534 | |
535 | /** |
536 | * Ask the server to make the window exit an activity. |
537 | * The server may or may not consent. |
538 | * If it exits all activities it will be considered on all of them. |
539 | * |
540 | * @since 5.81 |
541 | */ |
542 | void requestLeaveActivity(const QString &id); |
543 | |
544 | /** |
545 | * Return all the activity ids this window is associated to. |
546 | * When an activity gets deleted, it will be automatically removed from this list. |
547 | * If this list is empty, assume it's on all activities. |
548 | * |
549 | * @since 5.81 |
550 | */ |
551 | QStringList plasmaActivities() const; |
552 | |
553 | /** |
554 | * Return the D-BUS service name for a window's |
555 | * application menu. |
556 | * |
557 | * @since 5.69 |
558 | */ |
559 | QString applicationMenuServiceName() const; |
560 | /** |
561 | * Return the D-BUS object path to a windows's |
562 | * application menu. |
563 | * |
564 | * @since 5.69 |
565 | */ |
566 | QString applicationMenuObjectPath() const; |
567 | |
568 | /** |
569 | * Sends the current window to @p output |
570 | * |
571 | * @since 5.86 |
572 | */ |
573 | void sendToOutput(KWayland::Client::Output *output) const; |
574 | |
575 | /** |
576 | * @returns The client geometry (i.e. without window borders) in absolute coordinates. |
577 | * @see clientGeometryChanged |
578 | * @since 6.2 |
579 | **/ |
580 | QRect clientGeometry() const; |
581 | |
582 | Q_SIGNALS: |
583 | /** |
584 | * The window title changed. |
585 | * @see title |
586 | **/ |
587 | void titleChanged(); |
588 | /** |
589 | * The application id changed. |
590 | * @see appId |
591 | **/ |
592 | void appIdChanged(); |
593 | /** |
594 | * The window became active or inactive. |
595 | * @see isActive |
596 | **/ |
597 | void activeChanged(); |
598 | /** |
599 | * The fullscreen state changed. |
600 | * @see isFullscreen |
601 | **/ |
602 | void fullscreenChanged(); |
603 | /** |
604 | * The keep above state changed. |
605 | * @see isKeepAbove |
606 | **/ |
607 | void keepAboveChanged(); |
608 | /** |
609 | * The keep below state changed. |
610 | * @see isKeepBelow |
611 | **/ |
612 | void keepBelowChanged(); |
613 | /** |
614 | * The minimized state changed. |
615 | * @see isMinimized |
616 | **/ |
617 | void minimizedChanged(); |
618 | /** |
619 | * The maximized state changed. |
620 | * @see isMaximized |
621 | **/ |
622 | void maximizedChanged(); |
623 | /** |
624 | * The on all desktops state changed. |
625 | * @see isOnAllDesktops |
626 | **/ |
627 | void onAllDesktopsChanged(); |
628 | /** |
629 | * The demands attention state changed. |
630 | * @see isDemandingAttention |
631 | **/ |
632 | void demandsAttentionChanged(); |
633 | /** |
634 | * The closeable state changed. |
635 | * @see isCloseable |
636 | **/ |
637 | void closeableChanged(); |
638 | /** |
639 | * The minimizeable state changed. |
640 | * @see isMinimizeable |
641 | **/ |
642 | void minimizeableChanged(); |
643 | /** |
644 | * The maximizeable state changed. |
645 | * @see isMaximizeable |
646 | **/ |
647 | void maximizeableChanged(); |
648 | /** |
649 | * The fullscreenable state changed. |
650 | * @see isFullscreenable |
651 | **/ |
652 | void fullscreenableChanged(); |
653 | /** |
654 | * The skip taskbar state changed. |
655 | * @see skipTaskbar |
656 | **/ |
657 | void skipTaskbarChanged(); |
658 | /** |
659 | * The skip switcher state changed. |
660 | * @see skipSwitcher |
661 | **/ |
662 | void skipSwitcherChanged(); |
663 | /** |
664 | * The window icon changed. |
665 | * @see icon |
666 | **/ |
667 | void iconChanged(); |
668 | /** |
669 | * The shadeable state changed. |
670 | * @see isShadeable |
671 | * @since 5.22 |
672 | */ |
673 | void shadeableChanged(); |
674 | /** |
675 | * The shaded state changed. |
676 | * @see isShaded |
677 | * @since 5.22 |
678 | */ |
679 | void shadedChanged(); |
680 | /** |
681 | * The movable state changed. |
682 | * @see isMovable |
683 | * @since 5.22 |
684 | */ |
685 | void movableChanged(); |
686 | /** |
687 | * The resizable state changed. |
688 | * @see isResizable |
689 | * @since 5.22 |
690 | */ |
691 | void resizableChanged(); |
692 | /** |
693 | * The virtual desktop changeable state changed. |
694 | * @see virtualDesktopChangeable |
695 | * @since 5.22 |
696 | */ |
697 | void virtualDesktopChangeableChanged(); |
698 | /** |
699 | * The window got unmapped and is no longer available to the Wayland server. |
700 | * This instance will be automatically deleted and one should connect to this |
701 | * signal to perform cleanup. |
702 | **/ |
703 | void unmapped(); |
704 | /** |
705 | * This signal is emitted whenever the parent window changes. |
706 | * @see parentWindow |
707 | * @since 5.24 |
708 | **/ |
709 | void parentWindowChanged(); |
710 | /** |
711 | * This signal is emitted whenever the window geometry changes. |
712 | * @see geometry |
713 | * @since 5.25 |
714 | **/ |
715 | void geometryChanged(); |
716 | |
717 | /** |
718 | * This signal is emitted whenever the resource name changes. |
719 | * @see resourceName |
720 | * @since 5.94 |
721 | **/ |
722 | void resourceNameChanged(); |
723 | |
724 | /** |
725 | * This signal is emitted when the window has entered a new virtual desktop. |
726 | * The window can be on more than one desktop, or none: then is considered on all of them. |
727 | * @since 5.46 |
728 | */ |
729 | void plasmaVirtualDesktopEntered(const QString &id); |
730 | |
731 | /** |
732 | * This signal is emitted when the window left a virtual desktop. |
733 | * If the window leaves all desktops, it can be considered on all. |
734 | * |
735 | * @since 5.46 |
736 | */ |
737 | void plasmaVirtualDesktopLeft(const QString &id); |
738 | |
739 | /** |
740 | * This signal is emitted when the window has entered an activity. |
741 | * The window can be on more than one activity, or none: then is considered on all of them. |
742 | * @since 5.81 |
743 | */ |
744 | void plasmaActivityEntered(const QString &id); |
745 | |
746 | /** |
747 | * This signal is emitted when the window left an activity. |
748 | * If the window leaves all activities, it can be considered on all. |
749 | * |
750 | * @since 5.81 |
751 | */ |
752 | void plasmaActivityLeft(const QString &id); |
753 | |
754 | /** |
755 | * This signal is emitted when either the D-BUS service name or |
756 | * object path for the window's application menu changes. |
757 | * |
758 | * @since 5.69 |
759 | **/ |
760 | void applicationMenuChanged(); |
761 | |
762 | /** |
763 | * This signal is emitted whenever the client geometry changes. |
764 | * @see clientGeometry |
765 | * @since 6.2 |
766 | **/ |
767 | void clientGeometryChanged(); |
768 | |
769 | private: |
770 | friend class PlasmaWindowManagement; |
771 | explicit PlasmaWindow(PlasmaWindowManagement *parent, org_kde_plasma_window *activation, quint32 internalId, const char *uuid); |
772 | class Private; |
773 | QScopedPointer<Private> d; |
774 | }; |
775 | |
776 | /** |
777 | * @since 5.86 |
778 | */ |
779 | class KWAYLANDCLIENT_EXPORT PlasmaActivation : public QObject |
780 | { |
781 | Q_OBJECT |
782 | public: |
783 | ~PlasmaActivation() override; |
784 | |
785 | Q_SIGNALS: |
786 | /** |
787 | * Informs about which application this activation is representing |
788 | * |
789 | * The @p appId can be used to infer how to decorate this activation. |
790 | */ |
791 | void applicationId(const QString &appId); |
792 | |
793 | /** |
794 | * Notifies that the activation is done with. |
795 | * |
796 | * It might happen either because it's over or because it timed out. |
797 | */ |
798 | void finished(); |
799 | |
800 | private: |
801 | friend class PlasmaActivationFeedback; |
802 | explicit PlasmaActivation(PlasmaActivationFeedback *parent, org_kde_plasma_activation *activation); |
803 | class Private; |
804 | QScopedPointer<Private> d; |
805 | }; |
806 | |
807 | /** |
808 | * @since 5.86 |
809 | */ |
810 | class KWAYLANDCLIENT_EXPORT PlasmaActivationFeedback : public QObject |
811 | { |
812 | Q_OBJECT |
813 | |
814 | public: |
815 | explicit PlasmaActivationFeedback(QObject *parent = nullptr); |
816 | ~PlasmaActivationFeedback() override; |
817 | |
818 | /** |
819 | * @returns @c true if managing a org_kde_plasma_activation_feedback. |
820 | **/ |
821 | bool isValid() const; |
822 | |
823 | /** |
824 | * Releases the org_kde_plasma_activation_feedback interface. |
825 | * After the interface has been released the PlasmaActivationFeedback instance is no |
826 | * longer valid and can be setup with another org_kde_plasma_activation_feedback interface. |
827 | * |
828 | * Right before the interface is released the signal interfaceAboutToBeReleased is emitted. |
829 | * @see interfaceAboutToBeReleased |
830 | **/ |
831 | void release(); |
832 | |
833 | /** |
834 | * Destroys the data held by this PlasmaActivationFeedback. |
835 | * This method is supposed to be used when the connection to the Wayland |
836 | * server goes away. Once the connection becomes invalid, it's not |
837 | * possible to call release anymore as that calls into the Wayland |
838 | * connection and the call would fail. This method cleans up the data, so |
839 | * that the instance can be deleted or set up to a new org_kde_plasma_activation_feedback interface |
840 | * once there is a new connection available. |
841 | * |
842 | * This method is automatically invoked when the Registry which created this |
843 | * PlasmaActivationFeedback gets destroyed. |
844 | * |
845 | * Right before the data is destroyed, the signal interfaceAboutToBeDestroyed is emitted. |
846 | * |
847 | * @see release |
848 | * @see interfaceAboutToBeDestroyed |
849 | **/ |
850 | void destroy(); |
851 | |
852 | /** |
853 | * Setup this PlasmaActivationFeedback to manage the @p manager. |
854 | * When using Registry::createPlasmaActivationFeedback there is no need to call this |
855 | * method. |
856 | **/ |
857 | void setup(org_kde_plasma_activation_feedback *manager); |
858 | |
859 | /** |
860 | * Sets the @p queue to use for creating a PlasmaActivationFeedback. |
861 | **/ |
862 | void setEventQueue(EventQueue *queue); |
863 | |
864 | /** |
865 | * @returns The event queue to use for creating a PlasmaActivationFeedback. |
866 | **/ |
867 | EventQueue *eventQueue(); |
868 | |
869 | operator org_kde_plasma_activation_feedback *(); |
870 | operator org_kde_plasma_activation_feedback *() const; |
871 | |
872 | Q_SIGNALS: |
873 | /** |
874 | * This signal is emitted right before the interface is released. |
875 | **/ |
876 | void interfaceAboutToBeReleased(); |
877 | |
878 | /** |
879 | * This signal is emitted right before the data is destroyed. |
880 | **/ |
881 | void interfaceAboutToBeDestroyed(); |
882 | |
883 | /** |
884 | * The corresponding global for this interface on the Registry got removed. |
885 | * |
886 | * This signal gets only emitted if the Compositor got created by |
887 | * Registry::createPlasmaActivationFeedback |
888 | **/ |
889 | void removed(); |
890 | |
891 | void activation(KWayland::Client::PlasmaActivation *activation); |
892 | |
893 | private: |
894 | class Private; |
895 | QScopedPointer<Private> d; |
896 | }; |
897 | } |
898 | } |
899 | |
900 | Q_DECLARE_METATYPE(KWayland::Client::PlasmaWindow *) |
901 | |
902 | #endif |
903 | |