[gnome-utils] Tidy up the prefs dialog code
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-utils] Tidy up the prefs dialog code
- Date: Sat, 24 Jul 2010 12:04:41 +0000 (UTC)
commit 1b8baa20c7ef5c273e37f5d4b72b4a020bd3eafb
Author: Paolo Borelli <pborelli gnome org>
Date: Sat Jul 24 14:04:20 2010 +0200
Tidy up the prefs dialog code
Remove global variables, reorder code, etc
baobab/src/baobab-prefs.c | 348 ++++++++++++++++++---------------------------
1 files changed, 139 insertions(+), 209 deletions(-)
---
diff --git a/baobab/src/baobab-prefs.c b/baobab/src/baobab-prefs.c
index f94eede..f40e04f 100644
--- a/baobab/src/baobab-prefs.c
+++ b/baobab/src/baobab-prefs.c
@@ -35,31 +35,74 @@
#include "baobab-prefs.h"
-static gboolean props_changed;
+static gboolean
+add_excluded_item (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ GSList **list)
+{
+ GSList *l;
+ gchar *mount;
+ gboolean check;
+
+ l = *list;
+
+ gtk_tree_model_get (model,
+ iter,
+ COL_MOUNT, &mount,
+ COL_CHECK, &check,
+ -1);
+
+ if (!check) {
+ l = g_slist_prepend (l, mount);
+ }
+
+ *list = l;
+
+ return FALSE;
+}
+
+static GSList *
+get_excluded_locations (GtkTreeModel *model)
+{
+ GSList *l = NULL;
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) add_excluded_item,
+ &l);
+
+ return g_slist_reverse (l);
+}
+
+static void
+save_gconf (GtkTreeModel *model)
+{
+ GSList *l;
-static GtkTreeView *tree_props;
-static GtkListStore *model_props;
-static GtkListStore *create_props_model (void);
-static GtkWidget *create_tree_props (GtkBuilder *builder);
-static void fill_props_model (GtkWidget *);
-static void check_toggled (GtkCellRendererToggle * cell,
- gchar * path_str, gpointer data);
+ l = get_excluded_locations (model);
-static void read_gconf (void);
-static void save_gconf (void);
-static gboolean set_gconf_list (GtkTreeModel * model, GtkTreePath * path,
- GtkTreeIter * iter, gpointer data);
+ gconf_client_set_list (baobab.gconf_client,
+ PROPS_SCAN_KEY, GCONF_VALUE_STRING,
+ l, NULL);
-static gboolean set_model_checks (GtkTreeModel * model, GtkTreePath * path,
- GtkTreeIter * iter, gpointer data);
+ g_slist_foreach (l, (GFunc) g_free, NULL);
+ g_slist_free (l);
+}
-static void enable_home_cb (GtkToggleButton * togglebutton,
- gpointer user_data);
+static void
+enable_home_cb (GtkToggleButton *togglebutton, gpointer user_data)
+{
+ baobab.bbEnableHomeMonitor = gtk_toggle_button_get_active (togglebutton);
+
+ gconf_client_set_bool (baobab.gconf_client, PROPS_ENABLE_HOME_MONITOR,
+ baobab.bbEnableHomeMonitor, NULL);
+
+}
static void
filechooser_response_cb (GtkDialog *dialog,
- gint response_id,
- gpointer user_data)
+ gint response_id,
+ GtkTreeModel *model)
{
switch (response_id) {
case GTK_RESPONSE_HELP:
@@ -67,81 +110,48 @@ filechooser_response_cb (GtkDialog *dialog,
"baobab.xml", "baobab-preferences");
break;
case GTK_RESPONSE_CLOSE:
- if (props_changed) {
- save_gconf ();
- }
+ save_gconf (model);
default:
gtk_widget_destroy (GTK_WIDGET (dialog));
break;
}
}
-void
-create_props (void)
+static void
+check_toggled (GtkCellRendererToggle *cell,
+ gchar *path_str,
+ GtkTreeModel *model)
{
- GtkBuilder *builder;
- GtkWidget *dlg;
- GtkWidget *check_enablehome;
- GError *error = NULL;
-
- props_changed = FALSE;
-
- builder = gtk_builder_new ();
- gtk_builder_add_from_file (builder, BAOBAB_DIALOG_SCAN_UI_FILE, &error);
-
- if (error) {
- g_critical ("Can't load user interface file for the scan properties dialog: %s",
- error->message);
- g_object_unref (builder);
- g_error_free (error);
-
- return;
- }
-
- dlg = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_scan_props"));
-
- gtk_window_set_transient_for (GTK_WINDOW (dlg),
- GTK_WINDOW (baobab.window));
-
- tree_props = (GtkTreeView *) create_tree_props (builder);
- fill_props_model (dlg);
- read_gconf ();
-
- check_enablehome = GTK_WIDGET (gtk_builder_get_object (builder, "check_enable_home"));
- gtk_toggle_button_set_active ((GtkToggleButton *) check_enablehome,
- baobab.bbEnableHomeMonitor);
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
+ gboolean toggle;
+ gchar *mountpoint;
- g_signal_connect_after ((GtkToggleButton *) check_enablehome,
- "toggled", G_CALLBACK (enable_home_cb),
- NULL);
+ /* get toggled iter */
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model,
+ &iter,
+ COL_CHECK, &toggle,
+ COL_MOUNT_D, &mountpoint,
+ -1);
- g_signal_connect (dlg, "response",
- G_CALLBACK (filechooser_response_cb),
- NULL);
+ /* check if root dir */
+ if (strcmp ("/", mountpoint) == 0)
+ goto clean_up;
- gtk_widget_show_all (dlg);
-}
+ /* set new value */
+ gtk_list_store_set (GTK_LIST_STORE (model),
+ &iter,
+ COL_CHECK, !toggle,
+ -1);
-GtkListStore *
-create_props_model (void)
-{
- GtkListStore *mdl;
-
- mdl = gtk_list_store_new (TOT_COLUMNS,
- G_TYPE_BOOLEAN, /* checkbox */
- G_TYPE_STRING, /* device */
- G_TYPE_STRING, /*mount point display */
- G_TYPE_STRING, /* mount point uri */
- G_TYPE_STRING, /* fs type */
- G_TYPE_STRING, /* fs size */
- G_TYPE_STRING /* fs avail */
- );
-
- return mdl;
+ clean_up:
+ g_free (mountpoint);
+ gtk_tree_path_free (path);
}
-GtkWidget *
-create_tree_props (GtkBuilder *builder)
+static void
+create_tree_props (GtkBuilder *builder, GtkTreeModel *model)
{
GtkCellRenderer *cell;
GtkTreeViewColumn *col;
@@ -152,7 +162,7 @@ create_tree_props (GtkBuilder *builder)
/* checkbox column */
cell = gtk_cell_renderer_toggle_new ();
g_signal_connect (cell, "toggled",
- G_CALLBACK (check_toggled), NULL);
+ G_CALLBACK (check_toggled), model);
col = gtk_tree_view_column_new_with_attributes (_("Scan"), cell,
"active", COL_CHECK,
@@ -200,48 +210,13 @@ create_tree_props (GtkBuilder *builder)
COL_FS_AVAIL, NULL);
g_object_set (G_OBJECT (cell), "xalign", (gfloat) 1.0, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
-
- model_props = create_props_model ();
- gtk_tree_view_set_model (GTK_TREE_VIEW (tvw),
- GTK_TREE_MODEL (model_props));
- g_object_unref (model_props);
-
- return tvw;
-}
-
-void
-check_toggled (GtkCellRendererToggle *cell,
- gchar *path_str,
- gpointer data)
-{
- GtkTreeIter iter;
- GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
- gboolean toggle;
- gchar *mountpoint;
-
- /* get toggled iter */
- gtk_tree_model_get_iter ((GtkTreeModel *) model_props, &iter,
- path);
- gtk_tree_model_get ((GtkTreeModel *) model_props, &iter, COL_CHECK,
- &toggle, COL_MOUNT_D, &mountpoint, -1);
- /* check if root dir */
- if (strcmp ("/", mountpoint) == 0)
- goto clean_up;
-
- /* set new value */
- props_changed = TRUE;
- toggle ^= 1;
- gtk_list_store_set (GTK_LIST_STORE (model_props), &iter, COL_CHECK,
- toggle, -1);
-
- clean_up:
- g_free (mountpoint);
- gtk_tree_path_free (path);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (tvw), model);
+ g_object_unref (model);
}
-void
-fill_props_model (GtkWidget *dlg)
+static void
+fill_props_model (GtkListStore *store)
{
GtkTreeIter iter;
guint lo;
@@ -258,6 +233,7 @@ fill_props_model (GtkWidget *dlg)
gchar * total, *avail;
GFile *file;
gchar *uri;
+ gboolean excluded;
struct stat buf;
if (g_stat (mountentry->devname,&buf) == -1)
@@ -270,9 +246,11 @@ fill_props_model (GtkWidget *dlg)
avail = g_format_size_for_display(fsavail);
file = g_file_new_for_path (mountentry->mountdir);
uri = g_file_get_uri (file);
- gtk_list_store_append (model_props, &iter);
- gtk_list_store_set (model_props, &iter,
- COL_CHECK, TRUE,
+ excluded = baobab_is_excluded_location (file);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_CHECK, !excluded,
COL_DEVICE, mountentry->devname,
COL_MOUNT_D, mountentry->mountdir,
COL_MOUNT, uri,
@@ -290,104 +268,56 @@ fill_props_model (GtkWidget *dlg)
}
void
-read_gconf (void)
-{
- GSList *l;
-
- l = gconf_client_get_list (baobab.gconf_client, PROPS_SCAN_KEY,
- GCONF_VALUE_STRING, NULL);
-
- if (!l)
- return;
-
- gtk_tree_model_foreach (GTK_TREE_MODEL (model_props),
- set_model_checks, l);
-
- g_slist_foreach (l, (GFunc) g_free, NULL);
- g_slist_free (l);
-}
-
-void
-save_gconf (void)
+create_props (void)
{
- GSList *l = NULL;
-
- l = g_slist_append (l, "START");
- gtk_tree_model_foreach (GTK_TREE_MODEL (model_props),
- set_gconf_list, l);
- l = g_slist_remove (l, "START");
- gconf_client_set_list (baobab.gconf_client,
- PROPS_SCAN_KEY, GCONF_VALUE_STRING,
- l, NULL);
-
- g_slist_foreach (l, (GFunc) g_free, NULL);
- g_slist_free (l);
-}
+ GtkBuilder *builder;
+ GtkWidget *dlg;
+ GtkWidget *check_enablehome;
+ GtkListStore *model;
+ GError *error = NULL;
-gboolean
-set_gconf_list (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer list)
-{
- gchar *mount;
- gboolean check;
+ builder = gtk_builder_new ();
+ gtk_builder_add_from_file (builder, BAOBAB_DIALOG_SCAN_UI_FILE, &error);
- gtk_tree_model_get (model, iter, COL_MOUNT, &mount, COL_CHECK,
- &check, -1);
+ if (error) {
+ g_critical ("Can't load user interface file for the scan properties dialog: %s",
+ error->message);
+ g_object_unref (builder);
+ g_error_free (error);
- /* add only un-checked mount points */
- if (!check) {
- list = g_slist_last (list);
- list = g_slist_append (list, mount);
+ return;
}
- /* g_free(mount); //freed in save_gconf() */
- return FALSE;
-}
-
-static gint
-list_find (gconstpointer a, gconstpointer b)
-{
- gchar *str_a, *str_b;
- gint ret;
-
- str_a = g_uri_unescape_string (a,NULL);
- str_b = g_uri_unescape_string (b,NULL);
-
- ret = strcmp (str_a, str_b);
+ dlg = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_scan_props"));
- g_free (str_a);
- g_free (str_b);
+ gtk_window_set_transient_for (GTK_WINDOW (dlg),
+ GTK_WINDOW (baobab.window));
- return ret;
-}
+ model = gtk_list_store_new (TOT_COLUMNS,
+ G_TYPE_BOOLEAN, /* checkbox */
+ G_TYPE_STRING, /* device */
+ G_TYPE_STRING, /*mount point display */
+ G_TYPE_STRING, /* mount point uri */
+ G_TYPE_STRING, /* fs type */
+ G_TYPE_STRING, /* fs size */
+ G_TYPE_STRING /* fs avail */
+ );
-gboolean
-set_model_checks (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer list)
-{
- gchar *mount;
+ create_tree_props (builder, GTK_TREE_MODEL (model));
+ fill_props_model (model);
- gtk_tree_model_get (model, iter, COL_MOUNT, &mount, -1);
+ check_enablehome = GTK_WIDGET (gtk_builder_get_object (builder, "check_enable_home"));
+ gtk_toggle_button_set_active ((GtkToggleButton *) check_enablehome,
+ baobab.bbEnableHomeMonitor);
- if (g_slist_find_custom (list, mount, list_find) != NULL)
- gtk_list_store_set ((GtkListStore *) model, iter,
- COL_CHECK, FALSE, -1);
+ g_signal_connect_after ((GtkToggleButton *) check_enablehome,
+ "toggled", G_CALLBACK (enable_home_cb),
+ NULL);
- g_free (mount);
+ g_signal_connect (dlg, "response",
+ G_CALLBACK (filechooser_response_cb),
+ model);
- return FALSE;
+ gtk_widget_show_all (dlg);
}
-void
-enable_home_cb (GtkToggleButton *togglebutton, gpointer user_data)
-{
- baobab.bbEnableHomeMonitor = gtk_toggle_button_get_active (togglebutton);
-
- gconf_client_set_bool (baobab.gconf_client, PROPS_ENABLE_HOME_MONITOR,
- baobab.bbEnableHomeMonitor, NULL);
-
-}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]