--- xfce4-cvs/xfwm4/src/client.c 2005-01-23 16:59:32.526321368 +0200 +++ xfce4/xfwm4/src/client.c 2005-01-23 21:25:19.449020624 +0200 @@ -289,6 +289,7 @@ grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_CYCLE_WINDOWS], c->window); grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_DEL_WORKSPACE], c->window); grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_HIDE_WINDOW], c->window); + grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_SHOW_DESKTOP], c->window); grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_LOWER_WINDOW], c->window); grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MAXIMIZE_HORIZ], c->window); grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MAXIMIZE_VERT], c->window); @@ -2204,7 +2205,9 @@ for (index = screen_info->windows_stack; index; index = g_list_next (index)) { Client *c = (Client *) index->data; - if (CLIENT_CAN_HIDE_WINDOW (c) + + if ((c->win_workspace == screen_info->current_ws) + && CLIENT_CAN_HIDE_WINDOW (c) && FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER) && !FLAG_TEST (c->flags, CLIENT_FLAG_ICONIFIED)) { @@ -2219,11 +2222,13 @@ for (index = g_list_last(screen_info->windows_stack); index; index = g_list_previous (index)) { Client *c = (Client *) index->data; - if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_WAS_SHOWN)) + + if ((c->win_workspace == screen_info->current_ws) + && FLAG_TEST (c->xfwm_flags, XFWM_FLAG_WAS_SHOWN)) { clientShow (c, TRUE); + FLAG_UNSET (c->xfwm_flags, XFWM_FLAG_WAS_SHOWN); } - FLAG_UNSET (c->xfwm_flags, XFWM_FLAG_WAS_SHOWN); } clientFocusTop (screen_info, WIN_LAYER_NORMAL); } --- xfce4-cvs/xfwm4/src/events.c 2005-01-23 16:59:32.522321976 +0200 +++ xfce4/xfwm4/src/events.c 2005-01-23 20:28:20.497780216 +0200 @@ -576,6 +576,30 @@ */ switch (key) { + case KEY_SHOW_DESKTOP: + { + GList *i = NULL; + gboolean visible = FALSE; + + for ( i = screen_info->windows_stack; i != NULL && visible == FALSE; i = g_list_next( i ) ) + { + c = (Client *) i->data; + + if ( c->win_workspace == screen_info->current_ws + && FLAG_TEST( c->xfwm_flags, XFWM_FLAG_VISIBLE ) + && ( FLAG_TEST( c->xfwm_flags, XFWM_FLAG_HAS_BORDER ) && CLIENT_CAN_HIDE_WINDOW( c ) ) ) { + visible = TRUE; + } + } + + if ( visible ) { + clientToggleShowDesktop( screen_info, TRUE ); + } + else { + clientToggleShowDesktop( screen_info, FALSE ); + } + } + break; case KEY_NEXT_WORKSPACE: workspaceSwitch (screen_info, screen_info->current_ws + 1, NULL); break; --- xfce4-cvs/xfwm4/themes/default.keys/keythemerc 2005-01-23 16:59:32.597310576 +0200 +++ xfce4/xfwm4/themes/default.keys/keythemerc 2005-01-23 21:31:03.014790688 +0200 @@ -3,6 +3,7 @@ maximize_vert_key=Alt+F6 maximize_horiz_key=Alt+F7 hide_window_key=Alt+F8 +show_desktop_key=Alt+Shift+F8 shade_window_key=Alt+F9 stick_window_key=Alt+F10 cycle_windows_key=Alt+Tab --- xfce4-cvs/xfwm4/src/settings.c 2005-01-23 16:59:32.520322280 +0200 +++ xfce4/xfwm4/src/settings.c 2005-01-23 19:22:17.638226440 +0200 @@ -985,6 +985,7 @@ parseKeyString (dpy, &screen_info->params->keys[KEY_CYCLE_WINDOWS], getValue ("cycle_windows_key", rc)); parseKeyString (dpy, &screen_info->params->keys[KEY_CLOSE_WINDOW], getValue ("close_window_key", rc)); parseKeyString (dpy, &screen_info->params->keys[KEY_HIDE_WINDOW], getValue ("hide_window_key", rc)); + parseKeyString (dpy, &screen_info->params->keys[KEY_SHOW_DESKTOP], getValue("show_desktop_key", rc)); parseKeyString (dpy, &screen_info->params->keys[KEY_MAXIMIZE_WINDOW], getValue ("maximize_window_key", rc)); parseKeyString (dpy, &screen_info->params->keys[KEY_MAXIMIZE_VERT], getValue ("maximize_vert_key", rc)); parseKeyString (dpy, &screen_info->params->keys[KEY_MAXIMIZE_HORIZ], getValue ("maximize_horiz_key", rc)); @@ -1037,6 +1038,7 @@ parseKeyString (dpy, &screen_info->params->keys[KEY_MOVE_RIGHT_WORKSPACE], getValue ("move_window_right_workspace_key", rc)); ungrabKeys (dpy, screen_info->gnome_win); + grabKey (dpy, &screen_info->params->keys[KEY_SHOW_DESKTOP], screen_info->gnome_win); grabKey (dpy, &screen_info->params->keys[KEY_CYCLE_WINDOWS], screen_info->gnome_win); grabKey (dpy, &screen_info->params->keys[KEY_NEXT_WORKSPACE], screen_info->gnome_win); grabKey (dpy, &screen_info->params->keys[KEY_PREV_WORKSPACE], screen_info->gnome_win); @@ -1152,6 +1154,7 @@ {"del_workspace_key", NULL, TRUE}, {"fullscreen_key", NULL, TRUE}, {"hide_window_key", NULL, TRUE}, + {"show_desktop_key", NULL, TRUE}, {"maximize_horiz_key", NULL, TRUE}, {"maximize_vert_key", NULL, TRUE}, {"maximize_window_key", NULL, TRUE}, --- xfce4-cvs/xfwm4/src/settings.h 2005-01-23 16:59:32.520322280 +0200 +++ xfce4/xfwm4/src/settings.h 2005-01-23 19:14:24.991079728 +0200 @@ -66,57 +66,58 @@ #define KEY_CYCLE_WINDOWS 8 #define KEY_CLOSE_WINDOW 9 #define KEY_HIDE_WINDOW 10 -#define KEY_MAXIMIZE_WINDOW 11 -#define KEY_MAXIMIZE_VERT 12 -#define KEY_MAXIMIZE_HORIZ 13 -#define KEY_SHADE_WINDOW 14 -#define KEY_NEXT_WORKSPACE 15 -#define KEY_PREV_WORKSPACE 16 -#define KEY_ADD_WORKSPACE 17 -#define KEY_DEL_WORKSPACE 18 -#define KEY_STICK_WINDOW 19 -#define KEY_WORKSPACE_1 20 -#define KEY_WORKSPACE_2 21 -#define KEY_WORKSPACE_3 22 -#define KEY_WORKSPACE_4 23 -#define KEY_WORKSPACE_5 24 -#define KEY_WORKSPACE_6 25 -#define KEY_WORKSPACE_7 26 -#define KEY_WORKSPACE_8 27 -#define KEY_WORKSPACE_9 28 -#define KEY_MOVE_NEXT_WORKSPACE 29 -#define KEY_MOVE_PREV_WORKSPACE 30 -#define KEY_MOVE_WORKSPACE_1 31 -#define KEY_MOVE_WORKSPACE_2 32 -#define KEY_MOVE_WORKSPACE_3 33 -#define KEY_MOVE_WORKSPACE_4 34 -#define KEY_MOVE_WORKSPACE_5 35 -#define KEY_MOVE_WORKSPACE_6 36 -#define KEY_MOVE_WORKSPACE_7 37 -#define KEY_MOVE_WORKSPACE_8 38 -#define KEY_MOVE_WORKSPACE_9 39 -#define KEY_SHORTCUT_1 40 -#define KEY_SHORTCUT_2 41 -#define KEY_SHORTCUT_3 42 -#define KEY_SHORTCUT_4 43 -#define KEY_SHORTCUT_5 44 -#define KEY_SHORTCUT_6 45 -#define KEY_SHORTCUT_7 46 -#define KEY_SHORTCUT_8 47 -#define KEY_SHORTCUT_9 48 -#define KEY_SHORTCUT_10 49 -#define KEY_LOWER_WINDOW 50 -#define KEY_RAISE_WINDOW 51 -#define KEY_TOGGLE_FULLSCREEN 52 -#define KEY_UP_WORKSPACE 53 -#define KEY_DOWN_WORKSPACE 54 -#define KEY_LEFT_WORKSPACE 55 -#define KEY_RIGHT_WORKSPACE 56 -#define KEY_MOVE_UP_WORKSPACE 57 -#define KEY_MOVE_DOWN_WORKSPACE 58 -#define KEY_MOVE_LEFT_WORKSPACE 59 -#define KEY_MOVE_RIGHT_WORKSPACE 60 -#define KEY_COUNT 61 +#define KEY_SHOW_DESKTOP 11 +#define KEY_MAXIMIZE_WINDOW 12 +#define KEY_MAXIMIZE_VERT 13 +#define KEY_MAXIMIZE_HORIZ 14 +#define KEY_SHADE_WINDOW 15 +#define KEY_NEXT_WORKSPACE 16 +#define KEY_PREV_WORKSPACE 17 +#define KEY_ADD_WORKSPACE 18 +#define KEY_DEL_WORKSPACE 19 +#define KEY_STICK_WINDOW 20 +#define KEY_WORKSPACE_1 21 +#define KEY_WORKSPACE_2 22 +#define KEY_WORKSPACE_3 23 +#define KEY_WORKSPACE_4 24 +#define KEY_WORKSPACE_5 25 +#define KEY_WORKSPACE_6 26 +#define KEY_WORKSPACE_7 27 +#define KEY_WORKSPACE_8 28 +#define KEY_WORKSPACE_9 29 +#define KEY_MOVE_NEXT_WORKSPACE 30 +#define KEY_MOVE_PREV_WORKSPACE 31 +#define KEY_MOVE_WORKSPACE_1 32 +#define KEY_MOVE_WORKSPACE_2 33 +#define KEY_MOVE_WORKSPACE_3 34 +#define KEY_MOVE_WORKSPACE_4 35 +#define KEY_MOVE_WORKSPACE_5 36 +#define KEY_MOVE_WORKSPACE_6 37 +#define KEY_MOVE_WORKSPACE_7 38 +#define KEY_MOVE_WORKSPACE_8 39 +#define KEY_MOVE_WORKSPACE_9 40 +#define KEY_SHORTCUT_1 41 +#define KEY_SHORTCUT_2 42 +#define KEY_SHORTCUT_3 43 +#define KEY_SHORTCUT_4 44 +#define KEY_SHORTCUT_5 45 +#define KEY_SHORTCUT_6 46 +#define KEY_SHORTCUT_7 47 +#define KEY_SHORTCUT_8 48 +#define KEY_SHORTCUT_9 49 +#define KEY_SHORTCUT_10 50 +#define KEY_LOWER_WINDOW 51 +#define KEY_RAISE_WINDOW 52 +#define KEY_TOGGLE_FULLSCREEN 53 +#define KEY_UP_WORKSPACE 54 +#define KEY_DOWN_WORKSPACE 55 +#define KEY_LEFT_WORKSPACE 56 +#define KEY_RIGHT_WORKSPACE 57 +#define KEY_MOVE_UP_WORKSPACE 58 +#define KEY_MOVE_DOWN_WORKSPACE 59 +#define KEY_MOVE_LEFT_WORKSPACE 60 +#define KEY_MOVE_RIGHT_WORKSPACE 61 +#define KEY_COUNT 62 #define NB_KEY_SHORTCUTS 10 #define ALIGN_LEFT 0 --- xfce4-cvs/xfwm4/mcs-plugin/xfwm4_shortcuteditor.c 2005-01-23 16:59:32.694295832 +0200 +++ xfce4/xfwm4/mcs-plugin/xfwm4_shortcuteditor.c 2005-01-23 19:48:53.592604496 +0200 @@ -379,6 +379,11 @@ gtk_list_store_append (GTK_LIST_STORE (model3), &iter); gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Hide window"), COLUMN_SHORTCUT, entry_value, COLUMN_NAME, *shortcut, -1); } + else if ( g_ascii_strcasecmp( *shortcut, "show_desktop_key" ) == 0 ) + { + gtk_list_store_append( GTK_LIST_STORE( model3 ), &iter ); + gtk_list_store_set( GTK_LIST_STORE( model3 ), &iter, COLUMN_COMMAND, _( "Show desktop" ), COLUMN_SHORTCUT, entry_value, COLUMN_NAME, *shortcut, -1 ); + } else if (g_ascii_strcasecmp (*shortcut, "shade_window_key") == 0) { gtk_list_store_append (GTK_LIST_STORE (model3), &iter);