Jamie and All,

The patch for explicit apply is ready for review.

Summary:
[1] Functions throttle_changed_cb() spin_value_changed_cb() and
check_toggled_cb() are removed since they are for instant apply. And the
also the signal connect calls are removed.

[2] Rename action button "Close" to "Apply", add buttons "Cancel" and
"OK" in glade file.

[3] Rename tracker_preferences_cmd_close() to
tracker_preferences_cmd_apply() to do save configuration and send
changes. Only send change when the value of key are different with
before one.

[5] Add funtion str_slist_equal() to check changes for list key
like /Watches/WatchDirectoryRoots, /Watches/CrawlDirectory, 
/Watches/NoWatchDirectory and /Indexing/NoIndexFileTypes.

[4] Add function tracker_preferences_cmd_cancle()
and tracker_preferences_cmd_ok()


Cheers,
Halton.
On Mon, 2008-01-21 at 10:00 -0500, Jamie McCracken wrote:
> 
> 
> the settings by the nature mix both types however instant apply does
> not make sense for stuff that requires a reindex or restart as you
> might wanna change several settings before triggering the
> restart/reindex
> 
> I guess it needs to be consistent so explicit apply with an apply
> button
> should be done for the whole window
> 
> Halton - feel free to tidy it up this way
> 
> jamie
Index: trunk/src/tracker-preferences/tracker-preferences.glade
===================================================================
--- trunk/src/tracker-preferences/tracker-preferences.glade	(revision 1098)
+++ trunk/src/tracker-preferences/tracker-preferences.glade	(working copy)
@@ -1362,9 +1362,9 @@
               </widget>
             </child>
             <child>
-              <widget class="GtkButton" id="cmdClose">
+              <widget class="GtkButton" id="cmdApply">
                 <property name="visible">True</property>
-                <property name="label">gtk-close</property>
+                <property name="label">gtk-apply</property>
                 <property name="use_stock">True</property>
                 <property name="response_id">0</property>
               </widget>
@@ -1372,6 +1372,28 @@
                 <property name="position">1</property>
               </packing>
             </child>
+            <child>
+              <widget class="GtkButton" id="cmdCancel">
+                <property name="visible">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+              </widget>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkButton" id="cmdOK">
+                <property name="visible">True</property>
+                <property name="label">gtk-ok</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+              </widget>
+              <packing>
+                <property name="position">3</property>
+              </packing>
+            </child>
           </widget>
           <packing>
             <property name="expand">False</property>
Index: trunk/src/tracker-preferences/tracker-preferences.c
===================================================================
--- trunk/src/tracker-preferences/tracker-preferences.c	(revision 1098)
+++ trunk/src/tracker-preferences/tracker-preferences.c	(working copy)
@@ -24,6 +24,7 @@
 #include <glib-object.h>
 #include <gtk/gtk.h>
 #include <glade/glade.h>
+#include <stdlib.h>
 
 #include "../trackerd/tracker-dbus.h"
 #include "../libtracker/tracker.h"
@@ -52,7 +53,9 @@
 static void setup_page_performance (TrackerPreferences *preferences);
 static void tracker_preferences_cmd_quit (GtkWidget *widget, GdkEvent *event, gpointer data);
 static void tracker_preferences_cmd_help (GtkWidget *widget, gpointer data);
-static void tracker_preferences_cmd_close (GtkWidget *widget, gpointer data);
+static void tracker_preferences_cmd_apply (GtkWidget *widget, gpointer data);
+static void tracker_preferences_cmd_cancel (GtkWidget *widget, gpointer data);
+static void tracker_preferences_cmd_ok (GtkWidget *widget, gpointer data);
 static void tracker_preferences_cmd_add_index_path (GtkWidget *widget, gpointer data);
 static void tracker_preferences_cmd_remove_index_path (GtkWidget *widget, gpointer data);
 static void tracker_preferences_cmd_add_crawled_path (GtkWidget *widget, gpointer data);
@@ -71,10 +74,13 @@
 static gint _strcmp (gconstpointer a, gconstpointer b);
 static void initialize_listview (GtkWidget *treeview);
 static void populate_list (GtkWidget *treeview, GSList *list);
+static gboolean str_slist_equal (GSList *a, GSList *b);
 
 static GObjectClass *parent_class = NULL;
 static gboolean flag_restart = FALSE;
 static gboolean flag_reindex = FALSE;
+static gboolean first_time = TRUE;
+static gboolean flag_quit = FALSE;
 static GtkWidget *main_window = NULL;
 
 
@@ -99,12 +105,10 @@
 	priv->prefs = tracker_configuration_new ();
 
 	GtkWidget *widget = NULL;
-	
 
 	priv->gxml =
 		glade_xml_new (TRACKER_DATADIR "/tracker-preferences.glade",
 			       NULL, NULL);
-	/* priv->gxml = glade_xml_new("tracker-preferences.glade", NULL, NULL); */
 
 	if (priv->gxml == NULL)
 		g_error ("Unable to find locate tracker-preferences.glade");
@@ -128,10 +132,18 @@
 	gtk_button_box_set_layout (GTK_BUTTON_BOX (widget),
 				   GTK_BUTTONBOX_END);
 
-	widget = glade_xml_get_widget (priv->gxml, "cmdClose");
-	g_signal_connect (widget, "clicked", G_CALLBACK (tracker_preferences_cmd_close),
+	widget = glade_xml_get_widget (priv->gxml, "cmdApply");
+	g_signal_connect (widget, "clicked", G_CALLBACK (tracker_preferences_cmd_apply),
 			  self);
 
+	widget = glade_xml_get_widget (priv->gxml, "cmdCancel");
+	g_signal_connect (widget, "clicked", G_CALLBACK (tracker_preferences_cmd_cancel),
+			  self);
+
+	widget = glade_xml_get_widget (priv->gxml, "cmdOK");
+	g_signal_connect (widget, "clicked", G_CALLBACK (tracker_preferences_cmd_ok),
+			  self);
+
 	widget = glade_xml_get_widget (priv->gxml, "cmdAddIndexPath");
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (tracker_preferences_cmd_add_index_path), self);
@@ -267,170 +279,6 @@
 
 }
 
-
-void
-throttle_changed_cb (GtkRange *range, gpointer user_data)  
-{
-	TrackerPreferencesPrivate *priv = user_data;
-	TrackerConfiguration *configuration = TRACKER_CONFIGURATION (priv->prefs);
-
-	int value = gtk_range_get_value (range);
-
-	tracker_configuration_set_int (configuration,
-					"/Indexing/Throttle",
-					value);
-
-	set_int_option (priv, "Throttle", value);
-
-}
-
-void 
-spin_value_changed_cb (GtkSpinButton *spin_button, gpointer user_data)
-{
-	TrackerPreferencesPrivate *priv = user_data;
-	TrackerConfiguration *configuration = TRACKER_CONFIGURATION (priv->prefs);
-
-	const char *name = gtk_widget_get_name (GTK_WIDGET (spin_button));
-	int value = gtk_spin_button_get_value_as_int (spin_button);
-
-	if (name) {
-		g_print ("%s was clicked with value %d\n", name, value);
-	}  else {
-		g_print ("unknown widget was clicked with value %d\n", value);
-	}
-
-	if (g_str_equal (name, "spnMaxText")) {
-
-		set_int_option (priv, "MaxText", value*1024);
-
-		tracker_configuration_set_int (configuration,
-						"/Performance/MaxTextToIndex",
-						value);
-
-
-	} else 	if (g_str_equal (name, "spnMaxWords")) {
-
-		set_int_option (priv, "MaxWords", value);
-
-		tracker_configuration_set_int (configuration,
-					"/Performance/MaxWordsToIndex",
-					value);
-
-	}
-
-}
-
-void
-check_toggled_cb (GtkToggleButton *check_button, gpointer user_data)  
-{
-	TrackerPreferencesPrivate *priv = user_data;
-	TrackerConfiguration *configuration = TRACKER_CONFIGURATION (priv->prefs);
-
-	const char *name = gtk_widget_get_name (GTK_WIDGET (check_button));
-
-	gboolean value =  gtk_toggle_button_get_active (check_button);
-
-	if (name) {
-		g_print ("%s was clicked with value %d\n", name, value);
-	}  else {
-		g_print ("unknown widget was clicked with value %d\n", value);
-	}
-
-	if (g_str_equal (name, "chkEnableIndexing")) {
-
-		set_bool_option (priv, "EnableIndexing", value);
-
-		tracker_configuration_set_bool (configuration,
-						 "/Indexing/EnableIndexing",
-						 value);
-		flag_restart = TRUE;
-
-	} else 	if (g_str_equal (name, "chkEnableWatching")) {
-
-		set_bool_option (priv, "EnableWatching", value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Watches/EnableWatching",
-					value);
-
-		flag_restart = TRUE;
-
-	} else 	if (g_str_equal (name, "chkEnableEvolutionIndexing")) {
-
-		set_bool_option (priv, "EnableEvolution", value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Emails/IndexEvolutionEmails",
-					value);
-
-		flag_restart = TRUE;
-
-	} else 	if (g_str_equal (name, "chkIndexContents")) {
-
-		set_bool_option (priv, "IndexFileContents", value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Indexing/EnableFileContentIndexing",
-					value);
-
-		flag_restart = TRUE;
-
-	} else 	if (g_str_equal (name, "chkGenerateThumbs")) {
-
-		set_bool_option (priv, "GenerateThumbs", value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Indexing/EnableThumbnails",
-					value);
-
-
-	} else 	if (g_str_equal (name, "chkSkipMountPoints")) {
-
-		set_bool_option (priv, "SkipMountPoints", !value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Indexing/SkipMountPoints",
-					!value);
-
-
-	} else 	if (g_str_equal (name, "chkFastMerges")) {
-
-		set_bool_option (priv, "FastMerges", value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Indexing/FastMerges",
-					value);
-
-	} else 	if (g_str_equal (name, "optReducedMemory")) {
-
-		set_bool_option (priv, "LowMemoryMode", value);
-
-		tracker_configuration_set_bool (configuration,
-					"/General/LowMemoryMode",
-					value);
-
-	}  else if (g_str_equal (name, "chkDisableBatteryIndex")) {
-
-		set_bool_option (priv, "BatteryIndex", !value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Indexing/BatteryIndex",
-					!value);
-
-	}  else if (g_str_equal (name, "chkDisableBatteryInitialIndex")) {
-
-		set_bool_option (priv, "BatteryIndexInitial", !value);
-
-		tracker_configuration_set_bool (configuration,
-					"/Indexing/BatteryIndexInitial",
-					!value);
-	}
-
-}
-
-
-
-
 static void
 setup_page_general (TrackerPreferences *preferences)
 {
@@ -455,18 +303,12 @@
 						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
 
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
-
 	widget = glade_xml_get_widget (priv->gxml, "chkEnableWatching");
 	value = tracker_configuration_get_bool (configuration,
 						"/Watches/EnableWatching",
 						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
 
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
-
 	widget = glade_xml_get_widget (priv->gxml, "comLanguage");
 	char *str_value = tracker_configuration_get_string (configuration,
 							    "/Indexing/Language",
@@ -488,19 +330,12 @@
 						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), !value);
 
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
-
 	widget = glade_xml_get_widget (priv->gxml, "chkDisableBatteryInitialIndex");
 	value = tracker_configuration_get_bool (configuration,
 						"/Indexing/BatteryIndexInitial",
 						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), !value);
 
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
-
-
 }
 
 static void
@@ -520,8 +355,6 @@
 	value = tracker_configuration_get_int (configuration,
 					       "/Indexing/Throttle", NULL);
 	gtk_range_set_value (GTK_RANGE (widget), value);
-	g_signal_connect (GTK_RANGE (widget), "value-changed",
-			  G_CALLBACK (throttle_changed_cb), priv);
 
 	widget = glade_xml_get_widget (priv->gxml, "optReducedMemory");
 	bvalue = tracker_configuration_get_bool (configuration,
@@ -529,14 +362,8 @@
 						 NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bvalue);
 
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
-
-
 	widget = glade_xml_get_widget (priv->gxml, "optNormal");
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), !bvalue);
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
 
 	widget = glade_xml_get_widget (priv->gxml, "chkFastMerges");
 	bvalue = tracker_configuration_get_bool (configuration,
@@ -544,10 +371,6 @@
 						 NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bvalue);
 
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
-
-
 	widget = glade_xml_get_widget (priv->gxml, "spnMaxText");
 	value = tracker_configuration_get_int (configuration,
 					       "/Performance/MaxTextToIndex",
@@ -556,9 +379,6 @@
 	value = value / 1024;
 	gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
 
-	g_signal_connect (GTK_SPIN_BUTTON (widget), "value-changed",
-			  G_CALLBACK (spin_value_changed_cb), priv);
-
 	widget = glade_xml_get_widget (priv->gxml, "spnMaxWords");
 	value = tracker_configuration_get_int (configuration,
 					       "/Performance/MaxWordsToIndex",
@@ -566,12 +386,8 @@
 
 	gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
 
-	g_signal_connect (GTK_SPIN_BUTTON (widget), "value-changed",
-			  G_CALLBACK (spin_value_changed_cb), priv);
 }
 
-
-
 static void
 setup_page_files (TrackerPreferences *preferences)
 {
@@ -590,28 +406,19 @@
 						"/Indexing/EnableFileContentIndexing",
 						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
 
-
 	widget = glade_xml_get_widget (priv->gxml, "chkGenerateThumbs");
 	value = tracker_configuration_get_bool (configuration,
 						"/Indexing/EnableThumbnails",
 						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
 
-
 	widget = glade_xml_get_widget (priv->gxml, "chkSkipMountPoints");
 	value = tracker_configuration_get_bool (configuration,
 						"/Indexing/SkipMountPoints",
 						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), !value);
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
 
-
 	widget = glade_xml_get_widget (priv->gxml,
 				       "lstAdditionalPathIndexes");
 	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (widget), FALSE);
@@ -704,21 +511,25 @@
 
 	widget = glade_xml_get_widget (priv->gxml,
 				       "chkEnableEvolutionIndexing");
-
 	value = tracker_configuration_get_bool (configuration,
 						"/Emails/IndexEvolutionEmails",
 						NULL);
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
 
+	widget = glade_xml_get_widget (priv->gxml,
+				       "chkEnableThunderbirdIndexing");
+	value = tracker_configuration_get_bool (configuration,
+						"/Emails/IndexThunderbirdEmails",
+						NULL);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
 
-	g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled",
-			  G_CALLBACK (check_toggled_cb), priv);
+
 }
 
 static void
 tracker_preferences_cmd_quit (GtkWidget *widget, GdkEvent *event, gpointer data)
 {
-	tracker_preferences_cmd_close (NULL, data);
+	tracker_preferences_cmd_ok (NULL, data);
 }
 
 static void
@@ -731,7 +542,6 @@
 		    const gchar *prev_owner, const gchar *new_owner,
 		    gpointer data)
 {
-        static gboolean first_time = TRUE;
 
 	if (!g_str_equal (name, TRACKER_SERVICE))
 		return;
@@ -746,7 +556,8 @@
 		if (!g_spawn_command_line_async (command, NULL))
 			g_warning ("Unable to execute command: %s", command);
                 first_time = FALSE;
-		gtk_main_quit ();
+		if (flag_quit)
+			gtk_main_quit ();
 	}
 }
 
@@ -782,12 +593,12 @@
 		TrackerPreferences *self = TRACKER_PREFERENCES (data);
 		TrackerPreferencesPrivate *priv = TRACKER_PREFERENCES_GET_PRIVATE (self);
 
+		first_time = TRUE;
 		dbus_g_proxy_add_signal (priv->dbus_proxy,
 					 "NameOwnerChanged",
 					 G_TYPE_STRING,
 					 G_TYPE_STRING,
 					 G_TYPE_STRING, G_TYPE_INVALID);
-
 		dbus_g_proxy_connect_signal (priv->dbus_proxy,
 					     "NameOwnerChanged",
 					     G_CALLBACK (name_owner_changed),
@@ -800,16 +611,17 @@
 					 NULL,
 					 G_TYPE_BOOLEAN,
 					 flag_reindex, G_TYPE_INVALID);
+		flag_restart = FALSE;
+		flag_reindex = FALSE;
 
-	} else {
+	} else if (flag_quit) {
 		gtk_main_quit ();
 	}
-
 	
 }
 
 static void
-tracker_preferences_cmd_close (GtkWidget *widget, gpointer data)
+tracker_preferences_cmd_apply (GtkWidget *widget, gpointer data)
 {
 	TrackerPreferences *self = TRACKER_PREFERENCES (data);
 	TrackerPreferencesPrivate *priv =
@@ -818,16 +630,40 @@
 		TRACKER_CONFIGURATION (priv->prefs);
 
 	GSList *list = NULL;
-	gboolean value = FALSE;
+	GSList *list_old = NULL;
+	int ivalue, ivalue_old;
+	gboolean bvalue, bvalue_old;
 	char *str_value;
 
 
 	/* save general settings */
 	widget = glade_xml_get_widget (priv->gxml, "spnInitialSleep");
-	value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+	ivalue = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
 	tracker_configuration_set_int (configuration, "/General/InitialSleep",
-				       value);
+				       ivalue);
 
+	widget = glade_xml_get_widget (priv->gxml, "chkEnableIndexing");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Indexing/EnableIndexing", NULL);
+	if (bvalue != bvalue_old) {
+		flag_restart = TRUE;
+		set_bool_option (priv, "EnableIndexing", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Indexing/EnableIndexing", bvalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "chkEnableWatching");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Watches/EnableWatching", NULL);
+	if (bvalue != bvalue_old) {
+		flag_restart = TRUE;
+		set_bool_option (priv, "EnableIndexing", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Watches/EnableWatching", bvalue);
+	}
+
 	widget = glade_xml_get_widget (priv->gxml, "comLanguage");
 	gint i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
 	str_value = tracker_configuration_get_string (configuration,
@@ -843,9 +679,64 @@
 						  tmap[i].lang);
 	}
 
+	widget = glade_xml_get_widget (priv->gxml, "chkDisableBatteryIndex");
+	bvalue = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Indexing/BatteryIndex", NULL);
+	if (bvalue != bvalue_old) {
+		set_bool_option (priv, "BatteryIndex", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Indexing/BatteryIndex", bvalue);
+	}
 
+	widget = glade_xml_get_widget (priv->gxml, "chkDisableBatteryInitialIndex");
+	bvalue = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Indexing/BatteryIndexInitial", NULL);
+	if (bvalue != bvalue_old) {
+		set_bool_option (priv, "BatteryIndexInitial", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Indexing/BatteryIndexInitial", bvalue);
+	}
+
 	/* files settings */
 
+	widget = glade_xml_get_widget (priv->gxml, "chkIndexContents");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Indexing/EnableFileContentIndexing", NULL);
+	if (bvalue != bvalue_old) {
+		flag_restart = TRUE;
+		flag_reindex = TRUE;
+		set_bool_option (priv, "IndexFileContents", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Indexing/EnableFileContentIndexing", bvalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "chkGenerateThumbs");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Indexing/EnableThumbnails", NULL);
+	if (bvalue != bvalue_old) {
+		flag_restart = TRUE;
+		flag_reindex = TRUE;
+		set_bool_option (priv, "GenerateThumbs", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Indexing/EnableThumbnails", bvalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "chkSkipMountPoints");
+	bvalue = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Indexing/SkipMountPoints", NULL);
+	if (bvalue != bvalue_old) {
+		flag_restart = TRUE;
+		flag_reindex = TRUE;
+		set_bool_option (priv, "SkipMountPoints", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Indexing/SkipMountPoints", bvalue);
+	}
+
 	widget = glade_xml_get_widget (priv->gxml,
 				       "lstAdditionalPathIndexes");
 	list = treeview_get_values (GTK_TREE_VIEW (widget));
@@ -854,39 +745,152 @@
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
 		list = g_slist_prepend (list, g_strdup (g_get_home_dir ()));
 	}
-	tracker_configuration_set_list (configuration,
+	list_old = tracker_configuration_get_list (configuration,
+					       "/Watches/WatchDirectoryRoots",
+					       G_TYPE_STRING, NULL);
+	if (!str_slist_equal (list, list_old)) {
+		flag_restart = TRUE;
+		flag_reindex = TRUE;
+		tracker_configuration_set_list (configuration,
 					"/Watches/WatchDirectoryRoots", list,
 					G_TYPE_STRING);
+	}
+
 	g_slist_free (list);
 	list = NULL;
+	g_slist_free (list_old);
+	list_old = NULL;
 
 	widget = glade_xml_get_widget (priv->gxml, "lstCrawledPaths");
 	list = treeview_get_values (GTK_TREE_VIEW (widget));
-	tracker_configuration_set_list (configuration,
+	list_old = tracker_configuration_get_list (configuration,
+					       "/Watches/CrawlDirectory",
+					       G_TYPE_STRING, NULL);
+	if (!str_slist_equal (list, list_old)) {
+		flag_restart = TRUE;
+		flag_reindex = TRUE;
+		tracker_configuration_set_list (configuration,
 					"/Watches/CrawlDirectory", list,
 					G_TYPE_STRING);
+	}
+
 	g_slist_free (list);
 	list = NULL;
+	g_slist_free (list_old);
+	list_old = NULL;
 
-
 	/* ignored files settings */
 	widget = glade_xml_get_widget (priv->gxml, "lstIgnorePaths");
 	list = treeview_get_values (GTK_TREE_VIEW (widget));
-	tracker_configuration_set_list (configuration,
+	list_old = tracker_configuration_get_list (configuration,
+					       "/Watches/NoWatchDirectory",
+					       G_TYPE_STRING, NULL);
+	if (!str_slist_equal (list, list_old)) {
+		flag_restart = TRUE;
+		flag_reindex = TRUE;
+		tracker_configuration_set_list (configuration,
 					"/Watches/NoWatchDirectory", list,
 					G_TYPE_STRING);
+	}
+
 	g_slist_free (list);
 	list = NULL;
+	g_slist_free (list_old);
+	list_old = NULL;
 
 	widget = glade_xml_get_widget (priv->gxml, "lstIgnoreFilePatterns");
 	list = treeview_get_values (GTK_TREE_VIEW (widget));
-	tracker_configuration_set_list (configuration,
+	list_old = tracker_configuration_get_list (configuration,
+					       "/Indexing/NoIndexFileTypes",
+					       G_TYPE_STRING, NULL);
+	if (!str_slist_equal (list, list_old)) {
+		flag_restart = TRUE;
+		flag_reindex = TRUE;
+		tracker_configuration_set_list (configuration,
 					"/Indexing/NoIndexFileTypes", list,
 					G_TYPE_STRING);
+	}
+
 	g_slist_free (list);
 	list = NULL;
+	g_slist_free (list_old);
+	list_old = NULL;
 
+	/* Email settings */
 
+	widget = glade_xml_get_widget (priv->gxml, "chkEnableEvolutionIndexing");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Emails/IndexEvolutionEmails", NULL);
+	if (bvalue != bvalue_old) {
+		set_bool_option (priv, "EnableEvolution", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Emails/IndexEvolutionEmails", bvalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "chkEnableThunderbirdIndexing");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Emails/IndexThunderbirdEmails", NULL);
+	if (bvalue != bvalue_old) {
+		set_bool_option (priv, "EnableThunderbird", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Emails/IndexThunderbirdEmails", bvalue);
+	}
+
+	/* Performance settings */
+
+	widget = glade_xml_get_widget (priv->gxml, "scaThrottle");
+	ivalue = gtk_range_get_value (GTK_RANGE (widget));
+	ivalue_old = tracker_configuration_get_int (configuration,
+					"/Indexing/Throttle", NULL);
+	if (ivalue != ivalue_old) {
+		set_int_option (priv, "Throttle", ivalue);
+		tracker_configuration_set_int (configuration,
+					"/Indexing/Throttle", ivalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "optReducedMemory");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/General/LowMemoryMode", NULL);
+	if (bvalue != bvalue_old) {
+		set_bool_option (priv, "LowMemoryMode", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/General/LowMemoryMode", bvalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "chkFastMerges");
+	bvalue = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+	bvalue_old = tracker_configuration_get_bool (configuration,
+					"/Indexing/FastMerges", NULL);
+	if (bvalue != bvalue_old) {
+		set_bool_option (priv, "FastMerges", bvalue);
+		tracker_configuration_set_bool (configuration,
+					"/Indexing/FastMerges", bvalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "spnMaxText");
+	ivalue = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget))*1024;
+	ivalue_old = tracker_configuration_get_int (configuration,
+					"/Performance/MaxTextToIndex", NULL);
+	if (ivalue != ivalue_old) {
+		set_int_option (priv, "MaxText", ivalue);
+		tracker_configuration_set_int (configuration,
+					"/Performance/MaxTextToIndex", ivalue);
+	}
+
+	widget = glade_xml_get_widget (priv->gxml, "spnMaxWords");
+	ivalue = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+	ivalue_old = tracker_configuration_get_int (configuration,
+					"/Performance/MaxWordsToIndex", NULL);
+	if (ivalue != ivalue_old) {
+		set_int_option (priv, "MaxWords", ivalue);
+		tracker_configuration_set_int (configuration,
+					"/Performance/MaxWordsToIndex", ivalue);
+	}
+
+	/* save config to distk */
 	tracker_configuration_write (configuration);
 
 	if (flag_restart && if_trackerd_start (priv)) {
@@ -914,13 +918,26 @@
 
 		gtk_widget_show (dialog);
 
-		
-	} else {
+	} else if (flag_quit) {
 		gtk_main_quit ();
 	}
+
 }
 
 static void
+tracker_preferences_cmd_cancel (GtkWidget *widget, gpointer data)
+{
+	gtk_main_quit ();
+}
+
+static void
+tracker_preferences_cmd_ok (GtkWidget *widget, gpointer data)
+{
+	flag_quit = TRUE;
+	tracker_preferences_cmd_apply (widget, data);
+}
+
+static void
 tracker_preferences_cmd_add_crawled_path (GtkWidget *widget, gpointer data)
 {
 	TrackerPreferences *self = TRACKER_PREFERENCES (data);
@@ -932,7 +949,6 @@
 	append_item_to_list (self, path, "lstCrawledPaths");
 
 	g_free (path);
-	flag_restart = TRUE;
 }
 
 static void
@@ -940,7 +956,6 @@
 {
 	TrackerPreferences *self = TRACKER_PREFERENCES (data);
 	remove_selection_from_list (self, "lstCrawledPaths");
-	flag_restart = TRUE;
 }
 
 static void
@@ -964,7 +979,6 @@
 		append_item_to_list (self, path, "lstAdditionalPathIndexes");
 
 	g_free (path);
-	flag_restart = TRUE;
 }
 
 static void
@@ -972,7 +986,6 @@
 {
 	TrackerPreferences *self = TRACKER_PREFERENCES (data);
 	remove_selection_from_list (self, "lstAdditionalPathIndexes");
-	flag_restart = TRUE;
 }
 
 static void
@@ -987,7 +1000,6 @@
 
 	append_item_to_list (self, path, "lstAdditionalMBoxIndexes");
 	g_free (path);
-	flag_restart = TRUE;
 }
 
 static void
@@ -995,7 +1007,6 @@
 {
 	TrackerPreferences *self = TRACKER_PREFERENCES (data);
 	remove_selection_from_list (self, "lstAdditionalMBoxIndexes");
-	flag_restart = TRUE;
 }
 
 static void
@@ -1010,7 +1021,6 @@
 
 	append_item_to_list (self, path, "lstIgnorePaths");
 	g_free (path);
-	flag_restart = TRUE;
 }
 
 static void
@@ -1018,7 +1028,6 @@
 {
 	TrackerPreferences *self = TRACKER_PREFERENCES (data);
 	remove_selection_from_list (self, "lstIgnorePaths");
-	flag_restart = TRUE;
 }
 
 static void
@@ -1032,7 +1041,6 @@
 		return;
 
 	append_item_to_list (self, pattern, "lstIgnoreFilePatterns");
-	flag_restart = TRUE;
 }
 
 static void
@@ -1040,7 +1048,6 @@
 {
 	TrackerPreferences *self = TRACKER_PREFERENCES (data);
 	remove_selection_from_list (self, "lstIgnoreFilePatterns");
-	flag_restart = TRUE;
 }
 
 static void
@@ -1166,6 +1173,27 @@
 	}
 }
 
+static gboolean
+str_slist_equal (GSList *a, GSList *b)
+{
+	guint lena = g_slist_length (a);
+	guint lenb = g_slist_length (b);
+
+	if (lena != lenb)
+		return FALSE;
+
+	GSList *l, *find;
+
+	for (l = a; l; l = g_slist_next (l)) {
+		find = g_slist_find_custom (b, (const gchar *)(l->data), _strcmp);
+		if (!find)
+			return FALSE;
+	}
+
+	return TRUE;
+
+}
+
 GType
 tracker_preferences_get_type (void)
 {
_______________________________________________
tracker-list mailing list
tracker-list@gnome.org
http://mail.gnome.org/mailman/listinfo/tracker-list

Reply via email to