window: Refactor "got focus" code
Just move this out to a separate function. https://bugzilla.gnome.org/show_bug.cgi?id=647706
This commit is contained in:
parent
eddd6f8e9b
commit
f6dd081acd
@ -7208,6 +7208,81 @@ meta_window_propagate_focus_appearance (MetaWindow *window,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_window_got_focus (MetaWindow *window)
|
||||||
|
{
|
||||||
|
if (window != window->display->focus_window)
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_FOCUS,
|
||||||
|
"* Focus --> %s\n", window->desc);
|
||||||
|
window->display->focus_window = window;
|
||||||
|
window->has_focus = TRUE;
|
||||||
|
|
||||||
|
/* Move to the front of the focusing workspace's MRU list.
|
||||||
|
* We should only be "removing" it from the MRU list if it's
|
||||||
|
* not already there. Note that it's possible that we might
|
||||||
|
* be processing this FocusIn after we've changed to a
|
||||||
|
* different workspace; we should therefore update the MRU
|
||||||
|
* list only if the window is actually on the active
|
||||||
|
* workspace.
|
||||||
|
*/
|
||||||
|
if (window->screen->active_workspace &&
|
||||||
|
meta_window_located_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_prepend (window->screen->active_workspace->mru_list,
|
||||||
|
window);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window->frame)
|
||||||
|
meta_frame_queue_draw (window->frame);
|
||||||
|
|
||||||
|
meta_error_trap_push (window->display);
|
||||||
|
XInstallColormap (window->display->xdisplay,
|
||||||
|
window->colormap);
|
||||||
|
meta_error_trap_pop (window->display);
|
||||||
|
|
||||||
|
/* move into FOCUSED_WINDOW layer */
|
||||||
|
meta_window_update_layer (window);
|
||||||
|
|
||||||
|
/* Ungrab click to focus button since the sync grab can interfere
|
||||||
|
* with some things you might do inside the focused window, by
|
||||||
|
* causing the client to get funky enter/leave events.
|
||||||
|
*
|
||||||
|
* The reason we usually have a passive grab on the window is
|
||||||
|
* so that we can intercept clicks and raise the window in
|
||||||
|
* response. For click-to-focus we don't need that since the
|
||||||
|
* focused window is already raised. When raise_on_click is
|
||||||
|
* FALSE we also don't need that since we don't do anything
|
||||||
|
* when the window is clicked.
|
||||||
|
*
|
||||||
|
* There is dicussion in bugs 102209, 115072, and 461577
|
||||||
|
*/
|
||||||
|
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK ||
|
||||||
|
!meta_prefs_get_raise_on_click())
|
||||||
|
meta_display_ungrab_focus_window_button (window->display, window);
|
||||||
|
|
||||||
|
g_signal_emit (window, window_signals[FOCUS], 0);
|
||||||
|
g_object_notify (G_OBJECT (window->display), "focus-window");
|
||||||
|
|
||||||
|
if (!window->attached_focus_window)
|
||||||
|
meta_window_appears_focused_changed (window);
|
||||||
|
|
||||||
|
meta_window_propagate_focus_appearance (window, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_window_lost_focus (MetaWindow *window)
|
meta_window_lost_focus (MetaWindow *window)
|
||||||
{
|
{
|
||||||
@ -7321,76 +7396,7 @@ meta_window_notify_focus (MetaWindow *window,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window != window->display->focus_window)
|
meta_window_got_focus (window);
|
||||||
{
|
|
||||||
meta_topic (META_DEBUG_FOCUS,
|
|
||||||
"* Focus --> %s\n", window->desc);
|
|
||||||
window->display->focus_window = window;
|
|
||||||
window->has_focus = TRUE;
|
|
||||||
|
|
||||||
/* Move to the front of the focusing workspace's MRU list.
|
|
||||||
* We should only be "removing" it from the MRU list if it's
|
|
||||||
* not already there. Note that it's possible that we might
|
|
||||||
* be processing this FocusIn after we've changed to a
|
|
||||||
* different workspace; we should therefore update the MRU
|
|
||||||
* list only if the window is actually on the active
|
|
||||||
* workspace.
|
|
||||||
*/
|
|
||||||
if (window->screen->active_workspace &&
|
|
||||||
meta_window_located_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_prepend (window->screen->active_workspace->mru_list,
|
|
||||||
window);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window->frame)
|
|
||||||
meta_frame_queue_draw (window->frame);
|
|
||||||
|
|
||||||
meta_error_trap_push (window->display);
|
|
||||||
XInstallColormap (window->display->xdisplay,
|
|
||||||
window->colormap);
|
|
||||||
meta_error_trap_pop (window->display);
|
|
||||||
|
|
||||||
/* move into FOCUSED_WINDOW layer */
|
|
||||||
meta_window_update_layer (window);
|
|
||||||
|
|
||||||
/* Ungrab click to focus button since the sync grab can interfere
|
|
||||||
* with some things you might do inside the focused window, by
|
|
||||||
* causing the client to get funky enter/leave events.
|
|
||||||
*
|
|
||||||
* The reason we usually have a passive grab on the window is
|
|
||||||
* so that we can intercept clicks and raise the window in
|
|
||||||
* response. For click-to-focus we don't need that since the
|
|
||||||
* focused window is already raised. When raise_on_click is
|
|
||||||
* FALSE we also don't need that since we don't do anything
|
|
||||||
* when the window is clicked.
|
|
||||||
*
|
|
||||||
* There is dicussion in bugs 102209, 115072, and 461577
|
|
||||||
*/
|
|
||||||
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK ||
|
|
||||||
!meta_prefs_get_raise_on_click())
|
|
||||||
meta_display_ungrab_focus_window_button (window->display, window);
|
|
||||||
|
|
||||||
g_signal_emit (window, window_signals[FOCUS], 0);
|
|
||||||
g_object_notify (G_OBJECT (window->display), "focus-window");
|
|
||||||
|
|
||||||
if (!window->attached_focus_window)
|
|
||||||
meta_window_appears_focused_changed (window);
|
|
||||||
|
|
||||||
meta_window_propagate_focus_appearance (window, TRUE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (event->evtype == XI_FocusOut)
|
else if (event->evtype == XI_FocusOut)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user