X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=999b23dd287b01a85d4cb3262aaf90a9993e7323;hb=3f372aaebfb4d40947a25a6727559aac7e18e113;hp=70b13c7e1c2df182d9a4cbab84b15d2780d1eb59;hpb=3e4495c4c85c5cbc04e30f9d6501391d1837e80f;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 70b13c7e..999b23dd 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -49,6 +49,7 @@ static void client_change_state(ObClient *self); static void client_apply_startup_state(ObClient *self); static void client_restore_session_state(ObClient *self); static void client_restore_session_stacking(ObClient *self); +static void client_urgent_notify(ObClient *self); void client_startup() { @@ -59,12 +60,12 @@ void client_shutdown() { } -void client_add_destructor(ObClientDestructorFunc func) +void client_add_destructor(GDestroyNotify func) { client_destructors = g_slist_prepend(client_destructors, (gpointer)func); } -void client_remove_destructor(ObClientDestructorFunc func) +void client_remove_destructor(GDestroyNotify func) { client_destructors = g_slist_remove(client_destructors, (gpointer)func); } @@ -330,9 +331,7 @@ void client_manage(Window window) client_normal(self)); if (x != ox || y != oy) - client_configure(self, OB_CORNER_TOPLEFT, x, y, - self->area.width, self->area.height, - TRUE, TRUE); + client_move(self, x, y); } client_showhide(self); @@ -424,7 +423,7 @@ void client_unmanage(ObClient *self) } for (it = client_destructors; it; it = g_slist_next(it)) { - ObClientDestructorFunc func = (ObClientDestructorFunc) it->data; + GDestroyNotify func = (GDestroyNotify) it->data; func(self); } @@ -483,6 +482,14 @@ void client_unmanage(ObClient *self) client_set_list(); } +static void client_urgent_notify(ObClient *self) +{ + if (self->urgent) + frame_flash_start(self->frame); + else + frame_flash_stop(self->frame); +} + static void client_restore_session_state(ObClient *self) { GList *it; @@ -543,9 +550,7 @@ void client_move_onscreen(ObClient *self, gboolean rude) if (client_find_onscreen(self, &x, &y, self->frame->area.width, self->frame->area.height, rude)) { - client_configure(self, OB_CORNER_TOPLEFT, x, y, - self->area.width, self->area.height, - TRUE, TRUE); + client_move(self, x, y); } } @@ -1296,9 +1301,8 @@ void client_update_wmhints(ObClient *self) ur ? "ON" : "OFF"); /* fire the urgent callback if we're mapped, otherwise, wait until after we're mapped */ - if (self->frame) { - /* XXX do shit */ - } + if (self->frame) + client_urgent_notify(self); } } @@ -1722,7 +1726,7 @@ static void client_apply_startup_state(ObClient *self) client_shade(self, TRUE); } if (self->urgent) - /* XXX do shit */; + client_urgent_notify(self); if (self->max_vert && self->max_horz) { self->max_vert = self->max_horz = FALSE; @@ -1829,7 +1833,6 @@ void client_configure_full(ObClient *self, ObCorner anchor, if (!(w == self->area.width && h == self->area.height)) { int basew, baseh, minw, minh; - int mw, mh, aw, ah; /* base size is substituted with min size if not specified */ if (self->base_size.width || self->base_size.height) { @@ -1848,23 +1851,6 @@ void client_configure_full(ObClient *self, ObCorner anchor, minh = self->base_size.height; } - /* for interactive resizing. have to move half an increment in each - direction. */ - - /* how far we are towards the next size inc */ - mw = (w - basew) % self->size_inc.width; - mh = (h - baseh) % self->size_inc.height; - /* amount to add */ - aw = self->size_inc.width / 2; - ah = self->size_inc.height / 2; - /* don't let us move into a new size increment */ - if (mw + aw >= self->size_inc.width) - aw = self->size_inc.width - mw - 1; - if (mh + ah >= self->size_inc.height) - ah = self->size_inc.height - mh - 1; - w += aw; - h += ah; - /* if this is a user-requested resize, then check against min/max sizes */ @@ -2021,7 +2007,7 @@ void client_fullscreen(ObClient *self, gboolean fs, gboolean savearea) client_setup_decor_and_functions(self); - client_configure(self, OB_CORNER_TOPLEFT, x, y, w, h, TRUE, TRUE); + client_move_resize(self, x, y, w, h); /* try focus us when we go into fullscreen mode */ client_focus(self); @@ -2197,7 +2183,7 @@ void client_maximize(ObClient *self, gboolean max, int dir, gboolean savearea) /* figure out where the client should be going */ frame_frame_gravity(self->frame, &x, &y); - client_configure(self, OB_CORNER_TOPLEFT, x, y, w, h, TRUE, TRUE); + client_move_resize(self, x, y, w, h); } void client_shade(ObClient *self, gboolean shade)