diff options
| -rw-r--r-- | data/org.mate.panel.gschema.xml.in | 7 | ||||
| -rw-r--r-- | mate-panel/panel-run-dialog.c | 59 | 
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 | 
