static gboolean focus_delay_func(gpointer data);
static void focus_delay_client_dest(ObClient *client, gpointer data);
-static gboolean menu_hide_delay_func(gpointer data);
-
/* The time for the current event being processed */
Time event_curtime = CurrentTime;
static guint ignore_enter_focus = 0;
-static gboolean menu_can_hide;
static gboolean focus_left_screen = FALSE;
#ifdef USE_SM
gint x, y, w, h;
gboolean move = FALSE;
gboolean resize = FALSE;
+ gboolean restack = FALSE;
/* get the current area */
RECT_TO_DIMS(client->area, x, y, w, h);
}
/* activate it rather than just focus it */
- stacking_restack_request(client, sibling,
- e->xconfigurerequest.detail, TRUE);
+ restack = stacking_restack_request(client, sibling,
+ e->xconfigurerequest.detail,
+ TRUE);
/* if a stacking change moves the window without resizing */
move = TRUE;
client_configure(client, x, y, w, h, FALSE, TRUE);
}
- /* ignore enter events caused by these like ob actions do */
- event_ignore_all_queued_enters();
+ if (!restack || !config_focus_under_mouse) {
+ /* ignore enter events caused by these like ob actions do */
+ event_ignore_all_queued_enters();
+ }
}
break;
}
client_set_state(client, e->xclient.data.l[0],
e->xclient.data.l[1], e->xclient.data.l[2]);
- /* ignore enter events caused by these like ob actions do */
- event_ignore_all_queued_enters();
+ if (!config_focus_under_mouse) {
+ /* ignore enter events caused by these like ob actions do */
+ event_ignore_all_queued_enters();
+ }
} else if (msgtype == prop_atoms.net_close_window) {
ob_debug("net_close_window for 0x%lx\n", client->window);
client_close(client);
switch (ev->type) {
case ButtonRelease:
- if ((ev->xbutton.button < 4 || ev->xbutton.button > 5)
- && menu_can_hide)
+ if (menu_hide_delay_reached() &&
+ (ev->xbutton.button < 4 || ev->xbutton.button > 5))
{
if ((e = menu_entry_frame_under(ev->xbutton.x_root,
ev->xbutton.y_root)))
moved/resized */
client = moveresize_client;
- menu_can_hide = FALSE;
- ob_main_loop_timeout_add(ob_main_loop,
- config_menu_hide_delay * 1000,
- menu_hide_delay_func,
- NULL, g_direct_equal, NULL);
-
if (e->type == ButtonPress ||
e->type == ButtonRelease ||
e->type == MotionNotify)
}
}
-static gboolean menu_hide_delay_func(gpointer data)
-{
- menu_can_hide = TRUE;
- return FALSE; /* no repeat */
-}
-
static void focus_delay_dest(gpointer data)
{
g_free(data);