From aa3bf0ac143c8c53ac31a414fc7461330c3f1199 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 28 Aug 2015 12:48:02 -0400 Subject: [PATCH] plug/socket: Warn if used outside X11 Give a clear warning when either of these are realized on a non-X11 screen. --- gtk/gtkplug.c | 15 +++++++++------ gtk/gtksocket.c | 13 ++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/gtk/gtkplug.c b/gtk/gtkplug.c index 56c37f2367..b65dacbef4 100644 --- a/gtk/gtkplug.c +++ b/gtk/gtkplug.c @@ -58,16 +58,14 @@ * * The communication between a #GtkSocket and a #GtkPlug follows the * [XEmbed Protocol](http://www.freedesktop.org/Standards/xembed-spec). - * This protocol has also been implemented in other toolkits, - * e.g. Qt, allowing the same level of - * integration when embedding a Qt widget + * This protocol has also been implemented in other toolkits, e.g. Qt, + * allowing the same level of integration when embedding a Qt widget * in GTK+ or vice versa. * * The #GtkPlug and #GtkSocket widgets are only available when GTK+ * is compiled for the X11 platform and %GDK_WINDOWING_X11 is defined. * They can only be used on a #GdkX11Display. To use #GtkPlug and - * #GtkSocket, you need to include the `gtk/gtkx.h` - * header. + * #GtkSocket, you need to include the `gtk/gtkx.h` header. */ struct _GtkPlugPrivate @@ -1029,9 +1027,14 @@ gtk_plug_realize (GtkWidget *widget) const gchar *title; gchar *wmclass_name, *wmclass_class; gint attributes_mask; + GdkScreen *screen; gtk_widget_set_realized (widget, TRUE); + screen = gtk_widget_get_screen (widget); + if (!GDK_IS_X11_SCREEN (screen)) + g_warning ("GtkPlug only works under X11"); + title = gtk_window_get_title (window); _gtk_window_get_wmclass (window, &wmclass_name, &wmclass_class); gtk_widget_get_allocation (widget, &allocation); @@ -1064,7 +1067,7 @@ gtk_plug_realize (GtkWidget *widget) GdkWindow *root_window; attributes.window_type = GDK_WINDOW_TOPLEVEL; - root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget)); + root_window = gdk_screen_get_root_window (screen); gdk_error_trap_push (); if (priv->socket_window) diff --git a/gtk/gtksocket.c b/gtk/gtksocket.c index 579a1f6c7b..6213cebe42 100644 --- a/gtk/gtksocket.c +++ b/gtk/gtksocket.c @@ -101,16 +101,14 @@ * * The communication between a #GtkSocket and a #GtkPlug follows the * [XEmbed Protocol](http://www.freedesktop.org/Standards/xembed-spec). - * This protocol has also been implemented in other toolkits, - * e.g. Qt, allowing the same level of - * integration when embedding a Qt widget + * This protocol has also been implemented in other toolkits, e.g. Qt, + * allowing the same level of integration when embedding a Qt widget * in GTK or vice versa. * * The #GtkPlug and #GtkSocket widgets are only available when GTK+ * is compiled for the X11 platform and %GDK_WINDOWING_X11 is defined. * They can only be used on a #GdkX11Display. To use #GtkPlug and - * #GtkSocket, you need to include the `gtk/gtkx.h` - * header. + * #GtkSocket, you need to include the `gtk/gtkx.h` header. */ /* Forward declararations */ @@ -391,9 +389,14 @@ gtk_socket_realize (GtkWidget *widget) GdkWindowAttr attributes; XWindowAttributes xattrs; gint attributes_mask; + GdkScreen *screen; gtk_widget_set_realized (widget, TRUE); + screen = gtk_widget_get_screen (widget); + if (!GDK_IS_X11_SCREEN (screen)) + g_warning ("GtkSocket: only works under X11"); + gtk_widget_get_allocation (widget, &allocation); attributes.window_type = GDK_WINDOW_CHILD;