config: support setting menu item font

In rc.xml, support

<font place="MenuItem">
  <name></name>
  <size></size>
</font>
This commit is contained in:
Johan Malm 2021-08-20 20:27:52 +01:00
parent a668f6f73d
commit 3990018bb9
3 changed files with 21 additions and 4 deletions

View file

@ -46,6 +46,7 @@ Configuration must be wrapped in a <labwc_config> root-node.
The font to use for a specific element of a window, menu or OSD. The font to use for a specific element of a window, menu or OSD.
Places can be any of: Places can be any of:
- ActiveWindow - titlebar of active window - ActiveWindow - titlebar of active window
- MenuItem - menu item (currently only root menu)
If no place attribute is provided, the setting will be applied to all If no place attribute is provided, the setting will be applied to all
places. places.
@ -53,7 +54,7 @@ Configuration must be wrapped in a <labwc_config> root-node.
Describes font name. Default is sans. Describes font name. Default is sans.
*<theme><font place=""><size>* *<theme><font place=""><size>*
Font size in pixels. Default is 8. Font size in pixels. Default is 10.
# KEYBOARD # KEYBOARD

View file

@ -14,7 +14,9 @@ struct rcxml {
char *theme_name; char *theme_name;
int corner_radius; int corner_radius;
char *font_name_activewindow; char *font_name_activewindow;
char *font_name_menuitem;
int font_size_activewindow; int font_size_activewindow;
int font_size_menuitem;
struct wl_list keybinds; struct wl_list keybinds;
}; };

View file

@ -25,7 +25,7 @@ static struct keybind *current_keybind;
enum font_place { enum font_place {
FONT_PLACE_UNKNOWN = 0, FONT_PLACE_UNKNOWN = 0,
FONT_PLACE_ACTIVEWINDOW, FONT_PLACE_ACTIVEWINDOW,
FONT_PLACE_INACTIVEWINDOW, FONT_PLACE_MENUITEM,
/* TODO: Add all places based on Openbox's rc.xml */ /* TODO: Add all places based on Openbox's rc.xml */
}; };
@ -89,8 +89,10 @@ fill_font(char *nodename, char *content, enum font_place place)
*/ */
if (!strcmp(nodename, "name")) { if (!strcmp(nodename, "name")) {
rc.font_name_activewindow = strdup(content); rc.font_name_activewindow = strdup(content);
rc.font_name_menuitem = strdup(content);
} else if (!strcmp(nodename, "size")) { } else if (!strcmp(nodename, "size")) {
rc.font_size_activewindow = atoi(content); rc.font_size_activewindow = atoi(content);
rc.font_size_menuitem = atoi(content);
} }
break; break;
case FONT_PLACE_ACTIVEWINDOW: case FONT_PLACE_ACTIVEWINDOW:
@ -100,6 +102,13 @@ fill_font(char *nodename, char *content, enum font_place place)
rc.font_size_activewindow = atoi(content); rc.font_size_activewindow = atoi(content);
} }
break; break;
case FONT_PLACE_MENUITEM:
if (!strcmp(nodename, "name")) {
rc.font_name_menuitem = strdup(content);
} else if (!strcmp(nodename, "size")) {
rc.font_size_menuitem = atoi(content);
}
break;
/* TODO: implement for all font places */ /* TODO: implement for all font places */
@ -116,8 +125,8 @@ enum_font_place(const char *place)
} }
if (!strcasecmp(place, "ActiveWindow")) { if (!strcasecmp(place, "ActiveWindow")) {
return FONT_PLACE_ACTIVEWINDOW; return FONT_PLACE_ACTIVEWINDOW;
} else if (!strcasecmp(place, "InactiveWindow")) { } else if (!strcasecmp(place, "MenuItem")) {
return FONT_PLACE_INACTIVEWINDOW; return FONT_PLACE_MENUITEM;
} }
return FONT_PLACE_UNKNOWN; return FONT_PLACE_UNKNOWN;
} }
@ -248,6 +257,7 @@ rcxml_init()
rc.xdg_shell_server_side_deco = true; rc.xdg_shell_server_side_deco = true;
rc.corner_radius = 8; rc.corner_radius = 8;
rc.font_size_activewindow = 10; rc.font_size_activewindow = 10;
rc.font_size_menuitem = 10;
} }
static void static void
@ -281,6 +291,9 @@ post_processing(void)
if (!rc.font_name_activewindow) { if (!rc.font_name_activewindow) {
rc.font_name_activewindow = strdup("sans"); rc.font_name_activewindow = strdup("sans");
} }
if (!rc.font_name_menuitem) {
rc.font_name_menuitem = strdup("sans");
}
} }
static void static void
@ -352,6 +365,7 @@ void
rcxml_finish(void) rcxml_finish(void)
{ {
zfree(rc.font_name_activewindow); zfree(rc.font_name_activewindow);
zfree(rc.font_name_menuitem);
zfree(rc.theme_name); zfree(rc.theme_name);
struct keybind *k, *k_tmp; struct keybind *k, *k_tmp;