X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.c;h=be4e688dff71c89ae6e7ec79f09467292ee3e73d;hb=f0fdba8ad36010280fc84c2425010c195b76562a;hp=3af354c3fb9bf5774e8fb8572c0a3072265c0028;hpb=b5e597f1b3a810610fd63f50c55dc5a8b715744e;p=chaz%2Fopenbox diff --git a/openbox/frame.c b/openbox/frame.c index 3af354c3..be4e688d 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -42,9 +42,8 @@ from the frame. */ #define INNER_EVENTMASK (ButtonPressMask) -//#define FRAME_ANIMATE_ICONIFY_TIME 150000 /* .15 seconds */ -#define FRAME_ANIMATE_ICONIFY_TIME 2000000 -#define FRAME_ANIMATE_ICONIFY_STEP_TIME (G_USEC_PER_SEC / 30) /* 30 Hz */ +#define FRAME_ANIMATE_ICONIFY_TIME 150000 /* .15 seconds */ +#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) @@ -259,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; } } @@ -508,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 @@ -1122,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, @@ -1136,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; @@ -1147,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); @@ -1168,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; @@ -1189,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; -}