commit aa7655b620377811c86005788c3781f469334b3a
parent 49fbac90be2a98dd02970f2455301202e10093c8
Author: seninha <lucas@seninha.org>
Date: Wed, 31 Aug 2022 15:19:30 -0300
fix #16
Diffstat:
M | shod.c | | | 46 | +++++++++++++++++++++++++++++++++------------- |
1 file changed, 33 insertions(+), 13 deletions(-)
diff --git a/shod.c b/shod.c
@@ -2949,7 +2949,7 @@ menudecorate(struct Menu *menu, int titlepressed)
if (menu->tw != tw || menu->th != th || menu->pixtitlebar == None) {
if (menu->pixtitlebar != None)
XFreePixmap(dpy, menu->pixtitlebar);
- menu->pixtitlebar = XCreatePixmap(dpy, menu->titlebar, menu->w, menu->h, depth);
+ menu->pixtitlebar = XCreatePixmap(dpy, menu->titlebar, tw, th, depth);
}
menu->tw = tw;
menu->th = th;
@@ -3055,17 +3055,6 @@ menuaddraise(struct Tab *tab, struct Menu *menu)
XSetInputFocus(dpy, menu->obj.win, RevertToParent, CurrentTime);
}
-/* place menu next to its container */
-static void
-menuplace(struct Menu *menu)
-{
- struct Container *c;
-
- c = menu->tab->row->col->c;
- fitmonitor(c->mon, &menu->x, &menu->y, &menu->w, &menu->h, 0.5);
- XMoveWindow(dpy, menu->frame, menu->x, menu->y);
-}
-
/* delete menu; return whether menu was deleted */
static int
menudel(struct Object *obj, int ignoreunmap)
@@ -3104,6 +3093,35 @@ menumoveresize(struct Menu *menu)
XResizeWindow(dpy, menu->obj.win, menu->w - 2 * config.borderwidth, menu->h - 2 * config.borderwidth - config.titlewidth);
}
+/* place menu next to its container */
+static void
+menuplace(struct Menu *menu)
+{
+ struct Container *c;
+
+ c = menu->tab->row->col->c;
+ fitmonitor(c->mon, &menu->x, &menu->y, &menu->w, &menu->h, 1.0);
+ menumoveresize(menu);
+}
+
+/* configure menu window */
+static void
+menuconfigure(struct Menu *menu, unsigned int valuemask, XWindowChanges *wc)
+{
+ if (menu == NULL)
+ return;
+ if (valuemask & CWX)
+ menu->x = wc->x;
+ if (valuemask & CWY)
+ menu->y = wc->y;
+ if (valuemask & CWWidth)
+ menu->w = wc->width;
+ if (valuemask & CWHeight)
+ menu->h = wc->height;
+ menumoveresize(menu);
+ menudecorate(menu, 0);
+}
+
/* remove container from the focus list */
static void
containerdelfocus(struct Container *c)
@@ -5076,8 +5094,8 @@ managemenu(struct Tab *tab, struct Menu *menu)
menu->tab = tab;
TAILQ_INSERT_HEAD(&tab->menuq, (struct Object *)menu, entry);
icccmwmstate(menu->obj.win, NormalState);
- menudecorate(menu, 0);
menuplace(menu);
+ menudecorate(menu, 0);
if (wm.focused != NULL && wm.focused->selcol->selrow->seltab == tab)
tabfocus(tab, 0);
ewmhsetclients();
@@ -6219,6 +6237,8 @@ xeventconfigurerequest(XEvent *e)
XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
} else if (obj->type == TYPE_DIALOG) {
dialogconfigure((struct Dialog *)obj, ev->value_mask, &wc);
+ } else if (obj->type == TYPE_MENU) {
+ menuconfigure((struct Menu *)obj, ev->value_mask, &wc);
} else if (obj->type == TYPE_NORMAL) {
if (config.honorconfig) {
containerconfigure(((struct Tab *)obj)->row->col->c, ev->value_mask, &wc);