diff --git a/ChangeLog b/ChangeLog index 03718180..d17abe2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,7 @@ Changes since version 0.80.0: - Fixed problem with keyboard shortcuts executed an every screen for multihead systems. - Fixed problem with kcalc not having a miniaturize button. +- Added "Hide Others" to the window menu. Changes since version 0.70.0: diff --git a/WPrefs.app/KeyboardShortcuts.c b/WPrefs.app/KeyboardShortcuts.c index ecbbb634..eae3c21f 100644 --- a/WPrefs.app/KeyboardShortcuts.c +++ b/WPrefs.app/KeyboardShortcuts.c @@ -69,7 +69,8 @@ static char *keyOptions[] = { "WindowListKey", "WindowMenuKey", "HideKey", - "MiniaturizeKey", + "HideOthersKey", + "MiniaturizeKey", "CloseKey", "MaximizeKey", "VMaximizeKey", @@ -380,6 +381,7 @@ createPanel(Panel *p) WMAddListItem(panel->actLs, _("Open window list menu")); WMAddListItem(panel->actLs, _("Open window commands menu")); WMAddListItem(panel->actLs, _("Hide active application")); + WMAddListItem(panel->actLs, _("Hide other applications")); WMAddListItem(panel->actLs, _("Miniaturize active window")); WMAddListItem(panel->actLs, _("Close active window")); WMAddListItem(panel->actLs, _("Maximize active window")); diff --git a/src/defaults.c b/src/defaults.c index cf665343..aca36566 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -681,6 +681,9 @@ WDefaultEntry optionList[] = { {"HideKey", "None", (void*)WKBD_HIDE, NULL, getKeybind, setKeyGrab }, + {"HideOthersKey", "None", (void*)WKBD_HIDE_OTHERS, + NULL, getKeybind, setKeyGrab + }, {"MoveResizeKey", "None", (void*)WKBD_MOVERESIZE, NULL, getKeybind, setKeyGrab }, diff --git a/src/event.c b/src/event.c index ba9d3a59..8e6030d8 100644 --- a/src/event.c +++ b/src/event.c @@ -1437,6 +1437,13 @@ handleKeyPress(XEvent *event) } } break; + case WKBD_HIDE_OTHERS: + if (ISMAPPED(wwin) && ISFOCUSED(wwin)) { + CloseWindowMenu(scr); + + wHideOtherApplications(wwin); + } + break; case WKBD_MAXIMIZE: if (ISMAPPED(wwin) && ISFOCUSED(wwin) && !WFLAGP(wwin, no_resizable)) { CloseWindowMenu(scr); diff --git a/src/keybind.h b/src/keybind.h index a18df3ac..136e05db 100644 --- a/src/keybind.h +++ b/src/keybind.h @@ -28,25 +28,26 @@ /* window */ #define WKBD_MINIATURIZE 3 #define WKBD_HIDE 4 -#define WKBD_MAXIMIZE 5 -#define WKBD_VMAXIMIZE 6 -#define WKBD_HMAXIMIZE 7 -#define WKBD_SELECT 8 +#define WKBD_HIDE_OTHERS 5 +#define WKBD_MAXIMIZE 6 +#define WKBD_VMAXIMIZE 7 +#define WKBD_HMAXIMIZE 8 +#define WKBD_SELECT 9 /* Clip */ -#define WKBD_CLIPLOWER 9 -#define WKBD_CLIPRAISE 10 -#define WKBD_CLIPRAISELOWER 11 +#define WKBD_CLIPLOWER 10 +#define WKBD_CLIPRAISE 11 +#define WKBD_CLIPRAISELOWER 12 /* window */ -#define WKBD_RAISE 12 -#define WKBD_LOWER 13 -#define WKBD_RAISELOWER 14 -#define WKBD_MOVERESIZE 15 -#define WKBD_SHADE 16 +#define WKBD_RAISE 13 +#define WKBD_LOWER 14 +#define WKBD_RAISELOWER 15 +#define WKBD_MOVERESIZE 16 +#define WKBD_SHADE 17 /* window, menu */ -#define WKBD_CLOSE 17 +#define WKBD_CLOSE 18 /* window */ -#define WKBD_FOCUSNEXT 18 -#define WKBD_FOCUSPREV 19 +#define WKBD_FOCUSNEXT 19 +#define WKBD_FOCUSPREV 20 #define WKBD_WORKSPACE1 21 #define WKBD_WORKSPACE2 22 @@ -78,10 +79,10 @@ #define WKBD_SWITCH_SCREEN 45 #ifdef KEEP_XKB_LOCK_STATUS -# define WKBD_TOGGLE 46 -# define WKBD_LAST 47 +# define WKBD_TOGGLE 46 +# define WKBD_LAST 47 #else -# define WKBD_LAST 46 +# define WKBD_LAST 46 #endif /* KEEP_XKB_LOCK_STATUS */ diff --git a/src/rootmenu.c b/src/rootmenu.c index 2c94c384..8a50ec24 100644 --- a/src/rootmenu.c +++ b/src/rootmenu.c @@ -338,6 +338,7 @@ static void clearSessionCommand(WMenu *menu, WMenuEntry *entry) { wSessionClearState(menu->frame->screen_ptr); + wScreenSaveState(menu->frame->screen_ptr); } diff --git a/src/screen.h b/src/screen.h index 9eb749a4..c53cfab6 100644 --- a/src/screen.h +++ b/src/screen.h @@ -29,7 +29,7 @@ #include #ifdef XINERAMA -#include +#include #endif diff --git a/src/winmenu.c b/src/winmenu.c index 5452a356..73496bc7 100644 --- a/src/winmenu.c +++ b/src/winmenu.c @@ -50,15 +50,16 @@ #define MC_MINIATURIZE 1 #define MC_SHADE 2 #define MC_HIDE 3 -#define MC_MOVERESIZE 4 -#define MC_SELECT 5 -#define MC_DUMMY_MOVETO 6 -#define MC_PROPERTIES 7 -#define MC_OPTIONS 8 -#define MC_SHORTCUT 8 +#define MC_HIDE_OTHERS 4 +#define MC_MOVERESIZE 5 +#define MC_SELECT 6 +#define MC_DUMMY_MOVETO 7 +#define MC_PROPERTIES 8 +#define MC_OPTIONS 9 +#define MC_SHORTCUT 9 -#define MC_CLOSE 9 -#define MC_KILL 10 +#define MC_CLOSE 10 +#define MC_KILL 11 #define WO_KEEP_ON_TOP 0 @@ -177,6 +178,10 @@ execMenuCommand(WMenu *menu, WMenuEntry *entry) wHideApplication(wapp); break; + case MC_HIDE_OTHERS: + wHideOtherApplications(wwin); + break; + } } @@ -442,7 +447,6 @@ createWindowMenu(WScreen *scr) } entry = wMenuAddCallback(menu, _("Miniaturize"), execMenuCommand, NULL); - if (wKeyBindings[WKBD_MINIATURIZE].keycode!=0) { kcode = wKeyBindings[WKBD_MINIATURIZE].keycode; @@ -466,6 +470,14 @@ createWindowMenu(WScreen *scr) entry->rtext = wstrdup(tmp); } + entry = wMenuAddCallback(menu, _("Hide Others"), execMenuCommand, NULL); + if (wKeyBindings[WKBD_HIDE_OTHERS].keycode!=0) { + kcode = wKeyBindings[WKBD_HIDE_OTHERS].keycode; + + if (kcode && (tmp = XKeysymToString(XKeycodeToKeysym(dpy, kcode, 0)))) + entry->rtext = wstrdup(tmp); + } + entry = wMenuAddCallback(menu, _("Resize/Move"), execMenuCommand, NULL); if (wKeyBindings[WKBD_MOVERESIZE].keycode!=0) { kcode = wKeyBindings[WKBD_MOVERESIZE].keycode;