[Goodies-commits] r6434 - in sion/trunk: . src

Enrico Troeger enrico at xfce.org
Mon Jan 12 00:08:36 CET 2009


Author: enrico
Date: 2009-01-11 23:08:36 +0000 (Sun, 11 Jan 2009)
New Revision: 6434

Modified:
   sion/trunk/ChangeLog
   sion/trunk/src/bookmarkdialog.c
   sion/trunk/src/preferencesdialog.c
   sion/trunk/src/settings.c
   sion/trunk/src/window.c
Log:
Make bookmark auto connect interval configurable.

Modified: sion/trunk/ChangeLog
===================================================================
--- sion/trunk/ChangeLog	2009-01-11 17:21:00 UTC (rev 6433)
+++ sion/trunk/ChangeLog	2009-01-11 23:08:36 UTC (rev 6434)
@@ -3,6 +3,9 @@
  * src/backendgvfs.c:
    Fix crashes with older GVFS versions
    (#4794, patch by Colin Leroy, thanks).
+ * src/bookmarkdialog.c, src/preferencesdialog.c, src/settings.c,
+   src/window.c:
+   Make bookmark auto connect interval configurable.
 
 
 2009-01-10  Enrico Tröger  <enrico(at)xfce(dot)org>

Modified: sion/trunk/src/bookmarkdialog.c
===================================================================
--- sion/trunk/src/bookmarkdialog.c	2009-01-11 17:21:00 UTC (rev 6433)
+++ sion/trunk/src/bookmarkdialog.c	2009-01-11 23:08:36 UTC (rev 6434)
@@ -161,6 +161,7 @@
 
 		update_row_in_model(SION_BOOKMARK_DIALOG(dialog), &iter, bm);
 		sion_window_update_bookmarks(SION_WINDOW(priv->parent));
+		sion_window_do_autoconnect(SION_WINDOW(priv->parent));
 	}
 	gtk_widget_destroy(edit_dialog);
 }

Modified: sion/trunk/src/preferencesdialog.c
===================================================================
--- sion/trunk/src/preferencesdialog.c	2009-01-11 17:21:00 UTC (rev 6433)
+++ sion/trunk/src/preferencesdialog.c	2009-01-11 23:08:36 UTC (rev 6434)
@@ -301,10 +301,38 @@
 }
 
 
+static void spin_value_changed_cb(GtkSpinButton *spin, SionSettings *settings)
+{
+	gint interval = gtk_spin_button_get_value_as_int(spin);
+	const gchar *property = g_object_get_data(G_OBJECT(spin), "property");
+
+	g_object_set(settings, property, interval, NULL);
+}
+
+
+static GtkWidget *add_spinbutton(SionSettings *settings, const gchar *property)
+{
+	GtkWidget *widget;
+	gint timeout;
+
+	widget = gtk_spin_button_new_with_range(0, G_MAXUINT, 1);
+	g_object_get(settings, property, &timeout, NULL);
+
+	gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), timeout);
+
+	g_object_set_data(G_OBJECT(widget), "property", (gpointer) property);
+	g_signal_connect(widget, "activate", G_CALLBACK(spin_value_changed_cb), settings);
+	g_signal_connect(widget, "value-changed",  G_CALLBACK(spin_value_changed_cb), settings);
+
+	return widget;
+}
+
+
 static void set_settings(SionPreferencesDialog *dialog, SionSettings *settings)
 {
 	GtkWidget *frame_vbox, *notebook_vbox, *vbox, *hbox, *notebook;
-	GtkWidget *radio1, *radio2, *checkbox, *combo, *entry, *combo_toolbar_style, *combo_toolbar_orient;
+	GtkWidget *radio1, *radio2, *checkbox, *combo, *entry, *combo_toolbar_style;
+	GtkWidget *combo_toolbar_orient, *spinbutton;
 	GtkWidget *label1, *label2, *label3, *label4, *label_volman, *image;
 	GSList *rlist;
 	GtkSizeGroup *sg;
@@ -348,6 +376,19 @@
 	gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
 	entry_check_input(GTK_ENTRY(entry));
 
+	hbox = gtk_hbox_new(FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 0);
+
+	label1 = gtk_label_new_with_mnemonic(_("_Bookmark Auto-Connect Interval"));
+	gtk_misc_set_alignment(GTK_MISC(label1), 0.0f, 0.5f);
+	gtk_box_pack_start(GTK_BOX(hbox), label1, FALSE, FALSE, 0);
+
+	spinbutton = add_spinbutton(settings, "autoconnect-interval");
+	gtk_widget_set_tooltip_text(spinbutton,
+		_("How often to try auto connecting bookmarks, in seconds. Zero disables checking."));
+	gtk_label_set_mnemonic_widget(GTK_LABEL(label1), spinbutton);
+	gtk_box_pack_start(GTK_BOX(hbox), spinbutton, FALSE, FALSE, 10);
+
 	gtk_box_pack_start(GTK_BOX(frame_vbox), gtk_label_new(""), FALSE, FALSE, 0);
 
 	label_volman = gtk_label_new(_("The HAL based volume manager implementation requires the tool 'gnome-mount' to mount local resources like disks. The Unix based volume manager implementation can mount such resources directly and also lists other local devices.\nIf you are unsure, use the HAL based monitor."));

Modified: sion/trunk/src/settings.c
===================================================================
--- sion/trunk/src/settings.c	2009-01-11 17:21:00 UTC (rev 6433)
+++ sion/trunk/src/settings.c	2009-01-11 23:08:36 UTC (rev 6434)
@@ -47,6 +47,7 @@
 	gint		view_mode;
 
 	gchar		*file_manager;
+	gint		 autoconnect_interval;
 	gchar		*vm_impl; // GVolumeMonitor implementation to use
 	gint		*geometry; // window size and position, field 4 is a flag for maximized state
 
@@ -63,11 +64,16 @@
 #define SECTION_GENERAL	"general"
 #define SECTION_UI		"ui"
 
+/* default values */
+#define DEFAULT_AUTOCONNECT_INTERVAL	60
+#define DEFAULT_VM_IMPL					"hal"
+
 enum
 {
 	PROP_0,
 
 	PROP_FILE_MANAGER,
+	PROP_AUTOCONNECT_INTERVAL,
 
 	PROP_SAVE_GEOMETRY,
 	PROP_SHOW_TRAYICON,
@@ -77,6 +83,7 @@
 	PROP_VIEW_MODE
 };
 
+
 GType sion_settings_get_type(void)
 {
 	static GType self_type = 0;
@@ -131,6 +138,9 @@
 		g_free(priv->file_manager);
 		priv->file_manager = g_value_dup_string(value);
 		break;
+	case PROP_AUTOCONNECT_INTERVAL:
+		priv->autoconnect_interval = g_value_get_int(value);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
 		break;
@@ -165,6 +175,11 @@
 	case PROP_FILE_MANAGER:
 		g_value_set_string(value, priv->file_manager);
 		break;
+	case PROP_AUTOCONNECT_INTERVAL:
+		if (priv->autoconnect_interval < 0)
+			g_object_set(object, "autoconnect-interval", DEFAULT_AUTOCONNECT_INTERVAL, NULL);
+		g_value_set_int(value, priv->autoconnect_interval);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
 		break;
@@ -238,6 +253,14 @@
 									"A program for use to open mount points",
 									NULL,
 									G_PARAM_READWRITE));
+	g_object_class_install_property(gobject_class,
+									PROP_AUTOCONNECT_INTERVAL,
+									g_param_spec_int(
+									"autoconnect-interval",
+									"autoconnect-interval",
+									"Autoconnect interval",
+									0, G_MAXINT, 0,
+									G_PARAM_READWRITE));
 }
 
 
@@ -351,6 +374,7 @@
 		g_key_file_set_string(k, SECTION_GENERAL, "vm_impl", priv->vm_impl);
 	if (priv->file_manager != NULL)
 		g_key_file_set_string(k, SECTION_GENERAL, "file_manager", priv->file_manager);
+	g_key_file_set_integer(k, SECTION_GENERAL, "autoconnect_interval", priv->autoconnect_interval);
 
 	if (priv->geometry != NULL)
 		g_key_file_set_integer_list(k, SECTION_UI, "geometry", priv->geometry, 5);
@@ -437,7 +461,6 @@
 {
 	GKeyFile *k;
 	GError *error = NULL;
-	const gchar *default_vm_impl = "hal";
 	gsize i;
 
 	k = g_key_file_new();
@@ -448,8 +471,10 @@
 		error = NULL;
 	}
 
-	priv->vm_impl = get_setting_string(k, SECTION_GENERAL, "vm_impl", default_vm_impl);
+	priv->vm_impl = get_setting_string(k, SECTION_GENERAL, "vm_impl", DEFAULT_VM_IMPL);
 	priv->file_manager = get_setting_string(k, SECTION_GENERAL, "file_manager", "gvfs-open");
+	priv->autoconnect_interval = get_setting_int(k, SECTION_GENERAL, "autoconnect_interval",
+		DEFAULT_AUTOCONNECT_INTERVAL);
 
 	priv->save_geometry = get_setting_boolean(k, SECTION_UI, "save_geometry", TRUE);
 	priv->show_trayicon = get_setting_boolean(k, SECTION_UI, "show_trayicon", TRUE);

Modified: sion/trunk/src/window.c
===================================================================
--- sion/trunk/src/window.c	2009-01-11 17:21:00 UTC (rev 6433)
+++ sion/trunk/src/window.c	2009-01-11 23:08:36 UTC (rev 6434)
@@ -73,6 +73,8 @@
 	GtkWidget		*toolbar;
 	GtkStatusIcon	*trayicon;
 	GtkWidget		*trayicon_popup_menu;
+
+	guint			 autoconnect_timeout_id;
 };
 
 enum
@@ -136,11 +138,25 @@
 }
 
 
+static void remove_autoconnect_timeout(SionWindow *window)
+{
+	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
+
+	if (priv->autoconnect_timeout_id != (guint) -1)
+	{
+		g_source_remove(priv->autoconnect_timeout_id);
+		priv->autoconnect_timeout_id = (guint) -1;
+	}
+}
+
+
 static gboolean sion_window_delete_event(GtkWidget *widget, G_GNUC_UNUSED GdkEventAny *event)
 {
 	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(widget);
 	gint geo[5];
 
+	remove_autoconnect_timeout(SION_WINDOW(widget));
+
 	if (sion_settings_get_boolean(priv->settings, "save-geometry"))
 	{
 		gtk_window_get_position(GTK_WINDOW(widget), &geo[0], &geo[1]);
@@ -334,6 +350,7 @@
 	dialog = sion_preferences_dialog_new(GTK_WINDOW(window), priv->settings);
 
 	gtk_dialog_run(GTK_DIALOG(dialog));
+	sion_window_do_autoconnect(window);
 
 	gtk_widget_destroy(dialog);
 }
@@ -735,12 +752,30 @@
 
 gboolean sion_window_do_autoconnect(gpointer data)
 {
-	static gboolean timeout_added = FALSE;
 	SionWindow *window = SION_WINDOW(data);
 	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
 	SionBookmarkList *bookmarks = sion_settings_get_bookmarks(priv->settings);
+	static gint old_interval = -1;
+	gint interval;
 	guint i;
 
+	interval = sion_settings_get_integer(priv->settings, "autoconnect-interval");
+	if (old_interval != interval)
+	{
+		if (priv->autoconnect_timeout_id != (guint) -1)
+			remove_autoconnect_timeout(window);
+
+		priv->autoconnect_timeout_id = g_timeout_add_seconds(
+			interval, sion_window_do_autoconnect, data);
+		old_interval = interval;
+	}
+
+	if (interval == 0)
+	{
+		remove_autoconnect_timeout(window);
+		return FALSE;
+	}
+
 	for (i = 0; i < bookmarks->len; i++)
 	{
 		SionBookmark *bm = g_ptr_array_index(bookmarks, i);
@@ -749,12 +784,6 @@
 			mount_from_bookmark(window, bm);
 		}
 	}
-
-	if (! timeout_added)
-	{
-		g_timeout_add_seconds(60, sion_window_do_autoconnect, data);
-		timeout_added = TRUE;
-	}
 	return TRUE;
 }
 
@@ -1118,6 +1147,8 @@
 	GtkUIManager *ui_manager;
 	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
 
+	priv->autoconnect_timeout_id = (guint) -1;
+
 	gtk_window_set_title(GTK_WINDOW(window), _("Sion"));
 	gtk_window_set_icon_name(GTK_WINDOW(window), sion_window_get_icon_name());
 	gtk_window_set_default_size(GTK_WINDOW(window), 550, 350);




More information about the Goodies-commits mailing list