x11: Prefer kwinApp()->x11RootWindow() over rootWindow()

This commit is contained in:
Vlad Zahorodnii 2022-02-09 00:28:03 +02:00
parent ec7198ee33
commit c0d0fab049
11 changed files with 43 additions and 40 deletions

View file

@ -94,7 +94,7 @@ class CompositorSelectionOwner : public KSelectionOwner
Q_OBJECT Q_OBJECT
public: public:
CompositorSelectionOwner(const char *selection) CompositorSelectionOwner(const char *selection)
: KSelectionOwner(selection, kwinApp()->x11Connection(), rootWindow()) : KSelectionOwner(selection, kwinApp()->x11Connection(), kwinApp()->x11RootWindow())
, m_owning(false) , m_owning(false)
{ {
connect (this, &CompositorSelectionOwner::lostOwnership, connect (this, &CompositorSelectionOwner::lostOwnership,

View file

@ -632,7 +632,7 @@ QList<EffectWindow*> EffectsHandlerImpl::elevatedWindows() const
inline inline
xcb_window_t EffectsHandlerImpl::x11RootWindow() const xcb_window_t EffectsHandlerImpl::x11RootWindow() const
{ {
return rootWindow(); return kwinApp()->x11RootWindow();
} }
inline inline

View file

@ -156,7 +156,7 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
// events that should be handled before Clients can get them // events that should be handled before Clients can get them
switch (eventType) { switch (eventType) {
case XCB_CONFIGURE_NOTIFY: case XCB_CONFIGURE_NOTIFY:
if (reinterpret_cast<xcb_configure_notify_event_t*>(e)->event == rootWindow()) if (reinterpret_cast<xcb_configure_notify_event_t*>(e)->event == kwinApp()->x11RootWindow())
markXStackingOrderAsDirty(); markXStackingOrderAsDirty();
break; break;
}; };
@ -184,7 +184,7 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
switch (eventType) { switch (eventType) {
case XCB_CREATE_NOTIFY: { case XCB_CREATE_NOTIFY: {
const auto *event = reinterpret_cast<xcb_create_notify_event_t*>(e); const auto *event = reinterpret_cast<xcb_create_notify_event_t*>(e);
if (event->parent == rootWindow() && if (event->parent == kwinApp()->x11RootWindow() &&
!QWidget::find(event->window) && !QWidget::find(event->window) &&
!event->override_redirect) { !event->override_redirect) {
// see comments for allowClientActivation() // see comments for allowClientActivation()
@ -251,7 +251,7 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
case XCB_CONFIGURE_REQUEST: { case XCB_CONFIGURE_REQUEST: {
const auto *event = reinterpret_cast<xcb_configure_request_event_t*>(e); const auto *event = reinterpret_cast<xcb_configure_request_event_t*>(e);
if (event->parent == rootWindow()) { if (event->parent == kwinApp()->x11RootWindow()) {
uint32_t values[5] = { 0, 0, 0, 0, 0}; uint32_t values[5] = { 0, 0, 0, 0, 0};
const uint32_t value_mask = event->value_mask const uint32_t value_mask = event->value_mask
& (XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_BORDER_WIDTH); & (XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_BORDER_WIDTH);
@ -278,13 +278,13 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
} }
case XCB_FOCUS_IN: { case XCB_FOCUS_IN: {
const auto *event = reinterpret_cast<xcb_focus_in_event_t*>(e); const auto *event = reinterpret_cast<xcb_focus_in_event_t*>(e);
if (event->event == rootWindow() if (event->event == kwinApp()->x11RootWindow()
&& (event->detail == XCB_NOTIFY_DETAIL_NONE || event->detail == XCB_NOTIFY_DETAIL_POINTER_ROOT || event->detail == XCB_NOTIFY_DETAIL_INFERIOR)) { && (event->detail == XCB_NOTIFY_DETAIL_NONE || event->detail == XCB_NOTIFY_DETAIL_POINTER_ROOT || event->detail == XCB_NOTIFY_DETAIL_INFERIOR)) {
Xcb::CurrentInput currentInput; Xcb::CurrentInput currentInput;
updateXTime(); // focusToNull() uses xTime(), which is old now (FocusIn has no timestamp) updateXTime(); // focusToNull() uses xTime(), which is old now (FocusIn has no timestamp)
// it seems we can "loose" focus reversions when the closing client hold a grab // it seems we can "loose" focus reversions when the closing client hold a grab
// => catch the typical pattern (though we don't want the focus on the root anyway) #348935 // => catch the typical pattern (though we don't want the focus on the root anyway) #348935
const bool lostFocusPointerToRoot = currentInput->focus == rootWindow() && event->detail == XCB_NOTIFY_DETAIL_INFERIOR; const bool lostFocusPointerToRoot = currentInput->focus == kwinApp()->x11RootWindow() && event->detail == XCB_NOTIFY_DETAIL_INFERIOR;
if (!currentInput.isNull() && (currentInput->focus == XCB_WINDOW_NONE || currentInput->focus == XCB_INPUT_FOCUS_POINTER_ROOT || lostFocusPointerToRoot)) { if (!currentInput.isNull() && (currentInput->focus == XCB_WINDOW_NONE || currentInput->focus == XCB_INPUT_FOCUS_POINTER_ROOT || lostFocusPointerToRoot)) {
//kWarning( 1212 ) << "X focus set to None/PointerRoot, reseting focus" ; //kWarning( 1212 ) << "X focus set to None/PointerRoot, reseting focus" ;
AbstractClient *c = mostRecentlyActivatedClient(); AbstractClient *c = mostRecentlyActivatedClient();
@ -357,7 +357,7 @@ bool X11Client::windowEvent(xcb_generic_event_t *e)
setOpacity(info->opacityF()); setOpacity(info->opacityF());
} else { } else {
// forward to the frame if there's possibly another compositing manager running // forward to the frame if there's possibly another compositing manager running
NETWinInfo i(kwinApp()->x11Connection(), frameId(), rootWindow(), NET::Properties(), NET::Properties2()); NETWinInfo i(kwinApp()->x11Connection(), frameId(), kwinApp()->x11RootWindow(), NET::Properties(), NET::Properties2());
i.setOpacity(info->opacity()); i.setOpacity(info->opacity());
} }
} }
@ -535,7 +535,7 @@ void X11Client::unmapNotifyEvent(xcb_unmap_notify_event_t *e)
if (e->event != wrapperId()) { if (e->event != wrapperId()) {
// most probably event from root window when initially reparenting // most probably event from root window when initially reparenting
bool ignore = true; bool ignore = true;
if (e->event == rootWindow() && (e->response_type & 0x80)) if (e->event == kwinApp()->x11RootWindow() && (e->response_type & 0x80))
ignore = false; // XWithdrawWindow() ignore = false; // XWithdrawWindow()
if (ignore) if (ignore)
return; return;

View file

@ -34,7 +34,7 @@ Group::Group(xcb_window_t leader_P)
{ {
if (leader_P != XCB_WINDOW_NONE) { if (leader_P != XCB_WINDOW_NONE) {
leader_client = workspace()->findClient(Predicate::WindowMatch, leader_P); leader_client = workspace()->findClient(Predicate::WindowMatch, leader_P);
leader_info = new NETWinInfo(kwinApp()->x11Connection(), leader_P, rootWindow(), leader_info = new NETWinInfo(kwinApp()->x11Connection(), leader_P, kwinApp()->x11RootWindow(),
NET::Properties(), NET::WM2StartupId); NET::Properties(), NET::WM2StartupId);
} }
effect_group = new EffectWindowGroupImpl(this); effect_group = new EffectWindowGroupImpl(this);
@ -53,7 +53,7 @@ QIcon Group::icon() const
return leader_client->icon(); return leader_client->icon();
else if (leader_wid != XCB_WINDOW_NONE) { else if (leader_wid != XCB_WINDOW_NONE) {
QIcon ic; QIcon ic;
NETWinInfo info(kwinApp()->x11Connection(), leader_wid, rootWindow(), NET::WMIcon, NET::WM2IconPixmap); NETWinInfo info(kwinApp()->x11Connection(), leader_wid, kwinApp()->x11RootWindow(), NET::WMIcon, NET::WM2IconPixmap);
auto readIcon = [&ic, &info, this](int size, bool scale = true) { auto readIcon = [&ic, &info, this](int size, bool scale = true) {
const QPixmap pix = KWindowSystem::icon(leader_wid, size, size, scale, KWindowSystem::NETWM | KWindowSystem::WMHints, &info); const QPixmap pix = KWindowSystem::icon(leader_wid, size, size, scale, KWindowSystem::NETWM | KWindowSystem::WMHints, &info);
if (!pix.isNull()) { if (!pix.isNull()) {

View file

@ -192,7 +192,7 @@ void ApplicationX11::lostSelection()
destroyCompositor(); destroyCompositor();
destroyWorkspace(); destroyWorkspace();
// Remove windowmanager privileges // Remove windowmanager privileges
Xcb::selectInput(rootWindow(), XCB_EVENT_MASK_PROPERTY_CHANGE); Xcb::selectInput(kwinApp()->x11RootWindow(), XCB_EVENT_MASK_PROPERTY_CHANGE);
removeNativeX11EventFilter(); removeNativeX11EventFilter();
quit(); quit();
} }
@ -240,7 +240,7 @@ void ApplicationX11::performStartup()
const uint32_t maskValues[] = {XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT}; const uint32_t maskValues[] = {XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT};
ScopedCPointer<xcb_generic_error_t> redirectCheck(xcb_request_check(kwinApp()->x11Connection(), ScopedCPointer<xcb_generic_error_t> redirectCheck(xcb_request_check(kwinApp()->x11Connection(),
xcb_change_window_attributes_checked(kwinApp()->x11Connection(), xcb_change_window_attributes_checked(kwinApp()->x11Connection(),
rootWindow(), kwinApp()->x11RootWindow(),
XCB_CW_EVENT_MASK, XCB_CW_EVENT_MASK,
maskValues))); maskValues)));
if (!redirectCheck.isNull()) { if (!redirectCheck.isNull()) {

View file

@ -29,7 +29,7 @@ RootInfo *RootInfo::create()
Q_ASSERT(!s_self); Q_ASSERT(!s_self);
xcb_window_t supportWindow = xcb_generate_id(kwinApp()->x11Connection()); xcb_window_t supportWindow = xcb_generate_id(kwinApp()->x11Connection());
const uint32_t values[] = {true}; const uint32_t values[] = {true};
xcb_create_window(kwinApp()->x11Connection(), XCB_COPY_FROM_PARENT, supportWindow, KWin::rootWindow(), xcb_create_window(kwinApp()->x11Connection(), XCB_COPY_FROM_PARENT, supportWindow, kwinApp()->x11RootWindow(),
0, 0, 1, 1, 0, XCB_COPY_FROM_PARENT, 0, 0, 1, 1, 0, XCB_COPY_FROM_PARENT,
XCB_COPY_FROM_PARENT, XCB_CW_OVERRIDE_REDIRECT, values); XCB_COPY_FROM_PARENT, XCB_CW_OVERRIDE_REDIRECT, values);
const uint32_t lowerValues[] = { XCB_STACK_MODE_BELOW }; // See usage in layers.cpp const uint32_t lowerValues[] = { XCB_STACK_MODE_BELOW }; // See usage in layers.cpp

View file

@ -104,7 +104,7 @@ bool Unmanaged::track(xcb_window_t w)
checkOutput(); checkOutput();
m_visual = attr->visual; m_visual = attr->visual;
bit_depth = geo->depth; bit_depth = geo->depth;
info = new NETWinInfo(kwinApp()->x11Connection(), w, rootWindow(), info = new NETWinInfo(kwinApp()->x11Connection(), w, kwinApp()->x11RootWindow(),
NET::WMWindowType | NET::WMPid, NET::WMWindowType | NET::WMPid,
NET::WM2Opacity | NET::WM2Opacity |
NET::WM2WindowRole | NET::WM2WindowRole |

View file

@ -312,7 +312,10 @@ void Workspace::initializeX11()
// Compatibility // Compatibility
int32_t data = 1; int32_t data = 1;
xcb_change_property(kwinApp()->x11Connection(), XCB_PROP_MODE_APPEND, rootWindow(), atoms->kwin_running, xcb_change_property(kwinApp()->x11Connection(),
XCB_PROP_MODE_APPEND,
kwinApp()->x11RootWindow(),
atoms->kwin_running,
atoms->kwin_running, 32, 1, &data); atoms->kwin_running, 32, 1, &data);
if (kwinApp()->operationMode() == Application::OperationModeX11) { if (kwinApp()->operationMode() == Application::OperationModeX11) {
@ -352,7 +355,7 @@ void Workspace::initializeX11()
// Begin updates blocker block // Begin updates blocker block
StackingUpdatesBlocker blocker(this); StackingUpdatesBlocker blocker(this);
Xcb::Tree tree(rootWindow()); Xcb::Tree tree(kwinApp()->x11RootWindow());
xcb_window_t *wins = xcb_query_tree_children(tree.data()); xcb_window_t *wins = xcb_query_tree_children(tree.data());
QVector<Xcb::WindowAttributes> windowAttributes(tree->children_len); QVector<Xcb::WindowAttributes> windowAttributes(tree->children_len);
@ -1241,12 +1244,12 @@ void Workspace::slotDesktopRemoved(VirtualDesktop *desktop)
void Workspace::selectWmInputEventMask() void Workspace::selectWmInputEventMask()
{ {
uint32_t presentMask = 0; uint32_t presentMask = 0;
Xcb::WindowAttributes attr(rootWindow()); Xcb::WindowAttributes attr(kwinApp()->x11RootWindow());
if (!attr.isNull()) { if (!attr.isNull()) {
presentMask = attr->your_event_mask; presentMask = attr->your_event_mask;
} }
Xcb::selectInput(rootWindow(), Xcb::selectInput(kwinApp()->x11RootWindow(),
presentMask | presentMask |
XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_PRESS |
XCB_EVENT_MASK_PROPERTY_CHANGE | XCB_EVENT_MASK_PROPERTY_CHANGE |
@ -1319,7 +1322,7 @@ bool Workspace::isOnCurrentHead()
return !is_multihead; return !is_multihead;
} }
return rootWindow() == geometry->root; return kwinApp()->x11RootWindow() == geometry->root;
} }
void Workspace::sendClientToOutput(AbstractClient *client, AbstractOutput *output) void Workspace::sendClientToOutput(AbstractClient *client, AbstractOutput *output)
@ -2866,7 +2869,7 @@ void Workspace::setMoveResizeClient(AbstractClient *c)
// (the property with the size of the frame remains on the window after the crash). // (the property with the size of the frame remains on the window after the crash).
void Workspace::fixPositionAfterCrash(xcb_window_t w, const xcb_get_geometry_reply_t *geometry) void Workspace::fixPositionAfterCrash(xcb_window_t w, const xcb_get_geometry_reply_t *geometry)
{ {
NETWinInfo i(kwinApp()->x11Connection(), w, rootWindow(), NET::WMFrameExtents, NET::Properties2()); NETWinInfo i(kwinApp()->x11Connection(), w, kwinApp()->x11RootWindow(), NET::WMFrameExtents, NET::Properties2());
NETStrut frame = i.frameExtents(); NETStrut frame = i.frameExtents();
if (frame.left != 0 || frame.top != 0) { if (frame.left != 0 || frame.top != 0) {

View file

@ -297,7 +297,7 @@ void X11Client::releaseWindow(bool on_shutdown)
m_client.deleteProperty(atoms->kde_net_wm_user_creation_time); m_client.deleteProperty(atoms->kde_net_wm_user_creation_time);
m_client.deleteProperty(atoms->net_frame_extents); m_client.deleteProperty(atoms->net_frame_extents);
m_client.deleteProperty(atoms->kde_net_wm_frame_strut); m_client.deleteProperty(atoms->kde_net_wm_frame_strut);
m_client.reparent(rootWindow(), m_bufferGeometry.x(), m_bufferGeometry.y()); m_client.reparent(kwinApp()->x11RootWindow(), m_bufferGeometry.x(), m_bufferGeometry.y());
xcb_change_save_set(c, XCB_SET_MODE_DELETE, m_client); xcb_change_save_set(c, XCB_SET_MODE_DELETE, m_client);
m_client.selectInput(XCB_EVENT_MASK_NO_EVENT); m_client.selectInput(XCB_EVENT_MASK_NO_EVENT);
if (on_shutdown) if (on_shutdown)
@ -420,7 +420,7 @@ bool X11Client::manage(xcb_window_t w, bool isMapped)
m_geometryHints.init(window()); m_geometryHints.init(window());
m_motif.init(window()); m_motif.init(window());
info = new WinInfo(this, m_client, rootWindow(), properties, properties2); info = new WinInfo(this, m_client, kwinApp()->x11RootWindow(), properties, properties2);
if (isDesktop() && bit_depth == 32) { if (isDesktop() && bit_depth == 32) {
// force desktop windows to be opaque. It's a desktop after all, there is no window below // force desktop windows to be opaque. It's a desktop after all, there is no window below
@ -953,7 +953,7 @@ bool X11Client::manage(xcb_window_t w, bool isMapped)
if (opacity() == 1.0) { if (opacity() == 1.0) {
return; return;
} }
NETWinInfo info(kwinApp()->x11Connection(), frameId(), rootWindow(), NET::Properties(), NET::Properties2()); NETWinInfo info(kwinApp()->x11Connection(), frameId(), kwinApp()->x11RootWindow(), NET::Properties(), NET::Properties2());
info.setOpacityF(opacity()); info.setOpacityF(opacity());
} }
); );
@ -1014,7 +1014,7 @@ void X11Client::embedClient(xcb_window_t w, xcb_visualid_t visualid, xcb_colorma
// Create the frame window // Create the frame window
xcb_window_t frame = xcb_generate_id(conn); xcb_window_t frame = xcb_generate_id(conn);
xcb_create_window(conn, depth, frame, rootWindow(), 0, 0, 1, 1, 0, xcb_create_window(conn, depth, frame, kwinApp()->x11RootWindow(), 0, 0, 1, 1, 0,
XCB_WINDOW_CLASS_INPUT_OUTPUT, visualid, cw_mask, cw_values); XCB_WINDOW_CLASS_INPUT_OUTPUT, visualid, cw_mask, cw_values);
m_frame.reset(frame); m_frame.reset(frame);
@ -1752,7 +1752,7 @@ void X11Client::sendClientMessage(xcb_window_t w, xcb_atom_t a, xcb_atom_t proto
ev.data.data32[3] = data2; ev.data.data32[3] = data2;
ev.data.data32[4] = data3; ev.data.data32[4] = data3;
uint32_t eventMask = 0; uint32_t eventMask = 0;
if (w == rootWindow()) { if (w == kwinApp()->x11RootWindow()) {
eventMask = XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT; // Magic! eventMask = XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT; // Magic!
} }
xcb_send_event(kwinApp()->x11Connection(), false, w, eventMask, reinterpret_cast<const char*>(&ev)); xcb_send_event(kwinApp()->x11Connection(), false, w, eventMask, reinterpret_cast<const char*>(&ev));
@ -3113,24 +3113,24 @@ xcb_window_t X11Client::verifyTransientFor(xcb_window_t new_transient_for, bool
// make sure splashscreens are shown above all their app's windows, even though // make sure splashscreens are shown above all their app's windows, even though
// they're in Normal layer // they're in Normal layer
if (isSplash() && new_transient_for == XCB_WINDOW_NONE) if (isSplash() && new_transient_for == XCB_WINDOW_NONE)
new_transient_for = rootWindow(); new_transient_for = kwinApp()->x11RootWindow();
if (new_transient_for == XCB_WINDOW_NONE) { if (new_transient_for == XCB_WINDOW_NONE) {
if (set) // sometimes WM_TRANSIENT_FOR is set to None, instead of root window if (set) // sometimes WM_TRANSIENT_FOR is set to None, instead of root window
new_property_value = new_transient_for = rootWindow(); new_property_value = new_transient_for = kwinApp()->x11RootWindow();
else else
return XCB_WINDOW_NONE; return XCB_WINDOW_NONE;
} }
if (new_transient_for == window()) { // pointing to self if (new_transient_for == window()) { // pointing to self
// also fix the property itself // also fix the property itself
qCWarning(KWIN_CORE) << "Client " << this << " has WM_TRANSIENT_FOR poiting to itself." ; qCWarning(KWIN_CORE) << "Client " << this << " has WM_TRANSIENT_FOR poiting to itself." ;
new_property_value = new_transient_for = rootWindow(); new_property_value = new_transient_for = kwinApp()->x11RootWindow();
} }
// The transient_for window may be embedded in another application, // The transient_for window may be embedded in another application,
// so kwin cannot see it. Try to find the managed client for the // so kwin cannot see it. Try to find the managed client for the
// window and fix the transient_for property if possible. // window and fix the transient_for property if possible.
xcb_window_t before_search = new_transient_for; xcb_window_t before_search = new_transient_for;
while (new_transient_for != XCB_WINDOW_NONE while (new_transient_for != XCB_WINDOW_NONE
&& new_transient_for != rootWindow() && new_transient_for != kwinApp()->x11RootWindow()
&& !workspace()->findClient(Predicate::WindowMatch, new_transient_for)) { && !workspace()->findClient(Predicate::WindowMatch, new_transient_for)) {
Xcb::Tree tree(new_transient_for); Xcb::Tree tree(new_transient_for);
if (tree.isNull()) { if (tree.isNull()) {
@ -3151,20 +3151,20 @@ xcb_window_t X11Client::verifyTransientFor(xcb_window_t new_transient_for, bool
// windows in the group // windows in the group
int count = 20; int count = 20;
xcb_window_t loop_pos = new_transient_for; xcb_window_t loop_pos = new_transient_for;
while (loop_pos != XCB_WINDOW_NONE && loop_pos != rootWindow()) { while (loop_pos != XCB_WINDOW_NONE && loop_pos != kwinApp()->x11RootWindow()) {
X11Client *pos = workspace()->findClient(Predicate::WindowMatch, loop_pos); X11Client *pos = workspace()->findClient(Predicate::WindowMatch, loop_pos);
if (pos == nullptr) if (pos == nullptr)
break; break;
loop_pos = pos->m_transientForId; loop_pos = pos->m_transientForId;
if (--count == 0 || pos == this) { if (--count == 0 || pos == this) {
qCWarning(KWIN_CORE) << "Client " << this << " caused WM_TRANSIENT_FOR loop." ; qCWarning(KWIN_CORE) << "Client " << this << " caused WM_TRANSIENT_FOR loop." ;
new_transient_for = rootWindow(); new_transient_for = kwinApp()->x11RootWindow();
} }
} }
if (new_transient_for != rootWindow() if (new_transient_for != kwinApp()->x11RootWindow()
&& workspace()->findClient(Predicate::WindowMatch, new_transient_for) == nullptr) { && workspace()->findClient(Predicate::WindowMatch, new_transient_for) == nullptr) {
// it's transient for a specific window, but that window is not mapped // it's transient for a specific window, but that window is not mapped
new_transient_for = rootWindow(); new_transient_for = kwinApp()->x11RootWindow();
} }
if (new_property_value != m_originalTransientForId) if (new_property_value != m_originalTransientForId)
Xcb::setTransientFor(window(), new_property_value); Xcb::setTransientFor(window(), new_property_value);
@ -3195,7 +3195,7 @@ void X11Client::removeTransient(AbstractClient* cl)
if (X11Client *c = dynamic_cast<X11Client *>(cl)) { if (X11Client *c = dynamic_cast<X11Client *>(cl)) {
c->m_transientForId = XCB_WINDOW_NONE; c->m_transientForId = XCB_WINDOW_NONE;
c->setTransientFor(nullptr); // SELI c->setTransientFor(nullptr); // SELI
// SELI cl->setTransient( rootWindow()); // SELI cl->setTransient( kwinApp()->x11RootWindow());
c->setTransient(XCB_WINDOW_NONE); c->setTransient(XCB_WINDOW_NONE);
} }
} }
@ -4524,7 +4524,7 @@ bool X11Client::doStartInteractiveMoveResize()
// something with Enter/LeaveNotify events, looks like XFree performance problem or something *shrug* // something with Enter/LeaveNotify events, looks like XFree performance problem or something *shrug*
// (https://lists.kde.org/?t=107302193400001&r=1&w=2) // (https://lists.kde.org/?t=107302193400001&r=1&w=2)
QRect r = workspace()->clientArea(FullArea, this); QRect r = workspace()->clientArea(FullArea, this);
m_moveResizeGrabWindow.create(r, XCB_WINDOW_CLASS_INPUT_ONLY, 0, nullptr, rootWindow()); m_moveResizeGrabWindow.create(r, XCB_WINDOW_CLASS_INPUT_ONLY, 0, nullptr, kwinApp()->x11RootWindow());
m_moveResizeGrabWindow.map(); m_moveResizeGrabWindow.map();
m_moveResizeGrabWindow.raise(); m_moveResizeGrabWindow.raise();
updateXTime(); updateXTime();

View file

@ -542,14 +542,14 @@ inline bool X11Client::isClientSideDecorated() const
inline bool X11Client::groupTransient() const inline bool X11Client::groupTransient() const
{ {
return m_transientForId == rootWindow(); return m_transientForId == kwinApp()->x11RootWindow();
} }
// Needed because verifyTransientFor() may set transient_for_id to root window, // Needed because verifyTransientFor() may set transient_for_id to root window,
// if the original value has a problem (window doesn't exist, etc.) // if the original value has a problem (window doesn't exist, etc.)
inline bool X11Client::wasOriginallyGroupTransient() const inline bool X11Client::wasOriginallyGroupTransient() const
{ {
return m_originalTransientForId == rootWindow(); return m_originalTransientForId == kwinApp()->x11RootWindow();
} }
inline bool X11Client::isTransient() const inline bool X11Client::isTransient() const

View file

@ -443,7 +443,7 @@ void Xwayland::handleXwaylandReady()
void Xwayland::updatePrimary(AbstractOutput *primaryOutput) void Xwayland::updatePrimary(AbstractOutput *primaryOutput)
{ {
Xcb::RandR::ScreenResources resources(rootWindow()); Xcb::RandR::ScreenResources resources(kwinApp()->x11RootWindow());
xcb_randr_crtc_t *crtcs = resources.crtcs(); xcb_randr_crtc_t *crtcs = resources.crtcs();
if (!crtcs) { if (!crtcs) {
return; return;
@ -456,7 +456,7 @@ void Xwayland::updatePrimary(AbstractOutput *primaryOutput)
auto outputs = crtcInfo.outputs(); auto outputs = crtcInfo.outputs();
if (outputs && crtcInfo->num_outputs > 0) { if (outputs && crtcInfo->num_outputs > 0) {
qCDebug(KWIN_XWL) << "Setting primary" << primaryOutput << outputs[0]; qCDebug(KWIN_XWL) << "Setting primary" << primaryOutput << outputs[0];
xcb_randr_set_output_primary(kwinApp()->x11Connection(), rootWindow(), outputs[0]); xcb_randr_set_output_primary(kwinApp()->x11Connection(), kwinApp()->x11RootWindow(), outputs[0]);
break; break;
} }
} }