[gtk+] wayland: implement GInitable and check the connection to the display server
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] wayland: implement GInitable and check the connection to the display server
- Date: Sat, 23 Mar 2013 04:48:07 +0000 (UTC)
commit 09d0d32af0e2b206e21afc6f081bbc8235e58009
Author: Thomas Wood <thomas wood intel com>
Date: Fri Feb 22 16:44:13 2013 +0000
wayland: implement GInitable and check the connection to the display server
Add GInitable implementation and fail the initialisation if it is not
possible to connect to the display server.
https://bugzilla.gnome.org/show_bug.cgi?id=694465
gdk/gdkdisplaymanager.c | 8 +++---
gdk/wayland/gdkdisplaymanager-wayland.c | 38 +++++++++++++++++++++++++++++-
2 files changed, 40 insertions(+), 6 deletions(-)
---
diff --git a/gdk/gdkdisplaymanager.c b/gdk/gdkdisplaymanager.c
index f470611..70b6a62 100644
--- a/gdk/gdkdisplaymanager.c
+++ b/gdk/gdkdisplaymanager.c
@@ -259,14 +259,14 @@ gdk_display_manager_get (void)
if (!manager && (backend == NULL || strcmp (backend, "win32") == 0))
manager = g_initable_new (gdk_win32_display_manager_get_type (), NULL, NULL, NULL);
#endif
-#ifdef GDK_WINDOWING_X11
- if (!manager && (backend == NULL || strcmp (backend, "x11") == 0))
- manager = g_initable_new (gdk_x11_display_manager_get_type (), NULL, NULL, NULL);
-#endif
#ifdef GDK_WINDOWING_WAYLAND
if (!manager && (backend == NULL || strcmp (backend, "wayland") == 0))
manager = g_initable_new (gdk_wayland_display_manager_get_type (), NULL, NULL, NULL);
#endif
+#ifdef GDK_WINDOWING_X11
+ if (!manager && (backend == NULL || strcmp (backend, "x11") == 0))
+ manager = g_initable_new (gdk_x11_display_manager_get_type (), NULL, NULL, NULL);
+#endif
#ifdef GDK_WINDOWING_BROADWAY
if (!manager && (backend == NULL || strcmp (backend, "broadway") == 0))
manager = g_initable_new (gdk_broadway_display_manager_get_type (), NULL, NULL, NULL);
diff --git a/gdk/wayland/gdkdisplaymanager-wayland.c b/gdk/wayland/gdkdisplaymanager-wayland.c
index e04a1ea..68e69d8 100644
--- a/gdk/wayland/gdkdisplaymanager-wayland.c
+++ b/gdk/wayland/gdkdisplaymanager-wayland.c
@@ -38,6 +38,8 @@ struct _GdkWaylandDisplayManager
GHashTable *name_to_atoms;
guint next_atom;
+
+ gboolean init_failed;
};
struct _GdkWaylandDisplayManagerClass
@@ -45,12 +47,44 @@ struct _GdkWaylandDisplayManagerClass
GdkDisplayManagerClass parent_class;
};
-G_DEFINE_TYPE (GdkWaylandDisplayManager, gdk_wayland_display_manager, GDK_TYPE_DISPLAY_MANAGER)
+static void g_initable_iface_init (GInitableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GdkWaylandDisplayManager, gdk_wayland_display_manager, GDK_TYPE_DISPLAY_MANAGER,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, g_initable_iface_init))
+
+static gboolean
+gdk_wayland_display_manager_initable_init (GInitable *initable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ struct wl_display *wl_display;
+
+ /* check that a connection to the default display is possible */
+ wl_display = wl_display_connect (gdk_get_display_arg_name ());
+
+ if (!wl_display)
+ {
+ GDK_WAYLAND_DISPLAY_MANAGER (initable)->init_failed = TRUE;
+ return FALSE;
+ }
+
+ wl_display_disconnect (wl_display);
+
+ return TRUE;
+}
+
+void
+g_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = gdk_wayland_display_manager_initable_init;
+}
static void
gdk_wayland_display_manager_finalize (GObject *object)
{
- g_error ("A GdkWaylandDisplayManager object was finalized. This should not happen");
+ if (GDK_WAYLAND_DISPLAY_MANAGER (object)->init_failed == FALSE)
+ g_error ("A GdkWaylandDisplayManager object was finalized. This should not happen");
+
G_OBJECT_CLASS (gdk_wayland_display_manager_parent_class)->finalize (object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]