gtk+ r22327 - in trunk: . gdk/x11
- From: matthiasc svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r22327 - in trunk: . gdk/x11
- Date: Fri, 13 Feb 2009 18:12:57 +0000 (UTC)
Author: matthiasc
Date: Fri Feb 13 18:12:57 2009
New Revision: 22327
URL: http://svn.gnome.org/viewvc/gtk+?rev=22327&view=rev
Log:
* configure.in: Check for Xrandr 1.3
* gdk/x11/gdkdisplay-x11.[ch]: Rename have_randr12 to have_randr13
and set if if we have randr 1.3
* gdk/x11/gdkscreen-x11.c: Go back to using randr for monitor
information, if we have XRRGetScreenResourcesCurrent.
Modified:
trunk/ChangeLog
trunk/configure.in
trunk/gdk/x11/gdkdisplay-x11.c
trunk/gdk/x11/gdkdisplay-x11.h
trunk/gdk/x11/gdkscreen-x11.c
Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in (original)
+++ trunk/configure.in Fri Feb 13 18:12:57 2009
@@ -1541,7 +1541,7 @@
AM_CONDITIONAL(XINPUT_XFREE, test x$with_xinput = xxfree || test x$with_xinput = xyes)
# Check for the RANDR extension
- if $PKG_CONFIG --exists "xrandr >= 1.2" ; then
+ if $PKG_CONFIG --exists "xrandr >= 1.2.99" ; then
AC_DEFINE(HAVE_RANDR, 1, [Have the Xrandr extension library])
X_PACKAGES="$X_PACKAGES xrandr"
Modified: trunk/gdk/x11/gdkdisplay-x11.c
==============================================================================
--- trunk/gdk/x11/gdkdisplay-x11.c (original)
+++ trunk/gdk/x11/gdkdisplay-x11.c Fri Feb 13 18:12:57 2009
@@ -184,7 +184,7 @@
_gdk_x11_precache_atoms (display, precache_atoms, G_N_ELEMENTS (precache_atoms));
/* RandR must be initialized before we initialize the screens */
- display_x11->have_randr12 = FALSE;
+ display_x11->have_randr13 = FALSE;
#ifdef HAVE_RANDR
if (XRRQueryExtension (display_x11->xdisplay,
&display_x11->xrandr_event_base, &ignore))
@@ -193,8 +193,8 @@
XRRQueryVersion (display_x11->xdisplay, &major, &minor);
- if ((major == 1 && minor >= 2) || major > 1)
- display_x11->have_randr12 = TRUE;
+ if ((major == 1 && minor >= 3) || major > 1)
+ display_x11->have_randr13 = TRUE;
}
#endif
Modified: trunk/gdk/x11/gdkdisplay-x11.h
==============================================================================
--- trunk/gdk/x11/gdkdisplay-x11.h (original)
+++ trunk/gdk/x11/gdkdisplay-x11.h Fri Feb 13 18:12:57 2009
@@ -85,7 +85,7 @@
gboolean have_xdamage;
gint xdamage_event_base;
- gboolean have_randr12;
+ gboolean have_randr13;
gint xrandr_event_base;
/* If the SECURITY extension is in place, whether this client holds
Modified: trunk/gdk/x11/gdkscreen-x11.c
==============================================================================
--- trunk/gdk/x11/gdkscreen-x11.c (original)
+++ trunk/gdk/x11/gdkscreen-x11.c Fri Feb 13 18:12:57 2009
@@ -664,6 +664,81 @@
}
static gboolean
+init_randr13 (GdkScreen *screen)
+{
+#ifdef HAVE_RANDR
+ GdkDisplay *display = gdk_screen_get_display (screen);
+ GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (display);
+ GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
+ Display *dpy = GDK_SCREEN_XDISPLAY (screen);
+ XRRScreenResources *resources;
+ int i;
+ GArray *monitors;
+ gboolean randr12_compat = FALSE;
+
+ if (!display_x11->have_randr13)
+ return FALSE;
+
+ resources = XRRGetScreenResourcesCurrent (screen_x11->xdisplay,
+ screen_x11->xroot_window);
+ if (!resources)
+ return FALSE;
+
+ monitors = g_array_sized_new (FALSE, TRUE, sizeof (GdkX11Monitor),
+ resources->noutput);
+
+ for (i = 0; i < resources->noutput; ++i)
+ {
+ XRROutputInfo *output =
+ XRRGetOutputInfo (dpy, resources, resources->outputs[i]);
+
+ /* Non RandR1.2 X driver have output name "default" */
+ randr12_compat |= !g_strcmp0(output->name, "default");
+
+ if (output->crtc)
+ {
+ GdkX11Monitor monitor;
+ XRRCrtcInfo *crtc = XRRGetCrtcInfo (dpy, resources, output->crtc);
+
+ monitor.geometry.x = crtc->x;
+ monitor.geometry.y = crtc->y;
+ monitor.geometry.width = crtc->width;
+ monitor.geometry.height = crtc->height;
+
+ /* FIXME: fill this out properly - need EDID parser */
+ monitor.output = resources->outputs[i];
+ monitor.width_mm = -1;
+ monitor.height_mm = -1;
+ monitor.output_name = NULL;
+ monitor.manufacturer = NULL;
+
+ g_array_append_val (monitors, monitor);
+
+ XRRFreeCrtcInfo (crtc);
+ }
+
+ XRRFreeOutputInfo (output);
+ }
+
+ XRRFreeScreenResources (resources);
+
+ /* non RandR 1.2 X driver doesn't return any usable multihead data */
+ if (randr12_compat)
+ {
+ g_array_free (monitors, TRUE);
+ return FALSE;
+ }
+
+ screen_x11->n_monitors = monitors->len;
+ screen_x11->monitors = (GdkX11Monitor *)g_array_free (monitors, FALSE);
+
+ return TRUE;
+#endif
+
+ return FALSE;
+}
+
+static gboolean
init_solaris_xinerama (GdkScreen *screen)
{
#ifdef HAVE_SOLARIS_XINERAMA
@@ -786,14 +861,14 @@
* 3. Solaris Xinerama
* 4. XFree86/Xorg Xinerama
*
- * However, there are performance issues with calling
- * XRRGetScreenResources() every time an application starts,
- * so in the RandR case we simply rely on the information being
- * exported through Xinerama as well.
+ * We use them in that order.
*/
if (init_fake_xinerama (screen))
return;
+ if (init_randr13 (screen))
+ return;
+
if (XQueryExtension (GDK_SCREEN_XDISPLAY (screen), "XINERAMA",
&opcode, &firstevent, &firsterror))
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]