summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/org.mate.panel.gschema.xml.in7
-rw-r--r--mate-panel/panel-run-dialog.c59
2 files changed, 39 insertions, 27 deletions
diff --git a/data/org.mate.panel.gschema.xml.in b/data/org.mate.panel.gschema.xml.in
index 241af62e..c58f6e19 100644
--- a/data/org.mate.panel.gschema.xml.in
+++ b/data/org.mate.panel.gschema.xml.in
@@ -23,7 +23,12 @@
<key name="history-mate-run" type="as">
<default>[]</default>
<summary>History for "Run Application" dialog</summary>
- <description>This is the list of commands used in "Run Application" dialog.</description>
+ <description>This is the list of commands used in "Run Application" dialog. The commands are sorted descendingly by recency (e.g., most recent command comes first).</description>
+ </key>
+ <key name="history-max-size-mate-run" type="u">
+ <default>10</default>
+ <summary>Maximum history size for "Run Application" dialog</summary>
+ <description>Controls the maximum size of the history of the "Run Application" dialog. A value of 0 will disable the history.</description>
</key>
<key name="toplevel-id-list" type="as">
<default>[]</default>
diff --git a/mate-panel/panel-run-dialog.c b/mate-panel/panel-run-dialog.c
index e61f3ece..d867ed58 100644
--- a/mate-panel/panel-run-dialog.c
+++ b/mate-panel/panel-run-dialog.c
@@ -114,22 +114,23 @@ static void panel_run_dialog_disconnect_pixmap (PanelRunDialog *dialog);
#define PANEL_RUN_SCHEMA "org.mate.panel"
#define PANEL_RUN_HISTORY_KEY "history-mate-run"
+#define PANEL_RUN_HISTORY_MAX_SIZE_KEY "history-max-size-mate-run"
#define PANEL_RUN_SHOW_PROGRAM_LIST_KEY "show-program-list"
-#define PANEL_RUN_MAX_HISTORY 10
static GtkTreeModel *
_panel_run_get_recent_programs_list (PanelRunDialog *dialog)
{
GtkListStore *list;
gchar **items;
- int i = 0;
+ guint history_max_size;
+ guint i = 0;
list = gtk_list_store_new (1, G_TYPE_STRING);
+ history_max_size = g_settings_get_uint (dialog->settings, PANEL_RUN_HISTORY_MAX_SIZE_KEY);
items = g_settings_get_strv (dialog->settings, PANEL_RUN_HISTORY_KEY);
-
for (i = 0;
- items[i] && i < PANEL_RUN_MAX_HISTORY;
+ items[i] && i < history_max_size;
i++) {
GtkTreeIter iter;
gtk_list_store_append (list, &iter);
@@ -149,30 +150,36 @@ _panel_run_save_recent_programs_list (PanelRunDialog *dialog,
GtkTreeModel *model;
GtkTreeIter iter;
GArray *items;
- gint i = 0;
-
- items = g_array_new (TRUE, TRUE, sizeof (gchar *));
- g_array_append_val (items, lastcommand);
- i++;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
-
- if (gtk_tree_model_get_iter_first (model, &iter)) {
- char *command;
- do {
- gtk_tree_model_get (model, &iter, 0, &command, -1);
- if (g_strcmp0 (command, lastcommand) == 0)
- continue;
- g_array_append_val (items, command);
- i++;
- } while (gtk_tree_model_iter_next (model, &iter) &&
- i < PANEL_RUN_MAX_HISTORY);
- }
+ guint history_max_size;
+ guint i = 0;
+
+ history_max_size = g_settings_get_uint (dialog->settings, PANEL_RUN_HISTORY_MAX_SIZE_KEY);
+
+ if (history_max_size > 0) {
+ items = g_array_new (TRUE, TRUE, sizeof (gchar *));
+ g_array_append_val (items, lastcommand);
+ i++;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
+
+ if (gtk_tree_model_get_iter_first (model, &iter)) {
+ char *command;
+ do {
+ gtk_tree_model_get (model, &iter, 0, &command, -1);
+ if (g_strcmp0 (command, lastcommand) == 0)
+ continue;
+ g_array_append_val (items, command);
+ i++;
+ } while (gtk_tree_model_iter_next (model, &iter) &&
+ i < history_max_size);
+ }
- g_settings_set_strv (dialog->settings, PANEL_RUN_HISTORY_KEY,
- (const gchar **) items->data);
+ g_settings_set_strv (dialog->settings, PANEL_RUN_HISTORY_KEY,
+ (const gchar **) items->data);
- g_array_free (items, TRUE);
+ g_array_free (items, TRUE);
+
+ }
}
static void