24std::unique_ptr<RootInfo> RootInfo::s_self;
29 xcb_window_t supportWindow = xcb_generate_id(kwinApp()->x11Connection());
30 const uint32_t values[] = {
true};
31 xcb_create_window(kwinApp()->x11Connection(), XCB_COPY_FROM_PARENT, supportWindow, kwinApp()->x11RootWindow(),
32 0, 0, 1, 1, 0, XCB_COPY_FROM_PARENT,
33 XCB_COPY_FROM_PARENT, XCB_CW_OVERRIDE_REDIRECT, values);
34 const uint32_t lowerValues[] = {XCB_STACK_MODE_BELOW};
37 xcb_configure_window_checked(kwinApp()->x11Connection(), supportWindow, XCB_CONFIG_WINDOW_STACK_MODE, lowerValues)));
39 qCDebug(KWIN_CORE) <<
"Error occurred while lowering support window: " << error->error_code;
42 const NET::Properties properties = NET::Supported
43 | NET::SupportingWMCheck
45 | NET::ClientListStacking
46 | NET::DesktopGeometry
47 | NET::NumberOfDesktops
65 const NET::WindowTypes types = NET::NormalMask
74 const NET::States states = NET::Modal
86 | NET::DemandsAttention
89 NET::Properties2 properties2 = NET::WM2UserTime
91 | NET::WM2AllowedActions
92 | NET::WM2RestackWindow
93 | NET::WM2MoveResizeWindow
94 | NET::WM2ExtendedStrut
95 | NET::WM2ShowingDesktop
96 | NET::WM2DesktopLayout
97 | NET::WM2FullPlacement
98 | NET::WM2FullscreenMonitors
100 | NET::WM2OpaqueRegion
101 | NET::WM2GTKFrameExtents
102 | NET::WM2GTKShowWindowMenu
104#if KWIN_BUILD_ACTIVITIES
105 properties2 |= NET::WM2Activities;
107 const NET::Actions actions = NET::ActionMove
109 | NET::ActionMinimize
113 | NET::ActionMaxHoriz
114 | NET::ActionFullScreen
115 | NET::ActionChangeDesktop
118 s_self = std::make_unique<RootInfo>(supportWindow,
"KWin", properties, types, states, properties2, actions);
127 xcb_window_t supportWindow = s_self->supportWindow();
129 xcb_destroy_window(kwinApp()->x11Connection(), supportWindow);
132RootInfo::RootInfo(xcb_window_t w,
const char *name, NET::Properties properties, NET::WindowTypes types,
133 NET::States states, NET::Properties2 properties2, NET::Actions actions,
int scr)
134 : NETRootInfo(kwinApp()->x11Connection(), w, name, properties, types, states, properties2, actions, scr)
135 , m_activeWindow(activeWindow())
142 VirtualDesktopManager::self()->setCount(n);
147 VirtualDesktopManager::self()->setCurrent(d);
154 if (timestamp == XCB_CURRENT_TIME) {
155 timestamp = c->userTime();
157 if (src != NET::FromApplication && src != FromTool) {
160 if (src == NET::FromTool) {
166 if (c->allowWindowActivation(timestamp,
false)) {
169 }
else if (active_window != XCB_WINDOW_NONE
174 c->demandAttention();
183 if (timestamp == XCB_CURRENT_TIME) {
184 timestamp = c->userTime();
186 if (src != NET::FromApplication && src != FromTool) {
189 c->restackWindow(above, detail, src, timestamp,
true);
201void RootInfo::moveResize(xcb_window_t w,
int x_root,
int y_root,
unsigned long direction, xcb_button_t button, RequestSource source)
205 kwinApp()->updateXTime();
228 c->gotPing(timestamp);
239 xcb_window_t windowId = XCB_WINDOW_NONE;
240 if (
auto x11Window = qobject_cast<X11Window *>(client)) {
241 windowId = x11Window->window();
243 if (m_activeWindow == windowId) {
246 m_activeWindow = windowId;
247 setActiveWindow(m_activeWindow);
255 xcb_window_t rwin, NET::Properties properties, NET::Properties2 properties2)
256 : NETWinInfo(kwinApp()->x11Connection(), window, rwin, properties, properties2, NET::WindowManager)
263 if (
VirtualDesktop *desktop = VirtualDesktopManager::self()->desktopForX11Id(desktopId)) {
275 mask &= ~NET::Sticky;
276 mask &= ~NET::Hidden;
279 if ((mask & NET::FullScreen) != 0 && (state & NET::FullScreen) == 0) {
282 if ((mask & NET::Max) == NET::Max) {
283 m_client->
setMaximize(state & NET::MaxVert, state & NET::MaxHoriz);
284 }
else if (mask & NET::MaxVert) {
286 }
else if (mask & NET::MaxHoriz) {
290 if (mask & NET::Shaded) {
293 if (mask & NET::KeepAbove) {
296 if (mask & NET::KeepBelow) {
299 if (mask & NET::SkipTaskbar) {
302 if (mask & NET::SkipPager) {
305 if (mask & NET::SkipSwitcher) {
308 if (mask & NET::DemandsAttention) {
311 if (mask & NET::Modal) {
312 m_client->
setModal((state & NET::Modal) != 0);
315 if ((mask & NET::FullScreen) != 0 && (state & NET::FullScreen) != 0) {
void restackWindow(xcb_window_t w, RequestSource source, xcb_window_t above, int detail, xcb_timestamp_t timestamp) override
RootInfo(xcb_window_t w, const char *name, NET::Properties properties, NET::WindowTypes types, NET::States states, NET::Properties2 properties2, NET::Actions actions, int scr=-1)
void showWindowMenu(xcb_window_t w, int device_id, int x_root, int y_root) override
void moveResizeWindow(xcb_window_t w, int flags, int x, int y, int width, int height) override
void changeCurrentDesktop(int d) override
static RootInfo * create()
void setActiveClient(Window *client)
void gotPing(xcb_window_t w, xcb_timestamp_t timestamp) override
void moveResize(xcb_window_t w, int x_root, int y_root, unsigned long direction, xcb_button_t button, RequestSource source) override
void changeNumberOfDesktops(int n) override
void changeShowingDesktop(bool showing) override
void closeWindow(xcb_window_t w) override
void changeActiveWindow(xcb_window_t w, NET::RequestSource src, xcb_timestamp_t timestamp, xcb_window_t active_window) override
void changeFullscreenMonitors(NETFullscreenMonitors topology) override
WinInfo(X11Window *c, xcb_window_t window, xcb_window_t rwin, NET::Properties properties, NET::Properties2 properties2)
void changeState(NET::States state, NET::States mask) override
void changeDesktop(int desktop) override
void setModal(bool modal)
void demandAttention(bool set=true)
void setOriginalSkipTaskbar(bool set)
void setSkipPager(bool set)
void setSkipSwitcher(bool set)
Q_INVOKABLE void setMaximize(bool vertically, bool horizontally)
Window * mostRecentlyActivatedWindow() const
X11Window * findClient(std::function< bool(const X11Window *)> func) const
Finds the first Client matching the condition expressed by passed in func.
void activateWindow(Window *window, bool force=false)
static Workspace * self()
void sendWindowToDesktops(Window *window, const QList< VirtualDesktop * > &desktops, bool dont_activate)
void setShowingDesktop(bool showing, bool animated=true)
void NETMoveResizeWindow(int flags, qreal x, qreal y, qreal width, qreal height)
void closeWindow() override
void setFullScreen(bool set) override
void NETMoveResize(qreal x_root, qreal y_root, NET::Direction direction, xcb_button_t button)
void updateFullscreenMonitors(NETFullscreenMonitors topology)
bool allowWindowActivation(xcb_timestamp_t time=-1U, bool focus_in=false)
MaximizeMode maximizeMode() const override
xcb_timestamp_t userTime() const override
qreal fromXNative(int value)
@ MaximizeVertical
The window is maximized vertically.
std::unique_ptr< T, CDeleter > UniqueCPtr