strobe
Puny Member
I'm not pleased with how menus work in OS X. I always enjoyed using global menus in MacOS. Not the ones provided by Apple but the 3rd party utilities which cut my time wasted at a computer dramatically (more than say doubling my CPU speed). Many of these utilities are difficult or impossible to implement in OS X, furthermore Apple is squandering their chance to revolutionize how menus are managed.
The way menus are currently managed is each application (Carbon or Cocoa) calls a shared library which then creates it's own menu bar. The Window Server sends each application mousing events which are interpreted by other library functions. When switching applications the menu bar is overwritten then hidden (often not well synchronized). I hate it, it leaves zero room for customization. If you don't like how one app manages menus you're screwed.
However if the menus were to reside in one address space there would be awesome potential for innovation. Literally everything about the menus could be altered. You could add/delete/change hotkeys. You could create custom global menus (instead of the unattached floating icon widgets which litter the nebulous void no-text-in-this-portion-of-the-menu area). You could rearrange menu items. You could create custom menus with those menu items you use most. You could tear off menus into utility windows or drawers or tabs or whatever. You could replace menu items with icons. You could get rid of the menu bar and use NeXT-like menus or put the menus under the title bars. You could make 3D menus. You could make a menu search. You could make a virtual screen which you scroll, yet the menus remain in the same place. Think up your own ideas, I'm sure there are an infinite quantity.
Keep in mind most 'commands' available in an application are hidden somewhere in the vast hierarchy if it's menus thus with complete control over how one accesses these commands you open the door to vast improvements in productivity! Do you use the menu bar in a typical graphics application? I sure don't, it's difficult finding what you need and once you do it's usually nested. With a custom menu with my commonly used items in a utility window this would change. Also being able to re-arrange the menu items would help immensely.
My scheme to implement menus in a single address space is blindingly obvious. Have the Window Server draw and manage it. Currently the application has to wait for the window server for mousing events, then the user has to wait for the application to respond and change the appearance of the menu bar. However having the Window Server interpret events and draw the menus would be more responsive and open the door to menu innovation. The code which draws the menus or interprets mousing already exists, the only major (if you can call it that) change would be the code which changes the menu state, like when pressing option in the Finder to restart. I don't consider this a big deal, the window server already can communicate both ways.
Current method:
interrupt->
kernel->
windowserver->
app(when it gets around to responding)->
event-interpreting-code->
menu-drawing-code->
CG
My scheme:
kernel->
windowserver->
1) event-interpreting-code->app
2) menu-drawing-code->GC
PS: The same argument can be used for managing title bars. Think about it, custom title bars with new buttons or sliders. A button to shade, a slider to vary the opacity of the window contents, etc.
The way menus are currently managed is each application (Carbon or Cocoa) calls a shared library which then creates it's own menu bar. The Window Server sends each application mousing events which are interpreted by other library functions. When switching applications the menu bar is overwritten then hidden (often not well synchronized). I hate it, it leaves zero room for customization. If you don't like how one app manages menus you're screwed.
However if the menus were to reside in one address space there would be awesome potential for innovation. Literally everything about the menus could be altered. You could add/delete/change hotkeys. You could create custom global menus (instead of the unattached floating icon widgets which litter the nebulous void no-text-in-this-portion-of-the-menu area). You could rearrange menu items. You could create custom menus with those menu items you use most. You could tear off menus into utility windows or drawers or tabs or whatever. You could replace menu items with icons. You could get rid of the menu bar and use NeXT-like menus or put the menus under the title bars. You could make 3D menus. You could make a menu search. You could make a virtual screen which you scroll, yet the menus remain in the same place. Think up your own ideas, I'm sure there are an infinite quantity.
Keep in mind most 'commands' available in an application are hidden somewhere in the vast hierarchy if it's menus thus with complete control over how one accesses these commands you open the door to vast improvements in productivity! Do you use the menu bar in a typical graphics application? I sure don't, it's difficult finding what you need and once you do it's usually nested. With a custom menu with my commonly used items in a utility window this would change. Also being able to re-arrange the menu items would help immensely.
My scheme to implement menus in a single address space is blindingly obvious. Have the Window Server draw and manage it. Currently the application has to wait for the window server for mousing events, then the user has to wait for the application to respond and change the appearance of the menu bar. However having the Window Server interpret events and draw the menus would be more responsive and open the door to menu innovation. The code which draws the menus or interprets mousing already exists, the only major (if you can call it that) change would be the code which changes the menu state, like when pressing option in the Finder to restart. I don't consider this a big deal, the window server already can communicate both ways.
Current method:
interrupt->
kernel->
windowserver->
app(when it gets around to responding)->
event-interpreting-code->
menu-drawing-code->
CG
My scheme:
kernel->
windowserver->
1) event-interpreting-code->app
2) menu-drawing-code->GC
PS: The same argument can be used for managing title bars. Think about it, custom title bars with new buttons or sliders. A button to shade, a slider to vary the opacity of the window contents, etc.