diff options
-rw-r--r-- | mate-panel/libmate-panel-applet-private/panel-applet-container.c | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/mate-panel/libmate-panel-applet-private/panel-applet-container.c b/mate-panel/libmate-panel-applet-private/panel-applet-container.c index 04ee799b..f6e0f94c 100644 --- a/mate-panel/libmate-panel-applet-private/panel-applet-container.c +++ b/mate-panel/libmate-panel-applet-private/panel-applet-container.c @@ -20,9 +20,15 @@ * */ +#include <config.h> #include <string.h> + #include <gtk/gtk.h> + +#ifdef HAVE_X11 #include <gtk/gtkx.h> +#endif + #include <panel-applets-manager.h> #include "panel-applet-container.h" #include "panel-marshal.h" @@ -74,7 +80,9 @@ static const AppletPropertyInfo applet_properties [] = { #define MATE_PANEL_APPLET_FACTORY_OBJECT_PATH "/org/mate/panel/applet/%s" #define MATE_PANEL_APPLET_INTERFACE "org.mate.panel.applet.Applet" +#ifdef HAVE_X11 static gboolean mate_panel_applet_container_plug_removed (MatePanelAppletContainer *container); +#endif G_DEFINE_TYPE_WITH_PRIVATE (MatePanelAppletContainer, mate_panel_applet_container, GTK_TYPE_EVENT_BOX); @@ -97,15 +105,23 @@ static void panel_applet_container_setup (MatePanelAppletContainer *container) { if (container->priv->out_of_process) { - container->priv->socket = gtk_socket_new (); - - g_signal_connect_swapped (container->priv->socket, - "plug-removed", - G_CALLBACK (mate_panel_applet_container_plug_removed), - container); - - gtk_container_add (GTK_CONTAINER (container), container->priv->socket); - gtk_widget_show (container->priv->socket); +#ifdef HAVE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + container->priv->socket = gtk_socket_new (); + + g_signal_connect_swapped (container->priv->socket, + "plug-removed", + G_CALLBACK (mate_panel_applet_container_plug_removed), + container); + + gtk_container_add (GTK_CONTAINER (container), container->priv->socket); + gtk_widget_show (container->priv->socket); + } else +#endif + { // Not using X11 + g_warning("%s requested out-of-process container, which is only supported on X11", + container->priv->iid); + } } else { GtkWidget *applet; @@ -253,9 +269,12 @@ mate_panel_applet_container_new (void) return container; } +#ifdef HAVE_X11 static gboolean mate_panel_applet_container_plug_removed (MatePanelAppletContainer *container) { + g_return_val_if_fail (GDK_IS_X11_DISPLAY (gtk_widget_get_display (GTK_WIDGET (container))), FALSE); + if (!container->priv->applet_proxy) return FALSE; @@ -276,6 +295,7 @@ mate_panel_applet_container_plug_removed (MatePanelAppletContainer *container) */ return FALSE; } +#endif // HAVE_X11 static void mate_panel_applet_container_child_signal (GDBusProxy *proxy, @@ -368,10 +388,13 @@ on_proxy_appeared (GObject *source_object, panel_applet_container_setup (container); +#ifdef HAVE_X11 + // xid always <= 0 when not using X11 if (container->priv->xid > 0) { gtk_socket_add_id (GTK_SOCKET (container->priv->socket), container->priv->xid); } +#endif /* g_async_result_get_source_object returns new ref */ g_object_unref (container); @@ -505,7 +528,14 @@ mate_panel_applet_container_get_applet (MatePanelAppletContainer *container, /* we can't use the screen of the container widget since it's not in a * widget hierarchy yet */ - screen_number = gdk_x11_screen_get_screen_number (screen); +#ifdef HAVE_X11 + if (GDK_IS_X11_DISPLAY (gdk_screen_get_display (screen))) { + screen_number = gdk_x11_screen_get_screen_number (screen); + } else +#endif + { // Not using X11 + screen_number = 0; + } data = g_new (AppletFactoryData, 1); data->result = result; |