add the focusDelay option
This commit is contained in:
parent
91e04979a6
commit
418095b48e
4 changed files with 39 additions and 3 deletions
|
@ -15,6 +15,7 @@
|
||||||
<followMouse>no</followMouse>
|
<followMouse>no</followMouse>
|
||||||
<focusLast>yes</focusLast>
|
<focusLast>yes</focusLast>
|
||||||
<focusLastOnDesktop>yes</focusLastOnDesktop>
|
<focusLastOnDesktop>yes</focusLastOnDesktop>
|
||||||
|
<focusDelay>150000</focusDelay>
|
||||||
</focus>
|
</focus>
|
||||||
|
|
||||||
<theme>
|
<theme>
|
||||||
|
|
|
@ -10,6 +10,7 @@ gboolean config_focus_new;
|
||||||
gboolean config_focus_follow;
|
gboolean config_focus_follow;
|
||||||
gboolean config_focus_last;
|
gboolean config_focus_last;
|
||||||
gboolean config_focus_last_on_desktop;
|
gboolean config_focus_last_on_desktop;
|
||||||
|
guint config_focus_delay;
|
||||||
|
|
||||||
char *config_theme;
|
char *config_theme;
|
||||||
|
|
||||||
|
@ -205,6 +206,8 @@ static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
||||||
config_focus_last = parse_bool(doc, n);
|
config_focus_last = parse_bool(doc, n);
|
||||||
if ((n = parse_find_node("focusLastOnDesktop", node)))
|
if ((n = parse_find_node("focusLastOnDesktop", node)))
|
||||||
config_focus_last_on_desktop = parse_bool(doc, n);
|
config_focus_last_on_desktop = parse_bool(doc, n);
|
||||||
|
if ((n = parse_find_node("focusDelay", node)))
|
||||||
|
config_focus_delay = parse_int(doc, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
||||||
|
@ -358,6 +361,7 @@ void config_startup(ObParseInst *i)
|
||||||
config_focus_follow = FALSE;
|
config_focus_follow = FALSE;
|
||||||
config_focus_last = TRUE;
|
config_focus_last = TRUE;
|
||||||
config_focus_last_on_desktop = TRUE;
|
config_focus_last_on_desktop = TRUE;
|
||||||
|
config_focus_delay = 150000;
|
||||||
|
|
||||||
parse_register(i, "focus", parse_focus, NULL);
|
parse_register(i, "focus", parse_focus, NULL);
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,9 @@ extern gboolean config_focus_follow;
|
||||||
extern gboolean config_focus_last;
|
extern gboolean config_focus_last;
|
||||||
/*! Focus the last focused window as a fallback when switching desktops */
|
/*! Focus the last focused window as a fallback when switching desktops */
|
||||||
extern gboolean config_focus_last_on_desktop;
|
extern gboolean config_focus_last_on_desktop;
|
||||||
/*! The number of slits to create
|
/*! Timeout for focusing windows on focus follows mouse, in microseconds */
|
||||||
extern int config_slit_number;*/
|
extern guint config_focus_delay;
|
||||||
|
|
||||||
/*! When true windows' contents are refreshed while they are resized; otherwise
|
/*! When true windows' contents are refreshed while they are resized; otherwise
|
||||||
they are not updated until the resize is complete */
|
they are not updated until the resize is complete */
|
||||||
extern gboolean config_redraw_resize;
|
extern gboolean config_redraw_resize;
|
||||||
|
|
|
@ -46,6 +46,9 @@ static void event_handle_dock(ObDock *s, XEvent *e);
|
||||||
static void event_handle_dockapp(ObDockApp *app, XEvent *e);
|
static void event_handle_dockapp(ObDockApp *app, XEvent *e);
|
||||||
static void event_handle_client(ObClient *c, XEvent *e);
|
static void event_handle_client(ObClient *c, XEvent *e);
|
||||||
|
|
||||||
|
static gboolean focus_delay_func(gpointer data);
|
||||||
|
static void focus_delay_client_dest(gpointer data);
|
||||||
|
|
||||||
#define INVALID_FOCUSIN(e) ((e)->xfocus.detail == NotifyInferior || \
|
#define INVALID_FOCUSIN(e) ((e)->xfocus.detail == NotifyInferior || \
|
||||||
(e)->xfocus.detail == NotifyAncestor || \
|
(e)->xfocus.detail == NotifyAncestor || \
|
||||||
(e)->xfocus.detail > NotifyNonlinearVirtual)
|
(e)->xfocus.detail > NotifyNonlinearVirtual)
|
||||||
|
@ -137,10 +140,13 @@ void event_startup()
|
||||||
#ifdef USE_LIBSN
|
#ifdef USE_LIBSN
|
||||||
ob_main_loop_x_add(ob_main_loop, sn_handler, ob_sn_display, NULL);
|
ob_main_loop_x_add(ob_main_loop, sn_handler, ob_sn_display, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
client_add_destructor(focus_delay_client_dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void event_shutdown()
|
void event_shutdown()
|
||||||
{
|
{
|
||||||
|
client_remove_destructor(focus_delay_client_dest);
|
||||||
XFreeModifiermap(modmap);
|
XFreeModifiermap(modmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -648,6 +654,11 @@ static void event_handle_client(ObClient *client, XEvent *e)
|
||||||
client->frame->close_hover = FALSE;
|
client->frame->close_hover = FALSE;
|
||||||
frame_adjust_state(client->frame);
|
frame_adjust_state(client->frame);
|
||||||
break;
|
break;
|
||||||
|
case OB_FRAME_CONTEXT_FRAME:
|
||||||
|
/* XXX if doing a 'reconfigure' make sure you kill this timer,
|
||||||
|
maybe all timers.. */
|
||||||
|
if (config_focus_delay)
|
||||||
|
ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -690,7 +701,14 @@ static void event_handle_client(ObClient *client, XEvent *e)
|
||||||
ob_debug("EnterNotify on %lx, focusing window\n",
|
ob_debug("EnterNotify on %lx, focusing window\n",
|
||||||
client->window);
|
client->window);
|
||||||
#endif
|
#endif
|
||||||
client_focus(client);
|
if (config_focus_delay) {
|
||||||
|
ob_main_loop_timeout_add(ob_main_loop,
|
||||||
|
config_focus_delay,
|
||||||
|
focus_delay_func,
|
||||||
|
client,
|
||||||
|
NULL);
|
||||||
|
} else
|
||||||
|
client_focus(client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1157,3 +1175,15 @@ static void event_handle_menu(XEvent *ev)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean focus_delay_func(gpointer data)
|
||||||
|
{
|
||||||
|
ObClient *c = data;
|
||||||
|
client_focus(c);
|
||||||
|
return FALSE; /* no repeat */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void focus_delay_client_dest(gpointer data)
|
||||||
|
{
|
||||||
|
ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue