diff options
Diffstat (limited to 'Add-a-newwindowsalwaysontop-preference.patch')
-rw-r--r-- | Add-a-newwindowsalwaysontop-preference.patch | 155 |
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 + |