X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=e653ed19f58b2b0d7cebd7a15c90a64ee4b73d73;hb=53134db127fe252417132d244829e71355f8f991;hp=f1dc11aa03a62f802df400ba164e77ac0a776f44;hpb=fdfaa0c8dd830209e44efc23271eec0e32b86f7d;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index f1dc11aa..e653ed19 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -5,6 +5,7 @@ #include "startup.h" #include "screen.h" #include "moveresize.h" +#include "place.h" #include "prop.h" #include "extensions.h" #include "frame.h" @@ -13,11 +14,10 @@ #include "grab.h" #include "focus.h" #include "stacking.h" -#include "dispatch.h" #include "openbox.h" #include "group.h" #include "config.h" -#include "menu.h" +#include "menuframe.h" #include "keyboard.h" #include "mouse.h" #include "render/render.h" @@ -254,10 +254,10 @@ void client_manage(Window window) frame_grab_client(self->frame, self); - client_apply_startup_state(self); - grab_server(FALSE); + client_apply_startup_state(self); + /* update the focus lists */ focus_order_add_new(self); @@ -306,11 +306,25 @@ void client_manage(Window window) #endif } - dispatch_client(Event_Client_New, self, 0, 0); + if (ob_state() == OB_STATE_RUNNING) { + int x = self->area.x, ox = x; + int y = self->area.y, oy = y; + + place_client(self, &x, &y); + + client_find_onscreen(self, &x, &y, + self->frame->area.width, + self->frame->area.height, + client_normal(self)); + + if (x != ox || y != oy) + client_configure(self, OB_CORNER_TOPLEFT, x, y, + self->area.width, self->area.height, + TRUE, TRUE); + } /* make sure the window is visible */ - if (ob_state() == OB_STATE_RUNNING) - client_move_onscreen(self, TRUE); + client_move_onscreen(self, client_normal(self)); client_showhide(self); @@ -339,8 +353,6 @@ void client_manage(Window window) keyboard_grab_for_client(self, TRUE); mouse_grab_for_client(self, TRUE); - dispatch_client(Event_Client_Mapped, self, 0, 0); - ob_debug("Managed window 0x%lx (%s)\n", window, self->class); } @@ -350,13 +362,6 @@ void client_unmanage_all() client_unmanage(client_list->data); } -/* called by client_unmanage() to close any menus referencing this client */ -void client_close_menus(gpointer key, gpointer value, gpointer self) -{ - if (((ObMenu *)value)->client == (ObClient *)self) - menu_hide((ObMenu *)value); -} - void client_unmanage(ObClient *self) { guint j; @@ -364,7 +369,6 @@ void client_unmanage(ObClient *self) ob_debug("Unmanaging window: %lx (%s)\n", self->window, self->class); - dispatch_client(Event_Client_Destroy, self, 0, 0); g_assert(self != NULL); keyboard_grab_for_client(self, FALSE); @@ -413,9 +417,9 @@ void client_unmanage(ObClient *self) if (moveresize_client == self) moveresize_end(TRUE); - /* close any windows that are attached to this window */ - g_hash_table_foreach(menu_hash, client_close_menus, self); - + /* menus can be associated with a client, so close any that are since + we are disappearing now */ + menu_frame_hide_all_client(self); if (focus_client == self) { XEvent e; @@ -432,10 +436,6 @@ void client_unmanage(ObClient *self) self->group = NULL; } - /* dispatch the unmapped event */ - dispatch_client(Event_Client_Unmapped, self, 0, 0); - g_assert(self != NULL); - /* give the client its border back */ client_toggle_border(self, TRUE); @@ -1287,8 +1287,9 @@ 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) - dispatch_client(Event_Client_Urgent, self, self->urgent, 0); + if (self->frame) { + /* XXX do shit */ + } } } @@ -1712,7 +1713,7 @@ static void client_apply_startup_state(ObClient *self) client_shade(self, TRUE); } if (self->urgent) - dispatch_client(Event_Client_Urgent, self, self->urgent, 0); + /* XXX do shit */; if (self->max_vert && self->max_horz) { self->max_vert = self->max_horz = FALSE; @@ -2069,9 +2070,6 @@ static void client_iconify_recursive(ObClient *self, client_change_state(self); client_showhide(self); screen_update_areas(); - - dispatch_client(iconic ? Event_Client_Unmapped : Event_Client_Mapped, - self, 0, 0); } /* iconify all transients */ @@ -2273,8 +2271,6 @@ void client_set_desktop_recursive(ObClient *self, focus_order_to_top(self); else focus_order_to_bottom(self); - - dispatch_client(Event_Client_Desktop, self, target, old); } /* move all transients */