mirror of
https://github.com/amiwm/amiwm.git
synced 2026-03-24 01:24:15 +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:
10
client.c
10
client.c
@@ -149,10 +149,12 @@ void checksizehints(Client *c)
|
|||||||
|
|
||||||
void open_fscrn(Client *c)
|
void open_fscrn(Client *c)
|
||||||
{
|
{
|
||||||
XUnmapWindow(dpy, c->parent);
|
|
||||||
c->fsscr = scr = openscreen(NULL, scr->root);
|
c->fsscr = scr = openscreen(NULL, scr->root);
|
||||||
c->reparenting = 1;
|
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)
|
for (Client *dialog = clients; dialog != NULL; dialog = dialog->next)
|
||||||
if (dialog->leader == c)
|
if (dialog->leader == c)
|
||||||
reparent_client(c->fsscr, dialog);
|
reparent_client(c->fsscr, dialog);
|
||||||
@@ -171,7 +173,9 @@ void close_fscrn(Client *c, int state)
|
|||||||
{
|
{
|
||||||
if (c->fsscr == NULL)
|
if (c->fsscr == NULL)
|
||||||
return;
|
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);
|
XResizeWindow(dpy, c->window, c->pwidth-c->framewidth, c->pheight-c->frameheight);
|
||||||
XLowerWindow(dpy, c->window);
|
XLowerWindow(dpy, c->window);
|
||||||
scr = c->fsscr;
|
scr = c->fsscr;
|
||||||
|
|||||||
Reference in New Issue
Block a user