Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Plasma
KWin
Commits
c0d0fab0
Commit
c0d0fab0
authored
Feb 09, 2022
by
Vlad Zahorodnii
Browse files
x11: Prefer kwinApp()->x11RootWindow() over rootWindow()
parent
ec7198ee
Pipeline
#135481
passed with stage
in 15 minutes and 7 seconds
Changes
11
Pipelines
3
Hide whitespace changes
Inline
Side-by-side
src/composite.cpp
View file @
c0d0fab0
...
...
@@ -94,7 +94,7 @@ class CompositorSelectionOwner : public KSelectionOwner
Q_OBJECT
public:
CompositorSelectionOwner
(
const
char
*
selection
)
:
KSelectionOwner
(
selection
,
kwinApp
()
->
x11Connection
(),
r
ootWindow
())
:
KSelectionOwner
(
selection
,
kwinApp
()
->
x11Connection
(),
kwinApp
()
->
x11R
ootWindow
())
,
m_owning
(
false
)
{
connect
(
this
,
&
CompositorSelectionOwner
::
lostOwnership
,
...
...
src/effects.h
View file @
c0d0fab0
...
...
@@ -632,7 +632,7 @@ QList<EffectWindow*> EffectsHandlerImpl::elevatedWindows() const
inline
xcb_window_t
EffectsHandlerImpl
::
x11RootWindow
()
const
{
return
r
ootWindow
();
return
kwinApp
()
->
x11R
ootWindow
();
}
inline
...
...
src/events.cpp
View file @
c0d0fab0
...
...
@@ -156,7 +156,7 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
// events that should be handled before Clients can get them
switch
(
eventType
)
{
case
XCB_CONFIGURE_NOTIFY
:
if
(
reinterpret_cast
<
xcb_configure_notify_event_t
*>
(
e
)
->
event
==
r
ootWindow
())
if
(
reinterpret_cast
<
xcb_configure_notify_event_t
*>
(
e
)
->
event
==
kwinApp
()
->
x11R
ootWindow
())
markXStackingOrderAsDirty
();
break
;
};
...
...
@@ -184,7 +184,7 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
switch
(
eventType
)
{
case
XCB_CREATE_NOTIFY
:
{
const
auto
*
event
=
reinterpret_cast
<
xcb_create_notify_event_t
*>
(
e
);
if
(
event
->
parent
==
r
ootWindow
()
&&
if
(
event
->
parent
==
kwinApp
()
->
x11R
ootWindow
()
&&
!
QWidget
::
find
(
event
->
window
)
&&
!
event
->
override_redirect
)
{
// see comments for allowClientActivation()
...
...
@@ -251,7 +251,7 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
case
XCB_CONFIGURE_REQUEST
:
{
const
auto
*
event
=
reinterpret_cast
<
xcb_configure_request_event_t
*>
(
e
);
if
(
event
->
parent
==
r
ootWindow
())
{
if
(
event
->
parent
==
kwinApp
()
->
x11R
ootWindow
())
{
uint32_t
values
[
5
]
=
{
0
,
0
,
0
,
0
,
0
};
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
);
...
...
@@ -278,13 +278,13 @@ bool Workspace::workspaceEvent(xcb_generic_event_t *e)
}
case
XCB_FOCUS_IN
:
{
const
auto
*
event
=
reinterpret_cast
<
xcb_focus_in_event_t
*>
(
e
);
if
(
event
->
event
==
r
ootWindow
()
if
(
event
->
event
==
kwinApp
()
->
x11R
ootWindow
()
&&
(
event
->
detail
==
XCB_NOTIFY_DETAIL_NONE
||
event
->
detail
==
XCB_NOTIFY_DETAIL_POINTER_ROOT
||
event
->
detail
==
XCB_NOTIFY_DETAIL_INFERIOR
))
{
Xcb
::
CurrentInput
currentInput
;
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
// => catch the typical pattern (though we don't want the focus on the root anyway) #348935
const
bool
lostFocusPointerToRoot
=
currentInput
->
focus
==
r
ootWindow
()
&&
event
->
detail
==
XCB_NOTIFY_DETAIL_INFERIOR
;
const
bool
lostFocusPointerToRoot
=
currentInput
->
focus
==
kwinApp
()
->
x11R
ootWindow
()
&&
event
->
detail
==
XCB_NOTIFY_DETAIL_INFERIOR
;
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" ;
AbstractClient
*
c
=
mostRecentlyActivatedClient
();
...
...
@@ -357,7 +357,7 @@ bool X11Client::windowEvent(xcb_generic_event_t *e)
setOpacity
(
info
->
opacityF
());
}
else
{
// forward to the frame if there's possibly another compositing manager running
NETWinInfo
i
(
kwinApp
()
->
x11Connection
(),
frameId
(),
r
ootWindow
(),
NET
::
Properties
(),
NET
::
Properties2
());
NETWinInfo
i
(
kwinApp
()
->
x11Connection
(),
frameId
(),
kwinApp
()
->
x11R
ootWindow
(),
NET
::
Properties
(),
NET
::
Properties2
());
i
.
setOpacity
(
info
->
opacity
());
}
}
...
...
@@ -535,7 +535,7 @@ void X11Client::unmapNotifyEvent(xcb_unmap_notify_event_t *e)
if
(
e
->
event
!=
wrapperId
())
{
// most probably event from root window when initially reparenting
bool
ignore
=
true
;
if
(
e
->
event
==
r
ootWindow
()
&&
(
e
->
response_type
&
0x80
))
if
(
e
->
event
==
kwinApp
()
->
x11R
ootWindow
()
&&
(
e
->
response_type
&
0x80
))
ignore
=
false
;
// XWithdrawWindow()
if
(
ignore
)
return
;
...
...
src/group.cpp
View file @
c0d0fab0
...
...
@@ -34,7 +34,7 @@ Group::Group(xcb_window_t leader_P)
{
if
(
leader_P
!=
XCB_WINDOW_NONE
)
{
leader_client
=
workspace
()
->
findClient
(
Predicate
::
WindowMatch
,
leader_P
);
leader_info
=
new
NETWinInfo
(
kwinApp
()
->
x11Connection
(),
leader_P
,
r
ootWindow
(),
leader_info
=
new
NETWinInfo
(
kwinApp
()
->
x11Connection
(),
leader_P
,
kwinApp
()
->
x11R
ootWindow
(),
NET
::
Properties
(),
NET
::
WM2StartupId
);
}
effect_group
=
new
EffectWindowGroupImpl
(
this
);
...
...
@@ -53,7 +53,7 @@ QIcon Group::icon() const
return
leader_client
->
icon
();
else
if
(
leader_wid
!=
XCB_WINDOW_NONE
)
{
QIcon
ic
;
NETWinInfo
info
(
kwinApp
()
->
x11Connection
(),
leader_wid
,
r
ootWindow
(),
NET
::
WMIcon
,
NET
::
WM2IconPixmap
);
NETWinInfo
info
(
kwinApp
()
->
x11Connection
(),
leader_wid
,
kwinApp
()
->
x11R
ootWindow
(),
NET
::
WMIcon
,
NET
::
WM2IconPixmap
);
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
);
if
(
!
pix
.
isNull
())
{
...
...
src/main_x11.cpp
View file @
c0d0fab0
...
...
@@ -192,7 +192,7 @@ void ApplicationX11::lostSelection()
destroyCompositor
();
destroyWorkspace
();
// Remove windowmanager privileges
Xcb
::
selectInput
(
r
ootWindow
(),
XCB_EVENT_MASK_PROPERTY_CHANGE
);
Xcb
::
selectInput
(
kwinApp
()
->
x11R
ootWindow
(),
XCB_EVENT_MASK_PROPERTY_CHANGE
);
removeNativeX11EventFilter
();
quit
();
}
...
...
@@ -240,7 +240,7 @@ void ApplicationX11::performStartup()
const
uint32_t
maskValues
[]
=
{
XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT
};
ScopedCPointer
<
xcb_generic_error_t
>
redirectCheck
(
xcb_request_check
(
kwinApp
()
->
x11Connection
(),
xcb_change_window_attributes_checked
(
kwinApp
()
->
x11Connection
(),
r
ootWindow
(),
kwinApp
()
->
x11R
ootWindow
(),
XCB_CW_EVENT_MASK
,
maskValues
)));
if
(
!
redirectCheck
.
isNull
())
{
...
...
src/netinfo.cpp
View file @
c0d0fab0
...
...
@@ -29,7 +29,7 @@ RootInfo *RootInfo::create()
Q_ASSERT
(
!
s_self
);
xcb_window_t
supportWindow
=
xcb_generate_id
(
kwinApp
()
->
x11Connection
());
const
uint32_t
values
[]
=
{
true
};
xcb_create_window
(
kwinApp
()
->
x11Connection
(),
XCB_COPY_FROM_PARENT
,
supportWindow
,
KWin
::
r
ootWindow
(),
xcb_create_window
(
kwinApp
()
->
x11Connection
(),
XCB_COPY_FROM_PARENT
,
supportWindow
,
kwinApp
()
->
x11R
ootWindow
(),
0
,
0
,
1
,
1
,
0
,
XCB_COPY_FROM_PARENT
,
XCB_COPY_FROM_PARENT
,
XCB_CW_OVERRIDE_REDIRECT
,
values
);
const
uint32_t
lowerValues
[]
=
{
XCB_STACK_MODE_BELOW
};
// See usage in layers.cpp
...
...
src/unmanaged.cpp
View file @
c0d0fab0
...
...
@@ -104,7 +104,7 @@ bool Unmanaged::track(xcb_window_t w)
checkOutput
();
m_visual
=
attr
->
visual
;
bit_depth
=
geo
->
depth
;
info
=
new
NETWinInfo
(
kwinApp
()
->
x11Connection
(),
w
,
r
ootWindow
(),
info
=
new
NETWinInfo
(
kwinApp
()
->
x11Connection
(),
w
,
kwinApp
()
->
x11R
ootWindow
(),
NET
::
WMWindowType
|
NET
::
WMPid
,
NET
::
WM2Opacity
|
NET
::
WM2WindowRole
|
...
...
src/workspace.cpp
View file @
c0d0fab0
...
...
@@ -312,7 +312,10 @@ void Workspace::initializeX11()
// Compatibility
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
);
if
(
kwinApp
()
->
operationMode
()
==
Application
::
OperationModeX11
)
{
...
...
@@ -352,7 +355,7 @@ void Workspace::initializeX11()
// Begin updates blocker block
StackingUpdatesBlocker
blocker
(
this
);
Xcb
::
Tree
tree
(
r
ootWindow
());
Xcb
::
Tree
tree
(
kwinApp
()
->
x11R
ootWindow
());
xcb_window_t
*
wins
=
xcb_query_tree_children
(
tree
.
data
());
QVector
<
Xcb
::
WindowAttributes
>
windowAttributes
(
tree
->
children_len
);
...
...
@@ -1241,12 +1244,12 @@ void Workspace::slotDesktopRemoved(VirtualDesktop *desktop)
void
Workspace
::
selectWmInputEventMask
()
{
uint32_t
presentMask
=
0
;
Xcb
::
WindowAttributes
attr
(
r
ootWindow
());
Xcb
::
WindowAttributes
attr
(
kwinApp
()
->
x11R
ootWindow
());
if
(
!
attr
.
isNull
())
{
presentMask
=
attr
->
your_event_mask
;
}
Xcb
::
selectInput
(
r
ootWindow
(),
Xcb
::
selectInput
(
kwinApp
()
->
x11R
ootWindow
(),
presentMask
|
XCB_EVENT_MASK_KEY_PRESS
|
XCB_EVENT_MASK_PROPERTY_CHANGE
|
...
...
@@ -1319,7 +1322,7 @@ bool Workspace::isOnCurrentHead()
return
!
is_multihead
;
}
return
r
ootWindow
()
==
geometry
->
root
;
return
kwinApp
()
->
x11R
ootWindow
()
==
geometry
->
root
;
}
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).
void
Workspace
::
fixPositionAfterCrash
(
xcb_window_t
w
,
const
xcb_get_geometry_reply_t
*
geometry
)
{
NETWinInfo
i
(
kwinApp
()
->
x11Connection
(),
w
,
r
ootWindow
(),
NET
::
WMFrameExtents
,
NET
::
Properties2
());
NETWinInfo
i
(
kwinApp
()
->
x11Connection
(),
w
,
kwinApp
()
->
x11R
ootWindow
(),
NET
::
WMFrameExtents
,
NET
::
Properties2
());
NETStrut
frame
=
i
.
frameExtents
();
if
(
frame
.
left
!=
0
||
frame
.
top
!=
0
)
{
...
...
src/x11client.cpp
View file @
c0d0fab0
...
...
@@ -297,7 +297,7 @@ void X11Client::releaseWindow(bool on_shutdown)
m_client
.
deleteProperty
(
atoms
->
kde_net_wm_user_creation_time
);
m_client
.
deleteProperty
(
atoms
->
net_frame_extents
);
m_client
.
deleteProperty
(
atoms
->
kde_net_wm_frame_strut
);
m_client
.
reparent
(
r
ootWindow
(),
m_bufferGeometry
.
x
(),
m_bufferGeometry
.
y
());
m_client
.
reparent
(
kwinApp
()
->
x11R
ootWindow
(),
m_bufferGeometry
.
x
(),
m_bufferGeometry
.
y
());
xcb_change_save_set
(
c
,
XCB_SET_MODE_DELETE
,
m_client
);
m_client
.
selectInput
(
XCB_EVENT_MASK_NO_EVENT
);
if
(
on_shutdown
)
...
...
@@ -420,7 +420,7 @@ bool X11Client::manage(xcb_window_t w, bool isMapped)
m_geometryHints
.
init
(
window
());
m_motif
.
init
(
window
());
info
=
new
WinInfo
(
this
,
m_client
,
r
ootWindow
(),
properties
,
properties2
);
info
=
new
WinInfo
(
this
,
m_client
,
kwinApp
()
->
x11R
ootWindow
(),
properties
,
properties2
);
if
(
isDesktop
()
&&
bit_depth
==
32
)
{
// 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
)
{
return
;
}
NETWinInfo
info
(
kwinApp
()
->
x11Connection
(),
frameId
(),
r
ootWindow
(),
NET
::
Properties
(),
NET
::
Properties2
());
NETWinInfo
info
(
kwinApp
()
->
x11Connection
(),
frameId
(),
kwinApp
()
->
x11R
ootWindow
(),
NET
::
Properties
(),
NET
::
Properties2
());
info
.
setOpacityF
(
opacity
());
}
);
...
...
@@ -1014,7 +1014,7 @@ void X11Client::embedClient(xcb_window_t w, xcb_visualid_t visualid, xcb_colorma
// Create the frame window
xcb_window_t
frame
=
xcb_generate_id
(
conn
);
xcb_create_window
(
conn
,
depth
,
frame
,
r
ootWindow
(),
0
,
0
,
1
,
1
,
0
,
xcb_create_window
(
conn
,
depth
,
frame
,
kwinApp
()
->
x11R
ootWindow
(),
0
,
0
,
1
,
1
,
0
,
XCB_WINDOW_CLASS_INPUT_OUTPUT
,
visualid
,
cw_mask
,
cw_values
);
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
[
4
]
=
data3
;
uint32_t
eventMask
=
0
;
if
(
w
==
r
ootWindow
())
{
if
(
w
==
kwinApp
()
->
x11R
ootWindow
())
{
eventMask
=
XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT
;
// Magic!
}
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
// they're in Normal layer
if
(
isSplash
()
&&
new_transient_for
==
XCB_WINDOW_NONE
)
new_transient_for
=
r
ootWindow
();
new_transient_for
=
kwinApp
()
->
x11R
ootWindow
();
if
(
new_transient_for
==
XCB_WINDOW_NONE
)
{
if
(
set
)
// sometimes WM_TRANSIENT_FOR is set to None, instead of root window
new_property_value
=
new_transient_for
=
r
ootWindow
();
new_property_value
=
new_transient_for
=
kwinApp
()
->
x11R
ootWindow
();
else
return
XCB_WINDOW_NONE
;
}
if
(
new_transient_for
==
window
())
{
// pointing to self
// also fix the property itself
qCWarning
(
KWIN_CORE
)
<<
"Client "
<<
this
<<
" has WM_TRANSIENT_FOR poiting to itself."
;
new_property_value
=
new_transient_for
=
r
ootWindow
();
new_property_value
=
new_transient_for
=
kwinApp
()
->
x11R
ootWindow
();
}
// The transient_for window may be embedded in another application,
// so kwin cannot see it. Try to find the managed client for the
// window and fix the transient_for property if possible.
xcb_window_t
before_search
=
new_transient_for
;
while
(
new_transient_for
!=
XCB_WINDOW_NONE
&&
new_transient_for
!=
r
ootWindow
()
&&
new_transient_for
!=
kwinApp
()
->
x11R
ootWindow
()
&&
!
workspace
()
->
findClient
(
Predicate
::
WindowMatch
,
new_transient_for
))
{
Xcb
::
Tree
tree
(
new_transient_for
);
if
(
tree
.
isNull
())
{
...
...
@@ -3151,20 +3151,20 @@ xcb_window_t X11Client::verifyTransientFor(xcb_window_t new_transient_for, bool
// windows in the group
int
count
=
20
;
xcb_window_t
loop_pos
=
new_transient_for
;
while
(
loop_pos
!=
XCB_WINDOW_NONE
&&
loop_pos
!=
r
ootWindow
())
{
while
(
loop_pos
!=
XCB_WINDOW_NONE
&&
loop_pos
!=
kwinApp
()
->
x11R
ootWindow
())
{
X11Client
*
pos
=
workspace
()
->
findClient
(
Predicate
::
WindowMatch
,
loop_pos
);
if
(
pos
==
nullptr
)
break
;
loop_pos
=
pos
->
m_transientForId
;
if
(
--
count
==
0
||
pos
==
this
)
{
qCWarning
(
KWIN_CORE
)
<<
"Client "
<<
this
<<
" caused WM_TRANSIENT_FOR loop."
;
new_transient_for
=
r
ootWindow
();
new_transient_for
=
kwinApp
()
->
x11R
ootWindow
();
}
}
if
(
new_transient_for
!=
r
ootWindow
()
if
(
new_transient_for
!=
kwinApp
()
->
x11R
ootWindow
()
&&
workspace
()
->
findClient
(
Predicate
::
WindowMatch
,
new_transient_for
)
==
nullptr
)
{
// it's transient for a specific window, but that window is not mapped
new_transient_for
=
r
ootWindow
();
new_transient_for
=
kwinApp
()
->
x11R
ootWindow
();
}
if
(
new_property_value
!=
m_originalTransientForId
)
Xcb
::
setTransientFor
(
window
(),
new_property_value
);
...
...
@@ -3195,7 +3195,7 @@ void X11Client::removeTransient(AbstractClient* cl)
if
(
X11Client
*
c
=
dynamic_cast
<
X11Client
*>
(
cl
))
{
c
->
m_transientForId
=
XCB_WINDOW_NONE
;
c
->
setTransientFor
(
nullptr
);
// SELI
// SELI cl->setTransient(
r
ootWindow());
// SELI cl->setTransient(
kwinApp()->x11R
ootWindow());
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*
// (https://lists.kde.org/?t=107302193400001&r=1&w=2)
QRect
r
=
workspace
()
->
clientArea
(
FullArea
,
this
);
m_moveResizeGrabWindow
.
create
(
r
,
XCB_WINDOW_CLASS_INPUT_ONLY
,
0
,
nullptr
,
r
ootWindow
());
m_moveResizeGrabWindow
.
create
(
r
,
XCB_WINDOW_CLASS_INPUT_ONLY
,
0
,
nullptr
,
kwinApp
()
->
x11R
ootWindow
());
m_moveResizeGrabWindow
.
map
();
m_moveResizeGrabWindow
.
raise
();
updateXTime
();
...
...
src/x11client.h
View file @
c0d0fab0
...
...
@@ -542,14 +542,14 @@ inline bool X11Client::isClientSideDecorated() const
inline
bool
X11Client
::
groupTransient
()
const
{
return
m_transientForId
==
r
ootWindow
();
return
m_transientForId
==
kwinApp
()
->
x11R
ootWindow
();
}
// Needed because verifyTransientFor() may set transient_for_id to root window,
// if the original value has a problem (window doesn't exist, etc.)
inline
bool
X11Client
::
wasOriginallyGroupTransient
()
const
{
return
m_originalTransientForId
==
r
ootWindow
();
return
m_originalTransientForId
==
kwinApp
()
->
x11R
ootWindow
();
}
inline
bool
X11Client
::
isTransient
()
const
...
...
src/xwl/xwayland.cpp
View file @
c0d0fab0
...
...
@@ -443,7 +443,7 @@ void Xwayland::handleXwaylandReady()
void
Xwayland
::
updatePrimary
(
AbstractOutput
*
primaryOutput
)
{
Xcb
::
RandR
::
ScreenResources
resources
(
r
ootWindow
());
Xcb
::
RandR
::
ScreenResources
resources
(
kwinApp
()
->
x11R
ootWindow
());
xcb_randr_crtc_t
*
crtcs
=
resources
.
crtcs
();
if
(
!
crtcs
)
{
return
;
...
...
@@ -456,7 +456,7 @@ void Xwayland::updatePrimary(AbstractOutput *primaryOutput)
auto
outputs
=
crtcInfo
.
outputs
();
if
(
outputs
&&
crtcInfo
->
num_outputs
>
0
)
{
qCDebug
(
KWIN_XWL
)
<<
"Setting primary"
<<
primaryOutput
<<
outputs
[
0
];
xcb_randr_set_output_primary
(
kwinApp
()
->
x11Connection
(),
r
ootWindow
(),
outputs
[
0
]);
xcb_randr_set_output_primary
(
kwinApp
()
->
x11Connection
(),
kwinApp
()
->
x11R
ootWindow
(),
outputs
[
0
]);
break
;
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment