X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fframe.c;h=be4e688dff71c89ae6e7ec79f09467292ee3e73d;hb=37e2be2a57a218bd671e2e4b056643fbb248ad02;hp=a5a07609c0ad85013baedb76f9f406c1da772a19;hpb=3e90c85df00fd9fc21b8f51a3c5e961ced731fee;p=chaz%2Fopenbox diff --git a/openbox/frame.c b/openbox/frame.c index a5a07609..be4e688d 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -43,7 +43,7 @@ #define INNER_EVENTMASK (ButtonPressMask) #define FRAME_ANIMATE_ICONIFY_TIME 150000 /* .15 seconds */ -#define FRAME_ANIMATE_ICONIFY_STEP_TIME (G_USEC_PER_SEC / 30) /* 30 Hz */ +#define FRAME_ANIMATE_ICONIFY_STEP_TIME (G_USEC_PER_SEC / 60) /* 60 Hz */ #define FRAME_HANDLE_Y(f) (f->innersize.top + f->client->area.height + \ f->cbwidth_y) @@ -258,11 +258,12 @@ void frame_hide(ObFrame *self) { if (self->visible) { self->visible = FALSE; - self->client->ignore_unmaps += 1; + if (!frame_iconify_animating(self)) + XUnmapWindow(ob_display, self->window); /* we unmap the client itself so that we can get MapRequest events, and because the ICCCM tells us to! */ - XUnmapWindow(ob_display, self->window); XUnmapWindow(ob_display, self->client->window); + self->client->ignore_unmaps += 1; } } @@ -507,6 +508,8 @@ void frame_adjust_area(ObFrame *self, gboolean moved, vals[3] = self->size.bottom; PROP_SETA32(self->client->window, net_frame_extents, cardinal, vals, 4); + PROP_SETA32(self->client->window, kde_net_wm_frame_strut, + cardinal, vals, 4); } /* if this occurs while we are focus cycling, the indicator needs to @@ -1121,13 +1124,12 @@ void frame_end_iconify_animation(ObFrame *self) /* see if there is an animation going */ if (self->iconify_animation_going == 0) return; - /* call the callback when it's done */ - if (self->iconify_animation_cb) - self->iconify_animation_cb(self->iconify_animation_data); + if (!self->visible) + XUnmapWindow(ob_display, self->window); + /* we're not animating any more ! */ self->iconify_animation_going = 0; - /* move after the callback for the animation ending */ XMoveResizeWindow(ob_display, self->window, self->area.x, self->area.y, self->area.width - self->bwidth * 2, @@ -1135,9 +1137,7 @@ void frame_end_iconify_animation(ObFrame *self) XFlush(ob_display); } -void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying, - ObFrameIconifyAnimateFunc callback, - gpointer data) +void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying) { gulong time; gboolean new_anim = FALSE; @@ -1146,10 +1146,8 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying, /* if there is no titlebar, just don't animate for now XXX it would be nice tho.. */ - if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR)) { - if (callback) callback(data); + if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR)) return; - } /* get the current time */ g_get_current_time(&now); @@ -1167,9 +1165,6 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying, new_anim = TRUE; self->iconify_animation_going = iconifying ? 1 : -1; - self->iconify_animation_cb = callback; - self->iconify_animation_data = data; - /* set the ending time */ if (set_end) { self->iconify_animation_end.tv_sec = now.tv_sec; @@ -1188,14 +1183,8 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying, /* do the first step */ frame_animate_iconify(self); + /* show it during the animation even if it is not "visible" */ if (!self->visible) - frame_show(self); + XMapWindow(ob_display, self->window); } } - -gboolean frame_visible(ObFrame *self) -{ - /* if it is animating back from iconic state then it is considered - visible. but if it is iconifying then it is not visible. */ - return self->visible && self->iconify_animation_going <= 0; -}