From: phantomjinx <pha...@us...> - 2011-10-15 22:13:36
|
commit 4a8e05a983f0177f1904bde4ea560d5aa43d89b5 Author: phantomjinx <p.g...@ph...> Date: Sat Oct 15 23:11:51 2011 +0100 Fix the track display sorting functionality * plugin.c * The tm_autostore preference has to be set in order to modify the playlists on the ipod. Ensure this is set to TRUE by default if not set. * display_tracks.c * tm_rows_reordered was being called when the sort order signal callback was tripped. However, this signal is fired BEFORE the new sort order has been set so instead calling tm_rows_ordered as an idle process ensures the signal has completed first and the model updated. * The sort order is correctly updated and reflected in the ipod playlist. * track_display_preferences.c * Adds a checkbox to the track display preferences so that the tm_autostore preference can be switched on and off. Fixes task #83 - Carry sort order through to tracks on ipod plugins/track_display/display_tracks.c | 161 ++++++---- plugins/track_display/plugin.c | 2 +- plugins/track_display/track_display.xml | 359 ++++++++++++++------- plugins/track_display/track_display_preferences.c | 10 + 4 files changed, 342 insertions(+), 190 deletions(-) --- diff --git a/plugins/track_display/display_tracks.c b/plugins/track_display/display_tracks.c index 5c733be..ad69b22 100644 --- a/plugins/track_display/display_tracks.c +++ b/plugins/track_display/display_tracks.c @@ -1113,78 +1113,93 @@ void tm_rows_reordered(void) { g_return_if_fail (track_treeview); current_pl = gtkpod_get_current_playlist(); - if (current_pl) { - GtkTreeModel *tm = NULL; - GtkTreeIter i; - GList *new_list = NULL, *old_pos_l = NULL; - gboolean valid = FALSE; - GList *nlp, *olp; - gboolean changed = FALSE; - iTunesDB *itdb = NULL; - - tm = gtk_tree_view_get_model(track_treeview); - g_return_if_fail (tm); - - valid = gtk_tree_model_get_iter_first(tm, &i); - while (valid) { - Track *new_track; - gint old_position; - - gtk_tree_model_get(tm, &i, READOUT_COL, &new_track, -1); - g_return_if_fail (new_track); - - if (!itdb) - itdb = new_track->itdb; - new_list = g_list_append(new_list, new_track); - /* what position was this track in before? */ - old_position = g_list_index(current_pl->members, new_track); - /* check if we already used this position before (can - happen if track has been added to playlist more than - once */ - while ((old_position != -1) && g_list_find(old_pos_l, GINT_TO_POINTER(old_position))) { /* find next occurence */ - GList *link; - gint next; - link = g_list_nth(current_pl->members, old_position + 1); - next = g_list_index(link, new_track); - if (next == -1) - old_position = -1; - else - old_position += (1 + next); - } - /* we make a sorted list of the old positions */ - old_pos_l = g_list_insert_sorted(old_pos_l, GINT_TO_POINTER(old_position), comp_int); - valid = gtk_tree_model_iter_next(tm, &i); + if (! current_pl) + return; + + GtkTreeModel *tm = NULL; + GtkTreeIter i; + GList *new_list = NULL, *old_pos_l = NULL; + gboolean valid = FALSE; + GList *nlp, *olp; + gboolean changed = FALSE; + iTunesDB *itdb = NULL; + + tm = gtk_tree_view_get_model(track_treeview); + g_return_if_fail (tm); + + valid = gtk_tree_model_get_iter_first(tm, &i); + while (valid) { + Track *new_track; + gint old_position; + + gtk_tree_model_get(tm, &i, READOUT_COL, &new_track, -1); + g_return_if_fail (new_track); + + if (!itdb) + itdb = new_track->itdb; + + new_list = g_list_append(new_list, new_track); + /* what position was this track in before? */ + old_position = g_list_index(current_pl->members, new_track); + /* + * check if we already used this position before (can + * happen if track has been added to playlist more than + * once + */ + while ((old_position != -1) && g_list_find(old_pos_l, GINT_TO_POINTER(old_position))) { + /* find next occurence */ + GList *link; + gint next; + link = g_list_nth(current_pl->members, old_position + 1); + next = g_list_index(link, new_track); + if (next == -1) + old_position = -1; + else + old_position += (1 + next); } - nlp = new_list; - olp = old_pos_l; - while (nlp && olp) { - GList *old_link; - guint position = GPOINTER_TO_INT(olp->data); - - /* if position == -1 one of the tracks in the track view - could not be found in the selected playlist -> stop! */ - if (position == -1) { - g_warning ("Programming error: tm_rows_reordered_callback: track in track view was not in selected playlist\n"); - g_return_if_reached (); - } - old_link = g_list_nth(current_pl->members, position); - /* replace old track with new track */ - if (old_link->data != nlp->data) { - old_link->data = nlp->data; - changed = TRUE; - } - /* next */ - nlp = nlp->next; - olp = olp->next; + /* we make a sorted list of the old positions */ + old_pos_l = g_list_insert_sorted(old_pos_l, GINT_TO_POINTER(old_position), comp_int); + valid = gtk_tree_model_iter_next(tm, &i); + } + + nlp = new_list; + olp = old_pos_l; + while (nlp && olp) { + GList *old_link; + guint position = GPOINTER_TO_INT(olp->data); + + /* + * if position == -1 one of the tracks in the track view + * could not be found in the selected playlist -> stop! + */ + if (position == -1) { + g_warning ("Programming error: tm_rows_reordered_callback: track in track view was not in selected playlist\n"); + g_return_if_reached (); } - g_list_free(new_list); - g_list_free(old_pos_l); - /* if we changed data, mark data as changed and adopt order in - sort tabs */ - if (changed) { - data_changed(itdb); + old_link = g_list_nth(current_pl->members, position); + /* replace old track with new track */ + if (old_link->data != nlp->data) { + old_link->data = nlp->data; + changed = TRUE; } + /* next */ + nlp = nlp->next; + olp = olp->next; } + g_list_free(new_list); + g_list_free(old_pos_l); + + /* + * if we changed data, mark data as changed and adopt order + * in sort tabs + */ + if (changed) + data_changed(itdb); +} + +static gboolean tm_rows_reordered_idle_callback (gpointer user_data) { + tm_rows_reordered(); + return FALSE; } static void on_trackids_list_foreach(GtkTreeModel *tm, GtkTreePath *tp, GtkTreeIter *i, gpointer data) { @@ -1697,8 +1712,14 @@ static void tm_sort_column_changed(GtkTreeSortable *ts, gpointer user_data) { tm_set_search_column(newcol); - if (prefs_get_int("tm_autostore")) - tm_rows_reordered(); + if (prefs_get_int("tm_autostore")) { + /* + * Once this signal callback has finished will the model + * be resorted. At that point will we updated the + * selected playlist with the new track order. + */ + g_idle_add(tm_rows_reordered_idle_callback, NULL); + } /* stable sorting: index original order */ tracks = tm_get_all_tracks(); diff --git a/plugins/track_display/plugin.c b/plugins/track_display/plugin.c index 8d24f87..69b0634 100644 --- a/plugins/track_display/plugin.c +++ b/plugins/track_display/plugin.c @@ -86,7 +86,7 @@ static void set_default_preferences() { } if (!prefs_get_int_value("tm_autostore", NULL)) - prefs_set_int("tm_autostore", FALSE); + prefs_set_int("tm_autostore", TRUE); if (!prefs_get_int_value("tm_sortcol", NULL)) prefs_set_int("tm_sortcol", TM_COLUMN_TITLE); diff --git a/plugins/track_display/track_display.xml b/plugins/track_display/track_display.xml index bf7efc4..e73eb30 100644 --- a/plugins/track_display/track_display.xml +++ b/plugins/track_display/track_display.xml @@ -1,26 +1,36 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <interface> <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkWindow" id="track_display_window"> - <child> - <object class="GtkVBox" id="track_display_vbox"> + <object class="GtkDialog" id="prefs_columns_dialog"> + <property name="can_focus">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="border_width">5</property> + <property name="title" translatable="yes">Add Column</property> + <property name="modal">True</property> + <property name="window_position">center-on-parent</property> + <property name="default_width">300</property> + <property name="default_height">400</property> + <property name="type_hint">dialog</property> + <property name="skip_taskbar_hint">True</property> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox6"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="can_focus">False</property> <property name="orientation">vertical</property> - <child> - <object class="GtkHBox" id="searchbar_hpanel"> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area6"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="border_width">6</property> - <property name="spacing">6</property> + <property name="can_focus">False</property> + <property name="layout_style">end</property> <child> - <object class="GtkLabel" id="current_playlist_label"> + <object class="GtkButton" id="cancel_button2"> + <property name="label">gtk-cancel</property> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><span weight='bold' size='larger'>No playlist selected</span></property> - <property name="use_markup">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> @@ -29,70 +39,39 @@ </packing> </child> <child> - <object class="GtkEntry" id="search_entry"> + <object class="GtkButton" id="add_button"> + <property name="label">gtk-add</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="invisible_char">●</property> - <property name="width_chars">20</property> - <property name="primary_icon_stock">gtk-find</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> + <property name="fill">True</property> + <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkScrolledWindow" id="track_window"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - </object> - <object class="GtkDialog" id="prefs_columns_dialog"> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="border_width">5</property> - <property name="title" translatable="yes">Add Column</property> - <property name="modal">True</property> - <property name="window_position">center-on-parent</property> - <property name="default_width">300</property> - <property name="default_height">400</property> - <property name="type_hint">dialog</property> - <property name="skip_taskbar_hint">True</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox6"> - <property name="visible">True</property> - <property name="orientation">vertical</property> - <property name="spacing">2</property> - <child> <object class="GtkFrame" id="frame14"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="border_width">7</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="alignment28"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="top_padding">6</property> <property name="left_padding">12</property> <child> @@ -100,7 +79,6 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">automatic</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="available_columns"> @@ -109,6 +87,9 @@ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="headers_visible">False</property> <property name="rules_hint">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"/> + </child> </object> </child> </object> @@ -118,52 +99,16 @@ <child type="label"> <object class="GtkLabel" id="label27"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label" translatable="yes"><b>Available Columns</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> - <property name="position">1</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area6"> - <property name="visible">True</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="cancel_button2"> - <property name="label">gtk-cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="add_button"> - <property name="label">gtk-add</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> <property name="expand">False</property> - <property name="pack_type">end</property> - <property name="position">0</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> @@ -174,6 +119,7 @@ </action-widgets> </object> <object class="GtkWindow" id="prefs_window"> + <property name="can_focus">False</property> <child> <object class="GtkNotebook" id="track_settings_notebook"> <property name="visible">True</property> @@ -181,35 +127,37 @@ <child> <object class="GtkVBox" id="vbox5"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="border_width">12</property> - <property name="orientation">vertical</property> - <property name="spacing">40</property> + <property name="spacing">20</property> <child> <object class="GtkFrame" id="frame5"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="alignment14"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="top_padding">6</property> <property name="left_padding">12</property> <child> <object class="GtkVBox" id="vbox46"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkHBox" id="hbox3"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkScrolledWindow" id="scrolledwindow1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">automatic</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="displayed_columns"> @@ -219,17 +167,22 @@ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="headers_visible">False</property> <property name="rules_hint">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection2"/> + </child> </object> </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkVButtonBox" id="vbuttonbox2"> <property name="visible">True</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <property name="layout_style">spread</property> <child> @@ -238,8 +191,9 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> <property name="use_stock">True</property> - <signal name="clicked" handler="on_column_add_clicked"/> + <signal name="clicked" handler="on_column_add_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -253,8 +207,9 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> <property name="use_stock">True</property> - <signal name="clicked" handler="on_column_remove_clicked"/> + <signal name="clicked" handler="on_column_remove_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -271,6 +226,8 @@ </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">0</property> </packing> </child> @@ -282,13 +239,73 @@ <property name="receives_default">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="halign">start</property> + <property name="use_action_appearance">False</property> <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_horizontal_scrollbar_toggled"/> + <signal name="toggled" handler="on_horizontal_scrollbar_toggled" swapped="no"/> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">1</property> </packing> </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes"><b>Displayed Columns</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="left_padding">12</property> + <child> + <object class="GtkBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkCheckButton" id="tm_cfg_autostore"> + <property name="label" translatable="yes">Modify selected tracks sort order in selected playlist</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="has_tooltip">True</property> + <property name="tooltip_markup" translatable="yes">if checked, the sort order of the displayed tracks will be applied to the selected playlist.</property> + <property name="tooltip_text" translatable="yes">if checked, the sort order of the displayed tracks will be applied to the selected playlist.</property> + <property name="halign">start</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_tm_sort_autostore_toggled" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> <child> <object class="GtkCheckButton" id="tm_cfg_case_sensitive"> <property name="label" translatable="yes">Case sensitive sorting</property> @@ -296,16 +313,19 @@ <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="has_tooltip">True</property> + <property name="tooltip_markup" translatable="yes">If checked, sorting will be case sensitive. Please note that case sensitive sorting will not work well with most charsets.</property> <property name="tooltip_text" translatable="yes">If checked, sorting will be case sensitive. Please note that case sensitive sorting will not work well with most charsets.</property> <property name="halign">start</property> + <property name="use_action_appearance">False</property> <property name="use_underline">True</property> + <property name="xalign">0</property> <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_tm_sort_case_sensitive_toggled"/> + <signal name="toggled" handler="on_tm_sort_case_sensitive_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> @@ -313,43 +333,47 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label7"> + <object class="GtkLabel" id="label3"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Displayed Columns</b></property> + <property name="can_focus">False</property> + <property name="label" translatable="yes"><b>Sorting Options</b></property> <property name="use_markup">True</property> </object> </child> </object> <packing> <property name="expand">False</property> - <property name="position">0</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> <child> <object class="GtkFrame" id="frame2"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="alignment2"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="top_padding">6</property> <property name="left_padding">12</property> <child> <object class="GtkVBox" id="vbox137"> <property name="visible">True</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkHBox" id="hbox1"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkScrolledWindow" id="scrolledwindow15"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">automatic</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="ign_words_view"> @@ -358,17 +382,22 @@ <property name="can_focus">True</property> <property name="headers_visible">False</property> <property name="headers_clickable">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection3"/> + </child> </object> </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkVButtonBox" id="vbuttonbox1"> <property name="visible">True</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <property name="layout_style">spread</property> <child> @@ -377,8 +406,9 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> <property name="use_stock">True</property> - <signal name="clicked" handler="on_ign_word_add_clicked"/> + <signal name="clicked" handler="on_ign_word_add_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -392,8 +422,9 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> <property name="use_stock">True</property> - <signal name="clicked" handler="on_ign_word_remove_clicked"/> + <signal name="clicked" handler="on_ign_word_remove_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -410,6 +441,8 @@ </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">0</property> </packing> </child> @@ -429,17 +462,19 @@ <child> <object class="GtkHBox" id="hbox158"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="spacing">12</property> <child> <object class="GtkVBox" id="vbox138"> <property name="visible">True</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkCheckButton" id="sort_ign_field_3"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> <property name="draw_indicator">True</property> </object> <packing> @@ -453,6 +488,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> <property name="draw_indicator">True</property> </object> <packing> @@ -469,19 +505,22 @@ </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkVBox" id="vbox139"> <property name="visible">True</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <child> <object class="GtkCheckButton" id="sort_ign_field_2"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> <property name="draw_indicator">True</property> </object> <packing> @@ -495,6 +534,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> <property name="draw_indicator">True</property> </object> <packing> @@ -511,13 +551,15 @@ </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkVBox" id="vbox140"> <property name="visible">True</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <child> <placeholder/> @@ -533,6 +575,8 @@ </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">2</property> </packing> </child> @@ -550,6 +594,7 @@ <child type="label"> <object class="GtkLabel" id="label2"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label" translatable="yes"><b>Ignore Frequent Words</b></property> <property name="use_markup">True</property> </object> @@ -557,21 +602,25 @@ </object> <packing> <property name="expand">False</property> - <property name="position">1</property> + <property name="fill">True</property> + <property name="position">2</property> </packing> </child> <child> <object class="GtkFrame" id="frame1"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="alignment1"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="left_padding">12</property> <child> <object class="GtkComboBox" id="track_exec_cmd_combo"> <property name="visible">True</property> + <property name="can_focus">False</property> </object> </child> </object> @@ -579,6 +628,7 @@ <child type="label"> <object class="GtkLabel" id="label1"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label" translatable="yes"><b>Preferred Track Execution Command</b></property> <property name="use_markup">True</property> </object> @@ -587,7 +637,7 @@ <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">2</property> + <property name="position">3</property> </packing> </child> </object> @@ -595,6 +645,7 @@ <child type="tab"> <object class="GtkLabel" id="display_page_label"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label" translatable="yes">Track Display</property> </object> <packing> @@ -604,4 +655,74 @@ </object> </child> </object> + <object class="GtkWindow" id="track_display_window"> + <property name="can_focus">False</property> + <child> + <object class="GtkVBox" id="track_display_vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <object class="GtkHBox" id="searchbar_hpanel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="border_width">6</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="current_playlist_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><span weight='bold' size='larger'>No playlist selected</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="search_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="invisible_char">●</property> + <property name="width_chars">20</property> + <property name="primary_icon_stock">gtk-find</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="track_window"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> </interface> diff --git a/plugins/track_display/track_display_preferences.c b/plugins/track_display/track_display_preferences.c index db2f263..8bec59b 100644 --- a/plugins/track_display/track_display_preferences.c +++ b/plugins/track_display/track_display_preferences.c @@ -419,6 +419,12 @@ G_MODULE_EXPORT void on_tm_sort_case_sensitive_toggled(GtkToggleButton *togglebu gtkpod_broadcast_preference_change("tm_case_sensitive", &val); } +G_MODULE_EXPORT void on_tm_sort_autostore_toggled(GtkToggleButton *togglebutton, gpointer user_data) { + gboolean val = gtk_toggle_button_get_active(togglebutton); + prefs_set_int("tm_autostore", val); + gtkpod_broadcast_preference_change("tm_autostore", &val); +} + GtkWidget *init_track_display_preferences() { GtkComboBox *cmd_combo; gint i = 0; @@ -461,6 +467,10 @@ GtkWidget *init_track_display_preferences() { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), prefs_get_int("tm_case_sensitive")); } + if ((w = gtkpod_builder_xml_get_widget(prefbuilder, "tm_cfg_autostore"))) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), prefs_get_int("tm_autostore")); + } + gtk_builder_connect_signals(prefbuilder, NULL); return notebook; |