#include "startup.h"
#include "screen.h"
#include "moveresize.h"
+#include "place.h"
#include "prop.h"
#include "extensions.h"
#include "frame.h"
#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"
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);
#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, client_normal(self));
client_showhide(self);
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);
}
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;
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);
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;
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);
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 */
+ }
}
}
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;
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 */
focus_order_to_top(self);
else
focus_order_to_bottom(self);
-
- dispatch_client(Event_Client_Desktop, self, target, old);
}
/* move all transients */