summaryrefslogtreecommitdiff
path: root/gdk/gdkdisplaymanager.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2013-04-10 23:11:52 +0200
committerBenjamin Otte <otte@redhat.com>2013-04-15 15:43:26 +0200
commit7ef508ff4a40c11c8ef58e8f74ba7ad0e93888a3 (patch)
tree82baff5a09882dd29c07f37d5f54e56b7cf82ece /gdk/gdkdisplaymanager.c
parentd29a4411065ce9eb75e2976bac9593a6709fb6d0 (diff)
downloadgtk+-7ef508ff4a40c11c8ef58e8f74ba7ad0e93888a3.tar.gz
displaymanager: Handle list of displays in base class
This moves the add/remove_display() functions from the subclasses to GdkDisplay and GdkDisplayManager. It also gets rid of the list_displays vfunc.
Diffstat (limited to 'gdk/gdkdisplaymanager.c')
-rw-r--r--gdk/gdkdisplaymanager.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/gdk/gdkdisplaymanager.c b/gdk/gdkdisplaymanager.c
index de045828e7..0442ae0580 100644
--- a/gdk/gdkdisplaymanager.c
+++ b/gdk/gdkdisplaymanager.c
@@ -502,7 +502,7 @@ gdk_display_manager_set_default_display (GdkDisplayManager *manager,
GSList *
gdk_display_manager_list_displays (GdkDisplayManager *manager)
{
- return GDK_DISPLAY_MANAGER_GET_CLASS (manager)->list_displays (manager);
+ return g_slist_copy (manager->displays);
}
/**
@@ -589,3 +589,29 @@ gdk_atom_name (GdkAtom atom)
return GDK_DISPLAY_MANAGER_GET_CLASS (manager)->get_atom_name (manager, atom);
}
+
+void
+_gdk_display_manager_add_display (GdkDisplayManager *manager,
+ GdkDisplay *display)
+{
+ if (manager->displays == NULL)
+ gdk_display_manager_set_default_display (manager, display);
+
+ manager->displays = g_slist_prepend (manager->displays, display);
+}
+
+/* NB: This function can be called multiple times per display. */
+void
+_gdk_display_manager_remove_display (GdkDisplayManager *manager,
+ GdkDisplay *display)
+{
+ manager->displays = g_slist_remove (manager->displays, display);
+
+ if (manager->default_display == display)
+ {
+ if (manager->displays)
+ gdk_display_manager_set_default_display (manager, manager->displays->data);
+ else
+ gdk_display_manager_set_default_display (manager, NULL);
+ }
+}