mirror of
https://github.com/amiwm/amiwm.git
synced 2026-04-14 11:04:18 +00:00
do not reparent client window; fix amiwm#29
reparenting the client's window creates a few issues: • We get bogus UnmapNotify and MapNotify events that are ultimately generated by amiwm itself. • We do not get button events from the window, since its frame (c->parent) that we have called XGrabButtons(3) onto, is not its parent anymore. To fix this, do not reparent the client window, but its frame window. And keep the client window always inside the frame.
This commit is contained in:
1 parent
f3fc2a7015
commit
beccf8b0fb
1 file changed
+7
-3
@@ -149,10 +149,12 @@ void checksizehints(Client *c)
|
||||
|
||||
void open_fscrn(Client *c)
|
||||
{
|
||||
XUnmapWindow(dpy, c->parent);
|
||||
c->fsscr = scr = openscreen(NULL, scr->root);
|
||||
c->reparenting = 1;
|
||||
XReparentWindow(dpy, c->window, scr->back, 0, 0);
|
||||
XReparentWindow(dpy, c->parent, c->fsscr->back, 0, 0);
|
||||
XRaiseWindow(dpy, c->window);
|
||||
XMoveResizeWindow(dpy, c->parent, 0, 0, c->fsscr->width, c->fsscr->height);
|
||||
XMoveResizeWindow(dpy, c->window, 0, 0, c->fsscr->width, c->fsscr->height);
|
||||
for (Client *dialog = clients; dialog != NULL; dialog = dialog->next)
|
||||
if (dialog->leader == c)
|
||||
reparent_client(c->fsscr, dialog);
|
||||
@@ -171,7 +173,9 @@ void close_fscrn(Client *c, int state)
|
||||
{
|
||||
if (c->fsscr == NULL)
|
||||
return;
|
||||
XReparentWindow(dpy, c->window, c->parent, 4, c->scr->bh);
|
||||
XReparentWindow(dpy, c->parent, c->scr, c->x, c->y);
|
||||
XMoveResizeWindow(dpy, c->parent, c->x, c->y, c->pwidth, c->pheight);
|
||||
XMoveResizeWindow(dpy, c->window, 4, c->scr->bh, c->pwidth-c->framewidth, c->pheight-c->frameheight);
|
||||
XResizeWindow(dpy, c->window, c->pwidth-c->framewidth, c->pheight-c->frameheight);
|
||||
XLowerWindow(dpy, c->window);
|
||||
scr = c->fsscr;
|
||||
|
||||
Reference in new issue
Block a user