Patch from Ken Harris in #135786 to focus a new default window when

2004-09-15  Elijah Newren  <newren@math.utah.edu>

	Patch from Ken Harris in #135786 to focus a new default window
	when lowering via middle-click on the frame.

	* src/core.[hc], src/frames.c: rename meta_core_user_lower to
	meta_core_user_lower_and_unfocus

	* src/core.c (meta_core_user_lower_and_unfocus): if in
	click-to-focus mode then also move the window to the back of the
	mru list and focus the new default window for the active workspace
This commit is contained in:
Elijah Newren 2004-09-16 00:06:38 +00:00 committed by Elijah Newren
parent cffe7e9566
commit 63e1624bd7
4 changed files with 47 additions and 5 deletions

View File

@ -1,3 +1,15 @@
2004-09-15 Elijah Newren <newren@math.utah.edu>
Patch from Ken Harris in #135786 to focus a new default window
when lowering via middle-click on the frame.
* src/core.[hc], src/frames.c: rename meta_core_user_lower to
meta_core_user_lower_and_unfocus
* src/core.c (meta_core_user_lower_and_unfocus): if in
click-to-focus mode then also move the window to the back of the
mru list and focus the new default window for the active workspace
2004-09-15 Elijah Newren <newren@math.utah.edu> 2004-09-15 Elijah Newren <newren@math.utah.edu>
Focus the no_focus_window if no suitable window is in the mru list Focus the no_focus_window if no suitable window is in the mru list

View File

@ -236,7 +236,7 @@ meta_core_user_raise (Display *xdisplay,
} }
void void
meta_core_user_lower (Display *xdisplay, meta_core_user_lower_and_unfocus (Display *xdisplay,
Window frame_xwindow) Window frame_xwindow)
{ {
MetaDisplay *display; MetaDisplay *display;
@ -249,6 +249,36 @@ meta_core_user_lower (Display *xdisplay,
meta_bug ("No such frame window 0x%lx!\n", frame_xwindow); meta_bug ("No such frame window 0x%lx!\n", frame_xwindow);
meta_window_lower (window); meta_window_lower (window);
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK)
{
/* Move window to the back of the focusing workspace's MRU list.
* Do extra sanity checks to avoid possible race conditions.
* (Borrowed from window.c.)
*/
if (window->screen->active_workspace &&
meta_window_visible_on_workspace (window,
window->screen->active_workspace))
{
GList* link;
link = g_list_find (window->screen->active_workspace->mru_list,
window);
g_assert (link);
window->screen->active_workspace->mru_list =
g_list_remove_link (window->screen->active_workspace->mru_list,
link);
g_list_free (link);
window->screen->active_workspace->mru_list =
g_list_append (window->screen->active_workspace->mru_list,
window);
}
/* focus on the (new) topmost window */
if (window->has_focus)
meta_workspace_focus_default_window (window->screen->active_workspace, window);
}
} }
void void

View File

@ -60,7 +60,7 @@ void meta_core_user_resize (Display *xdisplay,
void meta_core_user_raise (Display *xdisplay, void meta_core_user_raise (Display *xdisplay,
Window frame_xwindow); Window frame_xwindow);
void meta_core_user_lower (Display *xdisplay, void meta_core_user_lower_and_unfocus (Display *xdisplay,
Window frame_xwindow); Window frame_xwindow);
void meta_core_user_focus (Display *xdisplay, void meta_core_user_focus (Display *xdisplay,

View File

@ -1373,7 +1373,7 @@ meta_frames_button_press_event (GtkWidget *widget,
} }
else if (event->button == 2) else if (event->button == 2)
{ {
meta_core_user_lower (gdk_display, frame->xwindow); meta_core_user_lower_and_unfocus (gdk_display, frame->xwindow);
} }
else if (event->button == 3) else if (event->button == 3)
{ {