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 | Q_SIGNALS: |
576 | /** |
577 | * The window title changed. |
578 | * @see title |
579 | **/ |
580 | void titleChanged(); |
581 | /** |
582 | * The application id changed. |
583 | * @see appId |
584 | **/ |
585 | void appIdChanged(); |
586 | /** |
587 | * The window became active or inactive. |
588 | * @see isActive |
589 | **/ |
590 | void activeChanged(); |
591 | /** |
592 | * The fullscreen state changed. |
593 | * @see isFullscreen |
594 | **/ |
595 | void fullscreenChanged(); |
596 | /** |
597 | * The keep above state changed. |
598 | * @see isKeepAbove |
599 | **/ |
600 | void keepAboveChanged(); |
601 | /** |
602 | * The keep below state changed. |
603 | * @see isKeepBelow |
604 | **/ |
605 | void keepBelowChanged(); |
606 | /** |
607 | * The minimized state changed. |
608 | * @see isMinimized |
609 | **/ |
610 | void minimizedChanged(); |
611 | /** |
612 | * The maximized state changed. |
613 | * @see isMaximized |
614 | **/ |
615 | void maximizedChanged(); |
616 | /** |
617 | * The on all desktops state changed. |
618 | * @see isOnAllDesktops |
619 | **/ |
620 | void onAllDesktopsChanged(); |
621 | /** |
622 | * The demands attention state changed. |
623 | * @see isDemandingAttention |
624 | **/ |
625 | void demandsAttentionChanged(); |
626 | /** |
627 | * The closeable state changed. |
628 | * @see isCloseable |
629 | **/ |
630 | void closeableChanged(); |
631 | /** |
632 | * The minimizeable state changed. |
633 | * @see isMinimizeable |
634 | **/ |
635 | void minimizeableChanged(); |
636 | /** |
637 | * The maximizeable state changed. |
638 | * @see isMaximizeable |
639 | **/ |
640 | void maximizeableChanged(); |
641 | /** |
642 | * The fullscreenable state changed. |
643 | * @see isFullscreenable |
644 | **/ |
645 | void fullscreenableChanged(); |
646 | /** |
647 | * The skip taskbar state changed. |
648 | * @see skipTaskbar |
649 | **/ |
650 | void skipTaskbarChanged(); |
651 | /** |
652 | * The skip switcher state changed. |
653 | * @see skipSwitcher |
654 | **/ |
655 | void skipSwitcherChanged(); |
656 | /** |
657 | * The window icon changed. |
658 | * @see icon |
659 | **/ |
660 | void iconChanged(); |
661 | /** |
662 | * The shadeable state changed. |
663 | * @see isShadeable |
664 | * @since 5.22 |
665 | */ |
666 | void shadeableChanged(); |
667 | /** |
668 | * The shaded state changed. |
669 | * @see isShaded |
670 | * @since 5.22 |
671 | */ |
672 | void shadedChanged(); |
673 | /** |
674 | * The movable state changed. |
675 | * @see isMovable |
676 | * @since 5.22 |
677 | */ |
678 | void movableChanged(); |
679 | /** |
680 | * The resizable state changed. |
681 | * @see isResizable |
682 | * @since 5.22 |
683 | */ |
684 | void resizableChanged(); |
685 | /** |
686 | * The virtual desktop changeable state changed. |
687 | * @see virtualDesktopChangeable |
688 | * @since 5.22 |
689 | */ |
690 | void virtualDesktopChangeableChanged(); |
691 | /** |
692 | * The window got unmapped and is no longer available to the Wayland server. |
693 | * This instance will be automatically deleted and one should connect to this |
694 | * signal to perform cleanup. |
695 | **/ |
696 | void unmapped(); |
697 | /** |
698 | * This signal is emitted whenever the parent window changes. |
699 | * @see parentWindow |
700 | * @since 5.24 |
701 | **/ |
702 | void parentWindowChanged(); |
703 | /** |
704 | * This signal is emitted whenever the window geometry changes. |
705 | * @see geometry |
706 | * @since 5.25 |
707 | **/ |
708 | void geometryChanged(); |
709 | |
710 | /** |
711 | * This signal is emitted whenever the resource name changes. |
712 | * @see resourceName |
713 | * @since 5.94 |
714 | **/ |
715 | void resourceNameChanged(); |
716 | |
717 | /** |
718 | * This signal is emitted when the window has entered a new virtual desktop. |
719 | * The window can be on more than one desktop, or none: then is considered on all of them. |
720 | * @since 5.46 |
721 | */ |
722 | void plasmaVirtualDesktopEntered(const QString &id); |
723 | |
724 | /** |
725 | * This signal is emitted when the window left a virtual desktop. |
726 | * If the window leaves all desktops, it can be considered on all. |
727 | * |
728 | * @since 5.46 |
729 | */ |
730 | void plasmaVirtualDesktopLeft(const QString &id); |
731 | |
732 | /** |
733 | * This signal is emitted when the window has entered an activity. |
734 | * The window can be on more than one activity, or none: then is considered on all of them. |
735 | * @since 5.81 |
736 | */ |
737 | void plasmaActivityEntered(const QString &id); |
738 | |
739 | /** |
740 | * This signal is emitted when the window left an activity. |
741 | * If the window leaves all activities, it can be considered on all. |
742 | * |
743 | * @since 5.81 |
744 | */ |
745 | void plasmaActivityLeft(const QString &id); |
746 | |
747 | /** |
748 | * This signal is emitted when either the D-BUS service name or |
749 | * object path for the window's application menu changes. |
750 | * |
751 | * @since 5.69 |
752 | **/ |
753 | void applicationMenuChanged(); |
754 | |
755 | private: |
756 | friend class PlasmaWindowManagement; |
757 | explicit PlasmaWindow(PlasmaWindowManagement *parent, org_kde_plasma_window *activation, quint32 internalId, const char *uuid); |
758 | class Private; |
759 | QScopedPointer<Private> d; |
760 | }; |
761 | |
762 | /** |
763 | * @since 5.86 |
764 | */ |
765 | class KWAYLANDCLIENT_EXPORT PlasmaActivation : public QObject |
766 | { |
767 | Q_OBJECT |
768 | public: |
769 | ~PlasmaActivation() override; |
770 | |
771 | Q_SIGNALS: |
772 | /** |
773 | * Informs about which application this activation is representing |
774 | * |
775 | * The @p appId can be used to infer how to decorate this activation. |
776 | */ |
777 | void applicationId(const QString &appId); |
778 | |
779 | /** |
780 | * Notifies that the activation is done with. |
781 | * |
782 | * It might happen either because it's over or because it timed out. |
783 | */ |
784 | void finished(); |
785 | |
786 | private: |
787 | friend class PlasmaActivationFeedback; |
788 | explicit PlasmaActivation(PlasmaActivationFeedback *parent, org_kde_plasma_activation *activation); |
789 | class Private; |
790 | QScopedPointer<Private> d; |
791 | }; |
792 | |
793 | /** |
794 | * @since 5.86 |
795 | */ |
796 | class KWAYLANDCLIENT_EXPORT PlasmaActivationFeedback : public QObject |
797 | { |
798 | Q_OBJECT |
799 | |
800 | public: |
801 | explicit PlasmaActivationFeedback(QObject *parent = nullptr); |
802 | ~PlasmaActivationFeedback() override; |
803 | |
804 | /** |
805 | * @returns @c true if managing a org_kde_plasma_activation_feedback. |
806 | **/ |
807 | bool isValid() const; |
808 | |
809 | /** |
810 | * Releases the org_kde_plasma_activation_feedback interface. |
811 | * After the interface has been released the PlasmaActivationFeedback instance is no |
812 | * longer valid and can be setup with another org_kde_plasma_activation_feedback interface. |
813 | * |
814 | * Right before the interface is released the signal interfaceAboutToBeReleased is emitted. |
815 | * @see interfaceAboutToBeReleased |
816 | **/ |
817 | void release(); |
818 | |
819 | /** |
820 | * Destroys the data held by this PlasmaActivationFeedback. |
821 | * This method is supposed to be used when the connection to the Wayland |
822 | * server goes away. Once the connection becomes invalid, it's not |
823 | * possible to call release anymore as that calls into the Wayland |
824 | * connection and the call would fail. This method cleans up the data, so |
825 | * that the instance can be deleted or set up to a new org_kde_plasma_activation_feedback interface |
826 | * once there is a new connection available. |
827 | * |
828 | * This method is automatically invoked when the Registry which created this |
829 | * PlasmaActivationFeedback gets destroyed. |
830 | * |
831 | * Right before the data is destroyed, the signal interfaceAboutToBeDestroyed is emitted. |
832 | * |
833 | * @see release |
834 | * @see interfaceAboutToBeDestroyed |
835 | **/ |
836 | void destroy(); |
837 | |
838 | /** |
839 | * Setup this PlasmaActivationFeedback to manage the @p manager. |
840 | * When using Registry::createPlasmaActivationFeedback there is no need to call this |
841 | * method. |
842 | **/ |
843 | void setup(org_kde_plasma_activation_feedback *manager); |
844 | |
845 | /** |
846 | * Sets the @p queue to use for creating a PlasmaActivationFeedback. |
847 | **/ |
848 | void setEventQueue(EventQueue *queue); |
849 | |
850 | /** |
851 | * @returns The event queue to use for creating a PlasmaActivationFeedback. |
852 | **/ |
853 | EventQueue *eventQueue(); |
854 | |
855 | operator org_kde_plasma_activation_feedback *(); |
856 | operator org_kde_plasma_activation_feedback *() const; |
857 | |
858 | Q_SIGNALS: |
859 | /** |
860 | * This signal is emitted right before the interface is released. |
861 | **/ |
862 | void interfaceAboutToBeReleased(); |
863 | |
864 | /** |
865 | * This signal is emitted right before the data is destroyed. |
866 | **/ |
867 | void interfaceAboutToBeDestroyed(); |
868 | |
869 | /** |
870 | * The corresponding global for this interface on the Registry got removed. |
871 | * |
872 | * This signal gets only emitted if the Compositor got created by |
873 | * Registry::createPlasmaActivationFeedback |
874 | **/ |
875 | void removed(); |
876 | |
877 | void activation(KWayland::Client::PlasmaActivation *activation); |
878 | |
879 | private: |
880 | class Private; |
881 | QScopedPointer<Private> d; |
882 | }; |
883 | } |
884 | } |
885 | |
886 | Q_DECLARE_METATYPE(KWayland::Client::PlasmaWindow *) |
887 | |
888 | #endif |
889 | |