--- a/src/windowlist.c +++ b/src/windowlist.c @@ -197,6 +197,7 @@ windowlist_create(GdkScreen *gscreen) GList *windows, *l; NetkWindow *netk_window; gint w, h; + gint is_empty_workspace; PangoFontDescription *italic_font_desc = pango_font_description_from_string("italic") g_return_val_if_fail(GDK_IS_SCREEN(gscreen), NULL); @@ -215,50 +216,26 @@ windowlist_create(GdkScreen *gscreen) netk_workspace = netk_screen_get_workspace(netk_screen, i); ws_name = netk_workspace_get_name(netk_workspace); - if(netk_workspace == active_workspace) { - if(!ws_name || atoi(ws_name) == i+1) - ws_label = g_strdup_printf(_("Workspace %d"), i+1); - else { - gchar *ws_name_esc = g_markup_escape_text(ws_name, strlen(ws_name)); - ws_label = g_strdup_printf("%s", ws_name_esc); - g_free(ws_name_esc); - } - } else { - if(!ws_name || atoi(ws_name) == i+1) - ws_label = g_strdup_printf(_("Workspace %d"), i+1); - else { - gchar *ws_name_esc = g_markup_escape_text(ws_name, strlen(ws_name)); - ws_label = g_strdup_printf("%s", ws_name_esc); - g_free(ws_name_esc); - } - } - mi = gtk_menu_item_new_with_label(ws_label); - g_free(ws_label); - label = gtk_bin_get_child(GTK_BIN(mi)); - gtk_label_set_use_markup(GTK_LABEL(label), TRUE); - gtk_widget_show(mi); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - g_signal_connect_swapped(G_OBJECT(mi), "activate", - G_CALLBACK(netk_workspace_activate), netk_workspace); - - mi = gtk_separator_menu_item_new(); - gtk_widget_show(mi); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - windows = netk_screen_get_windows_stacked(netk_screen); + is_empty_workspace = 0; for(l = windows; l; l = l->next) { + netk_window = l->data; if((netk_window_get_workspace(netk_window) != netk_workspace && !netk_window_is_sticky(netk_window)) || netk_window_is_skip_pager(netk_window) - || netk_window_is_skip_tasklist(netk_window)) + || netk_window_is_skip_tasklist(netk_window) + || (netk_window_is_sticky(netk_window) + && (netk_workspace != active_workspace))) { /* the window isn't on the current WS AND isn't sticky, * OR, * the window is set to skip the pager, * OR, * the window is set to skip the tasklist + * OR, + * the window is sticky, and we aren't in the active WS */ continue; } @@ -266,6 +243,7 @@ windowlist_create(GdkScreen *gscreen) mi = menu_item_from_netk_window(netk_window, w, h); if(!mi) continue; + is_empty_workspace = 1; if(netk_workspace != active_workspace) { GtkWidget *lbl = gtk_bin_get_child(GTK_BIN(mi)); gtk_widget_modify_fg(lbl, GTK_STATE_NORMAL, @@ -282,9 +260,11 @@ windowlist_create(GdkScreen *gscreen) G_CALLBACK(mi_destroyed_cb), netk_window); } - mi = gtk_separator_menu_item_new(); - gtk_widget_show(mi); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); + if (is_empty_workspace) { + mi = gtk_separator_menu_item_new(); + gtk_widget_show(mi); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); + } } pango_font_description_free(italic_font_desc);