{
GdkWindow *window;
GdkDisplay *display;
- Atom protocols[4];
+ Atom *protocols;
+ Atom *list;
+ Atom helpatom;
+ int amount = 0;
int n = 0;
+ int i = 0;
+ int help_enabled = -1;
if (help_signal == 0) {
help_signal = g_signal_new("help", GTK_TYPE_DIALOG,
gtk_widget_realize(GTK_WIDGET(dialog));
window = GTK_WIDGET(dialog)->window;
-
display = gdk_drawable_get_display (window);
- protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "WM_DELETE_WINDOW");
- protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "WM_TAKE_FOCUS");
- protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PING");
- protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_CONTEXT_HELP");
+ XGetWMProtocols(GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
+ &list, &amount);
+
+ protocols = (Atom *) malloc (amount * sizeof (Atom));
+ helpatom = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_CONTEXT_HELP");
+
+ for (i=0; i<amount; i++)
+ {
+ protocols[n++] = list[i];
+ if (list[i] == helpatom)
+ {
+ help_enabled = 1;
+ }
+ }
+ XFree (list);
+ if (!help_enabled)
+ {
+ protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_CONTEXT_HELP");
+ }
+
XSetWMProtocols (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), protocols, n);
+ free (protocols);
gdk_window_add_filter(window, handle_xevent, dialog);
}
{
GdkWindow *window=NULL;
GdkDisplay *display;
- Atom protocols[4];
+ Atom *protocols;
+ Atom *list;
+ Atom helpatom;
+ int amount = 0;
int n = 0;
+ int i = 0;
g_return_if_fail(GTK_IS_DIALOG(dialog));
gtk_widget_realize(GTK_WIDGET(dialog));
window = GTK_WIDGET(dialog)->window;
display = gdk_drawable_get_display (window);
-
- protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "WM_DELETE_WINDOW");
- protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "WM_TAKE_FOCUS");
- protocols[n++] = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PING");
- XSetWMProtocols (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), protocols, n);
+ XGetWMProtocols(GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
+ &list, &amount);
+
+ helpatom = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_CONTEXT_HELP");
+ protocols = (Atom *) malloc (amount * sizeof (Atom));
+
+ for (i=0; i<amount; i++)
+ {
+ if (list[i] != helpatom)
+ {
+ protocols[n++] = list[i];
+ }
+ }
+ XFree (list);
+ XSetWMProtocols (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window), protocols, n);
+ free (protocols);
+
gdk_window_add_filter(window, handle_xevent, dialog);
}