labwc: Fix pipemenu(#7236) and icon in menu generation

Add the generation of icon and pipemenu
This commit is contained in:
LesVu
2025-06-09 18:34:53 +08:00
committed by Austin Horstman
parent 3bd646138a
commit 2fbd694fec
4 changed files with 34 additions and 21 deletions

View File

@@ -27,19 +27,27 @@ let
let
idAttr = " id=\"${escape item.menuId}\"";
labelAttr = if item ? label then " label=\"${escape item.label}\"" else "";
iconAttr = if item ? icon then " icon=\"${escape item.icon}\"" else "";
children = if item ? items then lib.concatMapStringsSep "\n" generateMenu item.items else "";
executeAttr = if item ? execute then " execute=\"${escape item.execute}\"" else "";
outputMenu =
if item ? execute || children == "" then
"<menu${idAttr}${labelAttr}${iconAttr}${executeAttr} />"
else
"<menu${idAttr}${labelAttr}${iconAttr}${executeAttr}>\n${indent 1 children}\n</menu>";
in
"<menu${idAttr}${labelAttr}>\n${indent 1 children}\n</menu>"
outputMenu
else
let
labelAttr = " label=\"${escape item.label}\"";
iconAttr = if item ? icon then " icon=\"${escape item.icon}\"" else "";
action = item.action;
nameAttr = " name=\"${escape action.name}\"";
toAttr = if action ? to then " to=\"${escape action.to}\"" else "";
commandAttr = if action ? command then " command=\"${escape action.command}\"" else "";
in
"<item${labelAttr}>\n <action${nameAttr}${toAttr}${commandAttr} />\n</item>";
"<item${labelAttr}${iconAttr}>\n <action${nameAttr}${toAttr}${commandAttr} />\n</item>";
# Get keys in a preferred order
orderedKeys =

View File

@@ -100,6 +100,11 @@ in
description = "Config to configure labwc menu";
example = lib.literalExpression ''
[
{
label = "pipemenu";
menuId = "menu";
execute = "/home/user/nix/scripts/pipe.sh";
}
{
menuId = "client-menu";
label = "Client Menu";
@@ -118,12 +123,6 @@ in
name = "ToggleFullscreen";
};
}
{
label = "Always on Top";
action = {
name = "ToggleAlwaysOnTop";
};
}
{
label = "Alacritty";
action = {

View File

@@ -3,14 +3,19 @@
enable = true;
package = null;
menu = [
{
label = "pipemenu";
menuId = "menu";
execute = "/home/user/nix/scripts/pipe.sh";
}
{
menuId = "client-menu";
label = "Client Menu";
icon = "";
icon = "path";
items = [
{
label = "Maximize";
icon = "";
icon = "Max";
action = {
name = "ToggleMaximize";
};
@@ -61,17 +66,16 @@
{
menuId = "menu-two";
label = "Client Menu Two";
icon = "";
icon = "menu-two";
items = [
{
label = "Menu In Menu";
menuId = "menu-in-menu";
icon = "";
items = [
{
label = "Menu In Menu In Menu";
menuId = "menu-in-menu-in-menu";
icon = "";
icon = "menu-in-menu-in-menu";
items = [
{
label = "Move Right";
@@ -80,12 +84,14 @@
to = "right";
};
}
{ menuId = "fourth"; }
];
}
];
}
];
}
# <!-- A submenu defined elsewhere, uses external label and icon attributes -->
{ menuId = ""; }
];
};

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- ### This file was generated with Nix. Don't modify this file directly. -->
<openbox_menu>
<menu id="client-menu" label="Client Menu">
<item label="Maximize">
<menu id="menu" label="pipemenu" execute="/home/user/nix/scripts/pipe.sh" />
<menu id="client-menu" label="Client Menu" icon="path">
<item label="Maximize" icon="Max">
<action name="ToggleMaximize" />
</item>
<item label="Fullscreen">
@@ -15,24 +16,23 @@
<action name="Execute" command="alacritty" />
</item>
<separator />
<menu id="workspace" label="Workspace">
<menu id="workspace" label="Workspace" icon="">
<item label="Move Left">
<action name="SendToDesktop" to="left" />
</item>
</menu>
<separator label="sep" />
</menu>
<menu id="menu-two" label="Client Menu Two">
<menu id="menu-two" label="Client Menu Two" icon="menu-two">
<menu id="menu-in-menu" label="Menu In Menu">
<menu id="menu-in-menu-in-menu" label="Menu In Menu In Menu">
<menu id="menu-in-menu-in-menu" label="Menu In Menu In Menu" icon="menu-in-menu-in-menu">
<item label="Move Right">
<action name="SendToDesktop" to="right" />
</item>
<menu id="fourth" />
</menu>
</menu>
</menu>
<menu id="">
</menu>
<menu id="" />
</openbox_menu>