/* Written by Patrick Griffis <tingping@tingping.se> SPDX License: CC0-1.0 */ #ifdef GDK_WINDOWING_X11 /* Note you will have to link to xlib in this case */ #include <gdk/gdkx.h> #endif #ifdef GDK_WINDOWING_WIN32 #include <gdk/win32/gdkwin32.h> #endif #ifdef GDK_WINDOWING_QUARTZ #include <gdk/quartz/gdkquartz.h> #endif gboolean tray_icon_supported (GtkWindow *window) { #if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WIN32) || defined(GDK_WINDOWING_QUARTZ) GdkScreen *screen = gtk_window_get_screen (window); GdkDisplay *display = gdk_screen_get_display (screen); #endif #ifdef GDK_WINDOWING_X11 if (GDK_IS_X11_DISPLAY (display)) { int screen_number = gdk_screen_get_number (screen); char *selection_name = g_strdup_printf ("_NET_SYSTEM_TRAY_S%d", screen_number); Display *xdisplay = gdk_x11_display_get_xdisplay (display); Atom selection_atom = gdk_x11_get_xatom_by_name_for_display (display, selection_name); Window tray_window = None; gdk_x11_display_grab (display); tray_window = XGetSelectionOwner (xdisplay, selection_atom); gdk_x11_display_ungrab (display); XFlush (xdisplay); g_free (selection_name); return (tray_window != None); } #endif /* Windows and OSX always have tray support */ #ifdef GDK_WINDOWING_WIN32 if (GDK_IS_WIN32_DISPLAY (display)) return TRUE; #endif #ifdef GDK_WINDOWING_QUARTZ if (GDK_IS_QUARTZ_DISPLAY (display)) return TRUE; #endif /* Wayland, Broadway, and Mir never do. */ return FALSE; }