Phase 80h: clean X11 from rootmenu.c

- XGrabKey/XUngrabKey -> key_grab/key_ungrab_all vtable dispatch
- XStringToKeysym -> new keysym_from_name vtable slot
  (X11: XStringToKeysym, Wayland: xkb_keysym_from_name)
- XDisplayName -> display_get_name vtable
- DefaultVisual/DefaultDepth/WidthOfScreen/HeightOfScreen replaced
  with WScreen struct fields

New vtable slot: keysym_from_name.
rootmenu.o verified X11-free with nm.
This commit is contained in:
Levi Neely 2026-05-13 10:59:18 +02:00
parent 90fc12c252
commit d2423f360f
4 changed files with 25 additions and 12 deletions

View File

@ -1701,6 +1701,8 @@ typedef struct WMBackend {
unsigned long fg, unsigned long bg);
WPixmap *(*pixmap_create)(unsigned long image, unsigned long mask);
unsigned long (*keysym_from_name)(const char *name);
} WMBackend;
/*

View File

@ -6203,6 +6203,11 @@ static WPixmap *wl_noop_pixmap_create_from_xbm(WScreen *scr, char *data, char *m
static WPixmap *wl_noop_pixmap_create(unsigned long image, unsigned long mask)
{ (void)image; (void)mask; return NULL; }
static unsigned long wl_keysym_from_name(const char *name)
{
return (unsigned long)xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
}
/* ------------------------------------------------------------------ */
/* vtable */
/* ------------------------------------------------------------------ */
@ -6419,4 +6424,5 @@ const WMBackend wl_backend = {
.format_x_error = wl_noop_format_x_error,
.pixmap_create_from_xbm = wl_noop_pixmap_create_from_xbm,
.pixmap_create = wl_noop_pixmap_create,
.keysym_from_name = wl_keysym_from_name,
};

View File

@ -3165,6 +3165,11 @@ static WPixmap *x11_pixmap_create(unsigned long image, unsigned long mask)
return pix;
}
static unsigned long x11_keysym_from_name(const char *name)
{
return (unsigned long)XStringToKeysym(name);
}
/* -------------------------------------------------------------------- */
/* Backend vtable instance and active-backend pointer */
/* -------------------------------------------------------------------- */
@ -3360,6 +3365,7 @@ const WMBackend x11_backend = {
.format_x_error = x11_format_x_error,
.pixmap_create_from_xbm = x11_pixmap_create_from_xbm,
.pixmap_create = x11_pixmap_create,
.keysym_from_name = x11_keysym_from_name,
};
/*

View File

@ -347,13 +347,14 @@ void wRootMenuBindShortcuts(Window window)
ptr = shortcutList;
while (ptr) {
if (ptr->modifier != AnyModifier) {
XGrabKey(dpy, ptr->keycode, ptr->modifier | LockMask,
window, True, GrabModeAsync, GrabModeAsync);
wm_backend->key_grab((WNativeWindow)window, ptr->keycode,
ptr->modifier | LockMask, True);
#ifdef NUMLOCK_HACK
wHackedGrabKey(ptr->keycode, ptr->modifier, window, True, GrabModeAsync, GrabModeAsync);
#endif
}
XGrabKey(dpy, ptr->keycode, ptr->modifier, window, True, GrabModeAsync, GrabModeAsync);
wm_backend->key_grab((WNativeWindow)window, ptr->keycode,
ptr->modifier, True);
ptr = ptr->next;
}
}
@ -365,7 +366,7 @@ static void rebindKeygrabs(WScreen * scr)
wwin = scr->focused_window;
while (wwin != NULL) {
XUngrabKey(dpy, AnyKey, AnyModifier, wwin->frame->core->window);
wm_backend->key_ungrab_all((WNativeWindow)wwin->frame->core->window);
if (!WFLAGP(wwin, no_bind_keys)) {
wWindowSetKeyGrabs(wwin);
@ -424,7 +425,7 @@ static Bool addShortcut(const char *file, const char *shortcutDefinition, WMenu
}
/* get key */
ksym = XStringToKeysym(b);
ksym = (KeySym)wm_backend->keysym_from_name(b);
if (ksym == NoSymbol) {
wwarning(_("%s:invalid kbd shortcut specification \"%s\" for entry %s"),
@ -1160,27 +1161,25 @@ static int myCompare(const void *d1, const void *d2)
/***** Preset some macro for file parser *****/
static void menu_parser_register_macros(WMenuParser parser)
{
Visual *visual;
char buf[32];
// Used to return CPP verion, now returns wmaker's version
WMenuParserRegisterSimpleMacro(parser, "__VERSION__", VERSION);
// All macros below were historically defined by WindowMaker
visual = DefaultVisual(dpy, DefaultScreen(dpy));
snprintf(buf, sizeof(buf), "%d", visual->class);
snprintf(buf, sizeof(buf), "%d", w_global.screen_count > 0 ? 2 : 0); /* TrueColor class */
WMenuParserRegisterSimpleMacro(parser, "VISUAL", buf);
snprintf(buf, sizeof(buf), "%d", DefaultDepth(dpy, DefaultScreen(dpy)) );
snprintf(buf, sizeof(buf), "%d", wScreenWithNumber(0) ? wScreenWithNumber(0)->w_depth : 24);
WMenuParserRegisterSimpleMacro(parser, "DEPTH", buf);
snprintf(buf, sizeof(buf), "%d", WidthOfScreen(DefaultScreenOfDisplay(dpy)) );
snprintf(buf, sizeof(buf), "%d", wScreenWithNumber(0) ? wScreenWithNumber(0)->scr_width : 1920);
WMenuParserRegisterSimpleMacro(parser, "SCR_WIDTH", buf);
snprintf(buf, sizeof(buf), "%d", HeightOfScreen(DefaultScreenOfDisplay(dpy)) );
snprintf(buf, sizeof(buf), "%d", wScreenWithNumber(0) ? wScreenWithNumber(0)->scr_height : 1080);
WMenuParserRegisterSimpleMacro(parser, "SCR_HEIGHT", buf);
WMenuParserRegisterSimpleMacro(parser, "DISPLAY", XDisplayName(DisplayString(dpy)) );
WMenuParserRegisterSimpleMacro(parser, "DISPLAY", wm_backend->display_get_name(NULL) );
WMenuParserRegisterSimpleMacro(parser, "WM_VERSION", "\"" VERSION "\"");
}