KWin
Loading...
Searching...
No Matches
workspace.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 1999, 2000 Matthias Ettrich <ettrich@kde.org>
6 SPDX-FileCopyrightText: 2003 Lubos Lunak <l.lunak@kde.org>
7 SPDX-FileCopyrightText: 2009 Lucas Murray <lmurray@undefinedfire.com>
8 SPDX-FileCopyrightText: 2019 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
9 SPDX-FileCopyrightText: 2022 Natalie Clarius <natalie_clarius@yahoo.de>
10
11 SPDX-License-Identifier: GPL-2.0-or-later
12*/
13
14#pragma once
15
16// kwin
17#include "options.h"
18#include "sm.h"
19#include "utils/common.h"
20// Qt
21#include <QList>
22#include <QStringList>
23#include <QTimer>
24// std
25#include <functional>
26#include <memory>
27
28class KConfig;
29class KConfigGroup;
30class KStartupInfo;
31class KStartupInfoData;
32class KStartupInfoId;
33
34namespace KWin
35{
36
37namespace Decoration
38{
39class DecorationBridge;
40}
41
42namespace Xcb
43{
44class Tree;
45class Window;
46}
47
48namespace TabBox
49{
50class TabBox;
51}
52
53class Window;
54class Output;
55class Compositor;
56class Group;
57class InternalWindow;
58class KillWindow;
59class ShortcutDialog;
60class UserActionsMenu;
61class VirtualDesktop;
62class X11Window;
63class X11EventFilter;
64class FocusChain;
65class ApplicationMenu;
66class PlacementTracker;
67enum class Predicate;
68class Outline;
69class RuleBook;
70class ScreenEdges;
71#if KWIN_BUILD_ACTIVITIES
72class Activities;
73#endif
74class PlaceholderInputEventFilter;
75class PlaceholderOutput;
76class Placement;
77class OutputConfiguration;
78class TileManager;
79class OutputConfigurationStore;
80class LidSwitchTracker;
81class DpmsInputEventFilter;
82class OrientationSensor;
83
84class KWIN_EXPORT Workspace : public QObject
85{
86 Q_OBJECT
87public:
88 explicit Workspace();
89 ~Workspace() override;
90
91 static Workspace *self()
92 {
93 return _self;
94 }
95
96 bool workspaceEvent(xcb_generic_event_t *);
97
98 bool hasWindow(const Window *);
99
128 X11Window *findClient(std::function<bool(const X11Window *)> func) const;
137 X11Window *findClient(Predicate predicate, xcb_window_t w) const;
138 void forEachClient(std::function<void(X11Window *)> func);
139 X11Window *findUnmanaged(std::function<bool(const X11Window *)> func) const;
146 X11Window *findUnmanaged(xcb_window_t w) const;
147
148 Window *findWindow(const QUuid &internalId) const;
149 Window *findWindow(std::function<bool(const Window *)> func) const;
150 void forEachWindow(std::function<void(Window *)> func);
151
160 Window *findInternal(QWindow *w) const;
161
162 QRectF clientArea(clientAreaOption, const Output *output, const VirtualDesktop *desktop) const;
163 QRectF clientArea(clientAreaOption, const Window *window) const;
164 QRectF clientArea(clientAreaOption, const Window *window, const Output *output) const;
165 QRectF clientArea(clientAreaOption, const Window *window, const QPointF &pos) const;
166
170 QRect geometry() const;
171 StrutRects restrictedMoveArea(const VirtualDesktop *desktop, StrutAreas areas = StrutAreaAll) const;
172
173 bool initializing() const;
174
175 Output *xineramaIndexToOutput(int index) const;
176
177 void setOutputOrder(const QList<Output *> &order);
178 QList<Output *> outputOrder() const;
179
180 Output *activeOutput() const;
181 void setActiveOutput(Output *output);
182 void setActiveOutput(const QPointF &pos);
183 void setActiveCursorOutput(Output *output);
184 void setActiveCursorOutput(const QPointF &pos);
185
190 Window *activeWindow() const;
196 Window *mostRecentlyActivatedWindow() const;
197
198 Window *windowUnderMouse(Output *output) const;
199
200 void activateWindow(Window *window, bool force = false);
201 bool requestFocus(Window *window, bool force = false);
203 ActivityFocus = 1 << 0, // focus the window
204 ActivityFocusForce = 1 << 1 | ActivityFocus, // focus even if Dock etc.
205 ActivityRaise = 1 << 2 // raise the window
206 };
207 Q_DECLARE_FLAGS(ActivityFlags, ActivityFlag)
208 bool takeActivity(Window *window, ActivityFlags flags);
209 bool restoreFocus();
210 void gotFocusIn(const Window *window);
211 void setShouldGetFocus(Window *window);
212 bool activateNextWindow(Window *window);
214 {
215 return block_focus == 0;
216 }
217
221 void setMoveResizeWindow(Window *window);
222
223 QRectF adjustClientArea(Window *window, const QRectF &area) const;
224 QPointF adjustWindowPosition(Window *window, QPointF pos, bool unrestricted, double snapAdjust = 1.0);
225 QRectF adjustWindowSize(Window *window, QRectF moveResizeGeom, Gravity gravity);
226 void raiseWindow(Window *window, bool nogroup = false);
227 void lowerWindow(Window *window, bool nogroup = false);
228 void raiseWindowRequest(Window *window, NET::RequestSource src = NET::FromApplication, xcb_timestamp_t timestamp = 0);
229 void lowerWindowRequest(X11Window *window, NET::RequestSource src, xcb_timestamp_t timestamp);
230 void lowerWindowRequest(Window *window);
231 void restackWindowUnderActive(Window *window);
232 void restack(Window *window, Window *under, bool force = false);
233 void raiseOrLowerWindow(Window *window);
234 void resetUpdateToolWindowsTimer();
235 void restoreSessionStackingOrder(X11Window *window);
236 void updateStackingOrder(bool propagate_new_windows = false);
237 void forceRestacking();
238
239 void constrain(Window *below, Window *above);
240 void unconstrain(Window *below, Window *above);
241
242 void windowHidden(Window *);
243 void windowAttentionChanged(Window *, bool set);
244
248 const QList<Window *> windows() const
249 {
250 return m_windows;
251 }
252
253 void stackScreenEdgesUnderOverrideRedirect();
254
255 SessionManager *sessionManager() const;
256
260 TileManager *tileManager(Output *output);
261
262public:
263 QPoint cascadeOffset(const Window *c) const;
264
265private:
266 QTimer *m_quickTileCombineTimer;
267 QuickTileMode m_lastTilingMode;
268
269 //-------------------------------------------------
270 // Unsorted
271
272public:
273 // True when performing Workspace::updateClientArea().
274 // The calls below are valid only in that case.
275 bool inUpdateClientArea() const;
276 StrutRects previousRestrictedMoveArea(const VirtualDesktop *desktop, StrutAreas areas = StrutAreaAll) const;
277 QHash<const Output *, QRect> previousScreenSizes() const;
278
283 const QList<Window *> &stackingOrder() const;
284 QList<Window *> unconstrainedStackingOrder() const;
285 QList<X11Window *> ensureStackingOrder(const QList<X11Window *> &windows) const;
286 QList<Window *> ensureStackingOrder(const QList<Window *> &windows) const;
287
288 Window *topWindowOnDesktop(VirtualDesktop *desktop, Output *output = nullptr, bool unconstrained = false,
289 bool only_normal = true) const;
290 Window *findDesktop(bool topmost, VirtualDesktop *desktop) const;
291 void sendWindowToDesktops(Window *window, const QList<VirtualDesktop *> &desktops, bool dont_activate);
292 void windowToPreviousDesktop(Window *window);
293 void windowToNextDesktop(Window *window);
294 void sendWindowToOutput(Window *window, Output *output);
295
296 void addManualOverlay(xcb_window_t id)
297 {
298 manual_overlays << id;
299 }
300 void removeManualOverlay(xcb_window_t id)
301 {
302 manual_overlays.removeOne(id);
303 }
304
309 void showWindowMenu(const QRect &pos, Window *cl);
311 {
312 return m_userActionsMenu;
313 }
314
315 void showApplicationMenu(const QRect &pos, Window *window, int actionId);
316
317 void updateMinimizedOfTransients(Window *);
318 void updateOnAllDesktopsOfTransients(Window *);
319 void checkTransients(xcb_window_t w);
320
322
323 // D-Bus interface
324 QString supportInformation() const;
325
334 Output *findOutput(Output *reference, Direction direction, bool wrapAround = false) const;
335 void switchToOutput(Output *output);
336
337 QList<Output *> outputs() const;
338 Output *outputAt(const QPointF &pos) const;
339
346 void setShowingDesktop(bool showing, bool animated = true);
347 bool showingDesktop() const;
348
349 void removeX11Window(X11Window *); // Only called from X11Window::destroyWindow() or X11Window::releaseWindow()
350 void setActiveWindow(Window *window);
351 Group *findGroup(xcb_window_t leader) const;
352 void addGroup(Group *group);
353 void removeGroup(Group *group);
354 Group *findClientLeaderGroup(const X11Window *c) const;
356
357 void removeUnmanaged(X11Window *);
358 void removeDeleted(Window *);
359 void addDeleted(Window *);
360
361 bool checkStartupNotification(xcb_window_t w, KStartupInfoId &id, KStartupInfoData &data);
362
363 void focusToNull(); // SELI TODO: Public?
364
365 void windowShortcutUpdated(Window *window);
366 bool shortcutAvailable(const QKeySequence &cut, Window *ignore = nullptr) const;
367 bool globalShortcutsDisabled() const;
368 void disableGlobalShortcutsForClient(bool disable);
369
370 void setWasUserInteraction();
371 bool wasUserInteraction() const;
372
373 qreal packPositionLeft(const Window *window, qreal oldX, bool leftEdge) const;
374 qreal packPositionRight(const Window *window, qreal oldX, bool rightEdge) const;
375 qreal packPositionUp(const Window *window, qreal oldY, bool topEdge) const;
376 qreal packPositionDown(const Window *window, qreal oldY, bool bottomEdge) const;
377
378 void cancelDelayFocus();
379 void requestDelayFocus(Window *);
380
388 void updateFocusMousePosition(const QPointF &pos);
389 QPointF focusMousePosition() const;
390
397 {
398 return m_moveResizeWindow;
399 }
400
401 void quickTileWindow(QuickTileMode mode);
402 void switchWindow(Direction direction);
403
405 {
406 return m_windowKeysDialog;
407 }
408
409 void addInternalWindow(InternalWindow *window);
410 void removeInternalWindow(InternalWindow *window);
411
416 void setInitialDesktop(int desktop);
417
419 {
420 return should_get_focus.contains(w);
421 }
423 {
424 return m_lastActiveWindow;
425 }
426 FocusChain *focusChain() const;
427 ApplicationMenu *applicationMenu() const;
428 Decoration::DecorationBridge *decorationBridge() const;
429 Outline *outline() const;
430 Placement *placement() const;
431 RuleBook *rulebook() const;
432 ScreenEdges *screenEdges() const;
433#if KWIN_BUILD_TABBOX
434 TabBox::TabBox *tabbox() const;
435#endif
436#if KWIN_BUILD_ACTIVITIES
437 Activities *activities() const;
438#endif
439
444 bool applyOutputConfiguration(const OutputConfiguration &config, const QList<Output *> &outputOrder = {});
445
446public Q_SLOTS:
447 void performWindowOperation(KWin::Window *window, Options::WindowOperation op);
448 // Keybindings
449 // void slotSwitchToWindow( int );
450 void slotWindowToDesktop(VirtualDesktop *desktop);
451
452 // void slotWindowToListPosition( int );
453 void slotSwitchToScreen(Output *output);
454 void slotWindowToScreen(Output *output);
455 void slotSwitchToLeftScreen();
456 void slotSwitchToRightScreen();
457 void slotSwitchToAboveScreen();
458 void slotSwitchToBelowScreen();
459 void slotSwitchToPrevScreen();
460 void slotSwitchToNextScreen();
461 void slotWindowToLeftScreen();
462 void slotWindowToRightScreen();
463 void slotWindowToAboveScreen();
464 void slotWindowToBelowScreen();
465 void slotWindowToNextScreen();
466 void slotWindowToPrevScreen();
467
468 void slotToggleShowDesktop();
469
470 void slotWindowMaximize();
471 void slotWindowMaximizeVertical();
472 void slotWindowMaximizeHorizontal();
473 void slotWindowMinimize();
474 void slotWindowShade();
475 void slotWindowRaise();
476 void slotWindowLower();
477 void slotWindowRaiseOrLower();
478 void slotActivateAttentionWindow();
479
480 void slotWindowCenter();
481
482 void slotWindowMoveLeft();
483 void slotWindowMoveRight();
484 void slotWindowMoveUp();
485 void slotWindowMoveDown();
486 void slotWindowExpandHorizontal();
487 void slotWindowExpandVertical();
488 void slotWindowShrinkHorizontal();
489 void slotWindowShrinkVertical();
490
491 void slotIncreaseWindowOpacity();
492 void slotLowerWindowOpacity();
493
494 void slotWindowOperations();
495 void slotWindowClose();
496 void slotWindowMove();
497 void slotWindowResize();
498 void slotWindowAbove();
499 void slotWindowBelow();
500 void slotWindowOnAllDesktops();
501 void slotWindowFullScreen();
502 void slotWindowNoBorder();
503
504 void slotWindowToNextDesktop();
505 void slotWindowToPreviousDesktop();
506 void slotWindowToDesktopRight();
507 void slotWindowToDesktopLeft();
508 void slotWindowToDesktopUp();
509 void slotWindowToDesktopDown();
510
511 void reconfigure();
512 void slotReconfigure();
513
514 void slotKillWindow();
515
516 void slotSetupWindowShortcut();
517 void setupWindowShortcutDone(bool);
518
519 void updateClientArea();
520
521private Q_SLOTS:
522 void desktopResized();
523 void selectWmInputEventMask();
524 void slotUpdateToolWindows();
525 void delayFocus();
526 void slotReloadConfig();
527 void updateCurrentActivity(const QString &new_activity);
528 // virtual desktop handling
529 void slotCurrentDesktopChanged(VirtualDesktop *previousDesktop, VirtualDesktop *newDesktop);
530 void slotCurrentDesktopChanging(VirtualDesktop *currentDesktop, QPointF delta);
531 void slotCurrentDesktopChangingCancelled();
532 void slotDesktopAdded(VirtualDesktop *desktop);
533 void slotDesktopRemoved(VirtualDesktop *desktop);
534 void slotOutputBackendOutputsQueried();
535
536Q_SIGNALS:
543
544 // Signals required for the scripting interface
547 void currentDesktopChanging(KWin::VirtualDesktop *currentDesktop, QPointF delta, KWin::Window *); // for realtime animations
556 void showingDesktopChanged(bool showing, bool animated);
566
567private:
568 void init();
569 void initializeX11();
570 void cleanupX11();
571 void initShortcuts();
572 template<typename Slot>
573 void initShortcut(const QString &actionName, const QString &description, const QKeySequence &shortcut, Slot slot);
574 template<typename T, typename Slot>
575 void initShortcut(const QString &actionName, const QString &description, const QKeySequence &shortcut, T *receiver, Slot slot);
576 void setupWindowShortcut(Window *window);
577 bool switchWindow(Window *window, Direction direction, QPoint curPos, VirtualDesktop *desktop);
578
579 void propagateWindows(bool propagate_new_windows); // Called only from updateStackingOrder
580 QList<Window *> constrainedStackingOrder();
581 void raiseWindowWithinApplication(Window *window);
582 void lowerWindowWithinApplication(Window *window);
583 bool allowFullClientRaising(const Window *window, xcb_timestamp_t timestamp);
584 void blockStackingUpdates(bool block);
585 void updateToolWindows(bool also_hide);
586 void fixPositionAfterCrash(xcb_window_t w, const xcb_get_geometry_reply_t *geom);
587 void saveOldScreenSizes();
588 void addToStack(Window *window);
589 void removeFromStack(Window *window);
590
592 X11Window *createX11Window(xcb_window_t windowId, bool is_mapped);
593 void addX11Window(X11Window *c);
594 void setupWindowConnections(Window *window);
595 X11Window *createUnmanaged(xcb_window_t windowId);
596 void addUnmanaged(X11Window *c);
597
598 void addWaylandWindow(Window *window);
599 void removeWaylandWindow(Window *window);
600
601 //---------------------------------------------------------------------
602
603 void closeActivePopup();
604 void updateWindowVisibilityOnDesktopChange(VirtualDesktop *newDesktop);
605 void activateWindowOnNewDesktop(VirtualDesktop *desktop);
606 Window *findWindowToActivateOnDesktop(VirtualDesktop *desktop);
607 void removeWindow(Window *window);
608 QString getPlacementTrackerHash();
609
610 void updateOutputConfiguration();
611 void updateOutputs(const QList<Output *> &outputOrder = {});
612 void createDpmsFilter();
613 void maybeDestroyDpmsFilter();
614
615 bool breaksShowingDesktop(Window *window) const;
616
617 struct Constraint
618 {
619 Window *below;
620 Window *above;
621 // All constraints above our "below" window
622 QList<Constraint *> parents;
623 // All constraints below our "above" window
624 QList<Constraint *> children;
625 // Used to prevent cycles.
626 bool enqueued = false;
627 };
628
629 QList<Constraint *> m_constraints;
630 QWidget *active_popup;
631 Window *m_activePopupWindow;
632
633 int m_initialDesktop;
634 void updateXStackingOrder();
635 void updateTabbox();
636
637 QList<Output *> m_outputs;
638 Output *m_activeOutput = nullptr;
639 Output *m_activeCursorOutput = nullptr;
640 QList<Output *> m_outputOrder;
641
642 Window *m_activeWindow;
643 Window *m_lastActiveWindow;
644 Window *m_moveResizeWindow;
645
646 // Delay(ed) window focus timer and window
647 QTimer *delayFocusTimer;
648 Window *m_delayFocusWindow;
649 QPointF focusMousePos;
650
651 QList<Window *> m_windows;
652 QList<Window *> deleted;
653
654 QList<Window *> unconstrained_stacking_order; // Topmost last
655 QList<Window *> stacking_order; // Topmost last
656 QList<xcb_window_t> manual_overlays; // Topmost last
657 bool force_restacking;
658 QList<Window *> should_get_focus; // Last is most recent
659 QList<Window *> attention_chain;
660
661 bool showing_desktop;
662
663 QList<Group *> groups;
664
665 bool was_user_interaction;
666 std::unique_ptr<X11EventFilter> m_wasUserInteractionFilter;
667
668 int block_focus;
669
674 UserActionsMenu *m_userActionsMenu;
675
676 void modalActionsSwitch(bool enabled);
677
678 ShortcutDialog *m_windowKeysDialog = nullptr;
679 Window *m_windowKeysWindow = nullptr;
680 bool m_globalShortcutsDisabledForWindow = false;
681
682 // Timer to collect requests for 'reconfigure'
683 QTimer reconfigureTimer;
684
685 QTimer updateToolWindowsTimer;
686
687 static Workspace *_self;
688
689 std::unique_ptr<KStartupInfo> m_startup;
690
691 QHash<const VirtualDesktop *, QRectF> m_workAreas;
692 QHash<const VirtualDesktop *, StrutRects> m_restrictedAreas;
693 QHash<const VirtualDesktop *, QHash<const Output *, QRectF>> m_screenAreas;
694 QRect m_geometry;
695
696 QHash<const Output *, QRect> m_oldScreenGeometries;
697 QHash<const VirtualDesktop *, StrutRects> m_oldRestrictedAreas;
698 bool m_inUpdateClientArea = false;
699
700 int m_setActiveWindowRecursion = 0;
701 int m_blockStackingUpdates = 0; // When > 0, stacking updates are temporarily disabled
702 bool m_blockedPropagatingNewWindows; // Propagate also new windows after enabling stacking updates?
703 std::unique_ptr<Xcb::Window> m_nullFocus;
705
706 std::unique_ptr<KillWindow> m_windowKiller;
707 std::unique_ptr<X11EventFilter> m_movingClientFilter;
708 std::unique_ptr<X11EventFilter> m_syncAlarmFilter;
709
710 SessionManager *m_sessionManager;
711 std::unique_ptr<FocusChain> m_focusChain;
712 std::unique_ptr<ApplicationMenu> m_applicationMenu;
713 std::unique_ptr<Decoration::DecorationBridge> m_decorationBridge;
714 std::unique_ptr<Outline> m_outline;
715 std::unique_ptr<Placement> m_placement;
716 std::unique_ptr<RuleBook> m_rulebook;
717 std::unique_ptr<ScreenEdges> m_screenEdges;
718#if KWIN_BUILD_TABBOX
719 std::unique_ptr<TabBox::TabBox> m_tabbox;
720#endif
721#if KWIN_BUILD_ACTIVITIES
722 std::unique_ptr<Activities> m_activities;
723#endif
724 std::unique_ptr<PlacementTracker> m_placementTracker;
725
726 PlaceholderOutput *m_placeholderOutput = nullptr;
727 std::unique_ptr<PlaceholderInputEventFilter> m_placeholderFilter;
728 std::map<Output *, std::unique_ptr<TileManager>> m_tileManagers;
729 std::unique_ptr<OutputConfigurationStore> m_outputConfigStore;
730 std::unique_ptr<LidSwitchTracker> m_lidSwitchTracker;
731 std::unique_ptr<OrientationSensor> m_orientationSensor;
732 std::unique_ptr<DpmsInputEventFilter> m_dpmsFilter;
733
734private:
736 friend Workspace *workspace();
737};
738
743{
744public:
746 : ws(w)
747 {
748 ws->blockStackingUpdates(true);
749 }
751 {
752 ws->blockStackingUpdates(false);
753 }
754
755private:
756 Workspace *ws;
757};
758
759//---------------------------------------------------------
760// Unsorted
761
762inline QList<Output *> Workspace::outputs() const
763{
764 return m_outputs;
765}
766
768{
769 return m_activeWindow;
770}
771
773{
774 return should_get_focus.count() > 0 ? should_get_focus.last() : m_activeWindow;
775}
776
777inline void Workspace::addGroup(Group *group)
778{
779 Q_EMIT groupAdded(group);
780 groups.append(group);
781}
782
783inline void Workspace::removeGroup(Group *group)
784{
785 groups.removeAll(group);
786}
787
788inline const QList<Window *> &Workspace::stackingOrder() const
789{
790 // TODO: Q_ASSERT( block_stacking_updates == 0 );
791 return stacking_order;
792}
793
795{
796 return was_user_interaction;
797}
798
800{
801 return m_sessionManager;
802}
803
804inline bool Workspace::showingDesktop() const
805{
806 return showing_desktop;
807}
808
810{
811 return m_globalShortcutsDisabledForWindow;
812}
813
815{
816 force_restacking = true;
817 StackingUpdatesBlocker blocker(this); // Do restacking if not blocked
818}
819
820inline void Workspace::updateFocusMousePosition(const QPointF &pos)
821{
822 focusMousePos = pos;
823}
824
825inline QPointF Workspace::focusMousePosition() const
826{
827 return focusMousePos;
828}
829
831{
832 return Workspace::_self;
833}
834
835} // namespace
836Q_DECLARE_OPERATORS_FOR_FLAGS(KWin::Workspace::ActivityFlags)
Singleton class to handle the various focus chains.
Definition focuschain.h:39
This class is used to show the outline of a given geometry.
Definition outline.h:38
Class for controlling screen edges.
Definition screenedge.h:222
StackingUpdatesBlocker(Workspace *w)
Definition workspace.h:745
Menu shown for a Window.
Definition useractions.h:46
void outputOrderChanged()
void groupAdded(KWin::Group *)
Window * mostRecentlyActivatedWindow() const
Definition workspace.h:772
Window * activeWindow() const
Definition workspace.h:767
void outputAdded(KWin::Output *)
void currentDesktopChangingCancelled()
const QList< Window * > & stackingOrder() const
Definition workspace.h:788
SessionInfo * takeSessionInfo(X11Window *)
void workspaceInitialized()
void stackingOrderChanged()
void addGroup(Group *group)
Definition workspace.h:777
bool wasUserInteraction() const
Definition workspace.h:794
void windowRemoved(KWin::Window *)
int unconstainedStackingOrderIndex(const X11Window *c) const
void showingDesktopChanged(bool showing, bool animated)
Window * moveResizeWindow()
Definition workspace.h:396
void currentDesktopChanged(KWin::VirtualDesktop *previousDesktop, KWin::Window *)
void removeGroup(Group *group)
Definition workspace.h:783
friend bool performTransiencyCheck()
void currentDesktopChanging(KWin::VirtualDesktop *currentDesktop, QPointF delta, KWin::Window *)
void windowActivated(KWin::Window *)
void removeManualOverlay(xcb_window_t id)
Definition workspace.h:300
Window * lastActiveWindow() const
Definition workspace.h:422
static Workspace * self()
Definition workspace.h:91
void windowAdded(KWin::Window *)
UserActionsMenu * userActionsMenu() const
Definition workspace.h:310
bool inShouldGetFocus(Window *w) const
Definition workspace.h:418
void updateFocusMousePosition(const QPointF &pos)
Definition workspace.h:820
bool globalShortcutsDisabled() const
Definition workspace.h:809
ShortcutDialog * shortcutDialog() const
Definition workspace.h:404
bool showingDesktop() const
Definition workspace.h:804
QList< Output * > outputs() const
Definition workspace.h:762
const QList< Window * > windows() const
Definition workspace.h:248
void currentActivityChanged()
void configChanged()
void windowMinimizedChanged(KWin::Window *)
void outputRemoved(KWin::Output *)
void geometryChanged()
QPointF focusMousePosition() const
Definition workspace.h:825
bool initializing() const
void forceRestacking()
Definition workspace.h:814
SessionManager * sessionManager() const
Definition workspace.h:799
void deletedRemoved(KWin::Window *)
void addManualOverlay(xcb_window_t id)
Definition workspace.h:296
bool focusChangeEnabled()
Definition workspace.h:213
void outputsChanged()
Gravity
Definition globals.h:150
clientAreaOption
Definition globals.h:48
Workspace * workspace()
Definition workspace.h:830
QList< StrutRect > StrutRects
Definition common.h:60
Predicate
Defines Predicates on how to search for a Client.
Definition x11window.h:42