You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(132) |
Dec
(135) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(87) |
Feb
(82) |
Mar
(117) |
Apr
(108) |
May
(231) |
Jun
(265) |
Jul
(31) |
Aug
(32) |
Sep
(89) |
Oct
(50) |
Nov
(112) |
Dec
(92) |
2007 |
Jan
(136) |
Feb
(82) |
Mar
(66) |
Apr
(104) |
May
(74) |
Jun
(103) |
Jul
(50) |
Aug
(23) |
Sep
(22) |
Oct
(39) |
Nov
(56) |
Dec
(88) |
2008 |
Jan
(51) |
Feb
(6) |
Mar
(6) |
Apr
(9) |
May
(39) |
Jun
(24) |
Jul
(48) |
Aug
(40) |
Sep
(9) |
Oct
(21) |
Nov
(12) |
Dec
(31) |
2009 |
Jan
(68) |
Feb
(14) |
Mar
(29) |
Apr
(40) |
May
(27) |
Jun
(9) |
Jul
(1) |
Aug
(10) |
Sep
(3) |
Oct
(7) |
Nov
(11) |
Dec
(165) |
2010 |
Jan
(72) |
Feb
(49) |
Mar
(30) |
Apr
(41) |
May
(17) |
Jun
(13) |
Jul
(99) |
Aug
(88) |
Sep
(59) |
Oct
(23) |
Nov
(11) |
Dec
(44) |
2011 |
Jan
(50) |
Feb
(28) |
Mar
(27) |
Apr
(18) |
May
(38) |
Jun
(5) |
Jul
(59) |
Aug
(7) |
Sep
(44) |
Oct
(12) |
Nov
(7) |
Dec
(10) |
2012 |
Jan
(8) |
Feb
(11) |
Mar
(17) |
Apr
(11) |
May
(3) |
Jun
(11) |
Jul
(26) |
Aug
(3) |
Sep
|
Oct
(17) |
Nov
(9) |
Dec
(1) |
2013 |
Jan
|
Feb
(5) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: dforsi <df...@us...> - 2013-02-28 21:11:14
|
commit 665fe093cb053559deef0a9bc6c8d41e7ad6ca08 Author: Daniele Forsi <da...@fo...> Date: Thu Feb 28 22:07:14 2013 +0100 Fix showing tracks of selected artist on 64-bit systems The return value of gdk_threads_add_idle_full() is guint and is greater than 0; see http://developer.gnome.org/gdk/2.22/gdk-Threads.html#gdk-threads-add-idle-full Bug reported in http://sourceforge.net/mailarchive/message.php?msg_id=30490385 plugins/sorttab_display/normal_sorttab_page.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) --- diff --git a/plugins/sorttab_display/normal_sorttab_page.c b/plugins/sorttab_display/normal_sorttab_page.c index ee00304..00d9c11 100644 --- a/plugins/sorttab_display/normal_sorttab_page.c +++ b/plugins/sorttab_display/normal_sorttab_page.c @@ -41,7 +41,7 @@ #include "normal_sorttab_page.h" #include "sorttab_display_context_menu.h" -#define NO_IDLE_SELECTION_CALLBACK -1 +#define NO_IDLE_SELECTION_CALLBACK 0 G_DEFINE_TYPE( NormalSortTabPage, normal_sort_tab_page, GTK_TYPE_TREE_VIEW); @@ -570,7 +570,7 @@ static gboolean _st_selection_changed_cb(gpointer data) { static void _st_selection_changed(GtkTreeSelection *selection, gpointer user_data) { NormalSortTabPage *self = NORMAL_SORT_TAB_PAGE(user_data); - gulong idleId = NO_IDLE_SELECTION_CALLBACK; + guint idleId = NO_IDLE_SELECTION_CALLBACK; if (self) { NormalSortTabPagePrivate *priv = NORMAL_SORT_TAB_PAGE_GET_PRIVATE(self); |
From: dforsi <df...@us...> - 2013-02-28 21:11:08
|
commit d4e665b59a73d43a8a8be7d428cb1ccef9e80d96 Author: Daniele Forsi <da...@fo...> Date: Thu Feb 28 21:57:58 2013 +0100 Revert "Fix showing tracks of selected artist on 64-bit systems" This reverts commit 3732944d096943125e4a51f753644a00726acc68. plugins/sorttab_display/normal_sorttab_page.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) --- diff --git a/plugins/sorttab_display/normal_sorttab_page.c b/plugins/sorttab_display/normal_sorttab_page.c index 0fb3286..ee00304 100644 --- a/plugins/sorttab_display/normal_sorttab_page.c +++ b/plugins/sorttab_display/normal_sorttab_page.c @@ -66,7 +66,7 @@ struct _NormalSortTabPagePrivate { * Handler id of the idle callback when the selection * changed callback is executed */ - gulong selection_changed_idle_id; + guint selection_changed_idle_id; /* name of entry last selected */ GList *last_selection; |
From: dforsi <df...@us...> - 2013-02-15 17:34:27
|
commit 3732944d096943125e4a51f753644a00726acc68 Author: Benno <fw...@ro...> Date: Fri Feb 15 18:27:24 2013 +0100 Fix showing tracks of selected artist on 64-bit systems The handler_id is of type gulong (while signal_id is guint); see http://developer.gnome.org/gobject/unstable/gobject-Signals.html Bug reported in http://sourceforge.net/mailarchive/message.php?msg_id=30490385 plugins/sorttab_display/normal_sorttab_page.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) --- diff --git a/plugins/sorttab_display/normal_sorttab_page.c b/plugins/sorttab_display/normal_sorttab_page.c index ee00304..0fb3286 100644 --- a/plugins/sorttab_display/normal_sorttab_page.c +++ b/plugins/sorttab_display/normal_sorttab_page.c @@ -66,7 +66,7 @@ struct _NormalSortTabPagePrivate { * Handler id of the idle callback when the selection * changed callback is executed */ - guint selection_changed_idle_id; + gulong selection_changed_idle_id; /* name of entry last selected */ GList *last_selection; |
From: dforsi <df...@us...> - 2013-02-15 11:54:21
|
commit 881b49115e4e37174b5250fe7e4780a536762ef2 Author: Daniele Forsi <da...@fo...> Date: Fri Feb 15 12:14:24 2013 +0100 Fix possible crasher When opening the About dialog for the second time, a variable pointed to freed memory. Fixes: (lt-gtkpod:13277): Gtk-WARNING **: Failed to set text from markup due to error parsing markup: Error on line 1 char 36: Invalid UTF-8 encoded text in name - not valid ' \xc5\xc5 h\xdd\xc3 ' (lt-gtkpod:13277): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text() src/anjuta-about.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) --- diff --git a/src/anjuta-about.c b/src/anjuta-about.c index 112bbd5..988ff1b 100644 --- a/src/anjuta-about.c +++ b/src/anjuta-about.c @@ -142,6 +142,7 @@ static void about_free_credit(void) { g_free(ptr[i]); g_free(translators); + translators = NULL; } GtkWidget *about_box_new(GtkWindow *parent) { |
From: dforsi <df...@us...> - 2013-02-15 11:54:15
|
commit 0fae682cd063a62ecbf004b71a2c86e36ca5df04 Author: Daniele Forsi <da...@fo...> Date: Fri Feb 15 11:37:41 2013 +0100 Fix tabs AUTHORS | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-) --- diff --git a/AUTHORS b/AUTHORS index aa4912d..f9c096e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -69,7 +69,7 @@ es Javier Kohen <jkohen at users.sourceforge.net> sv Stefan Asserhall <stefan.asserhall at comhem dot se> -zh_CN Tan Zhixin <tan...@gm...> +zh_CN Tan Zhixin <tan...@gm...> Américo Wang <xiyou.wangcong at gmail.com> Website: @@ -81,17 +81,17 @@ Paul Richardson <phantom_sf at users dot sourceforge dot net> Note: ------------------------------------------------------------------------------- This program borrows code from the following projects - gnutools - mktunes.pl, ported to C, reading and writing - of iTunesDB <http://www.gnu.org/software/gnupod/> - + gnutools - mktunes.pl, ported to C, reading and writing + of iTunesDB <http://www.gnu.org/software/gnupod/> + iPod.cpp/h - by Samuel Wood <sam dot wood at gmail dot com> - some code for smart playlists is based on his C++-classes. - + some code for smart playlists is based on his C++-classes. + mp3info - mp3 playlength detection <http://ibiblio.org/mp3info/> - + xmms - dirbrowser, mp3 playlength detection <http://www.xmms.org> - - sound-juicer - by Ross Burton <ro...@bu...> <http://http://live.gnome.org/SoundJuicer> + + sound-juicer - by Ross Burton <ro...@bu...> <http://live.gnome.org/SoundJuicer> The GUI was created with the help of glade <http://glade.gnome.org/> and anjuta <http://projects.gnome.org/anjuta>. |
From: dforsi <df...@us...> - 2012-12-04 21:58:36
|
commit 5490dee7df08b604b0b4df47bbd9c1bce93b05e7 Author: Daniele Forsi <da...@fo...> Date: Tue Dec 4 22:56:12 2012 +0100 Update Italian translation po/it.po | 171 ++++++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 100 insertions(+), 71 deletions(-) --- diff --git a/po/it.po b/po/it.po index 61a3af3..981ca1b 100644 --- a/po/it.po +++ b/po/it.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: gtkpod\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-14 00:09+0200\n" -"PO-Revision-Date: 2012-07-13 22:48+0200\n" +"POT-Creation-Date: 2012-12-04 22:09+0100\n" +"PO-Revision-Date: 2012-12-04 22:22+0100\n" "Last-Translator: Daniele Forsi <df...@gm...>\n" "Language-Team: Italian <tp...@li...>\n" "Language: it\n" @@ -674,7 +674,7 @@ msgstr "" "Testi non scritti, tipo del file non determinabile (%s).\n" "\n" -#: ../libgtkpod/file.c:2185 +#: ../libgtkpod/file.c:2185 ../libgtkpod/file.c:2190 #, c-format msgid "" "Lyrics not written due to the error:\n" @@ -685,15 +685,6 @@ msgstr "" "\n" "%s" -#: ../libgtkpod/file.c:2190 -#, c-format -msgid "" -"Lyrics not written due to the error:\n" -"%s" -msgstr "" -"Testi non scritti a causa dell'errore:\n" -"%s" - #: ../libgtkpod/file_convert.c:419 msgid "errors" msgstr "errori" @@ -1449,7 +1440,7 @@ msgstr[0] "Rimuovere la traccia dal database locale?" msgstr[1] "Rimuovere le tracce dal database locale?" #: ../libgtkpod/misc_conversion.c:60 -#: ../plugins/sorttab_display/normal_sorttab_page.c:934 +#: ../plugins/sorttab_display/normal_sorttab_page.c:965 msgid "All" msgstr "Tutti" @@ -1457,7 +1448,7 @@ msgstr "Tutti" #: ../libgtkpod/misc_conversion.c:61 #: ../plugins/core_preferences/core_prefs.xml.h:116 #: ../plugins/playlist_display/playlist_display_spl.c:78 -#: ../plugins/sorttab_display/sorttab_widget.c:241 +#: ../plugins/sorttab_display/sorttab_widget.c:243 #: ../plugins/sjcd/egg-play-preview.c:199 msgid "Album" msgstr "Album" @@ -1465,7 +1456,7 @@ msgstr "Album" #: ../libgtkpod/misc_conversion.c:62 #: ../plugins/core_preferences/core_prefs.xml.h:112 #: ../plugins/playlist_display/playlist_display_spl.c:79 -#: ../plugins/sorttab_display/sorttab_widget.c:238 +#: ../plugins/sorttab_display/sorttab_widget.c:240 #: ../plugins/sjcd/egg-play-preview.c:189 ../plugins/sjcd/sj-main.c:521 #: ../plugins/sjcd/sj-main.c:1527 msgid "Artist" @@ -1474,7 +1465,7 @@ msgstr "Artista" #: ../libgtkpod/misc_conversion.c:63 #: ../plugins/core_preferences/core_prefs.xml.h:113 #: ../plugins/playlist_display/playlist_display_spl.c:77 -#: ../plugins/sorttab_display/sorttab_widget.c:250 +#: ../plugins/sorttab_display/sorttab_widget.c:252 #: ../plugins/sjcd/egg-play-preview.c:179 ../plugins/sjcd/sj-main.c:515 #: ../plugins/sjcd/sj-main.c:1518 msgid "Title" @@ -1483,7 +1474,7 @@ msgstr "Titolo" #: ../libgtkpod/misc_conversion.c:64 #: ../plugins/core_preferences/core_prefs.xml.h:114 #: ../plugins/playlist_display/playlist_display_spl.c:83 -#: ../plugins/sorttab_display/sorttab_widget.c:244 +#: ../plugins/sorttab_display/sorttab_widget.c:246 msgid "Genre" msgstr "Genere" @@ -1521,7 +1512,7 @@ msgid "Track Nr (#)" msgstr "Numero traccia" #: ../libgtkpod/misc_conversion.c:72 -#: ../plugins/track_display/display_tracks.c:1851 +#: ../plugins/track_display/display_tracks.c:1894 msgid "Transferred" msgstr "Trasferito" @@ -1556,7 +1547,7 @@ msgstr "Contatore riproduzioni" #: ../libgtkpod/misc_conversion.c:79 #: ../plugins/playlist_display/playlist_display_spl.c:95 -#: ../plugins/track_display/display_tracks.c:1839 +#: ../plugins/track_display/display_tracks.c:1882 msgid "Rating" msgstr "Voto" @@ -1586,8 +1577,8 @@ msgstr "Ver. livello sonoro" #: ../libgtkpod/misc_conversion.c:85 #: ../plugins/playlist_display/playlist_display_spl.c:82 -#: ../plugins/sorttab_display/sorttab_widget.c:253 -#: ../plugins/track_display/display_tracks.c:1887 +#: ../plugins/sorttab_display/sorttab_widget.c:255 +#: ../plugins/track_display/display_tracks.c:1930 msgid "Year" msgstr "Anno" @@ -2497,12 +2488,20 @@ msgstr "" "«%s» ha restituito il seguente output:\n" "%s\n" -#: ../libs/atomic-parsley/AtomicParsleyBridge.cpp:465 +# Titolo di ripiego se non è stato letto uno dal file +#. chapter title couldn't be found; create our own titles (and some ipods don't display them anyway). +#. Translators: this string is used to create a chapter title when no chapter title could be found +#: ../libs/atomic-parsley/AtomicParsleyBridge.cpp:266 +#, c-format +msgid "Chapter %3d" +msgstr "Capitolo %3d" + +#: ../libs/atomic-parsley/AtomicParsleyBridge.cpp:636 #, c-format msgid "ERROR %s is not itunes style." msgstr "ERRORE %s non è nello stile di iTunes." -#: ../libs/atomic-parsley/AtomicParsleyBridge.cpp:664 +#: ../libs/atomic-parsley/AtomicParsleyBridge.cpp:853 #, c-format msgid "ERROR failed to change track file's artwork." msgstr "ERRORE impossibile cambiare il file con la copertina della traccia." @@ -2897,7 +2896,7 @@ msgid "<b>On-the-fly Conversion</b>" msgstr "<b>Conversione al volo</b>" #. Register actions -#: ../plugins/core_preferences/core_prefs.xml.h:107 ../src/anjuta-app.c:511 +#: ../plugins/core_preferences/core_prefs.xml.h:107 ../src/anjuta-app.c:516 msgid "Music" msgstr "Musica" @@ -3060,6 +3059,7 @@ msgstr "<b>Riquadro delle copertine</b>" #: ../plugins/cover_display/cover_display.xml.h:8 #: ../plugins/playlist_display/playlist_display.xml.h:4 #: ../plugins/sorttab_display/sorttab_display.xml.h:18 +#: ../plugins/track_display/track_display.xml.h:7 #: ../plugins/clarity/clarity.xml.h:6 msgid "<b>Ascending</b>" msgstr "<b>Crescente</b>" @@ -3067,6 +3067,7 @@ msgstr "<b>Crescente</b>" #: ../plugins/cover_display/cover_display.xml.h:9 #: ../plugins/playlist_display/playlist_display.xml.h:5 #: ../plugins/sorttab_display/sorttab_display.xml.h:19 +#: ../plugins/track_display/track_display.xml.h:8 #: ../plugins/clarity/clarity.xml.h:7 msgid "<b>Descending</b>" msgstr "<b>Decrescente</b>" @@ -3074,6 +3075,7 @@ msgstr "<b>Decrescente</b>" #: ../plugins/cover_display/cover_display.xml.h:10 #: ../plugins/playlist_display/playlist_display.xml.h:6 #: ../plugins/sorttab_display/sorttab_display.xml.h:20 +#: ../plugins/track_display/track_display.xml.h:13 #: ../plugins/clarity/clarity.xml.h:8 msgid "<b>None</b>" msgstr "<b>Nessuno</b>" @@ -3081,7 +3083,7 @@ msgstr "<b>Nessuno</b>" #: ../plugins/cover_display/cover_display.xml.h:11 #: ../plugins/playlist_display/playlist_display.xml.h:7 #: ../plugins/sorttab_display/sorttab_display.xml.h:21 -#: ../plugins/track_display/track_display.xml.h:7 +#: ../plugins/track_display/track_display.xml.h:14 #: ../plugins/clarity/clarity.xml.h:9 msgid "Case sensitive sorting" msgstr "Distinguere MAIUSCOLE/minuscole nell'ordinamento" @@ -4380,7 +4382,7 @@ msgstr "" #. display message in statusbar #: ../plugins/playlist_display/display_playlists.c:487 -#: ../plugins/track_display/display_tracks.c:345 +#: ../plugins/track_display/display_tracks.c:391 #, c-format msgid "Copied one track" msgid_plural "Copied %d tracks" @@ -4427,7 +4429,7 @@ msgstr "Ignora le regole" #: ../plugins/playlist_display/playlist_display.xml.h:8 #: ../plugins/sorttab_display/sorttab_display.xml.h:22 -#: ../plugins/track_display/track_display.xml.h:8 +#: ../plugins/track_display/track_display.xml.h:15 msgid "" "If checked, sorting will be case sensitive. Please note that case sensitive " "sorting will not work well with most charsets." @@ -4977,7 +4979,7 @@ msgid "Add playlist to selected iPod" msgstr "Aggiunge una playlist all'iPod selezionato" #: ../plugins/playlist_display/plugin.c:124 -#: ../plugins/track_display/plugin.c:219 +#: ../plugins/track_display/plugin.c:216 msgid "Normalize" msgstr "Normalizza" @@ -5611,7 +5613,7 @@ msgid "Last Modified" msgstr "Ultima modifica" #: ../plugins/sorttab_display/sorttab_display.xml.h:14 -#: ../plugins/track_display/display_tracks.c:1881 +#: ../plugins/track_display/display_tracks.c:1924 msgid "Added" msgstr "Aggiunto" @@ -5815,20 +5817,24 @@ msgstr "Copia" msgid "Copy selected track(s) to" msgstr "Copia tracce selezionate su" -#: ../plugins/sorttab_display/normal_sorttab_page.c:961 +#: ../plugins/sorttab_display/normal_sorttab_page.c:992 msgid "Compilations" msgstr "Compilation" -#: ../plugins/sorttab_display/sorttab_widget.c:247 +#: ../plugins/sorttab_display/normal_sorttab_page.c:995 +msgid "No Metadata Value" +msgstr "Nessun valore per il metadato" + +#: ../plugins/sorttab_display/sorttab_widget.c:249 msgid "Comp." msgstr "Comp." -#: ../plugins/sorttab_display/sorttab_widget.c:256 +#: ../plugins/sorttab_display/sorttab_widget.c:258 msgid "Special" msgstr "Speciale" #. no tracks selected -#: ../plugins/sorttab_display/sorttab_widget.c:716 +#: ../plugins/sorttab_display/sorttab_widget.c:718 msgid "No tracks selected." msgstr "Nessuna traccia selezionata." @@ -5852,59 +5858,59 @@ msgstr "Plugin linguette ordinamento" msgid "Filter Track View" msgstr "Visualizza e filtra le tracce" -#: ../plugins/track_display/display_tracks.c:341 +#: ../plugins/track_display/display_tracks.c:387 #, c-format msgid "Moved one track" msgid_plural "Moved %d tracks" msgstr[0] "Spostata una traccia" msgstr[1] "Spostate %d tracce" -#: ../plugins/track_display/display_tracks.c:1842 +#: ../plugins/track_display/display_tracks.c:1885 msgid "#" msgstr "N°" -#: ../plugins/track_display/display_tracks.c:1845 +#: ../plugins/track_display/display_tracks.c:1888 msgid "CD" msgstr "CD" -#: ../plugins/track_display/display_tracks.c:1848 +#: ../plugins/track_display/display_tracks.c:1891 msgid "ID" msgstr "ID" -#: ../plugins/track_display/display_tracks.c:1862 +#: ../plugins/track_display/display_tracks.c:1905 msgid "Cmpl" msgstr "Cmpl" -#: ../plugins/track_display/display_tracks.c:1869 +#: ../plugins/track_display/display_tracks.c:1912 msgid "Time" msgstr "Durata" -#: ../plugins/track_display/display_tracks.c:1872 +#: ../plugins/track_display/display_tracks.c:1915 msgid "Plycnt" msgstr "Conta rip." -#: ../plugins/track_display/display_tracks.c:1875 +#: ../plugins/track_display/display_tracks.c:1918 msgid "Played" msgstr "Riprodotto" -#: ../plugins/track_display/display_tracks.c:1878 +#: ../plugins/track_display/display_tracks.c:1921 msgid "Modified" msgstr "Modificato" -#: ../plugins/track_display/display_tracks.c:1884 +#: ../plugins/track_display/display_tracks.c:1927 msgid "Released" msgstr "Pubblicato" -#: ../plugins/track_display/display_tracks.c:1890 +#: ../plugins/track_display/display_tracks.c:1933 msgid "Vol." msgstr "Vol." -#: ../plugins/track_display/display_tracks.c:1893 +#: ../plugins/track_display/display_tracks.c:1936 msgid "Sndchk." msgstr "Ver. liv. sonoro" -#: ../plugins/track_display/plugin.c:47 ../plugins/track_display/plugin.c:113 -#: ../plugins/track_display/track_display.xml.h:13 +#: ../plugins/track_display/plugin.c:47 ../plugins/track_display/plugin.c:110 +#: ../plugins/track_display/track_display.xml.h:21 msgid "Track Display" msgstr "Mostra tracce" @@ -5920,7 +5926,7 @@ msgstr "Tracce selezionate dal database" msgid "Selected Tracks from Device" msgstr "Tracce selezionate dall'iPod" -#: ../plugins/track_display/plugin.c:137 +#: ../plugins/track_display/plugin.c:134 msgid " Playlist Tracks" msgstr " Tracce playlist" @@ -5941,35 +5947,51 @@ msgid "<b>Displayed Columns</b>" msgstr "<b>Colonne visualizzate</b>" #: ../plugins/track_display/track_display.xml.h:5 -msgid "Modify selected tracks sort order in selected playlist" +msgid "Automatically sort selected tracks in selected playlist" msgstr "" -"Modificare l'ordinamento delle tracce selezionate nella playlist selezionata" +"Ordinare automaticamente le tracce selezionate nella playlist selezionata" #: ../plugins/track_display/track_display.xml.h:6 msgid "" -"if checked, the sort order of the displayed tracks will be applied to the " -"selected playlist." +"if checked, the sort order (defined below) will be applied to the selected " +"playlist." msgstr "" -"Se selezionata, l'ordinamento delle tracce visualizzate sarà applicato alla " -"playlist selezionata." +"Se selezionata, l'ordinamento definito sotto sarà applicato alla playlist " +"selezionata." #: ../plugins/track_display/track_display.xml.h:9 +msgid "" +"Sort order applied to displayed tracks.\n" +"\n" +"This is only applied if the 'auto sort tracks' \n" +"checkbox (above) is checked." +msgstr "" +"L'ordinamento applicato alle tracce visualizzate.\n" +"\n" +"È applicato solo se la casella «Ordinare automaticamente»\n" +"precedente è selezionata." + +#: ../plugins/track_display/track_display.xml.h:16 +msgid "<b>Track Display Sort Order</b>" +msgstr "<b>Ordinamento mostra tracce</b>" + +#: ../plugins/track_display/track_display.xml.h:17 msgid "<b>Sorting Options</b>" msgstr "<b>Opzioni di ordinamento</b>" -#: ../plugins/track_display/track_display.xml.h:10 +#: ../plugins/track_display/track_display.xml.h:18 msgid "Ignore these words when at the beginning of the following fields:" msgstr "Ignorare queste parole quando sono all'inizio dei campi seguenti:" -#: ../plugins/track_display/track_display.xml.h:11 +#: ../plugins/track_display/track_display.xml.h:19 msgid "<b>Ignore Frequent Words</b>" msgstr "<b>Parole comuni da ignorare</b>" -#: ../plugins/track_display/track_display.xml.h:12 +#: ../plugins/track_display/track_display.xml.h:20 msgid "<b>Preferred Track Execution Command</b>" msgstr "<b>Comando preferito per eseguire le tracce</b>" -#: ../plugins/track_display/track_display.xml.h:14 +#: ../plugins/track_display/track_display.xml.h:22 msgid "<span weight='bold' size='larger'>No playlist selected</span>" msgstr "<span weight='bold' size='larger'>Nessuna playlist selezionata</span>" @@ -5985,15 +6007,15 @@ msgstr "Plugin mostra tracce" msgid "Track View" msgstr "Mostra tracce" -#: ../plugins/track_display/track_display_preferences.c:235 +#: ../plugins/track_display/track_display_preferences.c:236 msgid "New Word to Ignore" msgstr "Nuova parola da ignorare" -#: ../plugins/track_display/track_display_preferences.c:235 +#: ../plugins/track_display/track_display_preferences.c:236 msgid "Please enter a word for sorting functions to ignore" msgstr "Inserire una parola da ignorare nelle funzioni di ordinamento" -#: ../plugins/track_display/track_display_preferences.c:254 +#: ../plugins/track_display/track_display_preferences.c:255 #, c-format msgid "The word %s is already in the \"Ignored Frequent Word\" list" msgstr "La parola «%s» è già nell'elenco di «Parole comuni da ignorare»" @@ -6845,44 +6867,44 @@ msgstr "Informazioni sui _plugin esterni" msgid "About third party gtkpod plugins" msgstr "Informazioni sui plugin di gtkpod di terze parti" -#: ../src/anjuta-app.c:512 +#: ../src/anjuta-app.c:517 msgid "Edit" msgstr "Modifica" -#: ../src/anjuta-app.c:513 ../src/anjuta-app.c:514 +#: ../src/anjuta-app.c:518 ../src/anjuta-app.c:519 msgid "View" msgstr "Visualizza" -#: ../src/anjuta-app.c:515 +#: ../src/anjuta-app.c:520 msgid "Tools" msgstr "Strumenti" -#: ../src/anjuta-app.c:516 +#: ../src/anjuta-app.c:521 msgid "Help" msgstr "Aiuto" -#: ../src/anjuta-app.c:729 +#: ../src/anjuta-app.c:734 msgid " Plugins" msgstr " Plugin" -#: ../src/anjuta-app.c:741 +#: ../src/anjuta-app.c:746 msgid "Installed plugins" msgstr "Plugin installati" -#: ../src/anjuta-app.c:742 +#: ../src/anjuta-app.c:747 msgid "Preferred plugins" msgstr "Plugin preferiti" -#: ../src/anjuta-app.c:743 +#: ../src/anjuta-app.c:748 msgid "Shortcuts" msgstr "Scorciatoie" -#: ../src/anjuta-app.c:802 +#: ../src/anjuta-app.c:807 #, c-format msgid "Value doesn't exist" msgstr "Il valore non esiste" -#: ../src/anjuta-app.c:1420 +#: ../src/anjuta-app.c:1425 msgid "Confirmation" msgstr "Conferma" @@ -6894,6 +6916,13 @@ msgstr "Sessione caricata" msgid "- Interface with your iPod" msgstr "- Interfaccia per iPod" +#~ msgid "" +#~ "Lyrics not written due to the error:\n" +#~ "%s" +#~ msgstr "" +#~ "Testi non scritti a causa dell'errore:\n" +#~ "%s" + #~ msgid "Press button to abort." #~ msgstr "Premere il pulsante per interrompere." |
From: Joel S. <joe...@us...> - 2012-11-13 01:46:40
|
commit 474b4287771b95a6e8407b72c39c15d700e206d4 Author: Joel Smith <jsf...@jk...> Date: Mon Nov 12 16:36:11 2012 -0700 make MP4 generated chapter names translateable Thanks to Daniele Forsi for the suggestion libs/atomic-parsley/AtomicParsleyBridge.cpp | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) --- diff --git a/libs/atomic-parsley/AtomicParsleyBridge.cpp b/libs/atomic-parsley/AtomicParsleyBridge.cpp index 25ba8af..4841af2 100644 --- a/libs/atomic-parsley/AtomicParsleyBridge.cpp +++ b/libs/atomic-parsley/AtomicParsleyBridge.cpp @@ -261,9 +261,9 @@ void AP_read_metadata(const char *filePath, Track *track) { } else { - // chapter title couldn't be found; create our own titles - // (and some ipods don't display them anyway) - title = g_strdup_printf("Chapter %3d", i); + // chapter title couldn't be found; create our own titles (and some ipods don't display them anyway). + // Translators: this string is used to create a chapter title when no chapter title could be found + title = g_strdup_printf(_("Chapter %3d"), i); } if (!timescale) // assume 1000, also, don't divide by 0 |
From: Joel S. <joe...@us...> - 2012-11-13 01:46:34
|
commit 0fd91b5fe7e93e5b2409b7b5a36e9dd052042237 Author: Joel Smith <jsf...@jk...> Date: Mon Nov 12 16:12:58 2012 -0700 MP4 text tags are already UTF-8. Remove UTF-8 conversion. libs/atomic-parsley/AtomicParsleyBridge.cpp | 28 +++++++++++++------------- 1 files changed, 14 insertions(+), 14 deletions(-) --- diff --git a/libs/atomic-parsley/AtomicParsleyBridge.cpp b/libs/atomic-parsley/AtomicParsleyBridge.cpp index 74930a1..25ba8af 100644 --- a/libs/atomic-parsley/AtomicParsleyBridge.cpp +++ b/libs/atomic-parsley/AtomicParsleyBridge.cpp @@ -296,49 +296,49 @@ void AP_read_metadata(const char *filePath, Track *track) { // MP4 Title value = find_atom_value(TITLE); if (value) { - track->title = charset_to_utf8(value); + track->title = g_strdup(value); free(value); } // MP4 Artist value = find_atom_value(ARTIST); if (value) { - track->artist = charset_to_utf8(value); + track->artist = g_strdup(value); free(value); } // MP4 Album Artist value = find_atom_value(ALBUM_ARTIST); if (value) { - track->albumartist = charset_to_utf8(value); + track->albumartist = g_strdup(value); free(value); } // MP4 Composer value = find_atom_value(COMPOSER); if (value) { - track->composer = charset_to_utf8(value); + track->composer = g_strdup(value); free(value); } // MP4 Comment value = find_atom_value(COMMENT); if (value) { - track->comment = charset_to_utf8(value); + track->comment = g_strdup(value); free(value); } // MP4 Description value = find_atom_value(DESCRIPTION); if (value) { - track->description = charset_to_utf8(value); + track->description = g_strdup(value); free(value); } // MP4 Keywords value = find_atom_value(KEYWORD); if (value) { - track->keywords = charset_to_utf8(value); + track->keywords = g_strdup(value); free(value); } @@ -352,7 +352,7 @@ void AP_read_metadata(const char *filePath, Track *track) { // MP4 Album value = find_atom_value(ALBUM); if (value) { - track->album = charset_to_utf8(value); + track->album = g_strdup(value); free(value); } @@ -391,7 +391,7 @@ void AP_read_metadata(const char *filePath, Track *track) { // MP4 Grouping value = find_atom_value(GROUPING); if (value) { - track->grouping = charset_to_utf8(value); + track->grouping = g_strdup(value); free(value); } @@ -406,7 +406,7 @@ void AP_read_metadata(const char *filePath, Track *track) { // custom genre value = find_atom_value(CUSTOM_GENRE); if (value) { - track->genre = charset_to_utf8(value); + track->genre = g_strdup(value); free(value); } } @@ -428,14 +428,14 @@ void AP_read_metadata(const char *filePath, Track *track) { // MP4 TV Show value = find_atom_value(TV_SHOW); if (value) { - track->tvshow = charset_to_utf8(value); + track->tvshow = g_strdup(value); free(value); } // MP4 TV Episode value = find_atom_value(TV_EPISODE); if (value) { - track->tvepisode = charset_to_utf8(value); + track->tvepisode = g_strdup(value); free(value); } @@ -449,7 +449,7 @@ void AP_read_metadata(const char *filePath, Track *track) { // MP4 TV Network value = find_atom_value(TV_NETWORK_NAME); if (value) { - track->tvnetwork = charset_to_utf8(value); + track->tvnetwork = g_strdup(value); free(value); } @@ -481,7 +481,7 @@ void AP_read_metadata(const char *filePath, Track *track) { // MP4 Category value = find_atom_value(CATEGORY); if (value) { - track->category = charset_to_utf8(value); + track->category = g_strdup(value); free(value); } |
From: Joel S. <joe...@us...> - 2012-11-11 02:32:56
|
commit 7684c22d7665e47a125e54ba03e2b1552791dfd0 Author: Joel Smith <jsf...@jk...> Date: Sat Nov 10 19:11:48 2012 -0700 fix mp4 tag crash on tempo (BPM) values above 99 As reported here: http://sourceforge.net/tracker/index.php?func=detail&aid=3575205&group_id=67873&atid=519273 libs/atomic-parsley/AtomicParsley.cpp | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) --- diff --git a/libs/atomic-parsley/AtomicParsley.cpp b/libs/atomic-parsley/AtomicParsley.cpp index 69830d5..868d1f0 100644 --- a/libs/atomic-parsley/AtomicParsley.cpp +++ b/libs/atomic-parsley/AtomicParsley.cpp @@ -1816,7 +1816,7 @@ char* APar_ExtractDataAtom(int this_atom_number) { } } case 2: { //tmpo - char* result = (char*) malloc(sizeof(char) * 4); + char* result = (char*) malloc(sizeof(char) * 7); // 5 for tempo value, up to 65535, 2 for \n\0 sprintf(result, "%hu\n", UInt16FromBigEndian(data_payload)); return result; } |
From: Joel S. <joe...@us...> - 2012-11-11 02:32:50
|
commit dbbadb72e33f99edd610f7392b6926c168ee5fef Author: Joel Smith <jsf...@jk...> Date: Thu Nov 8 16:16:11 2012 -0700 fix compilation flag and media type tag for mp4 files libs/atomic-parsley/AtomicParsleyBridge.cpp | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) --- diff --git a/libs/atomic-parsley/AtomicParsleyBridge.cpp b/libs/atomic-parsley/AtomicParsleyBridge.cpp index 704fd3b..74930a1 100644 --- a/libs/atomic-parsley/AtomicParsleyBridge.cpp +++ b/libs/atomic-parsley/AtomicParsleyBridge.cpp @@ -32,6 +32,7 @@ #include "AtomicParsley.h" #include "AP_AtomExtracts.h" #include "AtomicParsleyBridge.h" +#include "AtomicParsley_genres.h" extern "C" { #include <glib/gstdio.h> @@ -462,14 +463,18 @@ void AP_read_metadata(const char *filePath, Track *track) { // MP4 Media Type value = find_atom_value(MEDIA_TYPE); if (value) { - track->mediatype = mediaTypeTagToMediaType(atoi(value)); + stiks * stik = MatchStikString(value); + if (stik) + { + track->mediatype = mediaTypeTagToMediaType(stik->stik_number); + } // Should not free standard media types } // MP4 Compilation flag value = find_atom_value(COMPILATION); if (value) { - track->compilation = atoi(value); + track->compilation = !g_strcmp0("true", value); free(value); } |
From: Joel S. <joe...@us...> - 2012-11-11 02:32:44
|
commit 3fbdec07724f4806f88dd93ac3927162b2cdaabd Author: Joel Smith <jsf...@jk...> Date: Thu Nov 8 14:23:35 2012 -0700 add mp4 chapter reading support to Atomic Parsley bridge libs/atomic-parsley/AtomicParsleyBridge.cpp | 125 +++++++++++++++++++++++++-- 1 files changed, 119 insertions(+), 6 deletions(-) --- diff --git a/libs/atomic-parsley/AtomicParsleyBridge.cpp b/libs/atomic-parsley/AtomicParsleyBridge.cpp index ef1a182..704fd3b 100644 --- a/libs/atomic-parsley/AtomicParsleyBridge.cpp +++ b/libs/atomic-parsley/AtomicParsleyBridge.cpp @@ -146,7 +146,10 @@ void AP_read_metadata(const char *filePath, Track *track) { FILE *mp4File; Trackage *trackage; uint8_t track_cur; + uint8_t txttrack_cur; gboolean audio_or_video_found = FALSE; + gboolean has_quicktime_chaps = FALSE; + uint32_t timescale = 0; APar_ScanAtoms(filePath, true); mp4File = openSomeFile(filePath, true); @@ -156,11 +159,8 @@ void AP_read_metadata(const char *filePath, Track *track) { for (track_cur = 0; track_cur < trackage->total_tracks; ++track_cur) { TrackInfo *info = trackage->infos[track_cur]; - // FIXME no chapter information implemented yet - - if (info->track_type && audio_or_video_found == FALSE - && ((info->track_type & AUDIO_TRACK) || (info->track_type & VIDEO_TRACK) - || (info->track_type & DRM_PROTECTED_TRACK))) { + if ((info->type_of_track & AUDIO_TRACK) || (info->type_of_track & VIDEO_TRACK) + || (info->type_of_track & DRM_PROTECTED_TRACK)) { /* * the info->duration is in the track's timescale units so must be divided by that @@ -171,10 +171,123 @@ void AP_read_metadata(const char *filePath, Track *track) { track->bitrate = APar_calculate_bitrate(info); track->samplerate = info->media_sample_rate; + audio_or_video_found = TRUE; + break; + } + } + for (txttrack_cur = 0; audio_or_video_found && txttrack_cur < trackage->total_tracks; ++txttrack_cur) { + TrackInfo *txtinfo = trackage->infos[txttrack_cur]; + char buf[128]; + // search for chapter track + if (!(txtinfo->type_of_track & TEXT_TRACK)) + continue; + // see if the AV track's chap refers to this text track + // chap: 0: atom size 4: 'chap' 8,12,...,8+(N-1)*4: (0: referenced track ID) + snprintf(buf, sizeof(buf), "moov.trak[%u].tref.chap", track_cur + 1); + AtomicInfo* chapAtom = APar_FindAtom(buf, false, SIMPLE_ATOM, 0); + if (!chapAtom) + continue; + int entry_count = (chapAtom->AtomicLength - 8) / 4; + for (int i = 0; i < entry_count; ++i) { + if (APar_read32(buf, mp4File, chapAtom->AtomicStart + 8 + i * 4) == txtinfo->track_id) { + has_quicktime_chaps = TRUE; + timescale = txtinfo->media_sample_rate; + break; + } } + if (has_quicktime_chaps) + break; + } + if (has_quicktime_chaps) { + // found a chapter... now get the chapter data from the text track + char buf[128]; + + // stts: 0: atom size 4: 'stts' 8: version 12: entry count 16,24,...,16+(N-1)*8: (0: frame count 4: duration) + snprintf(buf, sizeof(buf), "moov.trak[%u].mdia.minf.stbl.stts", txttrack_cur + 1); + AtomicInfo* sampleAtom = APar_FindAtom(buf, false, VERSIONED_ATOM, 0); + + // stsz: 0: atom size 4: 'stsz' 8: version 12: size of all (or 0) 16: entry count 20,24,...,20+(N-1)*4: (0: sample size) + snprintf(buf, sizeof(buf), "moov.trak[%u].mdia.minf.stbl.stsz", txttrack_cur + 1); + AtomicInfo* sampleSizeAtom = APar_FindAtom(buf, false, VERSIONED_ATOM, 0); + + // stco: 0: atom size 4: 'stco' 8: version 12: entry count 16,20,...,16+(N-1)*4: (0: sample byte offset) + snprintf(buf, sizeof(buf), "moov.trak[%u].mdia.minf.stbl.stco", txttrack_cur + 1); + AtomicInfo* sampleOffsetAtom = APar_FindAtom(buf, false, VERSIONED_ATOM, 0); + + // We must have a valid sampleAtom to know chapter times. If sampleSizeAtom or sampleOffsetAtom is invalid, + // we can do without them (and instead create a default chapter name). + if (sampleAtom && sampleAtom->AtomicLength >= 16) { + Itdb_Chapterdata *chapterdata = itdb_chapterdata_new(); + uint32_t stts_entry_count = APar_read32(buf, mp4File, sampleAtom->AtomicStart + 12); + uint32_t stsz_entry_count = !sampleSizeAtom || sampleSizeAtom->AtomicLength < 20 ? 0 : + APar_read32(buf, mp4File, sampleSizeAtom->AtomicStart + 16); + uint32_t stco_entry_count = !sampleOffsetAtom || sampleOffsetAtom->AtomicLength < 16 ? 0 : + APar_read32(buf, mp4File, sampleOffsetAtom->AtomicStart + 12); + uint32_t stsz_all_size = !sampleSizeAtom || sampleSizeAtom->AtomicLength < 16 ? 0 : + APar_read32(buf, mp4File, sampleSizeAtom->AtomicStart + 12); + + uint32_t start_time = 0; + + u_int32_t max_frame_size = stsz_all_size; // if stsz_all_size specified, use only that size + for (int i = 0; !stsz_all_size && i < stsz_entry_count; ++i) { + uint32_t chap_name_len = APar_read32(buf, mp4File, sampleSizeAtom->AtomicStart + 20 + i * 4); + if (chap_name_len > max_frame_size) + max_frame_size = chap_name_len; + } + max_frame_size += 1; // for trailing '\0' (unneeded?), and to make sure that malloc() gets passed at least 1 + char * namebuf = (char *)malloc(max_frame_size * sizeof(char)); + for (int i = 0; i < stts_entry_count; ++i) { + gchar *title = NULL; + uint32_t chap_name_len = stsz_all_size; + uint32_t chap_offset = 0; + if (stsz_all_size == 0 && i < stsz_entry_count) + chap_name_len = APar_read32(buf, mp4File, sampleSizeAtom->AtomicStart + 20 + i * 4); + if (i < stco_entry_count) + chap_offset = APar_read32(buf, mp4File, sampleOffsetAtom->AtomicStart + 16 + i * 4); + if (chap_offset != 0) + APar_readX(namebuf, mp4File, chap_offset, chap_name_len); + else // If the location of the chapter name is unknown, trigger default chapter naming + chap_name_len = 0; + if (chap_name_len > 2) { + int titlelength = (namebuf[0] << 8) + namebuf[1]; + // if the stsz atom and the title value disagree, use the smaller one for safety + titlelength = (titlelength > chap_name_len) ? chap_name_len : titlelength; + // If a title begins with 0xFFFE, it's a UTF-16 title + if (titlelength >= 2 && namebuf[2] == 0xff && namebuf[3] == 0xfe) + title = g_utf16_to_utf8((const gunichar2 *) &namebuf[4], titlelength - 2, NULL, NULL, NULL); + else + title = g_strndup(&namebuf[2], titlelength); + } + else + { + // chapter title couldn't be found; create our own titles + // (and some ipods don't display them anyway) + title = g_strdup_printf("Chapter %3d", i); + } + + if (!timescale) // assume 1000, also, don't divide by 0 + timescale = 1000; + double duration_ms = (double)start_time * 1000.0 / (double)timescale; + + itdb_chapterdata_add_chapter(chapterdata, duration_ms, title); + g_free(title); - audio_or_video_found = TRUE; + if (i < (stts_entry_count - 1)) // skip this stage after the last chapter has been added + { + uint32_t frame_count = APar_read32(buf, mp4File, sampleAtom->AtomicStart + 16 + i * 8); + uint32_t duration = APar_read32(buf, mp4File, sampleAtom->AtomicStart + 20 + i * 8); + start_time += frame_count * duration; + } + } + if (namebuf) + free(namebuf); + if (track->chapterdata) // if there was already chapter data, don't leak it + itdb_chapterdata_free(track->chapterdata); + track->chapterdata = itdb_chapterdata_duplicate(chapterdata); + itdb_chapterdata_free(chapterdata); + } } + // TODO: add support for Nero-style mp4 chapters if (prefs_get_int("readtags")) { char* value = NULL; |
From: Joel S. <joe...@us...> - 2012-11-11 02:32:38
|
commit dced7b42629f74561fd31c4f7881bc7f769fcf46 Author: Joel Smith <jsf...@jk...> Date: Sun Nov 4 00:00:05 2012 -0600 add track ID field to AtomicParseley library libs/atomic-parsley/AP_AtomExtracts.cpp | 13 +++++++++++++ libs/atomic-parsley/AP_AtomExtracts.h | 1 + 2 files changed, 14 insertions(+), 0 deletions(-) --- diff --git a/libs/atomic-parsley/AP_AtomExtracts.cpp b/libs/atomic-parsley/AP_AtomExtracts.cpp index d4e0544..039eda8 100644 --- a/libs/atomic-parsley/AP_AtomExtracts.cpp +++ b/libs/atomic-parsley/AP_AtomExtracts.cpp @@ -1070,8 +1070,21 @@ void APar_ExtractTrackDetails(char* uint32_buffer, FILE* isofile, Trackage* trac + 12); track_info->modified_time = APar_read32(uint32_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + 16); + track_info->track_id = APar_read32(uint32_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + 20); track_info->duration = APar_read32(uint32_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + 28); } + else if (APar_read8(isofile, parsedAtoms[track->track_atom].AtomicStart + 8) == 1) { + if (APar_read8(isofile, parsedAtoms[track->track_atom].AtomicStart + 11) & 1) { + track_info->track_enabled = true; + } + //version 1 has 64-bit creation/modified times which AP currently doesn't support + //track_info->creation_time = APar_read64(uint64_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + // + 12); + //track_info->modified_time = APar_read32(uint64_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + // + 20); + track_info->track_id = APar_read32(uint32_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + 28); + track_info->duration = APar_read32(uint32_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + 36); + } //language code APar_TrackLevelInfo(track, "mdhd"); diff --git a/libs/atomic-parsley/AP_AtomExtracts.h b/libs/atomic-parsley/AP_AtomExtracts.h index bd9cb26..3292aa5 100644 --- a/libs/atomic-parsley/AP_AtomExtracts.h +++ b/libs/atomic-parsley/AP_AtomExtracts.h @@ -35,6 +35,7 @@ typedef struct { //if any of these are unused, they are set to 0xFF struct _TrackInfo { uint32_t creation_time; uint32_t modified_time; + uint32_t track_id; uint32_t duration; bool track_enabled; uint32_t media_sample_rate; |
From: Joel S. <joe...@us...> - 2012-11-11 02:32:32
|
commit 7f966953fc5b0ba6a8a46d0a936fd02a9faf1b19 Author: Joel Smith <jsf...@jk...> Date: Sat Nov 3 23:57:29 2012 -0600 add text track type to AtomicParseley library libs/atomic-parsley/AP_AtomExtracts.cpp | 14 +++++++++++--- libs/atomic-parsley/AP_AtomExtracts.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) --- diff --git a/libs/atomic-parsley/AP_AtomExtracts.cpp b/libs/atomic-parsley/AP_AtomExtracts.cpp index 3b7a967..d4e0544 100644 --- a/libs/atomic-parsley/AP_AtomExtracts.cpp +++ b/libs/atomic-parsley/AP_AtomExtracts.cpp @@ -1085,11 +1085,19 @@ void APar_ExtractTrackDetails(char* uint32_buffer, FILE* isofile, Trackage* trac APar_TrackLevelInfo(track, "hdlr"); memset(uint32_buffer, 0, 5); track_info->track_type = APar_read32(uint32_buffer, isofile, parsedAtoms[track->track_atom].AtomicStart + 16); - if (track_info->track_type == 0x736F756E) { //soun + switch (track_info->track_type) + { + case 0x736F756E: //soun track_info->type_of_track = AUDIO_TRACK; - } - else if (track_info->track_type == 0x76696465) { //vide + break; + case 0x76696465: //vide track_info->type_of_track = VIDEO_TRACK; + break; + case 0x74657874: //text + track_info->type_of_track = TEXT_TRACK; + break; + default: + break; } if (parsedAtoms[track->track_atom].AtomicLength > 34) { memset(track_info->track_hdlr_name, 0, 100); diff --git a/libs/atomic-parsley/AP_AtomExtracts.h b/libs/atomic-parsley/AP_AtomExtracts.h index 255bb97..bd9cb26 100644 --- a/libs/atomic-parsley/AP_AtomExtracts.h +++ b/libs/atomic-parsley/AP_AtomExtracts.h @@ -105,7 +105,7 @@ typedef struct { } ap_time; enum { - UNKNOWN_TRACK = 0, VIDEO_TRACK = 2, AUDIO_TRACK = 4, DRM_PROTECTED_TRACK = 8, OTHER_TRACK = 16 + UNKNOWN_TRACK = 0, VIDEO_TRACK = 2, AUDIO_TRACK = 4, DRM_PROTECTED_TRACK = 8, OTHER_TRACK = 16, TEXT_TRACK = 32 }; enum { |
From: Joel S. <joe...@us...> - 2012-11-11 02:32:25
|
commit 39fd186bb70b1e2650498ccef7aa109f3e0b1818 Author: Joel Smith <jsf...@jk...> Date: Sat Nov 3 22:16:05 2012 -0600 add track sort fields read/write support to AP library libs/atomic-parsley/AtomicParsleyBridge.cpp | 66 +++++++++++++++++++++++++++ 1 files changed, 66 insertions(+), 0 deletions(-) --- diff --git a/libs/atomic-parsley/AtomicParsleyBridge.cpp b/libs/atomic-parsley/AtomicParsleyBridge.cpp index 052f47f..ef1a182 100644 --- a/libs/atomic-parsley/AtomicParsleyBridge.cpp +++ b/libs/atomic-parsley/AtomicParsleyBridge.cpp @@ -72,6 +72,12 @@ extern "C" { #define PODCAST_URL "purl" #define ARTWORK "covr" #define GAPLESS_FLAG "pgap" +#define SORT_TITLE "sonm" +#define SORT_ARTIST "soar" +#define SORT_ALBUM_ARTIST "soaa" +#define SORT_COMPOSER "soco" +#define SORT_ALBUM "soal" +#define SORT_TV_SHOW "sosn" static guint32 mediaTypeTagToMediaType(guint8 media_type) { switch (media_type) { @@ -374,6 +380,48 @@ void AP_read_metadata(const char *filePath, Track *track) { free(value); } + // MP4 Sort Title + value = find_atom_value(SORT_TITLE); + if (value) { + track->sort_title = g_strdup(value); + free(value); + } + + // MP4 Sort Artist + value = find_atom_value(SORT_ARTIST); + if (value) { + track->sort_artist = g_strdup(value); + free(value); + } + + // MP4 Sort Album Artist + value = find_atom_value(SORT_ALBUM_ARTIST); + if (value) { + track->sort_albumartist = g_strdup(value); + free(value); + } + + // MP4 Sort Composer + value = find_atom_value(SORT_COMPOSER); + if (value) { + track->sort_composer = g_strdup(value); + free(value); + } + + // MP4 Sort Album + value = find_atom_value(SORT_ALBUM); + if (value) { + track->sort_album = g_strdup(value); + free(value); + } + + // MP4 Sort TV Show + value = find_atom_value(SORT_TV_SHOW); + if (value) { + track->sort_tvshow = g_strdup(value); + free(value); + } + if (prefs_get_int("coverart_apic")) { gchar *tmp_file_prefix = g_build_filename(g_get_tmp_dir(), "ttt", NULL); gchar *tmp_file; @@ -649,6 +697,24 @@ void AP_write_metadata(Track *track, const char *filePath, GError **error) { } g_free(atom); + // Sort Title + set_limited_text_atom_value(SORT_TITLE, track->sort_title); + + // Sort Artist + set_limited_text_atom_value(SORT_ARTIST, track->sort_artist); + + // Sort Album Artist + set_limited_text_atom_value(SORT_ALBUM_ARTIST, track->sort_albumartist); + + // Sort Composer + set_limited_text_atom_value(SORT_COMPOSER, track->sort_composer); + + // Sort Album + set_limited_text_atom_value(SORT_ALBUM, track->sort_album); + + // Sort TV Show + set_limited_text_atom_value(SORT_TV_SHOW, track->sort_tvshow); + if (prefs_get_int("coverart_apic")) { GdkPixbuf *pixbuf = (GdkPixbuf*) itdb_artwork_get_pixbuf(track->itdb->device, track->artwork, -1, -1); if (!pixbuf) { |
From: phantomjinx <pha...@us...> - 2012-11-10 21:40:36
|
commit 055b183183636dd172c710c72fac161df708cb36 Author: phantomjinx <p.g...@ph...> Date: Sat Nov 10 21:27:03 2012 +0000 Mitigate possibility of sort tab category where track has no value * Possible that a track is used to display a sort tab category but that the track has no metadata value for the category. * Replaces with a hard constant to avoid null pointer crashes Thanks to j.neuschaefer at gmx.net for reporting and debugging plugins/sorttab_display/normal_sorttab_page.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) --- diff --git a/plugins/sorttab_display/normal_sorttab_page.c b/plugins/sorttab_display/normal_sorttab_page.c index ea64cf7..ee00304 100644 --- a/plugins/sorttab_display/normal_sorttab_page.c +++ b/plugins/sorttab_display/normal_sorttab_page.c @@ -990,8 +990,12 @@ void normal_sort_tab_page_add_track(NormalSortTabPage *self, Track *track, gbool entry = g_malloc0(sizeof(TabEntry)); if (group_track) entry->name = g_strdup(_("Compilations")); - else + else { + if (! entryname) + entryname = g_strdup(_("No Metadata Value")); + entry->name = g_strdup(entryname); + } _st_build_sortkeys(entry); entry->compilation = group_track; |
From: phantomjinx <pha...@us...> - 2012-10-23 22:15:34
|
commit 53184951574a6033fec619eb1072ba8dc939118e Author: phantomjinx <p.g...@ph...> Date: Tue Oct 23 23:14:27 2012 +0100 Solve the confusing sorting of the track display * The track display has traditionally been based on the list of displayed tracks. This list comes from the filters, which may have been sorted. Thus, despite turning off sorting in the track display, the tracks can still end up sorted asc/desc due to sorting in the filters * Makes the track display sorting independent by fetching the tracks from the playlist and only displaying those contained in the displayed list. Thus, the track display adopts the tracks from the filter but not their order. * Redefines the tm_autostore preference in that only if it is switched on will the track display sort order be applied automatically to any selected playlist's displayed tracks. Turning this off means tracks will only ever be sorted manually on a per playlist basis by the user. * Adds sort order radio buttons to the track display preferences to make the sort order more prominent. Adds tooltips to explain what the auto checkbox and the sort order radio buttons are for. plugins/track_display/display_tracks.c | 249 +++++++++++---------- plugins/track_display/plugin.c | 3 - plugins/track_display/track_display.xml | 244 +++++++++++++++++++-- plugins/track_display/track_display_preferences.c | 38 +++ 4 files changed, 400 insertions(+), 134 deletions(-) --- diff --git a/plugins/track_display/display_tracks.c b/plugins/track_display/display_tracks.c index f98f723..122e3a8 100644 --- a/plugins/track_display/display_tracks.c +++ b/plugins/track_display/display_tracks.c @@ -142,6 +142,52 @@ static gboolean filter_tracks(GtkTreeModel *model, GtkTreeIter *iter, gpointer e return result; } +static gboolean _is_auto_sort_on() { + return prefs_get_int("tm_autostore"); +} + +static void _sort_trackview() { + GtkTreeModel *model = NULL; + + g_return_if_fail (track_treeview); + + gint column = prefs_get_int("tm_sortcol"); + gint order = prefs_get_int("tm_sort"); + + if (order == SORT_NONE) { + return; + } + + model = gtk_tree_view_get_model(track_treeview); + g_return_if_fail (model); + + if (GTK_IS_TREE_MODEL_FILTER (model)) { + model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); + } + + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), column, order); +} + +static void _unsort_trackview() { + GtkTreeModel *model = NULL; + + g_return_if_fail (track_treeview); + + gint order = prefs_get_int("tm_sort"); + if (order != SORT_NONE) { + return; + } + + model = gtk_tree_view_get_model(track_treeview); + g_return_if_fail (model); + + if (GTK_IS_TREE_MODEL_FILTER (model)) { + model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); + } + + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING); +} + static GtkListStore *get_model_as_store(GtkTreeModel *model) { if (!GTK_IS_TREE_MODEL_FILTER (model)) return GTK_LIST_STORE (model); @@ -1086,22 +1132,45 @@ static gint comp_int(gconstpointer a, gconstpointer b) { return (GPOINTER_TO_INT(a) - (GPOINTER_TO_INT(b))); } -/* Redisplays the tracks in the track view according to the order - * stored in the sort tab view. This only works if the track view is - * not sorted --> skip if sorted */ +/* + * Redisplays the tracks in the track view according to the order + * stored in the current playlist. + */ +static void tm_adopt_order(GList *tracks) { + // Clear the track view + tm_remove_all_tracks(); -static void tm_adopt_order(void) { - if (prefs_get_int("tm_sort") == SORT_NONE) { - GList *gl, *tracks = NULL; + // Unsort the track view to improve performance + _unsort_trackview(); - /* retrieve the currently displayed tracks (non ordered) from - the last sort tab or from the selected playlist if no sort - tabs are being used */ - tm_remove_all_tracks(); - tracks = gtkpod_get_displayed_tracks(); - for (gl = tracks; gl; gl = gl->next) - tm_add_track_to_track_model((Track *) gl->data, NULL); + GHashTable *track_hash = g_hash_table_new(g_direct_hash, g_direct_equal); + GList *dt = tracks; + while (dt != NULL) { /* add display track to hash */ + Track *track = dt->data; + g_hash_table_insert(track_hash, track, track); + dt = dt->next; } + + /* + * add playlist tracks to model in the order they + * appear in the playlist rather than the displayed + * list. + */ + Playlist *cp = gtkpod_get_current_playlist(); + GList *pt = cp->members; + GtkTreeModel *model = gtk_tree_view_get_model(track_treeview); + while (pt != NULL) { + Track *track = pt->data; + ExtraTrackData *etr = track->userdata; + + if (g_hash_table_lookup(track_hash, track)) + gtk_list_store_insert_with_values (get_model_as_store(model), NULL, -1, READOUT_COL, track, -1); + + pt = pt->next; + } + + g_hash_table_destroy(track_hash); + track_hash = NULL; } /** @@ -1538,7 +1607,15 @@ gboolean tm_search_equal_func(GtkTreeModel *model, gint column, const gchar *key } return cmp; } -; + +/* Function used to compare tracks by their sort index */ +static gint _compare_track_sort_index(Track* trk1, Track* trk2) { + ExtraTrackData *etr1 = trk1->userdata; + ExtraTrackData *etr2 = trk2->userdata; + g_return_val_if_fail (etr1 && etr2, 0); + + return etr1->sortindex - etr2->sortindex; +} /* Function used to compare two cells during sorting (track view) */ gint tm_data_compare_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) { @@ -1559,10 +1636,7 @@ gint tm_data_compare_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, g /* implement stable sorting: if two items are the same, revert to the last relative positition */ if (result == 0) { - ExtraTrackData *etr1 = track1->userdata; - ExtraTrackData *etr2 = track2->userdata; - g_return_val_if_fail (etr1 && etr2, 0); - result = etr1->sortindex - etr2->sortindex; + return _compare_track_sort_index(track1, track2); } return result; } @@ -1584,27 +1658,6 @@ gint tm_sort_counter(gint inc) { return cnt; } -/* redisplay the contents of the track view in it's unsorted order */ -static void tm_unsort(void) { - if (track_treeview) { - GtkTreeModel *model = gtk_tree_view_get_model(track_treeview); - - if (GTK_IS_TREE_MODEL_FILTER (model)) { - model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); - } - - prefs_set_int("tm_sort", SORT_NONE); - - /* no need to comment this out -- searching still works, but for lack - of a ctrl-g only the first occurence will be found */ - /* gtk_tree_view_set_enable_search (GTK_TREE_VIEW - * (track_treeview), FALSE);*/ - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING); - tm_adopt_order(); - tm_sort_counter(-1); - } -} - static void tm_set_search_column(TM_item newcol) { /* printf ("track_treeview: %p, col: %d\n", track_treeview, newcol); */ g_return_if_fail (track_treeview); @@ -1669,6 +1722,23 @@ static void tm_set_search_column(TM_item newcol) { prefs_set_int(TM_PREFS_SEARCH_COLUMN, newcol); } +/* + * Sorts and unsorts the track view according to the given order + */ +static void tm_sort(TM_item col, enum GtkPodSortTypes order) { + prefs_set_int("tm_sortcol", col); + prefs_set_int("tm_sort", order); + + if (order == SORT_NONE) { + _unsort_trackview(); + tm_adopt_order(gtkpod_get_displayed_tracks()); + tm_sort_counter(-1); + } + else { + _sort_trackview(); + } +} + /* This is called before when changing the sort order or the sort column, and before doing the sorting */ static void tm_sort_column_changed(GtkTreeSortable *ts, gpointer user_data) { @@ -1701,7 +1771,7 @@ static void tm_sort_column_changed(GtkTreeSortable *ts, gpointer user_data) { } if (tm_sort_counter(1) >= 3) { /* after clicking three times, reset sort order! */ - tm_unsort(); /* also resets sort counter */ + tm_sort(prefs_get_int("tm_sortcol"), SORT_NONE); /* also resets sort counter */ } else { prefs_set_int("tm_sort", order); @@ -1710,14 +1780,12 @@ static void tm_sort_column_changed(GtkTreeSortable *ts, gpointer user_data) { tm_set_search_column(newcol); - 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. - */ - gdk_threads_add_idle(tm_rows_reordered_idle_callback, NULL); - } + /* + * 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. + */ + gdk_threads_add_idle(tm_rows_reordered_idle_callback, NULL); /* stable sorting: index original order */ tracks = tm_get_all_tracks(); @@ -1744,31 +1812,6 @@ static void tm_sort_column_changed(GtkTreeSortable *ts, gpointer user_data) { g_list_free(tracks); } -void tm_sort(TM_item col, enum GtkPodSortTypes order) { - if (track_treeview) { - GtkTreeModel *model = gtk_tree_view_get_model(track_treeview); - - if (GTK_IS_TREE_MODEL_FILTER (model)) { - model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); - } - - if (order != SORT_NONE) { - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), col, order); - } - else { /* only unsort if treeview is sorted */ - gint column; - GtkSortType order; - if (gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE (model), &column, &order)) { - /* column == -2 actually is not defined, but it means - that the model is unsorted. The sortable interface - is badly implemented in gtk 2.4 */ - if (column != -2) - tm_unsort(); - } - } - } -} - /* Adds the columns to our track_treeview */ static GtkTreeViewColumn *tm_add_column(TM_item tm_item, gint pos) { GtkTreeModel *model = gtk_tree_view_get_model(track_treeview); @@ -2243,35 +2286,25 @@ static TM_item tm_lookup_col_id(GtkTreeViewColumn *column) { void tm_enable_disable_view_sort(gboolean enable) { static gint disable_count = 0; + /* + * Sorting will only have been automatic if the preference + * has been set. Otherwise, sorting is a totally manual + * process with the user sorting the displayed tracks. + */ + if(! _is_auto_sort_on()) + return; + if (enable) { disable_count--; if (disable_count < 0) fprintf(stderr, "Programming error: disable_count < 0\n"); if (disable_count == 0 && track_treeview) { - if (prefs_get_int("tm_sort") != SORT_NONE) { - /* Re-enable sorting */ - GtkTreeModel *model = gtk_tree_view_get_model(track_treeview); - - if (GTK_IS_TREE_MODEL_FILTER (model)) { - model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); - } - - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), prefs_get_int("tm_sortcol"), prefs_get_int("tm_sort")); - } + _sort_trackview(); } } else { if (disable_count == 0 && track_treeview) { - if (prefs_get_int("tm_sort") != SORT_NONE) { - /* Disable sorting */ - GtkTreeModel *model = gtk_tree_view_get_model(track_treeview); - - if (GTK_IS_TREE_MODEL_FILTER (model)) { - model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); - } - - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, prefs_get_int("tm_sort")); - } + _unsort_trackview(); } disable_count++; } @@ -2375,28 +2408,18 @@ gboolean tm_add_filelist(gchar *data, GtkTreePath *path, GtkTreeViewDropPosition } void track_display_set_tracks_cb(GtkPodApp *app, gpointer tks, gpointer data) { - GList *tracks = tks; - GtkTreeModel *model = NULL; - - - tm_remove_all_tracks(); - // Unsort the track view to improve performance - model = gtk_tree_view_get_model(track_treeview); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING); + GList *tracks = tks; - while (tracks != NULL) { /* add all tracks to model */ - Track *track = tracks->data; - gtk_list_store_insert_with_values (get_model_as_store(model), NULL, -1, READOUT_COL, track, -1); - tracks = tracks->next; - } + tm_adopt_order(tracks); - if (model) { - int column = prefs_get_int("tm_sortcol"); - int order = prefs_get_int("tm_sort"); - if (order != SORT_NONE) { - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), column, order); - } + /* + * If the preference for auto-sorting has been set then + * sort the tracks view accordingly, otherwise leave it + * as it is. + */ + if (_is_auto_sort_on()) { + _sort_trackview(); } } @@ -2436,7 +2459,7 @@ void track_display_track_updated_cb(GtkPodApp *app, gpointer tk, gpointer data) void track_display_preference_changed_cb(GtkPodApp *app, gpointer pfname, gpointer value, gpointer data) { gchar *pref_name = pfname; - if (g_str_equal(pref_name, "tm_sort")) { + if (g_str_equal(pref_name, "tm_sort") || g_str_equal(pref_name, "tm_autostore")) { tm_sort_counter(-1); tm_sort(prefs_get_int("tm_sortcol"), prefs_get_int("tm_sort")); } diff --git a/plugins/track_display/plugin.c b/plugins/track_display/plugin.c index 3b57113..519c169 100644 --- a/plugins/track_display/plugin.c +++ b/plugins/track_display/plugin.c @@ -86,9 +86,6 @@ static void set_default_preferences() { prefs_set_string("sm_sort_", NULL); } - if (!prefs_get_int_value("tm_autostore", NULL)) - 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 e73eb30..ec00223 100644 --- a/plugins/track_display/track_display.xml +++ b/plugins/track_display/track_display.xml @@ -284,15 +284,16 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> + <property name="spacing">10</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="label" translatable="yes">Automatically sort selected tracks 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="tooltip_markup" translatable="yes">if checked, the sort order (defined below) will be applied to the selected playlist.</property> + <property name="tooltip_text" translatable="yes">if checked, the sort order (defined below) 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> @@ -307,24 +308,231 @@ </packing> </child> <child> - <object class="GtkCheckButton" id="tm_cfg_case_sensitive"> - <property name="label" translatable="yes">Case sensitive sorting</property> + <object class="GtkFrame" id="frame4"> <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, 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" swapped="no"/> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment4"> + <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="vbox2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="spacing">10</property> + <child> + <object class="GtkHBox" id="hbox30"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">5</property> + <property name="n_rows">2</property> + <property name="n_columns">3</property> + <child> + <object class="GtkLabel" id="label820"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes"><b>Ascending</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label850"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes"><b>Descending</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="tm_sort_ascend"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_markup" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="tooltip_text" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="use_action_appearance">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + <property name="group">tm_sort_none</property> + <signal name="toggled" handler="on_tm_sort_asc_toggled" swapped="no"/> + <child> + <object class="GtkImage" id="image1928"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-sort-ascending</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"></property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="tm_sort_descend"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_markup" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="tooltip_text" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="use_action_appearance">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + <property name="group">tm_sort_none</property> + <signal name="toggled" handler="on_tm_sort_desc_toggled" swapped="no"/> + <child> + <object class="GtkImage" id="image1929"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-sort-descending</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label86"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_markup" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="tooltip_text" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="label" translatable="yes"><b>None</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="tm_sort_none"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_markup" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="tooltip_text" translatable="yes">Sort order applied to displayed tracks. + +This is only applied if the 'auto sort tracks' +checkbox (above) is checked.</property> + <property name="use_action_appearance">False</property> + <property name="xalign">0</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_tm_sort_none_toggled" swapped="no"/> + <child> + <object class="GtkImage" id="image1930"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-undo</property> + </object> + </child> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"></property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</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> + <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, 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" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes"><b>Track Display Sort Order</b></property> + <property name="use_markup">True</property> + </object> + </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">1</property> </packing> </child> diff --git a/plugins/track_display/track_display_preferences.c b/plugins/track_display/track_display_preferences.c index 6db338e..628e488 100644 --- a/plugins/track_display/track_display_preferences.c +++ b/plugins/track_display/track_display_preferences.c @@ -31,6 +31,7 @@ #include "libgtkpod/misc_conversion.h" #include "libgtkpod/prefs.h" #include "libgtkpod/directories.h" +#include "libgtkpod/gp_private.h" #include "plugin.h" #include "display_tracks.h" @@ -425,6 +426,27 @@ G_MODULE_EXPORT void on_tm_sort_autostore_toggled(GtkToggleButton *togglebutton, gtkpod_broadcast_preference_change("tm_autostore", &val); } +G_MODULE_EXPORT void on_tm_sort_none_toggled(GtkToggleButton *togglebutton, gpointer user_data) { + if (gtk_toggle_button_get_active(togglebutton)) { + prefs_set_int("tm_sort", SORT_NONE); + gtkpod_broadcast_preference_change("tm_sort", GINT_TO_POINTER(SORT_NONE)); + } +} + +G_MODULE_EXPORT void on_tm_sort_asc_toggled(GtkToggleButton *togglebutton, gpointer user_data) { + if (gtk_toggle_button_get_active(togglebutton)) { + prefs_set_int("tm_sort", SORT_ASCENDING); + gtkpod_broadcast_preference_change("tm_sort", GINT_TO_POINTER(SORT_ASCENDING)); + } +} + +G_MODULE_EXPORT void on_tm_sort_desc_toggled(GtkToggleButton *togglebutton, gpointer user_data) { + if (gtk_toggle_button_get_active(togglebutton)) { + prefs_set_int("tm_sort", SORT_DESCENDING); + gtkpod_broadcast_preference_change("tm_sort", GINT_TO_POINTER(SORT_DESCENDING)); + } +} + GtkWidget *init_track_display_preferences() { GtkComboBox *cmd_combo; gint i = 0; @@ -471,6 +493,22 @@ GtkWidget *init_track_display_preferences() { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), prefs_get_int("tm_autostore")); } + // Sort toggle buttons + switch (prefs_get_int("tm_sort")) { + case SORT_ASCENDING: + w = gtkpod_builder_xml_get_widget(prefbuilder, "tm_sort_ascend"); + break; + case SORT_DESCENDING: + w = gtkpod_builder_xml_get_widget(prefbuilder, "tm_sort_descend"); + break; + default: + w = gtkpod_builder_xml_get_widget(prefbuilder, "tm_sort_none"); + break; + } + + if (w) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE); + gtk_builder_connect_signals(prefbuilder, NULL); return notebook; |
From: phantomjinx <pha...@us...> - 2012-10-23 22:15:28
|
commit 3691ab555c811ef87fb9f902b76089aa6f7b514e Author: phantomjinx <p.g...@ph...> Date: Tue Oct 23 21:35:22 2012 +0100 Reduce the number of selection changed callbacks * When a playlist is selected, the sorttabs are repopulated and their selections reselected. This causes the displayed tracks to be reset, producing more signals and firing more callbacks. * Reduces the number of callbacks fired by only initiating the idle selection callback if one has not already been scheduled. plugins/sorttab_display/normal_sorttab_page.c | 33 ++++++++++++++++++++++++- 1 files changed, 32 insertions(+), 1 deletions(-) --- diff --git a/plugins/sorttab_display/normal_sorttab_page.c b/plugins/sorttab_display/normal_sorttab_page.c index 9dfb338..ea64cf7 100644 --- a/plugins/sorttab_display/normal_sorttab_page.c +++ b/plugins/sorttab_display/normal_sorttab_page.c @@ -41,6 +41,8 @@ #include "normal_sorttab_page.h" #include "sorttab_display_context_menu.h" +#define NO_IDLE_SELECTION_CALLBACK -1 + G_DEFINE_TYPE( NormalSortTabPage, normal_sort_tab_page, GTK_TYPE_TREE_VIEW); #define NORMAL_SORT_TAB_PAGE_GET_PRIVATE(obj) \ @@ -60,6 +62,12 @@ struct _NormalSortTabPagePrivate { /* Handler id of the selection changed callback */ gulong selection_changed_id; + /* + * Handler id of the idle callback when the selection + * changed callback is executed + */ + guint selection_changed_idle_id; + /* name of entry last selected */ GList *last_selection; @@ -547,6 +555,8 @@ static gboolean _st_selection_changed_cb(gpointer data) { time.tv_sec % 3600, time.tv_usec); #endif + priv->selection_changed_idle_id = NO_IDLE_SELECTION_CALLBACK; + return FALSE; } @@ -558,10 +568,28 @@ static gboolean _st_selection_changed_cb(gpointer data) { * called. */ static void _st_selection_changed(GtkTreeSelection *selection, gpointer user_data) { + + NormalSortTabPage *self = NORMAL_SORT_TAB_PAGE(user_data); + gulong idleId = NO_IDLE_SELECTION_CALLBACK; + + if (self) { + NormalSortTabPagePrivate *priv = NORMAL_SORT_TAB_PAGE_GET_PRIVATE(self); + idleId = priv->selection_changed_idle_id; + } + #if DEBUG_CB_INIT printf("st_s_c enter (inst: %p)\n", (gint)user_data); #endif - gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, _st_selection_changed_cb, user_data, NULL); + + if (idleId == NO_IDLE_SELECTION_CALLBACK) { + // Only execute an idle function if one has not already been scheduled + idleId = gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE, _st_selection_changed_cb, user_data, NULL); + if (self) { + NormalSortTabPagePrivate *priv = NORMAL_SORT_TAB_PAGE_GET_PRIVATE(self); + priv->selection_changed_idle_id = idleId; + } + } + #if DEBUG_CB_INIT printf("st_s_c exit (inst: %p)\n", (gint)user_data); #endif @@ -883,6 +911,9 @@ GtkWidget *normal_sort_tab_page_new(SortTabWidget *st_widget_parent, ST_CAT_item priv->selection_changed_id = g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (_st_selection_changed), nst); + + priv->selection_changed_idle_id = NO_IDLE_SELECTION_CALLBACK; + /* * set string compare function according to * whether the ignore field is set or not |
From: phantomjinx <pha...@us...> - 2012-10-13 21:37:56
|
commit 1824e421d05c45339ce49d3b298ba7e9cc01f5c8 Author: phantomjinx <p.g...@ph...> Date: Sat Oct 13 22:37:13 2012 +0100 Fix to cater for changing API in anjuta version 3.5.3+ * Contribute to future proofing against new versions of anjuta library * Thanks to Dominique (dimstar at opensuse.org) for the report and patch src/anjuta-app.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) --- diff --git a/src/anjuta-app.c b/src/anjuta-app.c index 9f4d6db..df08b06 100644 --- a/src/anjuta-app.c +++ b/src/anjuta-app.c @@ -38,6 +38,7 @@ #include <libanjuta/resources.h> #include <libanjuta/anjuta-plugin-manager.h> #include <libanjuta/anjuta-debug.h> +#include <libanjuta/anjuta-version.h> #include "anjuta-app.h" #include "anjuta-actions.h" @@ -501,7 +502,11 @@ static void anjuta_app_instance_init(AnjutaApp *app) { g_list_free(plugins_dirs); /* Preferences */ +#if ANJUTA_CHECK_VERSION(3,5,3) + app->preferences = anjuta_preferences_new(app->plugin_manager, PREF_SCHEMA); +#else app->preferences = anjuta_preferences_new(app->plugin_manager); +#endif g_object_add_weak_pointer(G_OBJECT (app->preferences), (gpointer) &app->preferences); g_signal_connect(app->settings, "changed::" GDL_STYLE, G_CALLBACK(on_gdl_style_changed), app); |
From: Javier K. <jk...@us...> - 2012-10-07 06:48:09
|
commit 0a3750d1b19183c6684ed998247b2a28fe1e6c5f Author: Javier Kohen <jk...@us...> Date: Sun Oct 7 08:42:42 2012 +0200 Add backward compatible definition for g_mapped_file_unref. configure.ac | 5 +++-- src/db-parse-context.c | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) --- diff --git a/configure.ac b/configure.ac index 04949cc..8c1ecd9 100644 --- a/configure.ac +++ b/configure.ac @@ -45,8 +45,8 @@ dnl by libgpod sqlite code PKG_CHECK_MODULES(LIBGPOD, glib-2.0 >= 2.16.0 gobject-2.0 sqlite3 libplist >= 1.0 gmodule-2.0) dnl *************************************************** -dnl g_gint64_hash and g_gint64_equal are only available -dnl starting from glib 2.22. +dnl The following functions are only available starting +dnl from glib 2.22. dnl *************************************************** saved_CFLAGS="$CFLAGS" saved_LIBS="$LIBS" @@ -54,6 +54,7 @@ CFLAGS="$LIBGPOD_CFLAGS $CFLAGS" LIBS="$LIBGPOD_LIBS $LIBS" AC_CHECK_FUNCS([g_int64_hash g_int64_equal]) AC_CHECK_FUNCS([g_checksum_reset]) +AC_CHECK_FUNCS([g_mapped_file_unref]) CFLAGS="$saved_CFLAGS" LIBS="$saved_LIBS" diff --git a/src/db-parse-context.c b/src/db-parse-context.c index 789b3e9..89b9e33 100644 --- a/src/db-parse-context.c +++ b/src/db-parse-context.c @@ -40,6 +40,10 @@ #include "db-itunes-parser.h" #include "itdb_endianness.h" +#ifndef HAVE_G_MAPPED_FILE_UNREF +#define g_mapped_file_unref(f) g_mapped_file_free(f) +#endif + DBParseContext * db_parse_context_new (const unsigned char *buffer, off_t len, guint byte_order) { |
From: Javier K. <jk...@us...> - 2012-10-07 06:48:03
|
commit c10822a75a9ae893df23f2a6a69d7d20f8438d68 Merge: cc909f3 f2d3b3c Author: Javier Kohen <jk...@us...> Date: Sun Oct 7 08:34:57 2012 +0200 Merge branch 'dev' of git://github.com/neuschaefer/libgpod src/db-parse-context.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) --- |
From: Javier K. <jk...@us...> - 2012-10-07 06:47:57
|
commit cc909f3e38aebeb6c560ae9d07a1adad0519036d Author: Jonathan Neuschäfer <j.n...@gm...> Date: Thu Sep 27 20:28:31 2012 +0200 replace deprecated g_basename() g_basename is deprecated since GLib 2.2. As all of these calls are done just before the program terminates, we might as well skip the g_free. tests/get-timezone.c | 4 +++- tests/itdb_main.c | 5 ++++- tests/test-cp.cc | 4 +++- tests/test-fw-id.c | 4 +++- tests/test-ls.c | 6 ++++-- tests/test-rebuild-db.cc | 4 +++- tools/ipod-time-sync.c | 6 ++++-- tools/read-sysinfoextended.c | 6 ++++-- 8 files changed, 28 insertions(+), 11 deletions(-) --- diff --git a/tests/get-timezone.c b/tests/get-timezone.c index e453ca3..60977d9 100644 --- a/tests/get-timezone.c +++ b/tests/get-timezone.c @@ -28,7 +28,9 @@ int main (int argc, char **argv) if (argc >= 2) { mountpoint = argv[1]; } else { - g_print ("Usage: %s <mountpoint>\n\n", g_basename(argv[0])); + char *basename = g_path_get_basename(argv[0]); + g_print ("Usage: %s <mountpoint>\n\n", basename); + g_free (basename); return -1; } diff --git a/tests/itdb_main.c b/tests/itdb_main.c index e7723bb..1cc03a4 100644 --- a/tests/itdb_main.c +++ b/tests/itdb_main.c @@ -55,7 +55,10 @@ main (int argc, char *argv[]) if (infile == 0) { - printf ("Usage: %s <infile> [<outfile>]\n", g_basename(argv[0])); + char *basename = g_path_get_basename(argv[0]); + printf ("Usage: %s <infile> [<outfile>]\n", basename); + g_free(basename); + exit (0); } diff --git a/tests/test-cp.cc b/tests/test-cp.cc index cec778d..73a1dd9 100644 --- a/tests/test-cp.cc +++ b/tests/test-cp.cc @@ -108,8 +108,10 @@ int main (int argc, char **argv) GError *error; if (argc != 3) { + char *basename = g_path_get_basename(argv[0]); g_print ("Usage:\n"); - g_print ("%s <filename> <mountpoint> \n", g_basename (argv[0])); + g_print ("%s <filename> <mountpoint> \n", basename); + g_free (basename); exit (1); } diff --git a/tests/test-fw-id.c b/tests/test-fw-id.c index 7490001..085123a 100644 --- a/tests/test-fw-id.c +++ b/tests/test-fw-id.c @@ -42,7 +42,9 @@ main (int argc, char *argv[]) char *fwid; if (argc < 2) { - g_print ("Usage: %s <mountpoint>\n", g_basename (argv[0])); + char *basename = g_path_get_basename(argv[0]); + g_print ("Usage: %s <mountpoint>\n", basename); + g_free (basename); return 1; } diff --git a/tests/test-ls.c b/tests/test-ls.c index e28cd9c..464824e 100644 --- a/tests/test-ls.c +++ b/tests/test-ls.c @@ -118,10 +118,12 @@ main (int argc, char *argv[]) if (mountpoint == NULL) { + char *basename = g_path_get_basename (argv[0]); g_print ("Usage: %s <mountpoint>|-l [<playlistname>]\n\n" "-l - List from the local repository (~" LOCALDB ")\n" - "<playlistname> - name of the playlist to list (optional)\n", - g_basename(argv[0])); + "<playlistname> - name of the playlist to list (optional)\n", + basename); + g_free (basename); exit (0); } diff --git a/tests/test-rebuild-db.cc b/tests/test-rebuild-db.cc index fbcaf1e..f2b05ef 100644 --- a/tests/test-rebuild-db.cc +++ b/tests/test-rebuild-db.cc @@ -216,8 +216,10 @@ int main (int argc, char **argv) GError *error; if (argc != 2) { + char *basename = g_path_get_basename(argv[0]); g_print ("Usage:\n"); - g_print ("%s <mountpoint>\n", g_basename (argv[0])); + g_print ("%s <mountpoint>\n", basename); + g_free (basename); exit (1); } diff --git a/tools/ipod-time-sync.c b/tools/ipod-time-sync.c index 0cc62f1..a0cc163 100644 --- a/tools/ipod-time-sync.c +++ b/tools/ipod-time-sync.c @@ -34,8 +34,10 @@ int main (int argc, char **argv) { if (argc < 2) { - g_print (_("usage: %s <device> [timezone]\n"), g_basename (argv[0])); - return 1; + char *basename = g_path_get_basename (argv[0]); + g_print (_("usage: %s <device> [timezone]\n"), basename); + g_free (basename); + return 1; } sync_time (argv[1], NULL); diff --git a/tools/read-sysinfoextended.c b/tools/read-sysinfoextended.c index b3afd2c..8262137 100644 --- a/tools/read-sysinfoextended.c +++ b/tools/read-sysinfoextended.c @@ -78,8 +78,10 @@ main (int argc, char **argv) char *xml; if (argc < 3) { - g_print (_("usage: %s <device|uuid|bus device> <mountpoint>\n"), g_basename (argv[0])); - return 1; + char *basename = g_path_get_basename (argv[0]); + g_print (_("usage: %s <device|uuid|bus device> <mountpoint>\n"), basename); + g_free (basename); + return 1; } xml = NULL; |
From: Javier K. <jk...@us...> - 2012-10-07 06:47:51
|
commit b4569d6e34b56c681d97d21f3fb917e65b6478d1 Author: Jonathan Neuschäfer <j.n...@gm...> Date: Thu Sep 27 20:19:45 2012 +0200 replace deprecated gdk_pixbuf_unref() gdk_pixbuf_unref is depreceted since Gdk 2.0. src/itdb_artwork.c | 6 +++--- src/itdb_thumb.c | 4 ++-- tests/test-covers.c | 2 +- tests/test-photos.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) --- diff --git a/src/itdb_artwork.c b/src/itdb_artwork.c index 2328840..c595d70 100644 --- a/src/itdb_artwork.c +++ b/src/itdb_artwork.c @@ -849,7 +849,7 @@ gpointer itdb_thumb_ipod_item_to_pixbuf (Itdb_Device *device, NULL); /* !! do not g_free(pixels) here: it will be freed when doing a - * gdk_pixbuf_unref() on the GdkPixbuf !! */ + * g_object_unref() on the GdkPixbuf !! */ /* Remove padding from the pixmap and/or cut the pixmap to the right size. */ @@ -882,8 +882,8 @@ gpointer itdb_thumb_ipod_item_to_pixbuf (Itdb_Device *device, pad_x, pad_y, width, height); pixbuf = gdk_pixbuf_copy (pixbuf_sub); - gdk_pixbuf_unref (pixbuf_full); - gdk_pixbuf_unref (pixbuf_sub); + g_object_unref (pixbuf_full); + g_object_unref (pixbuf_sub); return pixbuf; } diff --git a/src/itdb_thumb.c b/src/itdb_thumb.c index 8ed3b6f..8b3c8a1 100644 --- a/src/itdb_thumb.c +++ b/src/itdb_thumb.c @@ -374,7 +374,7 @@ const GList *itdb_thumb_ipod_get_thumbs (Itdb_Thumb_Ipod *thumbs) * GDK_PIXBUF() yourself. * </note> * - * Returns: a #GdkPixbuf that must be unreffed with gdk_pixbuf_unref() + * Returns: a #GdkPixbuf that must be unreffed with g_object_unref() * after use, or NULL if the creation of the gdk-pixbuf failed or if * libgpod was compiled without gdk-pixbuf support. * @@ -547,7 +547,7 @@ static GList *itdb_thumb_ipod_to_pixbufs (Itdb_Device *device, * * Returns: a #GList of #GdkPixbuf which are associated with @thumb, NULL * if the pixbuf was invalid or if libgpod is compiled without gdk-pixbuf - * support. The #GdkPixbuf must be unreffed with gdk_pixbuf_unref() after use + * support. The #GdkPixbuf must be unreffed with g_object_unref() after use * and the #GList must be freed with g_list_free(). * * Since: 0.7.0 diff --git a/tests/test-covers.c b/tests/test-covers.c index 20b4d7b..4d3a68f 100644 --- a/tests/test-covers.c +++ b/tests/test-covers.c @@ -53,7 +53,7 @@ save_itdb_thumb (Itdb_Track *track, GdkPixbuf *pixbuf, guint id) } g_print (" %s\n", filename); gdk_pixbuf_save (pixbuf, filename, "png", NULL, NULL); - gdk_pixbuf_unref (pixbuf); + g_object_unref (pixbuf); /* g_print ("Saved %s\n", filename); */ g_free (filename); } diff --git a/tests/test-photos.c b/tests/test-photos.c index 930e66b..b5bd89d 100644 --- a/tests/test-photos.c +++ b/tests/test-photos.c @@ -81,7 +81,7 @@ dump_thumbs (Itdb_PhotoDB *db, Itdb_Artwork *artwork, path = g_build_filename (dir, filename, NULL); g_free (filename); gdk_pixbuf_save (pixbuf, path, "png", NULL, NULL); - gdk_pixbuf_unref (pixbuf); + g_object_unref (pixbuf); g_free (path); } g_list_free (thumbnails); |
From: Javier K. <jk...@us...> - 2012-10-07 06:47:45
|
commit 265419cc92e7acc495e7efd4761f2ff225b5a0f6 Author: Jonathan Neuschäfer <j.n...@gm...> Date: Thu Sep 27 21:06:21 2012 +0200 configure.ac: fix a minor typo configure.ac | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) --- diff --git a/configure.ac b/configure.ac index 25a14d2..04949cc 100644 --- a/configure.ac +++ b/configure.ac @@ -192,7 +192,7 @@ AH_TEMPLATE([TMPMOUNTDIR], [Directory where HAL/udev will create a sub-directory AC_DEFINE_UNQUOTED(TMPMOUNTDIR, "$with_temp_mount_dir", [Directory where HAL/udev will create a sub-directory to mount iPods]) dnl *********************************************************************** -dnl * provide a $l{ibdir}/libgpod directory for external modules +dnl * provide a ${libdir}/libgpod directory for external modules dnl *********************************************************************** AC_ARG_WITH(libgpod-blob-dir, [AC_HELP_STRING([--with-libgpod-blob-dir=PATH], [Load libgpod binary blobs from this directory [LIBDIR/libgpod]])], |
From: Javier K. <jk...@us...> - 2012-10-07 06:47:39
|
commit c42fe81c50d08a2f7f8cea16abdc7e99dddfeb0a Author: Jonathan Neuschäfer <j.n...@gm...> Date: Thu Sep 27 21:02:01 2012 +0200 configure.ac: show --disable-udev, not --enable-udev This makes it more obvious that udev is enabled by default. configure.ac | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) --- diff --git a/configure.ac b/configure.ac index 669d433..25a14d2 100644 --- a/configure.ac +++ b/configure.ac @@ -164,7 +164,7 @@ dnl * nowadays (2009), it's the recommended way of having callouts, so dnl * it should be preferred over HAL, and it's enabled by default. dnl *********************************************************************** AC_ARG_ENABLE(udev, - [AS_HELP_STRING([--enable-udev],[Enable udev callout])], + [AS_HELP_STRING([--disable-udev],[Disable udev callout])], [if test x"$enableval" = "xno" ; then enable_udev=no else |
From: Javier K. <jk...@us...> - 2012-10-07 06:47:33
|
commit f2d3b3c8c13619e84af3cb13140f7ce20fe52f23 Author: Jonathan Neuschäfer <j.n...@gm...> Date: Thu Sep 27 21:06:21 2012 +0200 configure.ac: fix a minor typo configure.ac | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) --- diff --git a/configure.ac b/configure.ac index 25a14d2..04949cc 100644 --- a/configure.ac +++ b/configure.ac @@ -192,7 +192,7 @@ AH_TEMPLATE([TMPMOUNTDIR], [Directory where HAL/udev will create a sub-directory AC_DEFINE_UNQUOTED(TMPMOUNTDIR, "$with_temp_mount_dir", [Directory where HAL/udev will create a sub-directory to mount iPods]) dnl *********************************************************************** -dnl * provide a $l{ibdir}/libgpod directory for external modules +dnl * provide a ${libdir}/libgpod directory for external modules dnl *********************************************************************** AC_ARG_WITH(libgpod-blob-dir, [AC_HELP_STRING([--with-libgpod-blob-dir=PATH], [Load libgpod binary blobs from this directory [LIBDIR/libgpod]])], |