diff --git a/src/core/display.c b/src/core/display.c index 19c343700..bf4796dab 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -470,6 +470,7 @@ meta_display_open (void) { Display *xdisplay; GSList *screens; + MetaScreen *screen; GSList *tmp; int i; guint32 timestamp; @@ -854,19 +855,18 @@ meta_display_open (void) the_display->last_user_time = timestamp; the_display->compositor = NULL; + /* Mutter used to manage all X screens of the display in a single process, but + * now it always manages exactly one screen as specified by the DISPLAY + * environment variable. The screens GSList is left for simplicity. + */ screens = NULL; - - i = 0; - while (i < ScreenCount (xdisplay)) - { - MetaScreen *screen; - screen = meta_screen_new (the_display, i, timestamp); + i = meta_ui_get_screen_number (); - if (screen) - screens = g_slist_prepend (screens, screen); - ++i; - } + screen = meta_screen_new (the_display, i, timestamp); + + if (screen) + screens = g_slist_prepend (screens, screen); the_display->screens = screens; diff --git a/src/ui/ui.c b/src/ui/ui.c index b0ca41d4f..e21c69cb7 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -82,6 +82,12 @@ meta_ui_get_display (void) return GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); } +gint +meta_ui_get_screen_number (void) +{ + return gdk_screen_get_number (gdk_screen_get_default ()); +} + /* We do some of our event handling in frames.c, which expects * GDK events delivered by GTK+. However, since the transition to * client side windows, we can't let GDK see button events, since the diff --git a/src/ui/ui.h b/src/ui/ui.h index 3675b3a09..4a510b5c7 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -46,6 +46,8 @@ void meta_ui_init (void); Display* meta_ui_get_display (void); +gint meta_ui_get_screen_number (void); + void meta_ui_add_event_func (Display *xdisplay, MetaEventFunc func, gpointer data);