diff --git a/WPrefs.app/Expert.c b/WPrefs.app/Expert.c index b1a8e9bd..157bc393 100644 --- a/WPrefs.app/Expert.c +++ b/WPrefs.app/Expert.c @@ -116,7 +116,10 @@ static const struct { /* default: */ True, OPTION_WMAKER, "WrapAppiconsInDock" }, { N_("Double click on titlebar maximize a window to full screen."), - /* default: */ False, OPTION_WMAKER, "DbClickFullScreen" } + /* default: */ False, OPTION_WMAKER, "DbClickFullScreen" }, + + { N_("Close rootmenu when mouse (left or right) is clicked outside focus."), + /* default: */ False, OPTION_WMAKER, "CloseRootMenuByLeftOrRightMouseClick" } }; diff --git a/WPrefs.app/po/ru.po b/WPrefs.app/po/ru.po index c5dbd069..75156285 100644 --- a/WPrefs.app/po/ru.po +++ b/WPrefs.app/po/ru.po @@ -432,11 +432,14 @@ msgstr "Прилипания окон по краям и углам." msgid "Snapping a window to the top maximizes it to the full screen." msgstr "Распахнуть окно при перетаскивании к верхнему краю." - #: ../../WPrefs.app/Expert.c:118 msgid "Double click on titlebar maximize a window to full screen." msgstr "Распахнуть окно двойным щелчком." +#: ../../WPrefs.app/Expert.c:121 +msgid "Close rootmenu when mouse (left or right) is clicked outside focus." +msgstr "Закрывать меню приложений правым или левым щелчком мыши вне фокуса." + #: ../../WPrefs.app/Expert.c:328 msgid "Expert User Preferences" msgstr "Установки для опытного пользователя" diff --git a/src/WindowMaker.h b/src/WindowMaker.h index b4f3a885..fa04093b 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -454,6 +454,7 @@ extern struct WPreferences { char cycle_active_head_only; /* Cycle only windows on the active head */ char cycle_ignore_minimized; /* Ignore minimized windows when cycling */ char double_click_fullscreen; /* Double click on titlebar maximize a window to full screen*/ + char close_rootmenu_left_right_click;/* Close application menu when mouse (left or right) is clicked outside focus */ char strict_windoze_cycle; /* don't close switch panel when shift is released */ char panel_only_open; /* Only open the switch panel; don't switch */ int minipreview_size; /* Size of Mini-Previews in pixels */ diff --git a/src/defaults.c b/src/defaults.c index 11c438f2..2f68539c 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -827,7 +827,9 @@ WDefaultEntry optionList[] = { {"CycleIgnoreMinimized", "NO", NULL, &wPreferences.cycle_ignore_minimized, getBool, NULL, NULL, NULL}, {"DbClickFullScreen", "NO", NULL, - &wPreferences.double_click_fullscreen, getBool, NULL, NULL, NULL} + &wPreferences.double_click_fullscreen, getBool, NULL, NULL, NULL}, + {"CloseRootMenuByLeftOrRightMouseClick", "NO", NULL, + &wPreferences.close_rootmenu_left_right_click, getBool, NULL, NULL, NULL} }; static void initDefaults(void) diff --git a/src/event.c b/src/event.c index 007b10b4..f5014e3b 100644 --- a/src/event.c +++ b/src/event.c @@ -759,6 +759,18 @@ static void executeButtonAction(WScreen *scr, XEvent *event, int action) case WA_SELECT_WINDOWS: wUnselectWindows(scr); wSelectWindows(scr, event); + if (wPreferences.close_rootmenu_left_right_click){ + WMenu *menu = NULL; + WMPropList *definition; + menu = scr->root_menu; + if (scr->root_menu){ + wMenuDestroy(menu,True); + scr->root_menu = NULL; + definition = w_global.domain.root_menu->dictionary; + menu = configureMenu(scr, definition); + scr->root_menu = menu; + } + } break; case WA_OPEN_APPMENU: OpenRootMenu(scr, event->xbutton.x_root, event->xbutton.y_root, False); diff --git a/src/rootmenu.c b/src/rootmenu.c index fc8774e0..f391fc60 100644 --- a/src/rootmenu.c +++ b/src/rootmenu.c @@ -66,7 +66,6 @@ static WMenu *readMenuPipe(WScreen * scr, char **file_name); static WMenu *readPLMenuPipe(WScreen * scr, char **file_name); static WMenu *readMenuFile(WScreen *scr, const char *file_name); static WMenu *readMenuDirectory(WScreen *scr, const char *title, char **file_name, const char *command); -static WMenu *configureMenu(WScreen *scr, WMPropList *definition); static void menu_parser_register_macros(WMenuParser parser); typedef struct Shortcut { @@ -1467,7 +1466,7 @@ static WMenu *makeDefaultMenu(WScreen * scr) * *---------------------------------------------------------------------- */ -static WMenu *configureMenu(WScreen *scr, WMPropList *definition) +WMenu *configureMenu(WScreen *scr, WMPropList *definition) { WMenu *menu = NULL; WMPropList *elem; diff --git a/src/rootmenu.h b/src/rootmenu.h index 497b5267..44475b09 100644 --- a/src/rootmenu.h +++ b/src/rootmenu.h @@ -25,5 +25,6 @@ Bool wRootMenuPerformShortcut(XEvent * event); void wRootMenuBindShortcuts(Window window); void OpenRootMenu(WScreen * scr, int x, int y, int keyboard); +WMenu *configureMenu(WScreen *scr, WMPropList *definition); #endif /* WMROOTMENU_H */