From 11f4783fd2ffefa973bfbdb73360b846bdda5793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org> Date: Sat, 3 Feb 2024 13:53:34 +0100 Subject: [PATCH] Guard X11 code paths at buildtime and runtime --- savers/floaters.c | 14 +++-- savers/popsquares.c | 12 +++- savers/slideshow.c | 13 +++- src/Makefile.am | 51 ++++++++++------ src/gs-job.c | 12 +++- src/gs-lock-plug.c | 19 +++--- src/gs-manager.c | 94 ++++++++++++++++++++--------- src/gs-monitor.c | 19 +++--- src/gs-window-x11.c | 73 ++++++++++++++++++---- src/test-window.c | 37 +++++++++--- src/xfce4-screensaver-dialog.c | 10 ++- src/xfce4-screensaver-preferences.c | 25 ++++++-- 12 files changed, 279 insertions(+), 100 deletions(-) diff --git a/savers/floaters.c b/savers/floaters.c index e7964fc..6bc1c43 100644 --- a/savers/floaters.c +++ b/savers/floaters.c @@ -33,9 +33,11 @@ #include <sysexits.h> #include <time.h> -#include <glib.h> -#include <gdk/gdk.h> +#include <gtk/gtk.h> +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> #include <gtk/gtkx.h> +#endif #include <libxfce4util/libxfce4util.h> @@ -1111,7 +1113,7 @@ int main (int argc, char *argv[]) { ScreenSaver *screen_saver; - GtkWidget *window; + GtkWidget *window = NULL; GtkWidget *drawing_area; GError *error; gboolean success; @@ -1146,7 +1148,11 @@ main (int argc, return EX_USAGE; } - window = gtk_plug_new (strtoul (g_getenv ("XSCREENSAVER_WINDOW"), NULL, 0)); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + window = gtk_plug_new (strtoul (g_getenv ("XSCREENSAVER_WINDOW"), NULL, 0)); + } +#endif gtk_widget_set_app_paintable (window, TRUE); g_signal_connect (G_OBJECT (window), "destroy", diff --git a/savers/popsquares.c b/savers/popsquares.c index 2be0151..1a4fc40 100644 --- a/savers/popsquares.c +++ b/savers/popsquares.c @@ -24,7 +24,11 @@ #include <stdlib.h> #include <string.h> +#include <gtk/gtk.h> +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> #include <gtk/gtkx.h> +#endif #include <libxfce4util/libxfce4util.h> @@ -35,7 +39,7 @@ int main (int argc, char **argv) { GSThemeEngine *engine; - GtkWidget *window; + GtkWidget *window = NULL; GError *error; xfce_textdomain (GETTEXT_PACKAGE, XFCELOCALEDIR, "UTF-8"); @@ -49,7 +53,11 @@ main (int argc, return EXIT_FAILURE; } - window = gtk_plug_new (strtoul (g_getenv ("XSCREENSAVER_WINDOW"), NULL, 0)); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + window = gtk_plug_new (strtoul (g_getenv ("XSCREENSAVER_WINDOW"), NULL, 0)); + } +#endif gtk_widget_set_app_paintable (window, TRUE); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); diff --git a/savers/slideshow.c b/savers/slideshow.c index 3b568f3..c62c52b 100644 --- a/savers/slideshow.c +++ b/savers/slideshow.c @@ -26,9 +26,12 @@ #include <string.h> #include <unistd.h> -#include <glib.h> #include <glib/gstdio.h> +#include <gtk/gtk.h> +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> #include <gtk/gtkx.h> +#endif #include <libxfce4util/libxfce4util.h> @@ -39,7 +42,7 @@ int main (int argc, char **argv) { GSThemeEngine *engine; - GtkWidget *window; + GtkWidget *window = NULL; GError *error; gboolean ret; char *location = NULL; @@ -90,7 +93,11 @@ main (int argc, char **argv) { g_set_prgname ("slideshow"); - window = gtk_plug_new (strtoul (g_getenv ("XSCREENSAVER_WINDOW"), NULL, 0)); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + window = gtk_plug_new (strtoul (g_getenv ("XSCREENSAVER_WINDOW"), NULL, 0)); + } +#endif gtk_widget_set_app_paintable (window, TRUE); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); diff --git a/src/Makefile.am b/src/Makefile.am index 6eebfb9..5770f04 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -94,8 +94,6 @@ test_window_SOURCES = \ test-window.c \ gs-window.h \ gs-window-x11.c \ - gs-grab-x11.c \ - gs-grab.h \ gs-marshal.c \ gs-marshal.h \ gs-debug.c \ @@ -114,9 +112,6 @@ test_window_CFLAGS = \ $(DBUS_GLIB_CFLAGS) \ $(LIBXFCE4UI_CFLAGS) \ $(XFCONF_CFLAGS) \ - $(LIBX11_CFLAGS) \ - $(LIBXEXT_CFLAGS) \ - $(LIBXKLAVIER_CFLAGS) \ $(NULL) test_window_LDADD = \ @@ -125,10 +120,26 @@ test_window_LDADD = \ $(DBUS_GLIB_LIBS) \ $(LIBXFCE4UI_LIBS) \ $(XFCONF_LIBS) \ + $(NULL) + +if ENABLE_X11 +test_window_SOURCES += \ + gs-grab-x11.c \ + gs-grab.h \ + $(NULL) + +test_window_CFLAGS += \ + $(LIBX11_CFLAGS) \ + $(LIBXEXT_CFLAGS) \ + $(LIBXKLAVIER_CFLAGS) \ + $(NULL) + +test_window_LDADD += \ $(LIBX11_LIBS) \ $(LIBXEXT_LIBS) \ $(LIBXKLAVIER_LIBS) \ $(NULL) +endif xfce4_screensaver_dialog_built_sources = \ xfce4-screensaver-dialog-css.h \ @@ -149,8 +160,6 @@ xfce4_screensaver_dialog_SOURCES = \ subprocs.h \ xfce-desktop-utils.c \ xfce-desktop-utils.h \ - xfcekbd-indicator.c \ - xfcekbd-indicator.h \ xfce-bg.c \ xfce-bg.h \ $(AUTH_SOURCES) \ @@ -170,9 +179,6 @@ xfce4_screensaver_dialog_CFLAGS = \ $(LIBXFCE4UI_CFLAGS) \ $(XFCONF_CFLAGS) \ $(AUTH_CFLAGS) \ - $(LIBX11_CFLAGS) \ - $(LIBXEXT_CFLAGS) \ - $(LIBXKLAVIER_CFLAGS) \ $(NULL) xfce4_screensaver_dialog_LDADD = \ @@ -182,10 +188,26 @@ xfce4_screensaver_dialog_LDADD = \ $(LIBXFCE4UI_LIBS) \ $(XFCONF_LIBS) \ $(AUTH_LIBS) \ + $(NULL) + +if ENABLE_X11 +xfce4_screensaver_dialog_SOURCES += \ + xfcekbd-indicator.c \ + xfcekbd-indicator.h \ + $(NULL) + +xfce4_screensaver_dialog_CFLAGS += \ + $(LIBX11_CFLAGS) \ + $(LIBXEXT_CFLAGS) \ + $(LIBXKLAVIER_CFLAGS) \ + $(NULL) + +xfce4_screensaver_dialog_LDADD += \ $(LIBX11_LIBS) \ $(LIBXEXT_LIBS) \ $(LIBXKLAVIER_LIBS) \ $(NULL) +endif BUILT_SOURCES = \ gs-marshal.c \ @@ -222,8 +244,6 @@ xfce4_screensaver_SOURCES = \ gs-debug.h \ subprocs.c \ subprocs.h \ - gs-grab-x11.c \ - gs-grab.h \ xfce-desktop-utils.c \ xfce-desktop-utils.h \ $(BUILT_SOURCES) \ @@ -238,11 +258,6 @@ xfce4_screensaver_CFLAGS = \ $(GARCON_GTK3_CFLAGS) \ $(SYSTEMD_CFLAGS) \ $(ELOGIND_CFLAGS) \ - $(LIBX11_CFLAGS) \ - $(LIBXEXT_CFLAGS) \ - $(LIBXSCRNSAVER_CFLAGS) \ - $(LIBXKLAVIER_CFLAGS) \ - $(LIBWNCK_CFLAGS) \ $(NULL) xfce4_screensaver_LDADD = \ @@ -260,6 +275,8 @@ if ENABLE_X11 xfce4_screensaver_SOURCES += \ gs-listener-x11.c \ gs-listener-x11.h \ + gs-grab-x11.c \ + gs-grab.h \ $(NULL) xfce4_screensaver_CFLAGS += \ diff --git a/src/gs-job.c b/src/gs-job.c index b188f45..af6cfdf 100644 --- a/src/gs-job.c +++ b/src/gs-job.c @@ -31,11 +31,12 @@ #include <sys/wait.h> #include <unistd.h> -#include <glib.h> #include <glib/gstdio.h> -#include <gdk/gdk.h> +#include <gtk/gtk.h> +#ifdef ENABLE_X11 #include <gdk/gdkx.h> #include <gtk/gtkx.h> +#endif #if defined(HAVE_SETPRIORITY) && defined(PRIO_PROCESS) #include <sys/resource.h> @@ -77,7 +78,12 @@ widget_get_id_string (GtkWidget *widget) { g_return_val_if_fail (widget != NULL, NULL); - id = g_strdup_printf ("0x%lX", gtk_socket_get_id (GTK_SOCKET (widget))); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + id = g_strdup_printf ("0x%lX", gtk_socket_get_id (GTK_SOCKET (widget))); + } +#endif + return id; } diff --git a/src/gs-lock-plug.c b/src/gs-lock-plug.c index 2c678a0..8b535d6 100644 --- a/src/gs-lock-plug.c +++ b/src/gs-lock-plug.c @@ -35,9 +35,14 @@ #include <glib/gprintf.h> #include <glib/gstdio.h> #include <gdk/gdkkeysyms.h> +#include <gtk/gtk.h> +#ifdef ENABLE_X11 #include <gdk/gdkx.h> #include <gtk/gtkx.h> -#include <gtk/gtk.h> +#ifdef WITH_KBD_LAYOUT_INDICATOR +#include "xfcekbd-indicator.h" +#endif +#endif #include <libxfce4util/libxfce4util.h> #include <xfconf/xfconf.h> @@ -49,10 +54,6 @@ #include "xfce-desktop-utils.h" #include "xfce4-screensaver-dialog-ui.h" -#ifdef WITH_KBD_LAYOUT_INDICATOR -#include "xfcekbd-indicator.h" -#endif - #define MDM_FLEXISERVER_COMMAND "mdmflexiserver" #define MDM_FLEXISERVER_ARGS "--startnew Standard" @@ -1602,7 +1603,11 @@ gs_lock_plug_init (GSLockPlug *plug) { gs_profile_start (NULL); plug->priv = gs_lock_plug_get_instance_private (plug); - plug->priv->plug_widget = gtk_plug_new (0); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + plug->priv->plug_widget = gtk_plug_new (0); + } +#endif g_object_set_data (G_OBJECT (plug->priv->plug_widget), "gs-lock-plug", plug); clear_clipboards (plug); @@ -1612,7 +1617,7 @@ gs_lock_plug_init (GSLockPlug *plug) { /* Layout indicator */ #ifdef WITH_KBD_LAYOUT_INDICATOR - if (plug->priv->auth_prompt_kbd_layout_indicator != NULL) { + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { XklEngine *engine; engine = xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())); diff --git a/src/gs-manager.c b/src/gs-manager.c index 4a75590..a8c5376 100644 --- a/src/gs-manager.c +++ b/src/gs-manager.c @@ -25,9 +25,12 @@ #include <gdk/gdk.h> #include <gio/gio.h> +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> +#include "gs-grab.h" +#endif #include "gs-debug.h" -#include "gs-grab.h" #include "gs-job.h" #include "gs-manager.h" #include "gs-prefs.h" @@ -55,7 +58,9 @@ struct GSManagerPrivate { guint lock_timeout_id; guint cycle_timeout_id; +#ifdef ENABLE_X11 GSGrab *grab; +#endif }; enum { @@ -430,7 +435,11 @@ static void gs_manager_init (GSManager *manager) { manager->priv = gs_manager_get_instance_private (manager); - manager->priv->grab = gs_grab_new (); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + manager->priv->grab = gs_grab_new (); + } +#endif manager->priv->prefs = gs_prefs_new(); manager->priv->jobs = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) remove_job); @@ -512,6 +521,7 @@ gs_manager_show_message (GSManager *manager, gs_manager_request_unlock (manager); } +#ifdef ENABLE_X11 static gboolean manager_maybe_grab_window (GSManager *manager, GSWindow *window) { @@ -564,13 +574,18 @@ window_grab_broken_cb (GSWindow *window, gs_grab_reset (manager->priv->grab); } } +#endif static gboolean window_map_event_cb (GSWindow *window, GdkEvent *event, GSManager *manager) { gs_debug ("Handling window map_event event"); - manager_maybe_grab_window (manager, window); +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + manager_maybe_grab_window (manager, window); + } +#endif manager_maybe_start_job_for_window (manager, window); return FALSE; } @@ -646,14 +661,18 @@ handle_window_dialog_up (GSManager *manager, } } - /* move devices grab so that dialog can be used; - release the pointer grab while dialog is up so that - the dialog can be used. We'll regrab it when the dialog goes down */ - gs_debug ("Initiate pointer-less grab move to %p", window); - gs_grab_move_to_window (manager->priv->grab, - gs_window_get_gdk_window (window), - gs_window_get_display (window), - TRUE, FALSE); +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + /* move devices grab so that dialog can be used; + release the pointer grab while dialog is up so that + the dialog can be used. We'll regrab it when the dialog goes down */ + gs_debug ("Initiate pointer-less grab move to %p", window); + gs_grab_move_to_window (manager->priv->grab, + gs_window_get_gdk_window (window), + gs_window_get_display (window), + TRUE, FALSE); + } +#endif if (!manager->priv->throttled) { gs_debug ("Suspending jobs"); @@ -672,11 +691,15 @@ handle_window_dialog_down (GSManager *manager, gs_debug ("Handling dialog down"); - /* regrab pointer */ - gs_grab_move_to_window (manager->priv->grab, - gs_window_get_gdk_window (window), - gs_window_get_display (window), - FALSE, FALSE); +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + /* regrab pointer */ + gs_grab_move_to_window (manager->priv->grab, + gs_window_get_gdk_window (window), + gs_window_get_display (window), + FALSE, FALSE); + } +#endif /* make all windows sensitive to get events */ g_hash_table_iter_init (&iter, manager->priv->windows); @@ -726,7 +749,11 @@ disconnect_window_signals (GSManager *manager, g_signal_handlers_disconnect_by_func (window, window_map_event_cb, manager); g_signal_handlers_disconnect_by_func (window, window_obscured_cb, manager); g_signal_handlers_disconnect_by_func (window, window_dialog_up_changed_cb, manager); - g_signal_handlers_disconnect_by_func (window, window_grab_broken_cb, manager); +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + g_signal_handlers_disconnect_by_func (window, window_grab_broken_cb, manager); + } +#endif } static void @@ -752,8 +779,12 @@ connect_window_signals (GSManager *manager, G_CALLBACK (window_obscured_cb), manager, G_CONNECT_AFTER); g_signal_connect_object (window, "notify::dialog-up", G_CALLBACK (window_dialog_up_changed_cb), manager, 0); - g_signal_connect_object (window, "grab_broken_event", - G_CALLBACK (window_grab_broken_cb), manager, G_CONNECT_AFTER); +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + g_signal_connect_object (window, "grab-broken-event", + G_CALLBACK (window_grab_broken_cb), manager, G_CONNECT_AFTER); + } +#endif } @@ -913,14 +944,18 @@ gs_manager_finalize (GObject *object) { g_return_if_fail (manager->priv != NULL); remove_timers(manager); - gs_grab_release (manager->priv->grab, TRUE); +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + gs_grab_release (manager->priv->grab, TRUE); + g_object_unref (manager->priv->grab); + } +#endif g_hash_table_destroy (manager->priv->jobs); gs_manager_destroy_windows (manager); g_hash_table_destroy (manager->priv->windows); manager->priv->active = FALSE; - g_object_unref (manager->priv->grab); g_object_unref (manager->priv->prefs); G_OBJECT_CLASS (gs_manager_parent_class)->finalize (object); @@ -971,8 +1006,6 @@ show_windows (GHashTable *windows) { static gboolean gs_manager_activate (GSManager *manager) { - gboolean res; - g_return_val_if_fail (manager != NULL, FALSE); g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE); @@ -981,10 +1014,13 @@ gs_manager_activate (GSManager *manager) { return FALSE; } - res = gs_grab_grab_root (manager->priv->grab, FALSE, FALSE); - if (!res) { - return FALSE; +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + if (!gs_grab_grab_root (manager->priv->grab, FALSE, FALSE)) { + return FALSE; + } } +#endif gs_manager_create_windows (GS_MANAGER (manager)); @@ -1006,7 +1042,11 @@ gs_manager_deactivate (GSManager *manager) { } remove_timers (manager); - gs_grab_release (manager->priv->grab, TRUE); +#ifdef ENABLE_X11 + if (manager->priv->grab != NULL) { + gs_grab_release (manager->priv->grab, TRUE); + } +#endif g_hash_table_remove_all (manager->priv->jobs); gs_manager_destroy_windows (manager); diff --git a/src/gs-monitor.c b/src/gs-monitor.c index 239d355..5b4859e 100644 --- a/src/gs-monitor.c +++ b/src/gs-monitor.c @@ -28,11 +28,10 @@ #include <string.h> #include <unistd.h> +#ifdef ENABLE_X11 #include <X11/extensions/scrnsaver.h> - -#include <glib.h> -#include <glib-object.h> #include <gdk/gdkx.h> +#endif #include "gs-debug.h" #include "gs-listener-dbus.h" @@ -64,11 +63,15 @@ static void manager_deactivated_cb(GSManager* manager, GSMonitor* monitor) { } static void gs_monitor_simulate_user_activity(GSMonitor* monitor) { - Display *display = gdk_x11_display_get_xdisplay (gdk_display_get_default ()); - XScreenSaverSuspend (display, TRUE); - XSync (display, FALSE); - XScreenSaverSuspend (display, FALSE); - XSync (display, FALSE); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + Display *display = gdk_x11_display_get_xdisplay (gdk_display_get_default ()); + XScreenSaverSuspend (display, TRUE); + XSync (display, FALSE); + XScreenSaverSuspend (display, FALSE); + XSync (display, FALSE); + } +#endif /* request that the manager unlock - will pop up a dialog if necessary */ diff --git a/src/gs-window-x11.c b/src/gs-window-x11.c index ab202a5..6546c33 100644 --- a/src/gs-window-x11.c +++ b/src/gs-window-x11.c @@ -28,12 +28,13 @@ #include <sys/types.h> #include <sys/wait.h> -#include <gdk/gdkx.h> #include <gdk/gdkkeysyms.h> #include <gtk/gtk.h> +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> #include <gtk/gtkx.h> - #include <X11/extensions/shape.h> +#endif #include "gs-debug.h" #include "gs-marshal.h" @@ -140,6 +141,7 @@ set_invisible_cursor (GdkWindow *window, } } +#ifdef ENABLE_X11 /* derived from tomboy */ static void gs_window_override_user_time (GSWindow *window) { @@ -212,12 +214,18 @@ widget_clear_all_children (GtkWidget *widget) { gdk_x11_display_error_trap_pop_ignored (display); } +#endif void gs_window_clear (GSWindow *window) { +#ifdef ENABLE_X11 GdkDisplay *display; g_return_if_fail (GS_IS_WINDOW (window)); + if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + return; + } + gs_debug ("Clearing widgets"); if (gtk_widget_get_realized (GTK_WIDGET (window))) { @@ -234,6 +242,7 @@ gs_window_clear (GSWindow *window) { display = gtk_widget_get_display (GTK_WIDGET(window)); gdk_display_flush (display); +#endif } static cairo_region_t * @@ -367,7 +376,11 @@ gs_window_real_realize (GtkWidget *widget) { GTK_WIDGET_CLASS (gs_window_parent_class)->realize (widget); } - gs_window_override_user_time (GS_WINDOW (widget)); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + gs_window_override_user_time (GS_WINDOW (widget)); + } +#endif gs_window_move_resize_window (GS_WINDOW (widget), TRUE, TRUE); @@ -434,6 +447,7 @@ add_emit_deactivated_idle (GSWindow *window) { window->priv->deactivated_idle_id = g_idle_add (emit_deactivated_idle, window); } +#ifdef ENABLE_X11 static void gs_window_raise (GSWindow *window) { GdkWindow *win; @@ -562,6 +576,7 @@ window_select_shape_events (GSWindow *window) { gdk_x11_display_error_trap_pop_ignored (display); } +#endif static gboolean gs_window_real_draw (GtkWidget *widget, @@ -593,9 +608,13 @@ gs_window_real_show (GtkWidget *widget) { remove_watchdog_timer (window); add_watchdog_timer (window, 30); - select_popup_events (); - window_select_shape_events (window); - gdk_window_add_filter (NULL, (GdkFilterFunc)xevent_filter, window); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + select_popup_events (); + window_select_shape_events (window); + gdk_window_add_filter (NULL, (GdkFilterFunc)xevent_filter, window); + } +#endif } static void @@ -698,7 +717,11 @@ gs_window_real_hide (GtkWidget *widget) { window = GS_WINDOW (widget); - gdk_window_remove_filter (NULL, (GdkFilterFunc)xevent_filter, window); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + gdk_window_remove_filter (NULL, (GdkFilterFunc)xevent_filter, window); + } +#endif remove_watchdog_timer (window); @@ -963,6 +986,16 @@ lock_socket_destroyed (GtkWidget *widget, window->priv->lock_socket = NULL; } +static GtkWidget * +socket_new (GSWindow *window) { +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + return gtk_socket_new (); + } +#endif + return NULL; +} + static void create_keyboard_socket (GSWindow *window, gulong id) { @@ -992,7 +1025,7 @@ create_keyboard_socket (GSWindow *window, width = 1400; // Native width for onboard } - window->priv->keyboard_socket = gtk_socket_new (); + window->priv->keyboard_socket = socket_new (window); gtk_widget_set_size_request (window->priv->keyboard_socket, width, height); gtk_widget_set_halign (window->priv->keyboard_socket, GTK_ALIGN_CENTER); gtk_widget_set_valign (window->priv->keyboard_socket, GTK_ALIGN_END); @@ -1005,7 +1038,11 @@ create_keyboard_socket (GSWindow *window, G_CALLBACK (keyboard_plug_removed), window); gtk_overlay_add_overlay (GTK_OVERLAY (window->priv->overlay), window->priv->keyboard_socket); - gtk_socket_add_id (GTK_SOCKET (window->priv->keyboard_socket), id); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + gtk_socket_add_id (GTK_SOCKET (window->priv->keyboard_socket), id); + } +#endif if (!window->priv->prefs->keyboard_displayed) { gtk_widget_hide (window->priv->keyboard_socket); @@ -1146,7 +1183,7 @@ embed_keyboard (GSWindow *window) { static void create_lock_socket (GSWindow *window, gulong id) { - window->priv->lock_socket = gtk_socket_new (); + window->priv->lock_socket = socket_new (window); window->priv->lock_box = gtk_grid_new (); gtk_widget_set_halign (GTK_WIDGET (window->priv->lock_box), GTK_ALIGN_CENTER); @@ -1170,7 +1207,11 @@ create_lock_socket (GSWindow *window, g_signal_connect (window->priv->lock_socket, "plug_removed", G_CALLBACK (lock_plug_removed), window); - gtk_socket_add_id (GTK_SOCKET (window->priv->lock_socket), id); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + gtk_socket_add_id (GTK_SOCKET (window->priv->lock_socket), id); + } +#endif if (window->priv->prefs->keyboard_enabled) { embed_keyboard (window); @@ -1776,6 +1817,7 @@ gs_window_reposition (GSWindow *window) { gs_window_real_size_request (GTK_WIDGET (window), &requisition); } +#ifdef ENABLE_X11 static gboolean gs_window_real_grab_broken (GtkWidget *widget, GdkEventGrabBroken *event) { @@ -1792,6 +1834,7 @@ gs_window_real_grab_broken (GtkWidget *widget, return FALSE; } +#endif gboolean gs_window_is_obscured (GSWindow *window) { @@ -1857,7 +1900,11 @@ gs_window_class_init (GSWindowClass *klass) { widget_class->scroll_event = gs_window_real_scroll_event; widget_class->get_preferred_width = gs_window_real_get_preferred_width; widget_class->get_preferred_height = gs_window_real_get_preferred_height; - widget_class->grab_broken_event = gs_window_real_grab_broken; +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + widget_class->grab_broken_event = gs_window_real_grab_broken; + } +#endif widget_class->visibility_notify_event = gs_window_real_visibility_notify_event; signals[ACTIVITY] = @@ -1959,7 +2006,7 @@ gs_window_init (GSWindow *window) { gtk_widget_show (window->priv->vbox); gtk_container_add (GTK_CONTAINER (window), window->priv->vbox); - window->priv->drawing_area = gtk_socket_new (); + window->priv->drawing_area = socket_new (window); gtk_widget_show (window->priv->drawing_area); gtk_widget_set_app_paintable (window->priv->drawing_area, TRUE); gtk_box_pack_start (GTK_BOX (window->priv->vbox), diff --git a/src/test-window.c b/src/test-window.c index 3f799ee..75a9ad0 100644 --- a/src/test-window.c +++ b/src/test-window.c @@ -31,10 +31,13 @@ #include <xfconf/xfconf.h> #include "gs-debug.h" -#include "gs-grab.h" #include "gs-window.h" +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> +#include "gs-grab.h" static GSGrab *grab = NULL; +#endif static void window_deactivated_cb (GSWindow *window, @@ -55,11 +58,15 @@ window_dialog_down_cb (GSWindow *window, static void window_show_cb (GSWindow *window, gpointer data) { - /* move devices grab so that dialog can be used */ - gs_grab_move_to_window (grab, - gs_window_get_gdk_window (window), - gs_window_get_display (window), - TRUE, FALSE); +#ifdef ENABLE_X11 + if (grab != NULL) { + /* move devices grab so that dialog can be used */ + gs_grab_move_to_window (grab, + gs_window_get_gdk_window (window), + gs_window_get_display (window), + TRUE, FALSE); + } +#endif } static gboolean @@ -91,7 +98,11 @@ static void window_destroyed_cb (GtkWindow *window, gpointer data) { disconnect_window_signals (GS_WINDOW (window)); - gs_grab_release (grab, TRUE); +#ifdef ENABLE_X11 + if (grab != NULL) { + gs_grab_release (grab, TRUE); + } +#endif gtk_main_quit (); } @@ -152,7 +163,11 @@ main (int argc, gs_debug_init (TRUE, FALSE); - grab = gs_grab_new (); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + grab = gs_grab_new (); + } +#endif test_window (); @@ -161,7 +176,11 @@ main (int argc, gtk_main (); - g_object_unref (grab); +#ifdef ENABLE_X11 + if (grab != NULL) { + g_object_unref (grab); + } +#endif gs_debug_shutdown (); xfconf_shutdown (); diff --git a/src/xfce4-screensaver-dialog.c b/src/xfce4-screensaver-dialog.c index 467134b..506170c 100644 --- a/src/xfce4-screensaver-dialog.c +++ b/src/xfce4-screensaver-dialog.c @@ -33,7 +33,10 @@ #include <unistd.h> #include <gtk/gtk.h> +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> #include <gtk/gtkx.h> +#endif #include <libxfce4util/libxfce4util.h> #include <xfconf/xfconf.h> @@ -87,7 +90,12 @@ static char* get_id_string(GtkWidget* widget) { g_return_val_if_fail(widget != NULL, NULL); g_return_val_if_fail(GTK_IS_WIDGET(widget), NULL); - id = g_strdup_printf ("%lu", gtk_plug_get_id (GTK_PLUG (widget))); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + id = g_strdup_printf ("%lu", gtk_plug_get_id (GTK_PLUG (widget))); + } +#endif + return id; } diff --git a/src/xfce4-screensaver-preferences.c b/src/xfce4-screensaver-preferences.c index 1e92c94..d4f1ee8 100644 --- a/src/xfce4-screensaver-preferences.c +++ b/src/xfce4-screensaver-preferences.c @@ -32,9 +32,11 @@ #include <unistd.h> #include <gio/gio.h> -#include <gdk/gdkx.h> #include <gtk/gtk.h> +#ifdef ENABLE_X11 +#include <gdk/gdkx.h> #include <gtk/gtkx.h> +#endif #include <libxfce4ui/libxfce4ui.h> #include <xfconf/xfconf.h> @@ -1805,8 +1807,12 @@ configure_capplet (void) { fullscreen_preview_previous = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_previous_button")); fullscreen_preview_next = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_next_button")); - gtk_container_add (GTK_CONTAINER (preview), gtk_socket_new ()); - gtk_container_add (GTK_CONTAINER (fullscreen_preview_area), gtk_socket_new ()); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + gtk_container_add (GTK_CONTAINER (preview), gtk_socket_new ()); + gtk_container_add (GTK_CONTAINER (fullscreen_preview_area), gtk_socket_new ()); + } +#endif preview = gtk_bin_get_child (GTK_BIN (preview)); gtk_widget_set_app_paintable (preview, TRUE); gtk_widget_set_hexpand (preview, TRUE); @@ -2068,11 +2074,17 @@ main (int argc, gtk_widget_show_all (dialog); - /* To prevent the settings dialog to be saved in the session */ - gdk_x11_set_sm_client_id("FAKE ID"); +#ifdef ENABLE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { + /* To prevent the settings dialog to be saved in the session */ + gdk_x11_set_sm_client_id("FAKE ID"); + } +#endif gtk_main(); - } else { + } +#ifdef ENABLE_X11 + else if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { GtkWidget *plug; GObject *plug_child; @@ -2097,6 +2109,7 @@ main (int argc, /* Enter main loop */ gtk_main(); } +#endif finalize_capplet (); -- GitLab