From fb8d0deab9df49443f6f9a44be4f3e89ef7be15f Mon Sep 17 00:00:00 2001 From: DriverXX Date: Wed, 9 Mar 2016 00:39:24 +0100 Subject: Add directory first options --- src/trg-main-window.c | 18 +++++++++++++++--- src/trg-menu-bar.c | 15 +++++++++++++++ src/trg-preferences-dialog.c | 14 ++++++++++++++ src/trg-prefs.c | 1 + src/trg-prefs.h | 1 + src/trg-state-selector.c | 36 +++++++++++++++++++++++++++--------- src/trg-state-selector.h | 1 + 7 files changed, 74 insertions(+), 12 deletions(-) (limited to 'src') 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); -- cgit v1.2.3