[mutter/wip/exalm/focused-appearance: 104/104] window: Appear as focused while focusing
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/exalm/focused-appearance: 104/104] window: Appear as focused while focusing
- Date: Sun, 7 Feb 2021 21:12:52 +0000 (UTC)
commit 2c75608adf6894831b9d5003d6f831824ddc562d
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date: Sun Oct 13 05:15:51 2019 +0500
window: Appear as focused while focusing
Prevent focused window from blinking after switching to another
workspace on X11.
src/core/window-private.h | 3 +++
src/core/window.c | 9 ++++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 83d3a5813f..84b31b960c 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -562,6 +562,9 @@ struct _MetaWindow
guint unmanage_idle_id;
pid_t client_pid;
+
+ /* Prevent blinking when focusing */
+ gboolean focusing;
};
struct _MetaWindowClass
diff --git a/src/core/window.c b/src/core/window.c
index 0e7e58a91f..4c1bb6edd2 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -4821,6 +4821,10 @@ meta_window_focus (MetaWindow *window,
window = modal_transient;
}
+ /* If the window was already appearing focused, but didn't have has_focus set,
+ * it will now briefly appear unfocused on X11. Set a flag to prevent that. */
+ window->focusing = TRUE;
+
meta_window_flush_calc_showing (window);
if ((!window->mapped || window->hidden) && !window->shaded)
@@ -4828,6 +4832,7 @@ meta_window_focus (MetaWindow *window,
meta_topic (META_DEBUG_FOCUS,
"Window %s is not showing, not focusing after all",
window->desc);
+ window->focusing = FALSE;
return;
}
@@ -5313,6 +5318,8 @@ meta_window_set_focused_internal (MetaWindow *window,
{
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
+ window->focusing = FALSE;
+
if (focused)
{
window->has_focus = TRUE;
@@ -7328,7 +7335,7 @@ meta_window_appears_focused (MetaWindow *window)
if (workspace && workspace != workspace_manager->active_workspace)
return window == meta_workspace_get_default_focus_window (workspace);
else
- return window->has_focus || window->attached_focus_window;
+ return window->has_focus || window->focusing || window->attached_focus_window;
}
gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]