configure
Before running ./configure, do export LINGUAS="de" or
whatever your native language is.
Use the options --disable-kde --disable-sound --disable-gnome
for ./configure.
Add
"*" = {NoTitlebar = Yes;NoResizebar = Yes;NoBorder = Yes;NoAppIcon = YES;};
to your WMWindowAttributes to get rid of space-wasting borders.
wconfig.h
To get a fast response to actions in the menu, you have to turn off the
blinking shit that shows up when you select something. Edit the following
values in wconfig.h:
MENU_SELECT_DELAY 1
MENU_BLINK_DELAY 42
MENU_BLINK_COUNT 1
You'll notice that maximized windows won't fill the whole screen, but leave
some space on the right and at the bottom. There's something to change in
the same file:
#define FRAME_BORDER_WIDTH 0
Maybe you also want to do this:
#undef ANIMATIONS
#undef SHAPED_BALLOON
event.c
Something which really upset me: When opening the root-menu or the
windows-menu via hotkeys, they show up at the mouse's position. Shit. I want
them to be at a fixed position, where they fit on the screen without
scrolling. Here you have to edit code in event.c:
Old code:
switch (command) {
#ifndef LITE
case WKBD_ROOTMENU:
OpenRootMenu(scr, event->xkey.x_root, event->xkey.y_root, True);
break;
case WKBD_WINDOWLIST:
OpenSwitchMenu(scr, event->xkey.x_root, event->xkey.y_root, True);
break;
#endif /* !LITE */
New code:
switch (command) {
#ifndef LITE
case WKBD_ROOTMENU:
OpenRootMenu(scr, 200, 0, True);
break;
case WKBD_WINDOWLIST:
OpenSwitchMenu(scr, 200, 0, True);
break;
#endif /* !LITE */
This is round about line 1500 in function static void
handleKeyPress(XEvent *event). In newer versions of WindowMaker this has been changed
so that the menu opens in the screen's center, so there's no need to change it.
menu.c
I use the keyboard for navigating the menu, and one thing is not quite good: you have to
use the arrow keys OR the first character of an entry to move to it, but to execute it
you need to hit return, to open a submenu you need to use arrow keys again. The following
code implements lynx-like navigation/execution AND the possibility to open submenus using
return. It has to be changed in menu.c, round about line 1017:
case XK_Right:
/* JWW */
case XK_Return:
/* JWW */
#ifdef ARROWLESS_KBD
case XK_l:
#endif
#ifdef XK_KP_Right
case XK_KP_Right:
#endif
if (menu->selected_entry>=0) {
WMenuEntry *entry;
entry = menu->entries[menu->selected_entry];
if (entry->cascade >= 0 && menu->cascades
&& menu->cascades[entry->cascade]->entry_no > 0) {
XUngrabKeyboard(dpy, CurrentTime);
selectEntry(menu->cascades[entry->cascade], 0);
if (!keyboardMenu(menu->cascades[entry->cascade]))
done = 1;
XGrabKeyboard(dpy, menu->frame->core->window, True,
GrabModeAsync, GrabModeAsync,
CurrentTime);
}
/* JWW */
else
{
/* wwarning(_("Executing menu command (1)")); */
done = 2;
}
/* JWW */
}
break;
rootmenu.c
Autogenerated submenus didn't work for me, so I modified rootmenu.c, line 655:
/* pipe menu */
/* JWW: always reload submenu START */
/* if (!menu->cascades[entry->cascade] || */
/* menu->cascades[entry->cascade]->timestamp == 0) */
/* { */
/* parse pipe */
/* submenu = readMenuPipe(menu->frame->screen_ptr, path); */
/* there's no automatic reloading */
/* if(submenu != NULL) */
/* submenu->timestamp = 1; */
/* } */
/* else */
/* { */
/* submenu = NULL; */
/* } */
wwarning(_("re-reading generated submenu"));
submenu = readMenuPipe(menu->frame->screen_ptr, path);
/* JWW: always reload submenu END */
This is fixed in newer versions of WindowMaker.
You only need to make the menu entry like this:
(Laufwerke, OPEN_MENU, "|| /usr/local/bin/scripte/outputMountMenu.sh"),
instead of
(Laufwerke, OPEN_MENU, "| /usr/local/bin/scripte/outputMountMenu.sh"),