summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-10-08 14:48:37 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-10-08 14:48:37 +0000
commit2666ffa57e07af60aea441257d1bb0f78368e231 (patch)
tree3b1c0a65f5c3ca82095d5a44b44e03f6772c143f
parent7383e38379586e4d2f85a8f2906b14e19501860b (diff)
add profiles to menu. disable downloading metadata stuff until I find a better way to detect/handle magnet torrents.
-rw-r--r--src/torrent.c16
-rw-r--r--src/trg-main-window.c11
-rw-r--r--src/trg-menu-bar.c62
-rw-r--r--src/trg-menu-bar.h2
-rw-r--r--src/trg-torrent-tree-view.c1
5 files changed, 63 insertions, 29 deletions
diff --git a/src/torrent.c b/src/torrent.c
index 33e7a41..4510f64 100644
--- a/src/torrent.c
+++ b/src/torrent.c
@@ -226,8 +226,8 @@ guint32 torrent_get_flags(JsonObject * t, gint64 rpcv, gint64 status, gint64 dow
if (!(flags & TORRENT_FLAG_COMPLETE))
flags |= TORRENT_FLAG_DOWNLOADING;
- if (torrent_get_metadata_percent_complete(t) < 100)
- flags |= TORRENT_FLAG_DOWNLOADING_METADATA;
+ //if (torrent_get_metadata_percent_complete(t) < 100)
+ // flags |= TORRENT_FLAG_DOWNLOADING_METADATA;
flags |= TORRENT_FLAG_ACTIVE;
break;
@@ -273,8 +273,8 @@ gchar *torrent_get_status_icon(gint64 rpcv, guint flags)
{
if (flags & TORRENT_FLAG_ERROR)
return g_strdup(GTK_STOCK_DIALOG_WARNING);
- else if (flags & TORRENT_FLAG_DOWNLOADING_METADATA)
- return g_strdup(GTK_STOCK_FIND);
+ //else if (flags & TORRENT_FLAG_DOWNLOADING_METADATA)
+ // return g_strdup(GTK_STOCK_FIND);
else if (flags & TORRENT_FLAG_DOWNLOADING)
return g_strdup(GTK_STOCK_GO_DOWN);
else if (flags & TORRENT_FLAG_PAUSED)
@@ -303,9 +303,9 @@ gchar *torrent_get_status_string(gint64 rpcv, gint64 value, guint flags)
{
switch (value) {
case TR_STATUS_DOWNLOAD:
- if (flags & TORRENT_FLAG_DOWNLOADING_METADATA)
+ /*if (flags & TORRENT_FLAG_DOWNLOADING_METADATA)
return g_strdup(_("Metadata Downloading"));
- else
+ else*/
return g_strdup(_("Downloading"));
case TR_STATUS_DOWNLOAD_WAIT:
return g_strdup(_("Queued download"));
@@ -325,9 +325,9 @@ gchar *torrent_get_status_string(gint64 rpcv, gint64 value, guint flags)
{
switch (value) {
case OLD_STATUS_DOWNLOADING:
- if (flags & TORRENT_FLAG_DOWNLOADING_METADATA)
+ /*if (flags & TORRENT_FLAG_DOWNLOADING_METADATA)
return g_strdup(_("Metadata Downloading"));
- else
+ else*/
return g_strdup(_("Downloading"));
case OLD_STATUS_PAUSED:
return g_strdup(_("Paused"));
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index a031d4b..02c811c 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -451,10 +451,8 @@ static void disconnect_cb(GtkWidget * w G_GNUC_UNUSED, gpointer data) {
void connect_cb(GtkWidget * w, gpointer data) {
TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(data);
TrgPrefs *prefs = trg_client_get_prefs(priv->client);
- JsonObject *profile = NULL;
-
JsonObject *currentProfile = trg_prefs_get_profile(prefs);
-
+ JsonObject *profile = NULL;
GtkWidget *dialog;
int populate_result;
@@ -1238,7 +1236,7 @@ static void quit_cb(GtkWidget * w G_GNUC_UNUSED, gpointer data) {
static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win) {
TrgMainWindowPrivate *priv = TRG_MAIN_WINDOW_GET_PRIVATE(win);
- GObject *b_connect, *b_disconnect, *b_add, *b_resume, *b_pause, *b_verify,
+ GObject *b_disconnect, *b_add, *b_resume, *b_pause, *b_verify,
*b_remove, *b_delete, *b_props, *b_local_prefs, *b_remote_prefs,
*b_about, *b_view_states, *b_view_notebook, *b_view_stats,
*b_add_url, *b_quit, *b_move, *b_reannounce, *b_pause_all,
@@ -1248,8 +1246,8 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win) {
TrgMenuBar *menuBar;
- menuBar = trg_menu_bar_new(trg_client_get_prefs(priv->client));
- g_object_get(menuBar, "connect-button", &b_connect, "disconnect-button",
+ menuBar = trg_menu_bar_new(win, trg_client_get_prefs(priv->client));
+ g_object_get(menuBar, "disconnect-button",
&b_disconnect, "add-button", &b_add, "add-url-button", &b_add_url,
"resume-button", &b_resume, "resume-all-button", &b_resume_all,
"pause-button", &b_pause, "pause-all-button", &b_pause_all,
@@ -1266,7 +1264,6 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win) {
&b_top_queue, "bottom-queue", &b_bottom_queue, "start-now",
&b_start_now, NULL);
- g_signal_connect(b_connect, "activate", G_CALLBACK(connect_cb), win);
g_signal_connect(b_disconnect, "activate",
G_CALLBACK(disconnect_cb), win);
g_signal_connect(b_add, "activate", G_CALLBACK(add_cb), win);
diff --git a/src/trg-menu-bar.c b/src/trg-menu-bar.c
index db7dff1..d5f8950 100644
--- a/src/trg-menu-bar.c
+++ b/src/trg-menu-bar.c
@@ -47,6 +47,7 @@ enum {
PROP_VIEW_NOTEBOOK_BUTTON,
PROP_QUIT,
PROP_PREFS,
+ PROP_MAIN_WINDOW,
PROP_DIR_FILTERS,
PROP_TRACKER_FILTERS,
PROP_VIEW_SHOW_GRAPH,
@@ -96,6 +97,7 @@ struct _TrgMenuBarPrivate {
GtkWidget *mb_start_now;
GtkWidget *mb_queues_seperator;
TrgPrefs *prefs;
+ TrgMainWindow *main_window;
};
void trg_menu_bar_set_supports_queues(TrgMenuBar *mb, gboolean supportsQueues)
@@ -152,6 +154,9 @@ static void trg_menu_bar_set_property(GObject * object,
case PROP_PREFS:
priv->prefs = g_value_get_object(value);
break;
+ case PROP_MAIN_WINDOW:
+ priv->main_window = g_value_get_object(value);
+ break;
}
}
@@ -242,9 +247,6 @@ trg_menu_bar_get_property(GObject * object, guint property_id,
case PROP_QUIT:
g_value_set_object(value, priv->mb_quit);
break;
- case PROP_PREFS:
- g_value_set_object(value, priv->prefs);
- break;
case PROP_DIR_FILTERS:
g_value_set_object(value, priv->mb_directory_filters);
break;
@@ -389,11 +391,13 @@ GtkWidget *trg_menu_bar_options_menu_new(TrgMenuBarPrivate * priv)
return opts;
}
-static void trg_menu_bar_file_connect_item_new(TrgMainWindow *win, GtkMenuShell *shell, const gchar *text, const gchar *stock, JsonObject *profile)
+static void trg_menu_bar_file_connect_item_new(TrgMainWindow *win, GtkMenuShell *shell, const gchar *text, gboolean checked, JsonObject *profile)
{
- GtkWidget *item = trg_menu_bar_item_new(shell, text, stock, TRUE);
+ GtkWidget *item = gtk_check_menu_item_new_with_label(text);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), checked);
g_object_set_data(G_OBJECT(item), "profile", profile);
g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(connect_cb), win);
+ gtk_menu_shell_append(shell, item);
}
GtkWidget *trg_menu_bar_file_connect_menu_new(TrgMainWindow *win, TrgPrefs *p)
@@ -414,9 +418,8 @@ GtkWidget *trg_menu_bar_file_connect_menu_new(TrgMainWindow *win, TrgPrefs *p)
name_value = _(TRG_PROFILE_NAME_DEFAULT);
}
- if (profile != currentProfile)
- trg_menu_bar_file_connect_item_new(win, GTK_MENU_SHELL(menu), name_value,
- GTK_STOCK_CONNECT, profile);
+ trg_menu_bar_file_connect_item_new(win, GTK_MENU_SHELL(menu), name_value,
+ profile == currentProfile, profile);
}
g_list_free(profiles);
@@ -429,11 +432,14 @@ GtkWidget *trg_menu_bar_file_file_menu_new(TrgMenuBarPrivate * priv)
{
GtkWidget *file = gtk_menu_item_new_with_mnemonic(_("_File"));
GtkWidget *fileMenu = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), fileMenu);
+
+ GtkWidget *connectMenu = trg_menu_bar_file_connect_menu_new(priv->main_window, priv->prefs);
priv->mb_connect =
- trg_menu_bar_item_new(GTK_MENU_SHELL(fileMenu), _("_Connect"),
+ trg_menu_bar_item_new(GTK_MENU_SHELL(fileMenu), _("Connect"),
GTK_STOCK_CONNECT, TRUE);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(priv->mb_connect), connectMenu);
+
priv->mb_disconnect =
trg_menu_bar_item_new(GTK_MENU_SHELL(fileMenu), _("_Disconnect"),
GTK_STOCK_DISCONNECT, FALSE);
@@ -448,6 +454,8 @@ GtkWidget *trg_menu_bar_file_file_menu_new(TrgMenuBarPrivate * priv)
trg_menu_bar_item_new(GTK_MENU_SHELL(fileMenu), _("_Quit"),
GTK_STOCK_QUIT, TRUE);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), fileMenu);
+
return file;
}
@@ -540,6 +548,17 @@ GtkWidget *trg_menu_bar_help_menu_new(TrgMenuBar * menuBar)
return helpMenu;
}
+static void menu_bar_refresh_menu(GtkWidget *w, gpointer data)
+{
+ TrgMenuBarPrivate *priv = TRG_MENU_BAR_GET_PRIVATE(data);
+ GtkWidget *old = gtk_menu_item_get_submenu(GTK_MENU_ITEM(priv->mb_connect));
+ GtkWidget *new = trg_menu_bar_file_connect_menu_new(priv->main_window, priv->prefs);
+
+ gtk_widget_destroy(old);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(priv->mb_connect), new);
+ gtk_widget_show_all(new);
+}
+
static GObject *trg_menu_bar_constructor(GType type,
guint n_construct_properties, GObjectConstructParam * construct_params) {
GObject *object;
@@ -560,6 +579,8 @@ static GObject *trg_menu_bar_constructor(GType type,
trg_menu_bar_view_menu_new(TRG_MENU_BAR(object)));
trg_menu_bar_help_menu_new(TRG_MENU_BAR(object));
+ g_signal_connect(G_OBJECT(priv->prefs), "pref-profile-changed", G_CALLBACK(menu_bar_refresh_menu), object);
+
return object;
}
@@ -656,15 +677,30 @@ static void trg_menu_bar_class_init(TrgMenuBarClass * klass)
G_PARAM_STATIC_NICK
|
G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property(object_class,
+ PROP_MAIN_WINDOW,
+ g_param_spec_object("mainwin",
+ "mainwin",
+ "mainwin",
+ TRG_TYPE_MAIN_WINDOW,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ |
+ G_PARAM_STATIC_NAME
+ |
+ G_PARAM_STATIC_NICK
+ |
+ G_PARAM_STATIC_BLURB));
+
}
static void trg_menu_bar_init(TrgMenuBar * self)
{
}
-TrgMenuBar *trg_menu_bar_new(TrgPrefs *prefs)
+TrgMenuBar *trg_menu_bar_new(TrgMainWindow *win, TrgPrefs *prefs)
{
return g_object_new(TRG_TYPE_MENU_BAR,
-
- "prefs", prefs, NULL);
+ "prefs", prefs,
+ "mainwin", win, NULL);
}
diff --git a/src/trg-menu-bar.h b/src/trg-menu-bar.h
index 4a2eb2c..720aa35 100644
--- a/src/trg-menu-bar.h
+++ b/src/trg-menu-bar.h
@@ -48,7 +48,7 @@ typedef struct {
GType trg_menu_bar_get_type(void);
-TrgMenuBar *trg_menu_bar_new(TrgPrefs * prefs);
+TrgMenuBar *trg_menu_bar_new(TrgMainWindow *win, TrgPrefs *prefs);
GtkWidget *trg_menu_bar_item_new(GtkMenuShell * shell, const gchar *text,
const gchar *stock_id, gboolean sensitive);
diff --git a/src/trg-torrent-tree-view.c b/src/trg-torrent-tree-view.c
index 6dd65d5..895b386 100644
--- a/src/trg-torrent-tree-view.c
+++ b/src/trg-torrent-tree-view.c
@@ -156,6 +156,7 @@ JsonArray *build_json_id_array(TrgTorrentTreeView * tv)
(GtkTreeSelectionForeachFunc)
trg_torrent_model_get_json_id_array_foreach,
ids);
+
return ids;
}