I’ve been following the discussion about Deskbar menu in the mailing list. This discussion gave me few ideas but I’d rather not involve directly in the list as the suggestion below extends the topic further beyond. If someone likes the idea or part of it, feel free to relay these below to the mailing list.
Okay, the problem seems to be arisen due to the fact that some people would like to have the shut-down/reboot items behave differently. But there’s yet more that do not seem to fit nicely to the Haiku menu. Current contents of the menu (more or less):
About Haiku …
Deskbar settings >
About Haiku …
Deskbar settings >
Recent items >
Application menus >
Specifically I find that most of the top items that have been hard-coded are not perfect from the usability point of view. Aside from reboot/shut-down options the About Haiku and Deskbar settings have little to do with the daily workflow. I appreciate that the About Haiku at least is somewaht important from the marketing perspective, it will probably change from distribution to distribution. Deskbar settings are user preferences which probably require visiting only once - at the time of first run.
My proposal is to make the whole menu fully customisable by the end user, including the reboot/shutdown options.
Take the config/be directory. Currently it only contains items that belong to the application section, each folder in the be directory appears as a submenu in the Haiku menu. If the entire Haiku menu would be populated using items from the ~/config/be directory then is would be fully customisable by end users and distributors alike without changing any code.
For this the config/be manu becomes root of the entire menu and directories in there would become “groups”. One could place their own directories, queries, symlinks and whatever inside these groups thus making the menu truly personal. The scripts in the menu can utilise all Haiku scripting goodies such as alert command and messaging via utilities like hey. This allow users and distributors to create powerful workflows without even touching any “actual” code but still accessible from the Haiku menu.
For example (see the menu above), the default contents of config/be would be like this:
"~/config/be/general/About Haiku" (symlink to About Haiku app)
"~/config/be/general/Find" (default query template or symlink to ~/queries)
"~/config/be/general/Deskbar settings" (symlink to deskbar preflet)
"~/config/be/session/Reboot" (reboot script or symlink to the one provided by the distro maintainer)
"~/config/be/session/Shut down" (similar to the above)
"~/config/be/recent/Recent documents" (maybe a query, also see below)
"~/config/be/apps/Applications" (symlink to /boot/haiku/apps)
"~/config/be/apps/Preferences" (symlink to /boot/haiku/preferences)
Menu order could be handled by extended attributes added to the directory mime type or all mime types end user is likely to use. For example attribute “Custom sort” values could be used by the Deskbar application to sort the menus and also by the end users for their own sorting needs. Deskbar could also be configured to regard the custom sort order as required depending on its position.
There are two problems though. First, this will not be suitable to have menu items that can be toggled. It may be possible when using scripts but then visual feedback (check mark) may not be very easy if not impossible (would it be possible to change file icon using shell script?)
Second, the recent items can not be included in a standard way due to the limitation in BFS (last accessed attribute is not available). I may be wrong here, though.
This also requires a Deskbar preflet (if submenu with toggle-on-off items can not be implemented nicely) but I would not expect this to be used very often as told above.