Don't hide menus

Daniel xracoonx at gmx.de
Fri Oct 13 06:05:57 UTC 2023


It seems to be a rather universally accepted UI rule that menu items 
should not be hidden. Feel free to can check your favorite apps or 
search the recommendation on the web. (There is also the more extreme 
recommendations to not even disable menu entries but I think it is 
generally agreed that this is a bad idea because it leaves the user 
clicking in vain.)

I am referring here foremost to the main menu items. Context-menus may 
be treated differently because they are expected to be context-dependent 
(as the name suggests).

Among the main reasons for why menu items should not be hidden are that 
with hidden menus users have a harder time

1) discovering features
2) figuring out and remembering where menu items are located

Notice that these two may be hard to appreciate for developers because 
they typically know the entries independently of whether they are shown. 
And I seem to remember a couple of instances where users were asking 
about missing features on the list which were due to OptItems being hard 
to discover.

In contrast to other applications, LyX has a greater number of menu 
entries that become hidden. I am not sure about what the history of this 
special behavior of LyX is but maybe it had to do with a trade-off in a 
time when screen size/resolution was quite limited?

I have made a test and changed all OptItems to Items in the 
stdmenus.inc. That might not show all the menu items since there are 
some whose "expansion" is hard-coded. Those expansions should typically 
have a disabled "empty" entry when there is nothing to expand. See, 
e.g., Navigate > (Empty Table of Contents) which is a perfect example of 
informing a user about a feature with a disabled entry while the feature 
is unavailable.

With this change I found that the length of the menus seemed totally 
acceptable to me (and at least not longer than for other "word processors").

The only exception were the various inset settings in the "Edit" menu. 
However, these seem to be mutually exclusive. So, there are different 
ways to resolve this problem. For example, to create one settings entry 
that rules them all and shows a disabled "Inset Setting..." when 
unavailable. In the short term, one might even have an exception here 
for using OptItems for this specific case.

Best,
Daniel



More information about the lyx-devel mailing list