summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar DriverXX <thegio.f@gmail.com>2016-03-09 00:39:24 +0100
committerGravatar DriverXX <thegio.f@gmail.com>2016-03-09 00:39:24 +0100
commitfb8d0deab9df49443f6f9a44be4f3e89ef7be15f (patch)
treee6c072f15b51143325d8c0dbd79f1e987444bc17
parent478aeb72f3d36eb164f9b831960a8a6d04e96807 (diff)
Add directory first options
-rw-r--r--src/trg-main-window.c18
-rw-r--r--src/trg-menu-bar.c15
-rw-r--r--src/trg-preferences-dialog.c14
-rw-r--r--src/trg-prefs.c1
-rw-r--r--src/trg-prefs.h1
-rw-r--r--src/trg-state-selector.c36
-rw-r--r--src/trg-state-selector.h1
7 files changed, 74 insertions, 12 deletions
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index 48b9d6e..72ee1c3 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -680,6 +680,16 @@ main_window_toggle_filter_trackers(GtkCheckMenuItem * w, gpointer data)
(w));
}
+static void
+main_window_toggle_directories_first(GtkCheckMenuItem * w, gpointer data){
+ TrgMainWindow *win = TRG_MAIN_WINDOW(data);
+ TrgMainWindowPrivate *priv = trg_main_window_get_instance_private(win);
+
+ if (gtk_widget_is_sensitive(GTK_WIDGET(w)))
+ trg_state_selector_set_directories_first(priv->stateSelector,
+ gtk_check_menu_item_get_active(w));
+}
+
static TrgToolbar *trg_main_window_toolbar_new(TrgMainWindow * win)
{
TrgMainWindowPrivate *priv = trg_main_window_get_instance_private(win);
@@ -1767,8 +1777,8 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win)
*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,
- *b_resume_all, *b_dir_filters, *b_tracker_filters, *b_up_queue,
- *b_down_queue, *b_top_queue, *b_bottom_queue,
+ *b_resume_all, *b_dir_filters, *b_tracker_filters, *b_directories_first,
+ *b_up_queue, *b_down_queue, *b_top_queue, *b_bottom_queue,
#if TRG_WITH_GRAPH
*b_show_graph,
#endif
@@ -1799,7 +1809,7 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win)
"view-states-button", &b_view_states, "view-stats-button",
&b_view_stats, "about-button", &b_about, "quit-button",
&b_quit, "dir-filters", &b_dir_filters, "tracker-filters",
- &b_tracker_filters,
+ &b_tracker_filters, TRG_PREFS_KEY_DIRECTORIES_FIRST, &b_directories_first,
#if TRG_WITH_GRAPH
"show-graph", &b_show_graph,
#endif
@@ -1846,6 +1856,8 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win)
G_CALLBACK(main_window_toggle_filter_dirs), win);
g_signal_connect(b_tracker_filters, "toggled",
G_CALLBACK(main_window_toggle_filter_trackers), win);
+ g_signal_connect(b_directories_first, "toggled",
+ G_CALLBACK(main_window_toggle_directories_first), win);
g_signal_connect(b_view_states, "toggled",
G_CALLBACK(view_states_toggled_cb), win);
g_signal_connect(b_view_stats, "activate",
diff --git a/src/trg-menu-bar.c b/src/trg-menu-bar.c
index b44da6b..e11995a 100644
--- a/src/trg-menu-bar.c
+++ b/src/trg-menu-bar.c
@@ -65,6 +65,7 @@ enum {
PROP_ACCEL_GROUP,
PROP_DIR_FILTERS,
PROP_TRACKER_FILTERS,
+ PROP_DIRECTORIES_FIRST,
#if TRG_WITH_GRAPH
PROP_VIEW_SHOW_GRAPH,
#endif
@@ -110,6 +111,7 @@ struct _TrgMenuBarPrivate {
GtkWidget *mb_quit;
GtkWidget *mb_directory_filters;
GtkWidget *mb_tracker_filters;
+ GtkWidget *mb_directory_first;
#if TRG_WITH_GRAPH
GtkWidget *mb_view_graph;
#endif
@@ -300,6 +302,9 @@ trg_menu_bar_get_property(GObject * object, guint property_id,
case PROP_TRACKER_FILTERS:
g_value_set_object(value, priv->mb_tracker_filters);
break;
+ case PROP_DIRECTORIES_FIRST:
+ g_value_set_object(value, priv->mb_directory_first);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
@@ -538,6 +543,14 @@ static GtkWidget *trg_menu_bar_view_menu_new(TrgMenuBar * mb)
gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu),
priv->mb_tracker_filters);
+ priv->mb_directory_first =
+ trg_menu_bar_view_item_new(priv->prefs,
+ TRG_PREFS_KEY_DIRECTORIES_FIRST,
+ _("Directories first"),
+ priv->mb_view_states);
+ gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu),
+ priv->mb_directory_first);
+
priv->mb_view_notebook =
trg_menu_bar_view_item_new(priv->prefs,
TRG_PREFS_KEY_SHOW_NOTEBOOK,
@@ -921,6 +934,8 @@ static void trg_menu_bar_class_init(TrgMenuBarClass * klass)
"dir-filters", "Dir Filters");
trg_menu_bar_install_widget_prop(object_class, PROP_TRACKER_FILTERS,
"tracker-filters", "Tracker Filters");
+ trg_menu_bar_install_widget_prop(object_class, PROP_DIRECTORIES_FIRST,
+ TRG_PREFS_KEY_DIRECTORIES_FIRST, "Directories first");
#if TRG_WITH_GRAPH
trg_menu_bar_install_widget_prop(object_class, PROP_VIEW_SHOW_GRAPH,
"show-graph", "Show Graph");
diff --git a/src/trg-preferences-dialog.c b/src/trg-preferences-dialog.c
index 90c4123..6a0df94 100644
--- a/src/trg-preferences-dialog.c
+++ b/src/trg-preferences-dialog.c
@@ -330,6 +330,13 @@ static void toggle_filter_trackers(GtkToggleButton * w, gpointer win)
gtk_toggle_button_get_active(w));
}
+static void toggle_directories_first(GtkToggleButton * w, gpointer win){
+ TrgStateSelector *selector =
+ trg_main_window_get_state_selector(TRG_MAIN_WINDOW(win));
+ trg_state_selector_set_directories_first(selector,
+ gtk_toggle_button_get_active(w));
+}
+
#if TRG_WITH_GRAPH
static void toggle_graph(GtkToggleButton * w, gpointer win)
{
@@ -729,6 +736,13 @@ static GtkWidget *trg_prefs_viewPage(TrgPreferencesDialog * dlg)
G_CALLBACK(toggle_filter_trackers), priv->win);
hig_workarea_add_wide_control(t, &row, w);
+ w = trgp_check_new(dlg, _("Directories first"),
+ TRG_PREFS_KEY_DIRECTORIES_FIRST, TRG_PREFS_GLOBAL,
+ GTK_TOGGLE_BUTTON(dep));
+ g_signal_connect(G_OBJECT(w), "toggled",
+ G_CALLBACK(toggle_directories_first), priv->win);
+ hig_workarea_add_wide_control(t, &row, w);
+
w = trgp_check_new(dlg, _("Torrent Details"),
TRG_PREFS_KEY_SHOW_NOTEBOOK, TRG_PREFS_GLOBAL,
NULL);
diff --git a/src/trg-prefs.c b/src/trg-prefs.c
index e168d07..ff6b1b8 100644
--- a/src/trg-prefs.c
+++ b/src/trg-prefs.c
@@ -110,6 +110,7 @@ static void trg_prefs_create_defaults(TrgPrefs * p)
trg_prefs_add_default_bool_true(p, TRG_PREFS_KEY_FILTER_DIRS);
trg_prefs_add_default_bool_true(p, TRG_PREFS_KEY_FILTER_TRACKERS);
+ trg_prefs_add_default_bool_true(p, TRG_PREFS_KEY_DIRECTORIES_FIRST);
trg_prefs_add_default_bool_true(p, TRG_PREFS_KEY_SHOW_GRAPH);
trg_prefs_add_default_bool_true(p, TRG_PREFS_KEY_ADD_OPTIONS_DIALOG);
trg_prefs_add_default_bool_true(p, TRG_PREFS_KEY_SHOW_STATE_SELECTOR);
diff --git a/src/trg-prefs.h b/src/trg-prefs.h
index 4245505..3923e7d 100644
--- a/src/trg-prefs.h
+++ b/src/trg-prefs.h
@@ -56,6 +56,7 @@
#define TRG_PREFS_KEY_SHOW_GRAPH "show-graph"
#define TRG_PREFS_KEY_SYSTEM_TRAY_MINIMISE "system-tray-minimise"
#define TRG_PREFS_KEY_FILTER_TRACKERS "filter-trackers"
+#define TRG_PREFS_KEY_DIRECTORIES_FIRST "directories-first"
#define TRG_PREFS_KEY_FILTER_DIRS "filter-dirs"
#define TRG_PREFS_KEY_SHOW_STATE_SELECTOR "show-state-selector"
#define TRG_PREFS_KEY_SHOW_NOTEBOOK "show-notebook"
diff --git a/src/trg-state-selector.c b/src/trg-state-selector.c
index cbfc244..4110f7b 100644
--- a/src/trg-state-selector.c
+++ b/src/trg-state-selector.c
@@ -53,6 +53,7 @@ struct _TrgStateSelectorPrivate {
guint flag;
gboolean showDirs;
gboolean showTrackers;
+ gboolean dirsFirst;
TrgClient *client;
TrgPrefs *prefs;
GHashTable *trackers;
@@ -360,10 +361,13 @@ void trg_state_selector_update(TrgStateSelector * s, guint whatsChanged)
updateSerial);
g_free(announceHost);
} else {
- trg_state_selector_insert(s, priv->n_categories,
- g_hash_table_size
- (priv->trackers),
- announceHost, &iter);
+ if (priv->dirsFirst){
+ trg_state_selector_insert(s, priv->n_categories +
+ g_hash_table_size(priv->directories), -1, announceHost, &iter);
+ } else {
+ trg_state_selector_insert(s, priv->n_categories,
+ g_hash_table_size(priv->trackers), announceHost, &iter);
+ }
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
STATE_SELECTOR_ICON,
GTK_STOCK_NETWORK,
@@ -394,11 +398,13 @@ void trg_state_selector_update(TrgStateSelector * s, guint whatsChanged)
*) result,
updateSerial);
} else {
- trg_state_selector_insert(s,
- priv->n_categories +
- g_hash_table_size
- (priv->trackers), -1, dir,
- &iter);
+ if (priv->dirsFirst){
+ trg_state_selector_insert(s, priv->n_categories,
+ g_hash_table_size(priv->directories), dir, &iter);
+ } else {
+ trg_state_selector_insert(s, priv->n_categories +
+ g_hash_table_size(priv->trackers), -1, dir, &iter);
+ }
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
STATE_SELECTOR_ICON,
GTK_STOCK_DIRECTORY,
@@ -470,6 +476,15 @@ trg_state_selector_set_show_trackers(TrgStateSelector * s, gboolean show)
trg_state_selector_update(s, TORRENT_UPDATE_ADDREMOVE);
}
+void
+trg_state_selector_set_directories_first(TrgStateSelector * s, gboolean _dirsFirst){
+ TrgStateSelectorPrivate *priv = TRG_STATE_SELECTOR_GET_PRIVATE(s);
+ priv->dirsFirst = _dirsFirst;
+ g_hash_table_remove_all(priv->directories);
+ g_hash_table_remove_all(priv->trackers);
+ trg_state_selector_update(s, TORRENT_UPDATE_ADDREMOVE);
+}
+
static void
trg_state_selector_add_state(TrgStateSelector * selector,
GtkTreeIter * iter, gint pos,
@@ -719,6 +734,9 @@ static GObject *trg_state_selector_constructor(GType type,
priv->showTrackers =
trg_prefs_get_bool(priv->prefs, TRG_PREFS_KEY_FILTER_TRACKERS,
TRG_PREFS_GLOBAL);
+ priv->dirsFirst =
+ trg_prefs_get_bool(priv->prefs, TRG_PREFS_KEY_DIRECTORIES_FIRST,
+ TRG_PREFS_GLOBAL);
return object;
}
diff --git a/src/trg-state-selector.h b/src/trg-state-selector.h
index 5107505..ece419a 100644
--- a/src/trg-state-selector.h
+++ b/src/trg-state-selector.h
@@ -71,6 +71,7 @@ GRegex *trg_state_selector_get_url_host_regex(TrgStateSelector * s);
void trg_state_selector_disconnect(TrgStateSelector * s);
void trg_state_selector_set_show_trackers(TrgStateSelector * s,
gboolean show);
+void trg_state_selector_set_directories_first(TrgStateSelector * s, gboolean _dirsFirst);
void trg_state_selector_set_show_dirs(TrgStateSelector * s, gboolean show);
void trg_state_selector_set_queues_enabled(TrgStateSelector * s,
gboolean enabled);