dwm无边框窗口添加标题栏右键菜单
要在dwm无边框窗口中添加标题栏右键菜单,您需要编辑dwm的源代码。下面是一些步骤:
-
打开dwm的源代码文件,通常在
/usr/local/src/dwm目录下。 -
找到
config.h文件并打开它。 -
添加以下代码:
static const char *menu[] = { "Menu Item 1", "Menu Item 2", "Menu Item 3" };
这是您的右键菜单选项,可以根据您的需要进行更改。
- 在
Button1事件中添加以下代码:
else if(ev->button == Button3) {
int i, x = 0;
for(i = 0; i < LENGTH(menu); i++) {
x += TEXTW(menu[i]) + lrpad;
}
x -= lrpad;
int y = bh / 2;
int w = x + 2 * borderpx;
int h = bh * LENGTH(menu) + 2 * borderpx;
int sx = selmon->mx + (selmon->mw - w) / 2;
int sy = selmon->my + (selmon->mh - h) / 2;
XEvent ev;
XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
XFillRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w, bh);
XDrawRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w - 1, bh - 1);
for(i = 0; i < LENGTH(menu); i++) {
XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColFg].pixel);
XDrawString(dpy, selmon->barwin, drw->gc, sx + borderpx, sy + i * bh + (bh - drw->font->ascent) / 2, menu[i], strlen(menu[i]));
}
XMaskEvent(dpy, ButtonPressMask, &ev);
XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
XFillRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w, bh);
XDrawRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w - 1, bh - 1);
for(i = 0; i < LENGTH(menu); i++) {
XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColFg].pixel);
if(ev.xbutton.y >= sy + i * bh && ev.xbutton.y < sy + (i + 1) * bh) {
XSetForeground(dpy, drw->gc, scheme[SchemeSel][ColBg].pixel);
XFillRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by + i * bh, w, bh);
XSetForeground(dpy, drw->gc, scheme[SchemeSel][ColFg].pixel);
}
XDrawString(dpy, selmon->barwin, drw->gc, sx + borderpx, sy + i * bh + (bh - drw->font->ascent) / 2, menu[i], strlen(menu[i]));
}
XFlush(dpy);
if(ev.type == ButtonPress && ev.xbutton.button == Button1) {
if(strcmp(menu[i], "Menu Item 1") == 0) {
// do something
} else if(strcmp(menu[i], "Menu Item 2") == 0) {
// do something else
} else if(strcmp(menu[i], "Menu Item 3") == 0) {
// do something different
}
}
}
这段代码将创建一个菜单,当您右键单击标题栏时,它将显示在屏幕中央。您可以根据需要调整菜单的大小和位置。
-
保存并关闭文件。
-
编译并重新安装dwm。
sudo make clean install
现在,当您右键单击dwm窗口的标题栏时,将出现一个菜单,其中包含您之前定义的选项
原文地址: https://www.cveoy.top/t/topic/deUO 著作权归作者所有。请勿转载和采集!