mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 19:10:43 -05:00
raise the focused window, since it may not be the window on top, given the
2002-09-27 Havoc Pennington <hp@pobox.com> * src/screen.c (meta_screen_focus_top_window): raise the focused window, since it may not be the window on top, given the below change. * src/stack.c (meta_stack_get_default_focus_window): make this more complex to prefer to focus the transient parent, followed by other windows in group, followed by topmost non-dock, followed by dock. Previously was just topmost non-dock followed by dock ignoring groups and transiency.
This commit is contained in:
parent
efc82ee1b9
commit
6c325e9070
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2002-09-27 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* src/screen.c (meta_screen_focus_top_window): raise the focused
|
||||||
|
window, since it may not be the window on top, given the below
|
||||||
|
change.
|
||||||
|
|
||||||
|
* src/stack.c (meta_stack_get_default_focus_window): make this
|
||||||
|
more complex to prefer to focus the transient parent, followed by
|
||||||
|
other windows in group, followed by topmost non-dock, followed by
|
||||||
|
dock. Previously was just topmost non-dock followed by dock
|
||||||
|
ignoring groups and transiency.
|
||||||
|
|
||||||
2002-09-27 Havoc Pennington <hp@pobox.com>
|
2002-09-27 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
* src/place.c (constrain_placement): constrain placement to try to
|
* src/place.c (constrain_placement): constrain placement to try to
|
||||||
|
@ -1115,6 +1115,10 @@ meta_screen_focus_top_window (MetaScreen *screen,
|
|||||||
"Focusing top window %s\n", window->desc);
|
"Focusing top window %s\n", window->desc);
|
||||||
|
|
||||||
meta_window_focus (window, meta_display_get_current_time (screen->display));
|
meta_window_focus (window, meta_display_get_current_time (screen->display));
|
||||||
|
|
||||||
|
/* Also raise the window if in click-to-focus */
|
||||||
|
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK)
|
||||||
|
meta_window_raise (window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
60
src/stack.c
60
src/stack.c
@ -1131,12 +1131,28 @@ meta_stack_get_default_focus_window (MetaStack *stack,
|
|||||||
{
|
{
|
||||||
/* FIXME if stack is frozen this is kind of broken. */
|
/* FIXME if stack is frozen this is kind of broken. */
|
||||||
|
|
||||||
/* Find the topmost, focusable, mapped, window. */
|
/* Find the topmost, focusable, mapped, window.
|
||||||
|
* not_this_one is being unfocused or going away, so exclude it.
|
||||||
|
* Also, prefer to focus transient parent of not_this_one,
|
||||||
|
* or top window in same group as not_this_one.
|
||||||
|
*/
|
||||||
|
|
||||||
MetaWindow *topmost_dock;
|
MetaWindow *topmost_dock;
|
||||||
int layer = META_LAYER_LAST;
|
MetaWindow *transient_parent;
|
||||||
|
MetaWindow *topmost_in_group;
|
||||||
|
MetaWindow *topmost_overall;
|
||||||
|
MetaGroup *not_this_one_group;
|
||||||
|
int layer;
|
||||||
|
|
||||||
|
layer = META_LAYER_LAST;
|
||||||
topmost_dock = NULL;
|
topmost_dock = NULL;
|
||||||
|
transient_parent = NULL;
|
||||||
|
topmost_in_group = NULL;
|
||||||
|
topmost_overall = NULL;
|
||||||
|
if (not_this_one)
|
||||||
|
not_this_one_group = meta_window_get_group (not_this_one);
|
||||||
|
else
|
||||||
|
not_this_one_group = NULL;
|
||||||
|
|
||||||
--layer;
|
--layer;
|
||||||
while (layer >= 0)
|
while (layer >= 0)
|
||||||
@ -1162,8 +1178,31 @@ meta_stack_get_default_focus_window (MetaStack *stack,
|
|||||||
if (topmost_dock == NULL &&
|
if (topmost_dock == NULL &&
|
||||||
window->type == META_WINDOW_DOCK)
|
window->type == META_WINDOW_DOCK)
|
||||||
topmost_dock = window;
|
topmost_dock = window;
|
||||||
else if (window->type != META_WINDOW_DOCK)
|
|
||||||
return window;
|
if (not_this_one != NULL)
|
||||||
|
{
|
||||||
|
if (transient_parent == NULL &&
|
||||||
|
not_this_one->xtransient_for != None &&
|
||||||
|
not_this_one->xtransient_for == window->xwindow)
|
||||||
|
transient_parent = window;
|
||||||
|
|
||||||
|
if (topmost_in_group == NULL &&
|
||||||
|
not_this_one_group != NULL &&
|
||||||
|
not_this_one_group == meta_window_get_group (window))
|
||||||
|
topmost_in_group = window;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Note that DESKTOP windows can be topmost_overall so
|
||||||
|
* we prefer focusing desktop or other windows over
|
||||||
|
* focusing dock, even though docks are stacked higher.
|
||||||
|
*/
|
||||||
|
if (topmost_overall == NULL &&
|
||||||
|
window->type != META_WINDOW_DOCK)
|
||||||
|
topmost_overall = window;
|
||||||
|
|
||||||
|
/* We could try to bail out early here for efficiency in
|
||||||
|
* some cases, but it's just not worth the code.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
link = link->next;
|
link = link->next;
|
||||||
@ -1172,11 +1211,14 @@ meta_stack_get_default_focus_window (MetaStack *stack,
|
|||||||
--layer;
|
--layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we didn't find a window to focus, we use the topmost dock.
|
if (transient_parent)
|
||||||
* Note that we already tried the desktop - so we prefer focusing
|
return transient_parent;
|
||||||
* desktop to focusing the dock.
|
else if (topmost_in_group)
|
||||||
*/
|
return topmost_in_group;
|
||||||
return topmost_dock;
|
else if (topmost_overall)
|
||||||
|
return topmost_overall;
|
||||||
|
else
|
||||||
|
return topmost_dock;
|
||||||
}
|
}
|
||||||
|
|
||||||
GList*
|
GList*
|
||||||
|
Loading…
Reference in New Issue
Block a user