all repos — openbox @ 411cc1d1d9e0c7ad07fe6bce548ccf101a2f4c7a

openbox fork - make it a bit more like ryudo

DESIGN/menu-thoughts.txt (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Okay Soldiers, here's the plan:
menu.c contains functions for handling a menu list. This may have to
be turned into an array.
The invalid bit denotes whether the menu must be rerendered. Normally,
it is auto-managed by the menu.c functions.

Each menu has a set of controller functions that handle behaviour:
 show() - place a menu on screen
          also, may rerender the menu if the invalid bit is set
 hide() - hide a menu
 mouseover() - called when the mouse moves over a new entry
               may highlight new entry and display submenu
 selected() - called when an item is clicked on
              may execute, change config options?, perform action, or
	      display submenu
 update() - re-render the menu
           
When a menu is rerendered, the engine can place any information like
(x,y) coordinates, appearances &c in the renderdata.

To customize the behaviour of a menu, set the controller function
pointers. Some ideas:
 - we can have plugins for PipeMenus, FIFOMenus, ConfigMenus, Toolbar,
 &c.
 - a TimedUpdate menu (say for mp3 lists) could call update()
 periodically.
 - window lists/workspace menus need to be optimized somehow since
 these change often, and modifying the list that often will be
 crap. needs profiling.