Do not "set" the wallpaper during startup (#4373)
"Set" the wallpaper during startup only sometimes
Since commit 4f5e0e7
, i3 would take a screenshot and set that as the
background pixmap of the root window during startup. This is the easy
part of setting a proper X11 wallpaper.
The code in question was added because something either set the
background pixmap of the root window to NONE or the X11 server was
started with "-background none". This is apparently done by default by
e.g. gdm to avoid some flickering while the X11 server starts up.
This commit makes this code conditional: Only when no wallpaper is
detected is a screenshot taken.
Since I could not find any way to query the background of a window, a
more direct approach is taken to detect this situation: First, we find
some part of the root window that is not currently covered. Then we open
a white window there, close it again and grab a screenshot. If a
wallpaper is set, the X11 server will draw this wallpaper after the
window is closed and something else will be visible in the screenshot.
However, the wallpaper could have a white pixel at the tested position.
Thus, this procedure is repeated with a black window.
Only when this procedure produces two different pixel values is a
screenshot taken and set as the wallpaper.
Fixes: https://github.com/i3/i3/issues/4371
Fixes: https://github.com/i3/i3/issues/2869
Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
@@ -6,6 +6,23 @@
|
||||
This is i3 v4.19. This version is considered stable. All users of i3 are
|
||||
strongly encouraged to upgrade.
|
||||
|
||||
Background/wallpaper workaround:
|
||||
|
||||
Some login managers (e.g. gdm) start the X11 server with the -background none
|
||||
flag. When this flag is set, a background needs to be explicitly set later in
|
||||
the X11 session, otherwise stale copies of closed windows remain visible on the
|
||||
X11 root window (symptom looks like “my terminal window is not closing”).
|
||||
|
||||
i3 works around this situation by setting a screenshot as background when
|
||||
starting. Any background you set before starting i3 (e.g. in your Xsession) or
|
||||
after starting i3 (e.g. via exec statements in the i3 config) will be visible.
|
||||
|
||||
A downside of this workaround is that if you have any windows already open in
|
||||
your X11 session, those will be part of the screenshot.
|
||||
|
||||
To fix this issue, starting in v4.20, i3 detects whether the -background none
|
||||
option is enabled and only then sets a screenshot as background.
|
||||
|
||||
|
||||
┌────────────────────────────┐
|
||||
│ Changes in i3 v4.20 │
|
||||
|
Reference in New Issue
Block a user