shod

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit aa7655b620377811c86005788c3781f469334b3a
parent 49fbac90be2a98dd02970f2455301202e10093c8
Author: seninha <lucas@seninha.org>
Date:   Wed, 31 Aug 2022 15:19:30 -0300

fix #16

Diffstat:
Mshod.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);