plug/socket: Warn if used outside X11

Give a clear warning when either of these are realized on a non-X11
screen.
This commit is contained in:
Matthias Clasen 2015-08-28 12:48:02 -04:00
parent cbe5e596af
commit aa3bf0ac14
2 changed files with 17 additions and 11 deletions

View File

@ -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)

View File

@ -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;