summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/prefs.c50
-rw-r--r--src/core/screen.c5
-rw-r--r--src/include/prefs.h4
-rw-r--r--src/org.mate.marco.gschema.xml5
4 files changed, 61 insertions, 3 deletions
diff --git a/src/core/prefs.c b/src/core/prefs.c
index 8dd1008a..61c957ad 100644
--- a/src/core/prefs.c
+++ b/src/core/prefs.c
@@ -121,6 +121,7 @@ static gboolean show_tab_border = FALSE;
static gboolean center_new_windows = FALSE;
static gboolean force_fullscreen = TRUE;
static gboolean side_by_side_tiling = FALSE;
+static GList *show_desktop_skip_list = NULL;
static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_FULLSCREEN_FLASH;
static MetaButtonLayout button_layout;
@@ -159,6 +160,7 @@ static void titlebar_handler (MetaPreference, const gchar*, gboolean*);
static void theme_name_handler (MetaPreference, const gchar*, gboolean*);
static void mouse_button_mods_handler (MetaPreference, const gchar*, gboolean*);
static void button_layout_handler (MetaPreference, const gchar*, gboolean*);
+static void show_desktop_skip_list_handler (MetaPreference, const gchar*, gboolean*);
static gboolean update_binding (MetaKeyPref *binding,
gchar *value);
@@ -467,6 +469,12 @@ static MetaStringPreference preferences_string[] =
NULL,
&cursor_theme,
},
+ { "show-desktop-skip-list",
+ KEY_GENERAL_SCHEMA,
+ META_PREF_SHOW_DESKTOP_SKIP_LIST,
+ &show_desktop_skip_list_handler,
+ NULL,
+ },
{ NULL, NULL, 0, NULL, NULL },
};
@@ -1085,6 +1093,18 @@ meta_prefs_get_cursor_size (void)
return cursor_size;
}
+gboolean
+meta_prefs_is_in_skip_list (char *class)
+{
+ GList *item;
+
+ for (item = show_desktop_skip_list; item; item = item->next)
+ {
+ if (!g_ascii_strcasecmp (class, item->data))
+ return TRUE;
+ }
+ return FALSE;
+}
/****************************************************************************/
/* Handlers for string preferences. */
@@ -1172,6 +1192,33 @@ mouse_button_mods_handler (MetaPreference pref,
}
}
+static void
+show_desktop_skip_list_handler (MetaPreference pref,
+ const gchar *string_value,
+ gboolean *inform_listeners)
+{
+ gchar **tokens;
+ gchar **tok;
+ GList *item;
+
+ if (show_desktop_skip_list)
+ {
+ for (item = show_desktop_skip_list; item; item = item->next)
+ g_free (item->data);
+ g_list_free (show_desktop_skip_list);
+ show_desktop_skip_list = NULL;
+ }
+
+ if (!(tokens = g_strsplit (string_value, ",", -1)))
+ return;
+ for (tok = tokens; tok && *tok; tok++)
+ {
+ gchar *stripped = g_strstrip (g_strdup (*tok));
+ show_desktop_skip_list = g_list_prepend (show_desktop_skip_list, stripped);
+ }
+ g_strfreev (tokens);
+}
+
static gboolean
button_layout_equal (const MetaButtonLayout *a,
const MetaButtonLayout *b)
@@ -1576,6 +1623,9 @@ meta_preference_to_string (MetaPreference pref)
case META_PREF_PLACEMENT_MODE:
return "PLACEMENT_MODE";
+
+ case META_PREF_SHOW_DESKTOP_SKIP_LIST:
+ return "SHOW_DESKTOP_SKIP_LIST";
}
return "(unknown)";
diff --git a/src/core/screen.c b/src/core/screen.c
index 34016d51..98ecf4db 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -2447,7 +2447,7 @@ queue_windows_showing (MetaScreen *screen)
{
MetaWindow *w = tmp->data;
- if (w->screen == screen)
+ if (w->screen == screen && !meta_prefs_is_in_skip_list (w->res_class))
meta_window_queue (w, META_QUEUE_CALC_SHOWING);
tmp = tmp->next;
@@ -2501,7 +2501,8 @@ meta_screen_show_desktop (MetaScreen *screen,
MetaWindow *w = windows->data;
if (w->screen == screen &&
- w->type == META_WINDOW_DESKTOP)
+ w->type == META_WINDOW_DESKTOP &&
+ !meta_prefs_is_in_skip_list (w->res_class))
{
meta_window_focus (w, timestamp);
break;
diff --git a/src/include/prefs.h b/src/include/prefs.h
index 08983087..86178647 100644
--- a/src/include/prefs.h
+++ b/src/include/prefs.h
@@ -66,7 +66,8 @@ typedef enum
META_PREF_CENTER_NEW_WINDOWS,
META_PREF_SIDE_BY_SIDE_TILING,
META_PREF_FORCE_FULLSCREEN,
- META_PREF_PLACEMENT_MODE
+ META_PREF_PLACEMENT_MODE,
+ META_PREF_SHOW_DESKTOP_SKIP_LIST
} MetaPreference;
typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
@@ -129,6 +130,7 @@ gboolean meta_prefs_get_compositing_fast_alt_tab (void);
gboolean meta_prefs_get_center_new_windows (void);
gboolean meta_prefs_get_force_fullscreen (void);
gboolean meta_prefs_show_tab_border (void);
+gboolean meta_prefs_is_in_skip_list (char *class);
/**
* Sets whether the compositor is turned on.
diff --git a/src/org.mate.marco.gschema.xml b/src/org.mate.marco.gschema.xml
index 5ffb0624..cfa4feb9 100644
--- a/src/org.mate.marco.gschema.xml
+++ b/src/org.mate.marco.gschema.xml
@@ -186,6 +186,11 @@
<summary>Window placement mode</summary>
<description>The window placement mode indicates how new windows are positioned. "automatic" means the system chooses a location automatically based on the space available on the desktop, or by a simple cascade if there is no space; "pointer" means that new windows are placed according to the mouse pointer position; "manual" means that the user must manually place the new window with the mouse or keyboard.</description>
</key>
+ <key name="show-desktop-skip-list" type="s">
+ <default>''</default>
+ <summary>List of applications ignored by show-desktop</summary>
+ <description>Comma separated class list. Each running GUI application referenced to given windows manager class will be ignored by 'Show Desktop' functionality.</description>
+ </key>
</schema>
<schema id="org.mate.Marco.workspace-names" path="/org/mate/marco/workspace-names/">