diff options
-rw-r--r-- | src/trg-client.c | 7 | ||||
-rw-r--r-- | src/trg-main-window.c | 32 | ||||
-rw-r--r-- | src/trg-preferences-dialog.c | 19 | ||||
-rw-r--r-- | src/trg-preferences.h | 2 | ||||
-rw-r--r-- | src/util.c | 13 | ||||
-rw-r--r-- | src/util.h | 1 |
6 files changed, 58 insertions, 16 deletions
diff --git a/src/trg-client.c b/src/trg-client.c index 2353669..2ed8ffa 100644 --- a/src/trg-client.c +++ b/src/trg-client.c @@ -31,6 +31,7 @@ #include "trg-client.h" #include "trg-preferences.h" +#include "util.h" gboolean trg_client_supports_tracker_edit(trg_client * tc) { @@ -78,7 +79,7 @@ int trg_client_populate_with_settings(trg_client * tc, GConfClient * gconf) g_free(tc->password); tc->password = NULL; - port = gconf_client_get_int(gconf, TRG_GCONF_KEY_PORT, &error); + port = gconf_client_get_int_or_default(gconf, TRG_GCONF_KEY_PORT, TRG_PORT_DEFAULT, &error); check_for_error(error); host = gconf_client_get_string(gconf, TRG_GCONF_KEY_HOSTNAME, &error); @@ -95,10 +96,10 @@ int trg_client_populate_with_settings(trg_client * tc, GConfClient * gconf) g_free(host); tc->interval = - gconf_client_get_int(gconf, TRG_GCONF_KEY_UPDATE_INTERVAL, &error); + gconf_client_get_int_or_default(gconf, TRG_GCONF_KEY_UPDATE_INTERVAL, TRG_INTERVAL_DEFAULT, &error); check_for_error(error); if (tc->interval < 1) - tc->interval = 3; + tc->interval = TRG_INTERVAL_DEFAULT; tc->username = gconf_client_get_string(gconf, TRG_GCONF_KEY_USERNAME, &error); diff --git a/src/trg-main-window.c b/src/trg-main-window.c index af6b048..f681de5 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -97,6 +97,8 @@ static void reannounce_cb(GtkWidget * w, gpointer data); static void pause_cb(GtkWidget * w, gpointer data); static void resume_cb(GtkWidget * w, gpointer data); static void remove_cb(GtkWidget * w, gpointer data); +static void resume_all_cb(GtkWidget * w, gpointer data); +static void pause_all_cb(GtkWidget * w, gpointer data); static void move_cb(GtkWidget * w, gpointer data); static void delete_cb(GtkWidget * w, gpointer data); static void open_props_cb(GtkWidget * w, gpointer data); @@ -397,6 +399,15 @@ static void pause_cb(GtkWidget * w G_GNUC_UNUSED, gpointer data) on_generic_interactive_action, data); } +static void pause_all_cb(GtkWidget * w G_GNUC_UNUSED, gpointer data) +{ + TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(data); + + dispatch_async(priv->client, + torrent_pause(NULL), + on_generic_interactive_action, data); +} + gboolean trg_add_from_filename(TrgMainWindow * win, gchar * fileName) { TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(win); @@ -425,6 +436,16 @@ gboolean trg_add_from_filename(TrgMainWindow * win, gchar * fileName) return FALSE; } +static void resume_all_cb(GtkWidget *w G_GNUC_UNUSED, gpointer data) +{ + TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(data); + + g_printf("%s\n", __func__); + dispatch_async(priv->client, + torrent_start(NULL), + on_generic_interactive_action, data); +} + static void resume_cb(GtkWidget * w G_GNUC_UNUSED, gpointer data) { TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(data); @@ -1512,6 +1533,7 @@ trg_status_icon_view_menu(GtkStatusIcon * icon G_GNUC_UNUSED, trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Add"), GTK_STOCK_ADD, connected, G_CALLBACK(add_cb), data); + trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Add from URL"), GTK_STOCK_ADD, connected, G_CALLBACK(add_url_cb), data); @@ -1526,11 +1548,19 @@ trg_status_icon_view_menu(GtkStatusIcon * icon G_GNUC_UNUSED, _("Up Limit"), SGET_SPEED_LIMIT_UP_ENABLED, SGET_SPEED_LIMIT_UP, NULL)); + + trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Resume All"), + GTK_STOCK_MEDIA_PLAY, connected, + G_CALLBACK(resume_all_cb), data); + + trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Pause All"), + GTK_STOCK_MEDIA_PAUSE, connected, + G_CALLBACK(pause_all_cb), data); } gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); - trg_imagemenuitem_new(GTK_MENU_SHELL(menu), "Quit", GTK_STOCK_QUIT, + trg_imagemenuitem_new(GTK_MENU_SHELL(menu), _("Quit"), GTK_STOCK_QUIT, TRUE, G_CALLBACK(quit_cb), data); gtk_widget_show_all(menu); diff --git a/src/trg-preferences-dialog.c b/src/trg-preferences-dialog.c index 6adf26c..d3c7979 100644 --- a/src/trg-preferences-dialog.c +++ b/src/trg-preferences-dialog.c @@ -32,6 +32,7 @@ #include "trg-json-widgets.h" #include "trg-main-window.h" #include "trg-preferences.h" +#include "util.h" #define TRG_PREFERENCES_DIALOG_GET_PRIVATE(object) \ (G_TYPE_INSTANCE_GET_PRIVATE ((object), TRG_TYPE_PREFERENCES_DIALOG, TrgPreferencesDialogPrivate)) @@ -151,12 +152,11 @@ static void spun_cb_int(GtkWidget * widget, gpointer gconf) } static GtkWidget *new_spin_button(GConfClient * gconf, - const char *key, - int low, int high, int step) + const gchar *key, + int low, int high, int step, int deflt) { GtkWidget *w; gint currentValue; - GError *error = NULL; w = gtk_spin_button_new_with_range(low, high, step); g_object_set_data_full(G_OBJECT(w), GCONF_OBJECT_KEY, @@ -164,14 +164,9 @@ static GtkWidget *new_spin_button(GConfClient * gconf, gtk_spin_button_set_digits(GTK_SPIN_BUTTON(w), 0); - currentValue = gconf_client_get_int(gconf, key, &error); + currentValue = gconf_client_get_int_or_default(gconf, key, deflt, NULL); - if (error != NULL) { - g_error_free(error); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), 9091); - } else { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), currentValue); - } + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), currentValue); g_signal_connect(w, "value-changed", G_CALLBACK(spun_cb_int), gconf); @@ -338,7 +333,7 @@ static GtkWidget *trg_prefs_serverPage(GConfClient * gconf, w = new_entry(gconf, TRG_GCONF_KEY_HOSTNAME); hig_workarea_add_row(t, &row, _("Host:"), w, NULL); - w = new_spin_button(gconf, TRG_GCONF_KEY_PORT, 1, 65535, 1); + w = new_spin_button(gconf, TRG_GCONF_KEY_PORT, 1, 65535, 1, TRG_PORT_DEFAULT); hig_workarea_add_row(t, &row, _("Port:"), w, NULL); w = new_check_button(gconf, _("Automatically connect"), @@ -348,7 +343,7 @@ static GtkWidget *trg_prefs_serverPage(GConfClient * gconf, w = new_check_button(gconf, _("SSL"), TRG_GCONF_KEY_SSL); hig_workarea_add_wide_control(t, &row, w); - w = new_spin_button(gconf, TRG_GCONF_KEY_UPDATE_INTERVAL, 1, 60, 1); + w = new_spin_button(gconf, TRG_GCONF_KEY_UPDATE_INTERVAL, 1, 60, 1, TRG_INTERVAL_DEFAULT); g_signal_connect(w, "value-changed", G_CALLBACK(interval_changed_cb), client); hig_workarea_add_row(t, &row, _("Update interval:"), w, NULL); diff --git a/src/trg-preferences.h b/src/trg-preferences.h index a58b7e2..f04657f 100644 --- a/src/trg-preferences.h +++ b/src/trg-preferences.h @@ -20,6 +20,8 @@ #ifndef TRG_PREFERENCES_H_ #define TRG_PREFERENCES_H_ +#define TRG_PORT_DEFAULT 9091 +#define TRG_INTERVAL_DEFAULT 3 #define TRG_GCONF_KEY_HOSTNAME "/apps/transmission-remote-gtk/hostname" #define TRG_GCONF_KEY_PORT "/apps/transmission-remote-gtk/port" #define TRG_GCONF_KEY_USERNAME "/apps/transmission-remote-gtk/username" @@ -86,6 +86,19 @@ void trg_error_dialog(GtkWindow * parent, int status, g_free((gpointer) msg); } +gint gconf_client_get_int_or_default(GConfClient * gconf, const gchar *key, int deflt, GError **error) +{ + GConfValue *value = gconf_client_get_without_default(gconf, key, error); + gint ret; + if (value) { + ret = gconf_value_get_int(value); + gconf_value_free(value); + } else { + ret = deflt; + } + return ret; +} + gboolean gconf_client_get_bool_or_true(GConfClient * gconf, gchar * key) { GError *error = NULL; @@ -43,6 +43,7 @@ void g_str_slist_free(GSList * list); GRegex *trg_uri_host_regex_new(void); gchar *trg_gregex_get_first(GRegex * rx, const gchar * uri); gboolean gconf_client_get_bool_or_true(GConfClient * gconf, gchar * key); +gint gconf_client_get_int_or_default(GConfClient * gconf, const gchar *key, int deflt, GError **error); void response_unref(JsonObject * response); const gchar *make_error_message(JsonObject * response, int status); |