On Sun, Jul 24, 2011 at 12:25:03PM -0600, Glenn Golden wrote: > Thomas Adam writes: > > > > Does the attached patch unconditionally define the behaviour you're after > > though? > > > > Indeed it does. > > > > > If so, I'll embelish it with options, and commit to CVS. > > > > Way cool dudeski, thanks!
What about now with the attached patch? -- Thomas Adam -- "Deep in my heart I wish I was wrong. But deep in my heart I know I am not." -- Morrissey ("Girl Least Likely To" -- off of Viva Hate.)
diff --git a/doc/commands/MenuStyle.xml b/doc/commands/MenuStyle.xml index fda282d..2e56ea1 100644 --- a/doc/commands/MenuStyle.xml +++ b/doc/commands/MenuStyle.xml @@ -75,6 +75,7 @@ VerticalItemSpacing, VerticalMargins, VerticalTitleSpacing, AutomaticHotkeys / !AutomaticHotkeys, +HotKeyActivatesLastSelectedItem / !HotKeyActivatesLastSelectedItem, MouseWheel, ScrollOffPage / !ScrollOffPage, TrianglesUseFore / !TrianglesUseFore.</para> @@ -124,6 +125,7 @@ TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesRelief, PopupDelayed, PopdownDelayed, PopupDelay 150, PopdownDelay 150, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2, !AutomaticHotkeys, +HotKeyActivatesLastSelectedItem, PopupActiveArea 75.</para> <para><emphasis remap='I'>Mwm</emphasis> @@ -133,6 +135,7 @@ style is equivalent to !HilightBack, Hilight3DThick, !TitleWarp, TitleUnderlines2, SeparatorsLong, TrianglesRelief, PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2, +HotKeyActivatesLastSelectedItem, !AutomaticHotkeys, PopupActiveArea 75.</para> <para><emphasis remap='I'>Win</emphasis> @@ -141,6 +144,7 @@ style is equivalent to HilightBack, Hilight3DOff, ActiveFore, TitleUnderlines1, SeparatorsShort, TrianglesSolid, PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, RemoveSubmenus, SubmenusRight, BorderWidth 2, +HotKeyActivatesLastSelectedItem, !AutomaticHotkeys, PopupActiveArea 75.</para> <para> @@ -719,6 +723,17 @@ always overridden if an explicit hot-key is assigned in the command.</para> <para> +<fvwmopt cmd="MenuStyle" opt="HotKeyActivatesLastSelectedItem"/> and +<emphasis remap='I'>!HotKeyActivatesLastSelectedItem</emphasis> controls how +button presses on a menu work when hotkeys are enabled. By default, if a given +menu entry only has one completeable match for a given hotkey, that action for +the given menu entry is invoked and the menu is closed. This is implied by the +<emphasis remap='I'>HotKeyActivatesLastSelectedItem</emphasis> option. However, +the menu can be told to wait for the user to run the selected item instead, when +there is only one matched item for a given hotkey, by using the +<emphasis remap='I'>!HotKeyActivatesLastSelectedItem</emphasis> option.</para> + +<para> <fvwmopt cmd="MenuStyle" opt="MouseWheel"/> controls the ability to scroll the menu using a mouse wheel. It takes one argument, that can be one of diff --git a/fvwm/menubindings.c b/fvwm/menubindings.c index 62accf3..a125014 100644 --- a/fvwm/menubindings.c +++ b/fvwm/menubindings.c @@ -707,7 +707,12 @@ void menu_shortcuts( /* For multiple instances of a single hotkey, just move the * selection */ - if (countHotkey > 1) + /* TA: 2011-07-24: But if the user has turned off + * "HotKeyActivatesLastSelectedItem", keep the menu open until + * the user has asked for that entry to be enacted. + */ + if ((countHotkey > 1) || (countHotkey >=1 && + !MST_HOTKEY_ACTIVATES_LAST(mr))) { *pmi_current = new_item; pmret->rc = MENU_NEWITEM; diff --git a/fvwm/menustyle.c b/fvwm/menustyle.c index e33df5a..5ce75aa 100644 --- a/fvwm/menustyle.c +++ b/fvwm/menustyle.c @@ -432,6 +432,7 @@ static int menustyle_get_styleopt_index(char *option) "TitleColorset", "HilightTitleBack", "TitleFont", "VerticalMargins", + "HotKeyActivatesLastSelectedItem", NULL }; @@ -1007,6 +1008,13 @@ MenuStyle *menustyle_parse_style(F_CMD_ARGS) ST_USE_LEFT_SUBMENUS(tmpms) = 0; ST_IS_ANIMATED(tmpms) = 0; ST_USE_AUTOMATIC_HOTKEYS(tmpms) = 0; + /* Pressing a hotkey on an item which only has a + * single entry will activate that action; turning + * thos off will make the menu persist until enter or + * space is pressed; the default behaviour is to + * always close the meny and run the action. + */ + ST_HOTKEY_ACTIVATES_LAST(tmpms) = 1; menustyle_free_face(&ST_FACE(tmpms)); ST_FACE(tmpms).type = SimpleMenu; if (ST_PSTDFONT(tmpms) && !ST_USING_DEFAULT_FONT(tmpms)) @@ -1601,6 +1609,9 @@ MenuStyle *menustyle_parse_style(F_CMD_ARGS) &ST_VERTICAL_MARGIN_BOTTOM(tmpms), 0, 0); break; + case 63: /* HotKeyActivatesLastSelectedItem */ + ST_HOTKEY_ACTIVATES_LAST(tmpms) = on; + break; #if 0 case 99: /* PositionHints */ @@ -1826,6 +1837,7 @@ void menustyle_copy(MenuStyle *origms, MenuStyle *destms) /* AutomaticHotkeys */ ST_USE_AUTOMATIC_HOTKEYS(destms) = ST_USE_AUTOMATIC_HOTKEYS(origms); + ST_HOTKEY_ACTIVATES_LAST(destms) = ST_HOTKEY_ACTIVATES_LAST(origms); /* Item and Title Spacing */ ST_ITEM_GAP_ABOVE(destms) = ST_ITEM_GAP_ABOVE(origms); ST_ITEM_GAP_BELOW(destms) = ST_ITEM_GAP_BELOW(origms); diff --git a/fvwm/menustyle.h b/fvwm/menustyle.h index 19c4cff..9ddaf65 100644 --- a/fvwm/menustyle.h +++ b/fvwm/menustyle.h @@ -177,6 +177,8 @@ #define MST_VERTICAL_MARGIN_TOP(m) ((m)->s->ms->look.vertical_margins.top) #define ST_VERTICAL_MARGIN_BOTTOM(s) ((s)->look.vertical_margins.bottom) #define MST_VERTICAL_MARGIN_BOTTOM(m) ((m)->s->ms->look.vertical_margins.bottom) +#define ST_HOTKEY_ACTIVATES_LAST(s) ((s)->feel.flags.hotkey_activates_last) +#define MST_HOTKEY_ACTIVATES_LAST(m) ((m)->s->ms->feel.flags.hotkey_activates_last) /* ---------------------------- type definitions --------------------------- */ @@ -221,6 +223,7 @@ typedef struct MenuFeel unsigned use_automatic_hotkeys : 1; unsigned mouse_wheel : 2; unsigned scroll_off_page : 1; + unsigned hotkey_activates_last : 1; } flags; int PopdownDelay10ms; int PopupOffsetPercent;