xrandr backend doesn't update atom _NET_WORKAREA
Bug #782087 reported by
Walther
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
disper |
Fix Released
|
Low
|
wvengen |
Bug Description
The root atom _NET_WORKAREA should hold the size of the desktop, and can be used by applications (for instance, OpenOffice impress uses it for size to use for presentations).
You can check the value with: "xprop -root _NET_WORKAREA"
For some reason, using disper 0.3.0 (at least with the xrandr backend) doesn't get this atom updated while the command xrandr does. Curiously, xrandr is not using any x11 calls, so it appears the problem is in the arguments for the xrandr methods used.
I've been trying to solve this for a while, but I thought I'd report it in case somebody else can get around to it first.
Changed in disper: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
Okay, I figured out what's happening... apparently, it might be a bug in xrandr or the documentation for it.
When you check your own code, it has this nice comment in apply_output_config (xrandr/core.py):
# Seems that this line should go here, because: cgit.freedeskto p.org/xorg/ proto/randrprot o/tree/ randrproto. txt)
self. set_size( self._width, self._height,
self._ width_mm, self._height_mm)
# "All active monitors must be configured to display a
# subset of the specified size, else a Match error results."
# (from XrandR protocol specification,
# http://
However, in practice, when you set each individual monitor, and then do a call to "set_size", the root atom is not updated. However, if instead, I just do what the xrandr program does, which is to disable each screen which "won't fit", then "set_size," and THEN apply the config, the atom is properly updated >.<
Actually, thinking about it, it appears that the original call to "set_size" is not working, because when I ran these two commands:
./disper.py -s -v -r 1400x1050
./disper.py -s -v -r 1680x1050
The second invocation will skip calling XRRSetScreenSize, because the check "if (width, height, width_mm, height_mm) == self.get_size()" returns true. So it would seem the real bug is that the call to "XRRSetScreenSize" is actually invalid? Unfortunately that function returns void, so you can't really check if this is the case...
I attach a patch against version 0.3.0 which "fixes" disper to work. Though now I am wondering if the real bug isn't somewhere else... I'll keep working on this as time allows :x