refix for managing iconic windows, without having the frame map which caused flashing.

instead, keep track of if the frame has been mapped yet. if it hasn't and it is getting hidden, then make sure to unmap the child.
This commit is contained in:
Dana Jansens 2007-03-14 13:58:36 +00:00
parent e2521f5c64
commit 5f7ffb00ba
3 changed files with 20 additions and 14 deletions

View file

@ -2116,10 +2116,9 @@ void client_showhide(ObClient *self)
{
if (client_should_show(self)) {
if (!self->frame->visible)
frame_show(self->frame);
}
else if (self->frame->visible) {
else {
frame_hide(self->frame);
/* Fall back focus since we're disappearing */

View file

@ -238,11 +238,13 @@ void frame_show(ObFrame *self)
self->visible = TRUE;
XMapWindow(ob_display, self->client->window);
XMapWindow(ob_display, self->window);
self->firstmap = TRUE;
}
}
void frame_hide(ObFrame *self)
{
if (self->visible || self->firstmap == FALSE) {
if (self->visible) {
self->visible = FALSE;
self->client->ignore_unmaps += 2;
@ -250,6 +252,14 @@ void frame_hide(ObFrame *self)
events, and because the ICCCM tells us to! */
XUnmapWindow(ob_display, self->window);
XUnmapWindow(ob_display, self->client->window);
} else {
/* the frame wasn't visible, but the frame is being hidden now.
so we don't need to unmap the frame, but we do need to unmap
the client. */
self->client->ignore_unmaps += 1;
XUnmapWindow(ob_display, self->client->window);
}
self->firstmap = TRUE;
}
}
@ -535,10 +545,6 @@ void frame_grab_client(ObFrame *self, ObClient *client)
/* map the client so it maps when the frame does */
XMapWindow(ob_display, client->window);
/* map the frame so they are in a consistant state together */
XMapWindow(ob_display, self->window);
/* reflect that we're initially visible */
self->visible = TRUE;
/* set all the windows for the frame in the window_map */
g_hash_table_insert(window_map, &self->window, client);

View file

@ -76,6 +76,7 @@ struct _ObFrame
Strut size;
Rect area;
gboolean visible;
gboolean firstmap;
/*! Whether the window is obscured at all or fully visible. */
gboolean obscured;