summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Cameron <brian.cameron@sun.com>2008-03-19 17:12:00 +0000
committerBrian Cameron <bcameron@src.gnome.org>2008-03-19 17:12:00 +0000
commite334b0844b5f99adf3d5654e624715b1985e3bc1 (patch)
treeaa9392f0f2c3f0aa1a56c2737ee099ce83ac6350
parent464c0929c5097a0f1221f42ddfa2c3c361166a2d (diff)
downloadgdm-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--ChangeLog5
-rw-r--r--gui/gdmwm.c130
2 files changed, 16 insertions, 119 deletions
diff --git a/ChangeLog b/ChangeLog
index abf4ed31..0b2c463a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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