From b29cc3164a0b100b109ffd98d7ced5e4c5165ecd Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Fri, 26 Jul 2013 15:54:59 +0200 Subject: CcRRLabeler: don't crash when not running under X If running under wayland, we can't use an X property notify to look at workarea changes. Currently, workarea is not part of the wayland protocol, so don't bother and just don't crash. https://bugzilla.gnome.org/show_bug.cgi?id=705573 --- panels/display/cc-rr-labeler.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/panels/display/cc-rr-labeler.c b/panels/display/cc-rr-labeler.c index 9773be4bb..ea8a7fda0 100644 --- a/panels/display/cc-rr-labeler.c +++ b/panels/display/cc-rr-labeler.c @@ -29,11 +29,13 @@ #include #include +#ifdef GDK_WINDOWING_X11 #include #include #include #include #include +#endif #include "cc-rr-labeler.h" @@ -46,7 +48,10 @@ struct _CcRRLabelerPrivate { GtkWidget **windows; GdkScreen *screen; + gboolean has_event_filter; +#ifdef GDK_WINDOWING_X11 Atom workarea_atom; +#endif }; enum { @@ -60,6 +65,7 @@ G_DEFINE_TYPE (CcRRLabeler, cc_rr_labeler, G_TYPE_OBJECT); static void cc_rr_labeler_finalize (GObject *object); static void setup_from_config (CcRRLabeler *labeler); +#ifdef GDK_WINDOWING_X11 static GdkFilterReturn screen_xevent_filter (GdkXEvent *xevent, GdkEvent *event, @@ -80,6 +86,7 @@ screen_xevent_filter (GdkXEvent *xevent, return GDK_FILTER_CONTINUE; } +#endif static void cc_rr_labeler_init (CcRRLabeler *labeler) @@ -88,15 +95,21 @@ cc_rr_labeler_init (CcRRLabeler *labeler) labeler->priv = G_TYPE_INSTANCE_GET_PRIVATE (labeler, GNOME_TYPE_RR_LABELER, CcRRLabelerPrivate); - labeler->priv->workarea_atom = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), - "_NET_WORKAREA", - True); - labeler->priv->screen = gdk_screen_get_default (); - /* code is not really designed to handle multiple screens so *shrug* */ - gdkwindow = gdk_screen_get_root_window (labeler->priv->screen); - gdk_window_add_filter (gdkwindow, (GdkFilterFunc) screen_xevent_filter, labeler); - gdk_window_set_events (gdkwindow, gdk_window_get_events (gdkwindow) | GDK_PROPERTY_CHANGE_MASK); +#ifdef GDK_WINDOWING_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + labeler->priv->workarea_atom = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), + "_NET_WORKAREA", + True); + + /* code is not really designed to handle multiple screens so *shrug* */ + gdkwindow = gdk_screen_get_root_window (labeler->priv->screen); + gdk_window_add_filter (gdkwindow, (GdkFilterFunc) screen_xevent_filter, labeler); + gdk_window_set_events (gdkwindow, gdk_window_get_events (gdkwindow) | GDK_PROPERTY_CHANGE_MASK); + + labeler->priv->has_event_filter = TRUE; + } +#endif } static void @@ -152,8 +165,10 @@ cc_rr_labeler_finalize (GObject *object) labeler = CC_RR_LABELER (object); - gdkwindow = gdk_screen_get_root_window (labeler->priv->screen); - gdk_window_remove_filter (gdkwindow, (GdkFilterFunc) screen_xevent_filter, labeler); + if (labeler->priv->has_event_filter) { + gdkwindow = gdk_screen_get_root_window (labeler->priv->screen); + gdk_window_remove_filter (gdkwindow, (GdkFilterFunc) screen_xevent_filter, labeler); + } if (labeler->priv->config != NULL) { g_object_unref (labeler->priv->config); -- cgit v1.2.1