summaryrefslogtreecommitdiffstats
path: root/Add-a-newwindowsalwaysontop-preference.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Add-a-newwindowsalwaysontop-preference.patch')
-rw-r--r--Add-a-newwindowsalwaysontop-preference.patch155
1 files changed, 155 insertions, 0 deletions
diff --git a/Add-a-newwindowsalwaysontop-preference.patch b/Add-a-newwindowsalwaysontop-preference.patch
new file mode 100644
index 0000000..c4b26b5
--- /dev/null
+++ b/Add-a-newwindowsalwaysontop-preference.patch
@@ -0,0 +1,155 @@
+From c4fba8198bacc8ecf911cb15c9cd9314f3204a85 Mon Sep 17 00:00:00 2001
+From: Owen W. Taylor <otaylor@fishsoup.net>
+Date: Wed, 21 Oct 2009 19:22:35 -0400
+Subject: [PATCH] Add a new_windows_always_on_top preference
+
+Add a /apps/metacity/general/new_windows_always_on_top preference.
+When set, new windows are always placed on top, even if they are
+denied focus.
+
+This is useful on large screens and multihead setups where the
+tasklist can be hard to notice and difficult to mouse to, so the
+normal behavior of flashing in the tasklist is less effective.
+---
+ src/core/prefs.c | 17 ++++++++++++++++-
+ src/core/window.c | 6 +++++-
+ src/include/prefs.h | 2 ++
+ src/metacity.schemas.in.in | 29 +++++++++++++++++++++++++++++
+ 4 files changed, 52 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/prefs.c b/src/core/prefs.c
+index e03c816..1bf888b 100644
+--- a/src/core/prefs.c
++++ b/src/core/prefs.c
+@@ -79,6 +79,7 @@ static MetaFocusMode focus_mode = META_FOCUS_MODE_CLICK;
+ static MetaFocusNewWindows focus_new_windows = META_FOCUS_NEW_WINDOWS_SMART;
+ static GSList *no_focus_windows = NULL;
+ static gboolean raise_on_click = TRUE;
++static gboolean new_windows_always_on_top = TRUE;
+ static char* current_theme = NULL;
+ static int num_workspaces = 4;
+ static MetaActionTitlebar action_double_click_titlebar = META_ACTION_TITLEBAR_TOGGLE_MAXIMIZE;
+@@ -358,6 +359,11 @@ static MetaBoolPreference preferences_bool[] =
+ &raise_on_click,
+ TRUE,
+ },
++ { "/apps/metacity/general/new_windows_always_on_top",
++ META_PREF_NEW_WINDOWS_ALWAYS_ON_TOP,
++ &new_windows_always_on_top,
++ TRUE,
++ },
+ { "/apps/metacity/general/titlebar_uses_system_font",
+ META_PREF_TITLEBAR_FONT, /* note! shares a pref */
+ &use_system_font,
+@@ -1271,6 +1277,12 @@ meta_prefs_get_raise_on_click (void)
+ return raise_on_click || focus_mode == META_FOCUS_MODE_CLICK;
+ }
+
++gboolean
++meta_prefs_get_new_windows_always_on_top (void)
++{
++ return new_windows_always_on_top;
++}
++
+ const char*
+ meta_prefs_get_theme (void)
+ {
+@@ -1709,7 +1721,10 @@ meta_preference_to_string (MetaPreference pref)
+
+ case META_PREF_RAISE_ON_CLICK:
+ return "RAISE_ON_CLICK";
+-
++
++ case META_PREF_NEW_WINDOWS_ALWAYS_ON_TOP:
++ return "NEW_WINDOWS_ALWAYS_ON_TOP";
++
+ case META_PREF_THEME:
+ return "THEME";
+
+diff --git a/src/core/window.c b/src/core/window.c
+index 10da47a..0ae6a01 100644
+--- a/src/core/window.c
++++ b/src/core/window.c
+@@ -1983,7 +1983,7 @@ window_state_on_map (MetaWindow *window,
+ if (!(window->input || window->take_focus))
+ {
+ *takes_focus = FALSE;
+- return;
++ goto out;
+ }
+
+ /* Terminal usage may be different; some users intend to launch
+@@ -2030,6 +2030,10 @@ window_state_on_map (MetaWindow *window,
+ /* The default is correct for these */
+ break;
+ }
++
++ out:
++ if (meta_prefs_get_new_windows_always_on_top ())
++ *places_on_top = TRUE;
+ }
+
+ static gboolean
+diff --git a/src/include/prefs.h b/src/include/prefs.h
+index 6698dfe..8c7cd09 100644
+--- a/src/include/prefs.h
++++ b/src/include/prefs.h
+@@ -35,6 +35,7 @@ typedef enum
+ META_PREF_FOCUS_MODE,
+ META_PREF_FOCUS_NEW_WINDOWS,
+ META_PREF_RAISE_ON_CLICK,
++ META_PREF_NEW_WINDOWS_ALWAYS_ON_TOP,
+ META_PREF_ACTION_DOUBLE_CLICK_TITLEBAR,
+ META_PREF_ACTION_MIDDLE_CLICK_TITLEBAR,
+ META_PREF_ACTION_RIGHT_CLICK_TITLEBAR,
+@@ -81,6 +82,7 @@ guint meta_prefs_get_mouse_button_menu (void);
+ MetaFocusMode meta_prefs_get_focus_mode (void);
+ MetaFocusNewWindows meta_prefs_get_focus_new_windows (void);
+ gboolean meta_prefs_get_raise_on_click (void);
++gboolean meta_prefs_get_new_windows_always_on_top (void);
+ const char* meta_prefs_get_theme (void);
+ /* returns NULL if GTK default should be used */
+ const PangoFontDescription* meta_prefs_get_titlebar_font (void);
+diff --git a/src/metacity.schemas.in.in b/src/metacity.schemas.in.in
+index 25ca5f3..14155fa 100644
+--- a/src/metacity.schemas.in.in
++++ b/src/metacity.schemas.in.in
+@@ -166,6 +166,35 @@
+ </schema>
+
+ <schema>
++ <key>/schemas/apps/metacity/general/new_windows_always_on_top</key>
++ <applyto>/apps/metacity/general/new_windows_always_on_top</applyto>
++ <owner>metacity</owner>
++ <type>bool</type>
++ <default>false</default>
++ <locale name="C">
++ <short>Whether new windows should always be placed on top</short>
++ <long>
++ The normal behavior is that if a new window is not given the
++ focus (since, for example, the user has interacted with another
++ window after launching an application), then if the window would
++ be stacked on top of the focus window, the window is instead
++ stacked beneath and flashed in the taskbar. This behavior can
++ be annoying on large screens and multihead setups where the
++ taskbar is hard to notice and difficult to get to, so this option,
++ if set, disables this behavior, and new windows are always placed
++ on top, whether or not they get focus.
++
++ Note that if this option is set, a new window may completely hide
++ the focus window but not get focus itself, which can be quite confusing
++ to users. Also, note that setting this option breaks the normal
++ invariant in the 'click' focus mode that the topmost window always
++ has focus, so its most suitable for use with the 'mouse' and
++ 'sloppy' focus modes.
++ </long>
++ </locale>
++ </schema>
++
++ <schema>
+ <key>/schemas/apps/metacity/general/action_double_click_titlebar</key>
+ <applyto>/apps/metacity/general/action_double_click_titlebar</applyto>
+ <owner>metacity</owner>
+--
+1.6.5.rc2
+