[Goodies-commits] r6429 - in sion/trunk: . src
Enrico Troeger
enrico at xfce.org
Sat Jan 10 17:41:39 CET 2009
Author: enrico
Date: 2009-01-10 16:41:39 +0000 (Sat, 10 Jan 2009)
New Revision: 6429
Added:
sion/trunk/THANKS
Modified:
sion/trunk/ChangeLog
sion/trunk/src/backendgvfs.c
sion/trunk/src/bookmark.c
sion/trunk/src/bookmark.h
sion/trunk/src/bookmarkdialog.c
sion/trunk/src/bookmarkeditdialog.c
sion/trunk/src/settings.c
sion/trunk/src/window.c
sion/trunk/src/window.h
Log:
Try to connect to auto-connect bookmarks at startup and every minute. Clicking Disconnect cancels autoconnection for the running instance (patch by Colin Leroy, thanks).
Modified: sion/trunk/ChangeLog
===================================================================
--- sion/trunk/ChangeLog 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/ChangeLog 2009-01-10 16:41:39 UTC (rev 6429)
@@ -3,6 +3,10 @@
* src/bookmarkeditdialog.c:
Fix "This bookmark already exists" warning when editing an existing
bookmark (patch by Colin Leroy, thanks).
+ * THANKS, src/bookmark.c, src/bookmark.h, src/settings.c:
+ Try to connect to auto-connect bookmarks at startup and every
+ minute. Clicking Disconnect cancels autoconnection for the
+ running instance (patch by Colin Leroy, thanks).
2009-01-06 Enrico Tröger <enrico(at)xfce(dot)org>
Added: sion/trunk/THANKS
===================================================================
--- sion/trunk/THANKS (rev 0)
+++ sion/trunk/THANKS 2009-01-10 16:41:39 UTC (rev 6429)
@@ -0,0 +1,20 @@
+What's this file about?
+-----------------------
+This file lists all external people that have contributed to this project.
+If any contributors are missing, please email the developers - see the AUTHORS file.
+
+
+Testers and contributors:
+-------------------------
+These people have contributed to Sion by testing the software,
+reporting problems, sending patches and making useful suggestions.
+
+Colin Leroy <colin(at)colino(dot)net> - Autoconnect bookmarks patch
+
+
+Translators:
+------------
+These people have translated Sion to foreign languages.
+
+Thanks to all translators!
+For a detailed list see po/ChangeLog.
Modified: sion/trunk/src/backendgvfs.c
===================================================================
--- sion/trunk/src/backendgvfs.c 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/backendgvfs.c 2009-01-10 16:41:39 UTC (rev 6429)
@@ -457,9 +457,7 @@
uri = g_file_get_uri(location);
success = g_file_mount_enclosing_volume_finish(location, res, &error);
- if (success || g_error_matches(error, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED))
- verbose("Successfully mounted \"%s\"", uri);
- else
+ if (! g_error_matches(error, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED))
{
gchar *msg = g_strdup_printf(_("Mounting of \"%s\" failed."), uri);
g_signal_emit(backend, signals[OPERATION_FAILED], 0, msg, error->message);
Modified: sion/trunk/src/bookmark.c
===================================================================
--- sion/trunk/src/bookmark.c 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmark.c 2009-01-10 16:41:39 UTC (rev 6429)
@@ -42,6 +42,8 @@
gchar *share;
guint port;
gchar *user;
+ gboolean autoconnect;
+ gboolean should_not_autoconnect;
gboolean is_valid;
};
@@ -412,6 +414,46 @@
}
+gboolean sion_bookmark_get_autoconnect(SionBookmark *bookmark)
+{
+ g_return_val_if_fail(bookmark != NULL, 0);
+
+ return SION_BOOKMARK_GET_PRIVATE(bookmark)->autoconnect;
+}
+
+
+void sion_bookmark_set_autoconnect(SionBookmark *bookmark, gboolean autoconnect)
+{
+ SionBookmarkPrivate *priv;
+
+ g_return_if_fail(bookmark != NULL);
+
+ priv = SION_BOOKMARK_GET_PRIVATE(bookmark);
+
+ priv->autoconnect = autoconnect;
+}
+
+
+gboolean sion_bookmark_get_should_not_autoconnect(SionBookmark *bookmark)
+{
+ g_return_val_if_fail(bookmark != NULL, 0);
+
+ return SION_BOOKMARK_GET_PRIVATE(bookmark)->should_not_autoconnect;
+}
+
+
+void sion_bookmark_set_should_not_autoconnect(SionBookmark *bookmark, gboolean should_not_autoconnect)
+{
+ SionBookmarkPrivate *priv;
+
+ g_return_if_fail(bookmark != NULL);
+
+ priv = SION_BOOKMARK_GET_PRIVATE(bookmark);
+
+ priv->should_not_autoconnect = should_not_autoconnect;
+}
+
+
const gchar *sion_bookmark_get_user(SionBookmark *bookmark)
{
g_return_val_if_fail(bookmark != NULL, NULL);
Modified: sion/trunk/src/bookmark.h
===================================================================
--- sion/trunk/src/bookmark.h 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmark.h 2009-01-10 16:41:39 UTC (rev 6429)
@@ -76,6 +76,13 @@
const gchar* sion_bookmark_get_domain (SionBookmark *bookmark);
void sion_bookmark_set_domain (SionBookmark *bookmark, const gchar *domain);
+gboolean sion_bookmark_get_autoconnect (SionBookmark *bookmark);
+void sion_bookmark_set_autoconnect (SionBookmark *bookmark, gboolean autoconnect);
+
+gboolean sion_bookmark_get_should_not_autoconnect (SionBookmark *bookmark);
+void sion_bookmark_set_should_not_autoconnect (SionBookmark *bookmark, gboolean should_not_autoconnect);
+
+
G_END_DECLS
#endif /* __BOOKMARK_H__ */
Modified: sion/trunk/src/bookmarkdialog.c
===================================================================
--- sion/trunk/src/bookmarkdialog.c 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmarkdialog.c 2009-01-10 16:41:39 UTC (rev 6429)
@@ -59,9 +59,11 @@
COL_SCHEME,
COL_HOST,
COL_PORT,
+ COL_AUTOMOUNT,
COL_USERNAME,
COL_OTHER,
COL_BMREF,
+ N_COLUMNS,
ACTION_ADD,
ACTION_EDIT,
ACTION_DELETE
@@ -131,6 +133,7 @@
COL_SCHEME, sion_describe_scheme(sion_bookmark_get_scheme(bm)),
COL_HOST, sion_bookmark_get_host(bm),
COL_PORT, port,
+ COL_AUTOMOUNT, sion_bookmark_get_autoconnect(bm),
COL_USERNAME, sion_bookmark_get_user(bm),
COL_OTHER, other_text->str,
COL_BMREF, bm,
@@ -189,6 +192,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);
}
@@ -306,9 +310,9 @@
SionBookmarkDialogPrivate *priv = SION_BOOKMARK_DIALOG_GET_PRIVATE(dialog);
priv->tree = gtk_tree_view_new();
- priv->store = gtk_list_store_new(7,
+ priv->store = gtk_list_store_new(N_COLUMNS,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+ G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(
@@ -342,6 +346,14 @@
gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
gtk_tree_view_append_column(GTK_TREE_VIEW(priv->tree), column);
+ renderer = gtk_cell_renderer_toggle_new();
+ column = gtk_tree_view_column_new_with_attributes(
+ _("Automount"), renderer, "active", COL_AUTOMOUNT, NULL);
+ gtk_tree_view_column_set_sort_indicator(column, TRUE);
+ gtk_tree_view_column_set_sort_column_id(column, COL_AUTOMOUNT);
+ gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(priv->tree), column);
+
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(
_("Username"), renderer, "text", COL_USERNAME, NULL);
Modified: sion/trunk/src/bookmarkeditdialog.c
===================================================================
--- sion/trunk/src/bookmarkeditdialog.c 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmarkeditdialog.c 2009-01-10 16:41:39 UTC (rev 6429)
@@ -48,6 +48,8 @@
GtkWidget *name_label;
GtkWidget *name_entry;
+ GtkWidget *autoconnect_checkbtn;
+
GtkWidget *uri_label;
GtkWidget *uri_entry;
@@ -374,6 +376,10 @@
if (port == 0)
port = methods[idx].port;
+ gtk_toggle_button_set_active(
+ GTK_TOGGLE_BUTTON(priv->autoconnect_checkbtn),
+ sion_bookmark_get_autoconnect(priv->bookmark_init));
+
gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->port_spin), port);
combo_set_active(priv->type_combo, (gint) idx);
}
@@ -431,7 +437,7 @@
gtk_container_remove(GTK_CONTAINER(priv->table), priv->information_label);
}
- i = 3;
+ i = 4;
table = priv->table;
if (meth->scheme == NULL)
@@ -599,6 +605,7 @@
const gchar *tmp;
gint idx;
GtkTreeIter iter;
+ gboolean autoconnect;
g_return_if_fail(dialog != NULL);
@@ -620,7 +627,6 @@
idx = 0;
if (methods[idx].scheme == NULL)
{
- sion_bookmark_set_name(priv->bookmark_update, "Custom");
sion_bookmark_set_uri(priv->bookmark_update, gtk_entry_get_text(GTK_ENTRY(priv->uri_entry)));
}
else
@@ -638,6 +644,9 @@
sion_bookmark_set_port(priv->bookmark_update,
gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(priv->port_spin)));
}
+
+ autoconnect = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->autoconnect_checkbtn));
+ sion_bookmark_set_autoconnect(priv->bookmark_update, autoconnect);
}
@@ -687,6 +696,7 @@
combo_set_active(priv->type_combo, 0);
gtk_widget_hide(priv->name_label);
gtk_widget_hide(priv->name_entry);
+ gtk_widget_hide(priv->autoconnect_checkbtn);
break;
}
}
@@ -732,7 +742,7 @@
hbox = gtk_hbox_new(FALSE, 6);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
- priv->table = table = gtk_table_new(8, 2, FALSE);
+ priv->table = table = gtk_table_new(9, 2, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 6);
gtk_table_set_col_spacings(GTK_TABLE(table), 12);
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0);
@@ -745,15 +755,23 @@
gtk_label_set_mnemonic_widget(GTK_LABEL(priv->name_label), entry);
gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
- label = gtk_label_new_with_mnemonic(_("Service _type:"));
+ label = gtk_label_new_with_mnemonic(_("_Autoconnect"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+ priv->autoconnect_checkbtn = gtk_check_button_new();
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), priv->autoconnect_checkbtn);
+ gtk_table_attach(GTK_TABLE(table), priv->autoconnect_checkbtn, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+
+ label = gtk_label_new_with_mnemonic(_("Service _type:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+
priv->type_combo = combo = gtk_combo_box_new();
- gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
label_tmp = gtk_label_new(" ");
- gtk_table_attach(GTK_TABLE(table), label_tmp, 0, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label_tmp, 0, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
renderer = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
Modified: sion/trunk/src/settings.c
===================================================================
--- sion/trunk/src/settings.c 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/settings.c 2009-01-10 16:41:39 UTC (rev 6429)
@@ -394,6 +394,7 @@
set_setting_string(k, name, "share", sion_bookmark_get_share(bm));
set_setting_string(k, name, "domain", sion_bookmark_get_domain(bm));
set_setting_int(k, name, "port", sion_bookmark_get_port(bm));
+ set_setting_int(k, name, "autoconnect", sion_bookmark_get_autoconnect(bm));
}
}
@@ -489,6 +490,7 @@
gchar **groups;
gchar *scheme, *host, *user, *domain, *share;
gint port;
+ gboolean autoconnect;
SionBookmark *bm;
k = g_key_file_new();
@@ -509,6 +511,7 @@
domain = get_setting_string(k, groups[i], "domain", "");
share = get_setting_string(k, groups[i], "share", "");
port = get_setting_int(k, groups[i], "port", 0);
+ autoconnect = get_setting_int(k, groups[i], "autoconnect", FALSE);
bm = sion_bookmark_new();
sion_bookmark_set_name(bm, groups[i]);
@@ -522,6 +525,7 @@
if (NZV(share))
sion_bookmark_set_share(bm, share);
sion_bookmark_set_port(bm, port);
+ sion_bookmark_set_autoconnect(bm, autoconnect);
g_ptr_array_add(priv->bookmarks, bm);
Modified: sion/trunk/src/window.c
===================================================================
--- sion/trunk/src/window.c 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/window.c 2009-01-10 16:41:39 UTC (rev 6429)
@@ -243,6 +243,28 @@
}
+static SionBookmark *get_bookmark_from_uri(SionWindow *window, const gchar *uri)
+{
+ SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
+ SionBookmarkList *bml = sion_settings_get_bookmarks(priv->settings);
+ SionBookmark *bm = NULL;
+ gboolean found = FALSE;
+ gchar *tmp_uri;
+ guint i;
+
+ for (i = 0; i < bml->len && ! found; i++)
+ {
+ bm = g_ptr_array_index(bml, i);
+ tmp_uri = sion_bookmark_get_uri(bm);
+ if (sion_str_equal(uri, tmp_uri))
+ found = TRUE;
+
+ g_free(tmp_uri);
+ }
+ return bm;
+}
+
+
static void mount_from_bookmark(SionWindow *window, SionBookmark *bookmark)
{
gchar *uri;
@@ -255,6 +277,9 @@
uri = sion_bookmark_get_uri(bookmark);
sion_backend_gvfs_mount_uri(priv->backend_gvfs, uri, sion_bookmark_get_domain(bookmark));
+ if (sion_bookmark_get_autoconnect(bookmark))
+ sion_bookmark_set_should_not_autoconnect(bookmark, FALSE);
+
g_free(uri);
}
@@ -318,6 +343,7 @@
{
SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
GtkTreeIter iter;
+ SionBookmark *bm;
get_selected_iter(window, &iter);
if (gtk_list_store_iter_is_valid(priv->store, &iter))
@@ -328,6 +354,16 @@
gtk_tree_model_get(model, &iter, SION_WINDOW_COL_REF, &mnt, -1);
if (sion_backend_gvfs_is_mount(mnt))
{
+ gchar *uri;
+ sion_backend_gvfs_get_name_and_uri_from_mount(mnt, NULL, &uri);
+ bm = get_bookmark_from_uri(window, uri);
+ if (bm != NULL && sion_bookmark_get_autoconnect(bm))
+ { /* we don't want auto-connection to reconnect this bookmark right
+ after we unmount it. */
+ sion_bookmark_set_should_not_autoconnect(bm, TRUE);
+ }
+ g_free(uri);
+
sion_backend_gvfs_unmount_mount(priv->backend_gvfs, mnt);
}
}
@@ -476,24 +512,12 @@
if (ref_type == SION_WINDOW_REF_TYPE_MOUNT)
{
gchar *uri;
- gchar *tmp_uri;
- guint i;
- SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
- SionBookmarkList *bml = sion_settings_get_bookmarks(priv->settings);
- SionBookmark *bm;
gboolean found = FALSE;
sion_backend_gvfs_get_name_and_uri_from_mount(ref, NULL, &uri);
- for (i = 0; i < bml->len && ! found; i++)
- {
- bm = g_ptr_array_index(bml, i);
- tmp_uri = sion_bookmark_get_uri(bm);
- if (sion_str_equal(uri, tmp_uri))
- found = TRUE;
+ found = (get_bookmark_from_uri(window, uri) != NULL);
- g_free(tmp_uri);
- }
g_free(uri);
return found;
}
@@ -709,6 +733,32 @@
}
+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);
+ guint i;
+
+ for (i = 0; i < bookmarks->len; i++)
+ {
+ SionBookmark *bm = g_ptr_array_index(bookmarks, i);
+ if (sion_bookmark_get_autoconnect(bm) && ! sion_bookmark_get_should_not_autoconnect(bm))
+ {
+ mount_from_bookmark(window, bm);
+ }
+ }
+
+ if (! timeout_added)
+ {
+ g_timeout_add_seconds(60, sion_window_do_autoconnect, data);
+ timeout_added = TRUE;
+ }
+ return TRUE;
+}
+
+
static void action_create_bookmark_cb(G_GNUC_UNUSED GtkAction *button, SionWindow *window)
{
SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
@@ -723,27 +773,13 @@
gtk_tree_model_get(model, &iter, SION_WINDOW_COL_REF, &mnt, -1);
if (sion_backend_gvfs_is_mount(mnt))
{
- gchar *uri, *tmp_uri, *name;
- guint i;
- gboolean found = FALSE;
- SionBookmark *bm;
- SionBookmarkList *bml = sion_settings_get_bookmarks(priv->settings);
+ gchar *uri, *name;
sion_backend_gvfs_get_name_and_uri_from_mount(mnt, &name, &uri);
- // check whether the current mount is already a bookmark ...
- for (i = 0; i < bml->len && ! found; i++)
- {
- bm = g_ptr_array_index(bml, i);
- tmp_uri = sion_bookmark_get_uri(bm);
- if (sion_str_equal(uri, tmp_uri))
- found = TRUE;
- g_free(tmp_uri);
- }
- // ... and add it if not
- if (! found)
+ if (get_bookmark_from_uri(window, uri) == NULL)
{
- bm = sion_bookmark_new_from_uri(name, uri);
+ SionBookmark *bm = sion_bookmark_new_from_uri(name, uri);
if (sion_bookmark_is_valid(bm))
{
GtkWidget *edit_dialog;
@@ -1200,6 +1236,7 @@
mounts_changed_cb(NULL, SION_WINDOW(window));
sion_window_update_bookmarks(SION_WINDOW(window));
+ sion_window_do_autoconnect(SION_WINDOW(window));
return window;
}
Modified: sion/trunk/src/window.h
===================================================================
--- sion/trunk/src/window.h 2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/window.h 2009-01-10 16:41:39 UTC (rev 6429)
@@ -49,6 +49,7 @@
GtkWidget* sion_window_new (SionSettings *settings);
void sion_window_update_bookmarks (SionWindow *window);
+gboolean sion_window_do_autoconnect (gpointer data);
const gchar* sion_window_get_icon_name (void);
More information about the Goodies-commits
mailing list