use client_activate to activate newly mapping windows. this means that if a window maps on another desktop and is going to be activated, you will end up on that desktop
This commit is contained in:
parent
0f43a68405
commit
8446e50b7a
1 changed files with 14 additions and 54 deletions
|
@ -320,6 +320,7 @@ void client_manage(Window window)
|
||||||
|
|
||||||
/* focus the new window? */
|
/* focus the new window? */
|
||||||
if (ob_state() != OB_STATE_STARTING &&
|
if (ob_state() != OB_STATE_STARTING &&
|
||||||
|
!self->iconic &&
|
||||||
/* this means focus=true for window is same as config_focus_new=true */
|
/* this means focus=true for window is same as config_focus_new=true */
|
||||||
((config_focus_new || (settings && settings->focus == 1)) ||
|
((config_focus_new || (settings && settings->focus == 1)) ||
|
||||||
client_search_focus_parent(self)) &&
|
client_search_focus_parent(self)) &&
|
||||||
|
@ -332,37 +333,6 @@ void client_manage(Window window)
|
||||||
self->type == OB_CLIENT_TYPE_DIALOG))
|
self->type == OB_CLIENT_TYPE_DIALOG))
|
||||||
{
|
{
|
||||||
activate = TRUE;
|
activate = TRUE;
|
||||||
#if 0
|
|
||||||
if (self->desktop != screen_desktop) {
|
|
||||||
/* activate the window */
|
|
||||||
activate = TRUE;
|
|
||||||
} else {
|
|
||||||
gboolean group_foc = FALSE;
|
|
||||||
|
|
||||||
if (self->group) {
|
|
||||||
GSList *it;
|
|
||||||
|
|
||||||
for (it = self->group->members; it; it = g_slist_next(it))
|
|
||||||
{
|
|
||||||
if (client_focused(it->data))
|
|
||||||
{
|
|
||||||
group_foc = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((group_foc ||
|
|
||||||
(!self->transient_for && (!self->group ||
|
|
||||||
!self->group->members->next))) ||
|
|
||||||
client_search_focus_tree_full(self) ||
|
|
||||||
!focus_client ||
|
|
||||||
!client_normal(focus_client))
|
|
||||||
{
|
|
||||||
/* activate the window */
|
|
||||||
activate = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get the current position */
|
/* get the current position */
|
||||||
|
@ -435,13 +405,7 @@ void client_manage(Window window)
|
||||||
activate = FALSE;
|
activate = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activate)
|
if (!activate) {
|
||||||
{
|
|
||||||
/* since focus can change the stacking orders, if we focus the
|
|
||||||
window then the standard raise it gets is not enough, we need
|
|
||||||
to queue one for after the focus change takes place */
|
|
||||||
client_raise(self);
|
|
||||||
} else {
|
|
||||||
ob_debug("Focus stealing prevention activated for %s with time %u "
|
ob_debug("Focus stealing prevention activated for %s with time %u "
|
||||||
"(last time %u)\n",
|
"(last time %u)\n",
|
||||||
self->title, self->user_time, last_time);
|
self->title, self->user_time, last_time);
|
||||||
|
@ -471,17 +435,8 @@ void client_manage(Window window)
|
||||||
a window maps since its not based on an action from the user like
|
a window maps since its not based on an action from the user like
|
||||||
clicking a window to activate it. so keep the new window out of the way
|
clicking a window to activate it. so keep the new window out of the way
|
||||||
but do focus it. */
|
but do focus it. */
|
||||||
if (activate) {
|
if (activate)
|
||||||
/* if using focus_delay, stop the timer now so that focus doesn't
|
client_activate(self, FALSE, TRUE);
|
||||||
go moving on us */
|
|
||||||
event_halt_focus_delay();
|
|
||||||
client_focus(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* client_activate does this but we aren't using it so we have to do it
|
|
||||||
here as well */
|
|
||||||
if (screen_showing_desktop)
|
|
||||||
screen_show_desktop(FALSE);
|
|
||||||
|
|
||||||
/* add to client list/map */
|
/* add to client list/map */
|
||||||
client_list = g_list_append(client_list, self);
|
client_list = g_list_append(client_list, self);
|
||||||
|
@ -1893,6 +1848,7 @@ void client_update_icons(ObClient *self)
|
||||||
right away afterwards */
|
right away afterwards */
|
||||||
if (self->nicons == 0) {
|
if (self->nicons == 0) {
|
||||||
RrPixel32 *icon = ob_rr_theme->def_win_icon;
|
RrPixel32 *icon = ob_rr_theme->def_win_icon;
|
||||||
|
gulong *data;
|
||||||
|
|
||||||
data = g_new(guint32, 48*48+2);
|
data = g_new(guint32, 48*48+2);
|
||||||
data[0] = data[1] = 48;
|
data[0] = data[1] = 48;
|
||||||
|
@ -3150,6 +3106,10 @@ void client_activate(ObClient *self, gboolean here, gboolean user)
|
||||||
{
|
{
|
||||||
client_hilite(self, TRUE);
|
client_hilite(self, TRUE);
|
||||||
} else {
|
} else {
|
||||||
|
/* if using focus_delay, stop the timer now so that focus doesn't
|
||||||
|
go moving on us */
|
||||||
|
event_halt_focus_delay();
|
||||||
|
|
||||||
if (client_normal(self) && screen_showing_desktop)
|
if (client_normal(self) && screen_showing_desktop)
|
||||||
screen_show_desktop(FALSE);
|
screen_show_desktop(FALSE);
|
||||||
if (self->iconic)
|
if (self->iconic)
|
||||||
|
@ -3169,11 +3129,11 @@ void client_activate(ObClient *self, gboolean here, gboolean user)
|
||||||
|
|
||||||
client_focus(self);
|
client_focus(self);
|
||||||
|
|
||||||
/* we do this an action here. this is rather important. this is because
|
/* we do this as an action here. this is rather important. this is
|
||||||
we want the results from the focus change to take place BEFORE we go
|
because we want the results from the focus change to take place
|
||||||
about raising the window. when a fullscreen window loses focus, we
|
BEFORE we go about raising the window. when a fullscreen window
|
||||||
need this or else the raise wont be able to raise above the
|
loses focus, we need this or else the raise wont be able to raise
|
||||||
to-lose-focus fullscreen window. */
|
above the to-lose-focus fullscreen window. */
|
||||||
client_raise(self);
|
client_raise(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue