96 bool workspaceEvent(xcb_generic_event_t *);
98 bool hasWindow(
const Window *);
138 void forEachClient(std::function<
void(
X11Window *)> func);
146 X11Window *findUnmanaged(xcb_window_t w)
const;
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);
160 Window *findInternal(QWindow *w)
const;
170 QRect geometry()
const;
175 Output *xineramaIndexToOutput(
int index)
const;
177 void setOutputOrder(
const QList<Output *> &order);
178 QList<Output *> outputOrder()
const;
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);
190 Window *activeWindow()
const;
196 Window *mostRecentlyActivatedWindow()
const;
200 void activateWindow(
Window *window,
bool force =
false);
201 bool requestFocus(
Window *window,
bool force =
false);
203 ActivityFocus = 1 << 0,
204 ActivityFocusForce = 1 << 1 | ActivityFocus,
205 ActivityRaise = 1 << 2
207 Q_DECLARE_FLAGS(ActivityFlags, ActivityFlag)
208 bool takeActivity(
Window *window, ActivityFlags flags);
210 void gotFocusIn(
const Window *window);
211 void setShouldGetFocus(
Window *window);
212 bool activateNextWindow(
Window *window);
215 return block_focus == 0;
221 void setMoveResizeWindow(
Window *window);
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();
242 void windowHidden(
Window *);
243 void windowAttentionChanged(
Window *,
bool set);
253 void stackScreenEdgesUnderOverrideRedirect();
263 QPoint cascadeOffset(
const Window *c)
const;
266 QTimer *m_quickTileCombineTimer;
267 QuickTileMode m_lastTilingMode;
275 bool inUpdateClientArea()
const;
277 QHash<const Output *, QRect> previousScreenSizes()
const;
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;
289 bool only_normal =
true)
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);
298 manual_overlays << id;
302 manual_overlays.removeOne(
id);
309 void showWindowMenu(
const QRect &pos,
Window *cl);
312 return m_userActionsMenu;
315 void showApplicationMenu(
const QRect &pos,
Window *window,
int actionId);
317 void updateMinimizedOfTransients(
Window *);
318 void updateOnAllDesktopsOfTransients(
Window *);
319 void checkTransients(xcb_window_t w);
324 QString supportInformation()
const;
334 Output *findOutput(
Output *reference, Direction direction,
bool wrapAround =
false)
const;
335 void switchToOutput(
Output *output);
337 QList<Output *> outputs()
const;
338 Output *outputAt(
const QPointF &pos)
const;
346 void setShowingDesktop(
bool showing,
bool animated =
true);
347 bool showingDesktop()
const;
350 void setActiveWindow(
Window *window);
351 Group *findGroup(xcb_window_t leader)
const;
352 void addGroup(
Group *group);
353 void removeGroup(
Group *group);
358 void removeDeleted(
Window *);
359 void addDeleted(
Window *);
361 bool checkStartupNotification(xcb_window_t w, KStartupInfoId &
id, KStartupInfoData &data);
365 void windowShortcutUpdated(
Window *window);
366 bool shortcutAvailable(
const QKeySequence &cut,
Window *ignore =
nullptr)
const;
367 bool globalShortcutsDisabled()
const;
368 void disableGlobalShortcutsForClient(
bool disable);
370 void setWasUserInteraction();
371 bool wasUserInteraction()
const;
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;
378 void cancelDelayFocus();
379 void requestDelayFocus(
Window *);
388 void updateFocusMousePosition(
const QPointF &pos);
389 QPointF focusMousePosition()
const;
398 return m_moveResizeWindow;
401 void quickTileWindow(QuickTileMode mode);
402 void switchWindow(Direction direction);
406 return m_windowKeysDialog;
416 void setInitialDesktop(
int desktop);
420 return should_get_focus.contains(w);
424 return m_lastActiveWindow;
436#if KWIN_BUILD_ACTIVITIES
444 bool applyOutputConfiguration(
const OutputConfiguration &config,
const QList<Output *> &outputOrder = {});
447 void performWindowOperation(
KWin::Window *window, Options::WindowOperation op);
450 void slotWindowToDesktop(VirtualDesktop *desktop);
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();
468 void slotToggleShowDesktop();
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();
480 void slotWindowCenter();
482 void slotWindowMoveLeft();
483 void slotWindowMoveRight();
484 void slotWindowMoveUp();
485 void slotWindowMoveDown();
486 void slotWindowExpandHorizontal();
487 void slotWindowExpandVertical();
488 void slotWindowShrinkHorizontal();
489 void slotWindowShrinkVertical();
491 void slotIncreaseWindowOpacity();
492 void slotLowerWindowOpacity();
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();
504 void slotWindowToNextDesktop();
505 void slotWindowToPreviousDesktop();
506 void slotWindowToDesktopRight();
507 void slotWindowToDesktopLeft();
508 void slotWindowToDesktopUp();
509 void slotWindowToDesktopDown();
512 void slotReconfigure();
514 void slotKillWindow();
516 void slotSetupWindowShortcut();
517 void setupWindowShortcutDone(
bool);
519 void updateClientArea();
522 void desktopResized();
523 void selectWmInputEventMask();
524 void slotUpdateToolWindows();
526 void slotReloadConfig();
527 void updateCurrentActivity(
const QString &new_activity);
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();
569 void initializeX11();
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);
579 void propagateWindows(
bool propagate_new_windows);
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);
592 X11Window *createX11Window(xcb_window_t windowId,
bool is_mapped);
594 void setupWindowConnections(
Window *window);
595 X11Window *createUnmanaged(xcb_window_t windowId);
598 void addWaylandWindow(
Window *window);
599 void removeWaylandWindow(
Window *window);
603 void closeActivePopup();
604 void updateWindowVisibilityOnDesktopChange(
VirtualDesktop *newDesktop);
607 void removeWindow(
Window *window);
608 QString getPlacementTrackerHash();
610 void updateOutputConfiguration();
611 void updateOutputs(
const QList<Output *> &outputOrder = {});
612 void createDpmsFilter();
613 void maybeDestroyDpmsFilter();
615 bool breaksShowingDesktop(
Window *window)
const;
622 QList<Constraint *> parents;
624 QList<Constraint *> children;
626 bool enqueued =
false;
629 QList<Constraint *> m_constraints;
630 QWidget *active_popup;
631 Window *m_activePopupWindow;
633 int m_initialDesktop;
634 void updateXStackingOrder();
637 QList<Output *> m_outputs;
638 Output *m_activeOutput =
nullptr;
639 Output *m_activeCursorOutput =
nullptr;
640 QList<Output *> m_outputOrder;
643 Window *m_lastActiveWindow;
644 Window *m_moveResizeWindow;
647 QTimer *delayFocusTimer;
648 Window *m_delayFocusWindow;
649 QPointF focusMousePos;
651 QList<Window *> m_windows;
652 QList<Window *> deleted;
654 QList<Window *> unconstrained_stacking_order;
655 QList<Window *> stacking_order;
656 QList<xcb_window_t> manual_overlays;
657 bool force_restacking;
658 QList<Window *> should_get_focus;
659 QList<Window *> attention_chain;
661 bool showing_desktop;
663 QList<Group *> groups;
665 bool was_user_interaction;
666 std::unique_ptr<X11EventFilter> m_wasUserInteractionFilter;
674 UserActionsMenu *m_userActionsMenu;
676 void modalActionsSwitch(
bool enabled);
678 ShortcutDialog *m_windowKeysDialog =
nullptr;
679 Window *m_windowKeysWindow =
nullptr;
680 bool m_globalShortcutsDisabledForWindow =
false;
683 QTimer reconfigureTimer;
685 QTimer updateToolWindowsTimer;
687 static Workspace *_self;
689 std::unique_ptr<KStartupInfo> m_startup;
691 QHash<const VirtualDesktop *, QRectF> m_workAreas;
692 QHash<const VirtualDesktop *, StrutRects> m_restrictedAreas;
693 QHash<const VirtualDesktop *, QHash<const Output *, QRectF>> m_screenAreas;
696 QHash<const Output *, QRect> m_oldScreenGeometries;
697 QHash<const VirtualDesktop *, StrutRects> m_oldRestrictedAreas;
698 bool m_inUpdateClientArea =
false;
700 int m_setActiveWindowRecursion = 0;
701 int m_blockStackingUpdates = 0;
702 bool m_blockedPropagatingNewWindows;
703 std::unique_ptr<Xcb::Window> m_nullFocus;
706 std::unique_ptr<KillWindow> m_windowKiller;
707 std::unique_ptr<X11EventFilter> m_movingClientFilter;
708 std::unique_ptr<X11EventFilter> m_syncAlarmFilter;
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;
719 std::unique_ptr<TabBox::TabBox> m_tabbox;
721#if KWIN_BUILD_ACTIVITIES
722 std::unique_ptr<Activities> m_activities;
724 std::unique_ptr<PlacementTracker> m_placementTracker;
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;