summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/trg-client.c7
-rw-r--r--src/trg-main-window.c32
-rw-r--r--src/trg-preferences-dialog.c19
-rw-r--r--src/trg-preferences.h2
-rw-r--r--src/util.c13
-rw-r--r--src/util.h1
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"
diff --git a/src/util.c b/src/util.c
index 15c8004..be83f7a 100644
--- a/src/util.c
+++ b/src/util.c
@@ -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;
diff --git a/src/util.h b/src/util.h
index 4da70fb..4fc09a4 100644
--- a/src/util.h
+++ b/src/util.h
@@ -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);