diff options
author | Brian Cameron <brian.cameron@sun.com> | 2008-03-19 17:12:00 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2008-03-19 17:12:00 +0000 |
commit | e334b0844b5f99adf3d5654e624715b1985e3bc1 (patch) | |
tree | aa9392f0f2c3f0aa1a56c2737ee099ce83ac6350 | |
parent | 464c0929c5097a0f1221f42ddfa2c3c361166a2d (diff) | |
download | gdm-e334b0844b5f99adf3d5654e624715b1985e3bc1.tar.gz |
Use GDK functions to get the proper screen resolution.
2008-03-19 Brian Cameron <brian.cameron@sun.com>
* gui/gdmwm.c: Use GDK functions to get the proper screen
resolution.
svn path=/branches/gnome-2-20/; revision=6044
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | gui/gdmwm.c | 130 |
2 files changed, 16 insertions, 119 deletions
@@ -1,3 +1,8 @@ +2008-03-19 Brian Cameron <brian.cameron@sun.com> + + * gui/gdmwm.c: Use GDK functions to get the proper screen + resolution. + 2008-03-11 Brian Cameron <brian.cameron@sun.com> * daemon/gdm.h, daemon/gdm-daemon-config-keys.h, po/POTFILES.in: diff --git a/gui/gdmwm.c b/gui/gdmwm.c index 0b750843..099e48a3 100644 --- a/gui/gdmwm.c +++ b/gui/gdmwm.c @@ -84,6 +84,9 @@ static guint save_struts[4] = {0, 0, 0, 0}; void gdm_wm_screen_init (int cur_screen_num) { + GdkScreen *screen; + int i; + if (g_getenv ("FAKE_XINERAMA_GDM") != NULL) { /* for testing Xinerama support on non-xinerama setups */ gdm_wm_screen.x = 100; @@ -101,129 +104,18 @@ gdm_wm_screen_init (int cur_screen_num) return; } - { -#ifdef HAVE_XFREE_XINERAMA - gboolean have_xinerama = FALSE; - - gdk_flush (); - gdk_error_trap_push (); - have_xinerama = XineramaIsActive (GDK_DISPLAY ()); - gdk_flush (); - if (gdk_error_trap_pop () != 0) - have_xinerama = FALSE; - - if (have_xinerama) { - int screen_num, i; - XineramaScreenInfo *xscreens = - XineramaQueryScreens (GDK_DISPLAY (), - &screen_num); - - - if (screen_num <= 0) { - /* should NEVER EVER happen */ - gdm_common_error ("Xinerama active, but <= 0 screens?"); - gdm_wm_screen.x = 0; - gdm_wm_screen.y = 0; - gdm_wm_screen.width = gdk_screen_width (); - gdm_wm_screen.height = gdk_screen_height (); - - gdm_wm_allscreens = g_new0 (GdkRectangle, 1); - gdm_wm_allscreens[0] = gdm_wm_screen; - gdm_wm_screens = 1; - return; - } + screen = gdk_screen_get_default (); - if (screen_num <= cur_screen_num) - cur_screen_num = 0; + gdm_wm_screens = gdk_screen_get_n_monitors (screen); - gdm_wm_allscreens = g_new0 (GdkRectangle, screen_num); - gdm_wm_screens = screen_num; + gdm_wm_allscreens = g_new (GdkRectangle, gdm_wm_screens); + for (i = 0; i < gdm_wm_screens; i++) + gdk_screen_get_monitor_geometry (screen, i, gdm_wm_allscreens + i); - for (i = 0; i < screen_num; i++) { - gdm_wm_allscreens[i].x = xscreens[i].x_org; - gdm_wm_allscreens[i].y = xscreens[i].y_org; - gdm_wm_allscreens[i].width = xscreens[i].width; - gdm_wm_allscreens[i].height = xscreens[i].height; - - if (cur_screen_num == i) - gdm_wm_screen = gdm_wm_allscreens[i]; - } - - XFree (xscreens); - } else -#elif HAVE_SOLARIS_XINERAMA - gboolean have_xinerama = FALSE; - /* This code from GDK, Copyright (C) 2002 Sun Microsystems */ - int opcode; - int firstevent; - int firsterror; - int n_monitors = 0; - - gdk_flush (); - gdk_error_trap_push (); - have_xinerama = XQueryExtension (GDK_DISPLAY (), - "XINERAMA", - &opcode, - &firstevent, - &firsterror); - gdk_flush (); - if (gdk_error_trap_pop () != 0) - have_xinerama = FALSE; - - if (have_xinerama) { - int i; - int result; - XRectangle monitors[MAXFRAMEBUFFERS]; - unsigned char hints[16]; - - result = XineramaGetInfo (GDK_DISPLAY (), 0, monitors, hints, &n_monitors); - /* Yes I know it should be Success but the current implementation - * returns the num of monitor - */ - - if (result <= 0) { - /* should NEVER EVER happen */ - gdm_common_error ("Xinerama active, but <= 0 screens?"); - gdm_wm_screen.x = 0; - gdm_wm_screen.y = 0; - gdm_wm_screen.width = gdk_screen_width (); - gdm_wm_screen.height = gdk_screen_height (); - - gdm_wm_allscreens = g_new0 (GdkRectangle, 1); - gdm_wm_allscreens[0] = gdm_wm_screen; - gdm_wm_screens = 1; - return; - } - - if (n_monitors <= cur_screen_num) - cur_screen_num = 0; - - gdm_wm_allscreens = g_new0 (GdkRectangle, n_monitors); - gdm_wm_screens = n_monitors; - - for (i = 0; i < n_monitors; i++) { - gdm_wm_allscreens[i].x = monitors[i].x; - gdm_wm_allscreens[i].y = monitors[i].y; - gdm_wm_allscreens[i].width = monitors[i].width; - gdm_wm_allscreens[i].height = monitors[i].height; - - if (cur_screen_num == i) - gdm_wm_screen = gdm_wm_allscreens[i]; - } - - } else -#endif - { - gdm_wm_screen.x = 0; - gdm_wm_screen.y = 0; - gdm_wm_screen.width = gdk_screen_width (); - gdm_wm_screen.height = gdk_screen_height (); + if (gdm_wm_screens < cur_screen_num) + cur_screen_num = 0; - gdm_wm_allscreens = g_new0 (GdkRectangle, 1); - gdm_wm_allscreens[0] = gdm_wm_screen; - gdm_wm_screens = 1; - } - } + gdm_wm_screen = gdm_wm_allscreens[cur_screen_num]; } void |