make focuslast only apply to switching desktops, like 3.3.1
This commit is contained in:
parent
568ca95bc2
commit
b8fded742a
5 changed files with 16 additions and 11 deletions
|
@ -1311,7 +1311,7 @@ void action_focus(union ActionData *data)
|
||||||
void action_unfocus (union ActionData *data)
|
void action_unfocus (union ActionData *data)
|
||||||
{
|
{
|
||||||
if (data->client.any.c == focus_client)
|
if (data->client.any.c == focus_client)
|
||||||
focus_fallback(FALSE);
|
focus_fallback(FALSE, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void action_iconify(union ActionData *data)
|
void action_iconify(union ActionData *data)
|
||||||
|
|
|
@ -516,7 +516,7 @@ static void event_process(const XEvent *ec, gpointer data)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!focus_left_screen)
|
if (!focus_left_screen)
|
||||||
focus_fallback(TRUE);
|
focus_fallback(TRUE, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!client)
|
else if (!client)
|
||||||
|
@ -570,7 +570,7 @@ static void event_process(const XEvent *ec, gpointer data)
|
||||||
ob_debug_type(OB_DEBUG_FOCUS,
|
ob_debug_type(OB_DEBUG_FOCUS,
|
||||||
"Focus went to an unmanaged window 0x%x !\n",
|
"Focus went to an unmanaged window 0x%x !\n",
|
||||||
ce.xfocus.window);
|
ce.xfocus.window);
|
||||||
focus_fallback(TRUE);
|
focus_fallback(TRUE, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,13 +95,15 @@ void focus_set_client(ObClient *client)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
|
static ObClient* focus_fallback_target(gboolean allow_refocus,
|
||||||
|
gboolean allow_pointer,
|
||||||
|
ObClient *old)
|
||||||
{
|
{
|
||||||
GList *it;
|
GList *it;
|
||||||
ObClient *c;
|
ObClient *c;
|
||||||
|
|
||||||
ob_debug_type(OB_DEBUG_FOCUS, "trying pointer stuff\n");
|
ob_debug_type(OB_DEBUG_FOCUS, "trying pointer stuff\n");
|
||||||
if (config_focus_follow && !config_focus_last)
|
if (allow_pointer && config_focus_follow)
|
||||||
if ((c = client_under_pointer()) &&
|
if ((c = client_under_pointer()) &&
|
||||||
(allow_refocus || c != old) &&
|
(allow_refocus || c != old) &&
|
||||||
(client_normal(c) &&
|
(client_normal(c) &&
|
||||||
|
@ -153,7 +155,7 @@ static ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ObClient* focus_fallback(gboolean allow_refocus)
|
ObClient* focus_fallback(gboolean allow_refocus, gboolean allow_pointer)
|
||||||
{
|
{
|
||||||
ObClient *new;
|
ObClient *new;
|
||||||
ObClient *old = focus_client;
|
ObClient *old = focus_client;
|
||||||
|
@ -163,7 +165,7 @@ ObClient* focus_fallback(gboolean allow_refocus)
|
||||||
event at all for them. */
|
event at all for them. */
|
||||||
focus_nothing();
|
focus_nothing();
|
||||||
|
|
||||||
new = focus_fallback_target(allow_refocus, old);
|
new = focus_fallback_target(allow_refocus, allow_pointer, old);
|
||||||
|
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,8 @@ void focus_set_client(struct _ObClient *client);
|
||||||
void focus_nothing();
|
void focus_nothing();
|
||||||
|
|
||||||
/*! Call this when you need to focus something! */
|
/*! Call this when you need to focus something! */
|
||||||
struct _ObClient* focus_fallback(gboolean allow_refocus);
|
struct _ObClient* focus_fallback(gboolean allow_refocus,
|
||||||
|
gboolean allow_pointer);
|
||||||
|
|
||||||
/*! Add a new client into the focus order */
|
/*! Add a new client into the focus order */
|
||||||
void focus_order_add_new(struct _ObClient *c);
|
void focus_order_add_new(struct _ObClient *c);
|
||||||
|
|
|
@ -539,12 +539,14 @@ void screen_set_desktop(guint num, gboolean dofocus)
|
||||||
dofocus = FALSE;
|
dofocus = FALSE;
|
||||||
|
|
||||||
/* have to try focus here because when you leave an empty desktop
|
/* have to try focus here because when you leave an empty desktop
|
||||||
there is no focus out to watch for
|
there is no focus out to watch for. also, we have different rules
|
||||||
|
here. we always allow it to look under the mouse pointer if
|
||||||
|
config_focus_last is FALSE
|
||||||
|
|
||||||
do this before hiding the windows so if helper windows are coming
|
do this before hiding the windows so if helper windows are coming
|
||||||
with us, they don't get hidden
|
with us, they don't get hidden
|
||||||
*/
|
*/
|
||||||
if (dofocus && (c = focus_fallback(TRUE)))
|
if (dofocus && (c = focus_fallback(TRUE, !config_focus_last)))
|
||||||
{
|
{
|
||||||
/* only do the flicker reducing stuff ahead of time if we are going
|
/* only do the flicker reducing stuff ahead of time if we are going
|
||||||
to call xsetinputfocus on the window ourselves. otherwise there is
|
to call xsetinputfocus on the window ourselves. otherwise there is
|
||||||
|
@ -1007,7 +1009,7 @@ void screen_show_desktop(gboolean show, ObClient *show_only)
|
||||||
else if (!show_only) {
|
else if (!show_only) {
|
||||||
ObClient *c;
|
ObClient *c;
|
||||||
|
|
||||||
if ((c = focus_fallback(TRUE))) {
|
if ((c = focus_fallback(TRUE, FALSE))) {
|
||||||
/* only do the flicker reducing stuff ahead of time if we are going
|
/* only do the flicker reducing stuff ahead of time if we are going
|
||||||
to call xsetinputfocus on the window ourselves. otherwise there
|
to call xsetinputfocus on the window ourselves. otherwise there
|
||||||
is no guarantee the window will actually take focus.. */
|
is no guarantee the window will actually take focus.. */
|
||||||
|
|
Loading…
Reference in a new issue