[Xfce4-commits] <xfce4-settings:xrandr-display-settings> Rework again the detection of supported rotations
Jérôme Guelfucci
noreply at xfce.org
Sun Jun 13 18:46:02 CEST 2010
Updating branch refs/heads/xrandr-display-settings
to 814d3d268227db0de2bf56f59a0318b854d88561 (commit)
from b2bf3990196963945b51e5005c3feef738283b9b (commit)
commit 814d3d268227db0de2bf56f59a0318b854d88561
Author: Lionel Le Folgoc <mrpouit at gmail.com>
Date: Sun Jun 13 13:29:05 2010 +0200
Rework again the detection of supported rotations
If the output is enabled, no problem (no change).
If the output is disabled and connected to some possible crtcs, take the
intersection of the supported rotations for all these crtcs, so when it is
enabled later, the rotation value is sure to be valid.
Else, take the list of supported rotations advertised by the X server.
dialogs/display-settings/xfce-randr.c | 62 +++++++++++++++++++++++----------
1 files changed, 43 insertions(+), 19 deletions(-)
diff --git a/dialogs/display-settings/xfce-randr.c b/dialogs/display-settings/xfce-randr.c
index e567fba..8f968dd 100644
--- a/dialogs/display-settings/xfce-randr.c
+++ b/dialogs/display-settings/xfce-randr.c
@@ -36,13 +36,48 @@
#ifdef HAS_RANDR_ONE_POINT_TWO
+static Rotation
+xfce_randr_get_safe_rotations (XfceRandr *randr,
+ Display *xdisplay,
+ GdkWindow *root_window,
+ gint num_output)
+{
+ XRRScreenConfiguration *screen_config;
+ XRRCrtcInfo *crtc_info;
+ gint n;
+ Rotation dummy, rot;
+
+ g_return_val_if_fail (num_output >= 0
+ && num_output < randr->resources->noutput,
+ RR_Rotate_0);
+
+ if (randr->output_info[num_output]->ncrtc < 1)
+ {
+ screen_config = XRRGetScreenInfo (xdisplay, GDK_WINDOW_XID (root_window));
+ rot = XRRConfigRotations (screen_config, &dummy);
+ XRRFreeScreenConfigInfo (screen_config);
+ return rot;
+ }
+
+ rot = XFCE_RANDR_ROTATIONS_MASK | XFCE_RANDR_REFLECTIONS_MASK;
+ for (n = 0; n < randr->output_info[num_output]->ncrtc; n++)
+ {
+ crtc_info = XRRGetCrtcInfo (xdisplay, randr->resources,
+ randr->output_info[num_output]->crtcs[n]);
+ rot &= crtc_info->rotations;
+ XRRFreeCrtcInfo (crtc_info);
+ }
+
+ return rot;
+}
+
+
+
static gboolean
xfce_randr_populate (XfceRandr *randr,
Display *xdisplay,
GdkWindow *root_window)
{
- XRRScreenConfiguration *screen_config;
- RRCrtc crtc;
XRRCrtcInfo *crtc_info;
gint n;
@@ -94,21 +129,10 @@ xfce_randr_populate (XfceRandr *randr,
#endif
randr->status[n] = XFCE_OUTPUT_STATUS_SECONDARY;
- crtc = None;
if (randr->output_info[n]->crtc != None)
{
- /* connected to an active CRTC, take it */
- crtc = randr->output_info[n]->crtc;
- }
- else if (randr->output_info[n]->ncrtc > 0)
- {
- /* otherwise, take a possible CRTC instead */
- crtc = randr->output_info[n]->crtcs[0];
- }
-
- if (crtc != None)
- {
- crtc_info = XRRGetCrtcInfo (xdisplay, randr->resources, crtc);
+ crtc_info = XRRGetCrtcInfo (xdisplay, randr->resources,
+ randr->output_info[n]->crtc);
randr->mode[n] = crtc_info->mode;
randr->rotation[n] = crtc_info->rotation;
randr->rotations[n] = crtc_info->rotations;
@@ -119,11 +143,11 @@ xfce_randr_populate (XfceRandr *randr,
}
}
- /* at this point, the output is obviously disabled and disconnected, so take the global config */
+ /* output either disabled or disconnected */
randr->mode[n] = None;
- screen_config = XRRGetScreenInfo (xdisplay, GDK_WINDOW_XID (root_window));
- randr->rotations[n] = XRRConfigRotations (screen_config, &randr->rotation[n]);
- XRRFreeScreenConfigInfo (screen_config);
+ randr->rotation[n] = RR_Rotate_0;
+ randr->rotations[n] = xfce_randr_get_safe_rotations (randr, xdisplay,
+ root_window, n);
}
return TRUE;
More information about the Xfce4-commits
mailing list