diff --git a/panel/panel-application.c b/panel/panel-application.c index 9431f89..d3101c4 100644 --- a/panel/panel-application.c +++ b/panel/panel-application.c @@ -260,7 +260,6 @@ panel_application_xfconf_window_bindings (PanelApplication *application, const PanelProperty properties[] = { { "position-locked", G_TYPE_BOOLEAN }, - { "autohide", G_TYPE_BOOLEAN }, { "span-monitors", G_TYPE_BOOLEAN }, { "horizontal", G_TYPE_BOOLEAN }, { "size", G_TYPE_UINT }, @@ -275,6 +274,8 @@ panel_application_xfconf_window_bindings (PanelApplication *application, { "output-name", G_TYPE_STRING }, { "position", G_TYPE_STRING }, { "disable-struts", G_TYPE_BOOLEAN }, + { "role", G_TYPE_STRING }, /* GtkWindow property (see bug #7094) */ + { "autohide", G_TYPE_BOOLEAN }, { NULL } }; @@ -1264,6 +1265,8 @@ panel_application_new_window (PanelApplication *application, GtkWidget *itembar; gchar *property; gint idx; + GTimeVal tv; + gchar *wmrole; panel_return_val_if_fail (PANEL_IS_APPLICATION (application), NULL); panel_return_val_if_fail (screen == NULL || GDK_IS_SCREEN (screen), NULL); @@ -1325,6 +1328,16 @@ panel_application_new_window (PanelApplication *application, if (new_window) g_object_notify (G_OBJECT (window), "position"); + /* create a somewhat unique role for the panel window (bug #7094) */ + if (gtk_window_get_role (GTK_WINDOW (window)) == NULL) + { + g_get_current_time (&tv); + idx = g_slist_index (application->windows, window); + wmrole = g_strdup_printf (PACKAGE_NAME "-%ld%d", tv.tv_sec, idx); + gtk_window_set_role (GTK_WINDOW (window), wmrole); + g_free (wmrole); + } + return PANEL_WINDOW (window); } diff --git a/panel/panel-window.c b/panel/panel-window.c index 12c53d8..e7be984 100644 --- a/panel/panel-window.c +++ b/panel/panel-window.c @@ -2107,6 +2107,7 @@ panel_window_set_autohide (PanelWindow *window, { GtkWidget *popup; guint i; + gchar *wmrole; const gchar *properties[] = { "enter-opacity", "leave-opacity", "background-alpha", "borders", "background-style", "background-color" }; @@ -2121,6 +2122,9 @@ panel_window_set_autohide (PanelWindow *window, if (autohide) { + /* use unique role for autohide window too */ + wmrole = g_strconcat (gtk_window_get_role (GTK_WINDOW (window)), "-autohide", NULL); + /* create the window */ panel_return_if_fail (window->autohide_window == NULL); popup = g_object_new (PANEL_TYPE_BASE_WINDOW, @@ -2129,9 +2133,12 @@ panel_window_set_autohide (PanelWindow *window, "resizable", TRUE, "type-hint", GDK_WINDOW_TYPE_HINT_DOCK, "gravity", GDK_GRAVITY_STATIC, + "role", wmrole, "name", "XfcePanelWindowHidden", NULL); + g_free (wmrole); + /* move the window offscreen */ panel_base_window_move_resize (PANEL_BASE_WINDOW (popup), -9999, -9999, 3, 3);