diff options
-rw-r--r-- | callbacks.c | 8 | ||||
-rw-r--r-- | callbacks.h | 4 | ||||
-rw-r--r-- | deadbeef.glade | 19 | ||||
-rw-r--r-- | gtkplaylist.c | 20 | ||||
-rw-r--r-- | interface.c | 14 | ||||
-rw-r--r-- | main.c | 1 | ||||
-rw-r--r-- | progress.c | 1 | ||||
-rw-r--r-- | session.c | 63 | ||||
-rw-r--r-- | session.h | 6 |
9 files changed, 101 insertions, 35 deletions
diff --git a/callbacks.c b/callbacks.c index 81906ec3..070add31 100644 --- a/callbacks.c +++ b/callbacks.c @@ -1188,3 +1188,11 @@ on_mainwin_configure_event (GtkWidget *widget, return FALSE; } + +void +on_cursor_follows_playback_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + session_set_cursor_follows_playback (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem))); +} + diff --git a/callbacks.h b/callbacks.h index 8857d7cf..a79215c1 100644 --- a/callbacks.h +++ b/callbacks.h @@ -492,3 +492,7 @@ gboolean on_mainwin_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); + +void +on_cursor_follows_playback_activate (GtkMenuItem *menuitem, + gpointer user_data); diff --git a/deadbeef.glade b/deadbeef.glade index ad3f85c0..d597fd12 100644 --- a/deadbeef.glade +++ b/deadbeef.glade @@ -14,7 +14,6 @@ <property name="default_height">300</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> - <property name="icon">play_24.png</property> <property name="icon_name"></property> <property name="decorated">True</property> <property name="skip_taskbar_hint">False</property> @@ -222,7 +221,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Shuffle</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <property name="group">order_linear</property> <signal name="activate" handler="on_order_shuffle_activate" last_modification_time="Fri, 21 Aug 2009 16:46:02 GMT"/> </widget> @@ -233,7 +232,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Random</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <property name="group">order_linear</property> <signal name="activate" handler="on_order_random_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/> </widget> @@ -267,7 +266,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Loop Single Song</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <property name="group">loop_all</property> <signal name="activate" handler="on_loop_single_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/> </widget> @@ -278,7 +277,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Don't Loop</property> <property name="use_underline">True</property> - <property name="active">False</property> + <property name="active">True</property> <property name="group">loop_all</property> <signal name="activate" handler="on_loop_disable_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/> </widget> @@ -287,6 +286,16 @@ </child> </widget> </child> + + <child> + <widget class="GtkCheckMenuItem" id="cursor_follows_playback"> + <property name="visible">True</property> + <property name="label" translatable="yes">Cursor follows playback</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <signal name="activate" handler="on_cursor_follows_playback_activate" last_modification_time="Thu, 27 Aug 2009 18:17:17 GMT"/> + </widget> + </child> </widget> </child> </widget> diff --git a/gtkplaylist.c b/gtkplaylist.c index 488c1dfb..dc0783f4 100644 --- a/gtkplaylist.c +++ b/gtkplaylist.c @@ -42,6 +42,7 @@ #include "search.h" #include "progress.h" #include "drawing.h" +#include "session.h" // orange on dark color scheme float colo_dark_orange[COLO_COUNT][3] = { @@ -741,14 +742,17 @@ gtkpl_playsongnum (int idx) { void gtkpl_songchanged (gtkplaylist_t *ps, int from, int to) { - if (from >= 0 || to >= 0) { - GtkWidget *widget = ps->playlist; - if (from >= 0) { - gtkpl_redraw_pl_row (ps, from, gtkpl_get_for_idx (ps, from)); - } - if (to >= 0) { - gtkpl_redraw_pl_row (ps, to, gtkpl_get_for_idx (ps, to)); - } + GtkWidget *widget = ps->playlist; + if (to >= 0 && session_get_cursor_follows_playback ()) { + gtk_range_set_value (GTK_RANGE (ps->scrollbar), to - ps->nvisiblerows/2); + return; + } + + if (from >= 0) { + gtkpl_redraw_pl_row (ps, from, gtkpl_get_for_idx (ps, from)); + } + if (to >= 0) { + gtkpl_redraw_pl_row (ps, to, gtkpl_get_for_idx (ps, to)); } } diff --git a/interface.c b/interface.c index ab493525..0b24d0f8 100644 --- a/interface.c +++ b/interface.c @@ -65,6 +65,7 @@ create_mainwin (void) GtkWidget *loop_all; GtkWidget *loop_single; GtkWidget *loop_disable; + GtkWidget *cursor_follows_playback; GtkWidget *menuitem4; GtkWidget *menuitem4_menu; GtkWidget *about1; @@ -206,11 +207,13 @@ create_mainwin (void) order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_shuffle)); gtk_widget_show (order_shuffle); gtk_container_add (GTK_CONTAINER (order1_menu), order_shuffle); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_shuffle), TRUE); order_random = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, "Random"); order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_random)); gtk_widget_show (order_random); gtk_container_add (GTK_CONTAINER (order1_menu), order_random); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_random), TRUE); looping1 = gtk_menu_item_new_with_mnemonic ("Looping"); gtk_widget_show (looping1); @@ -229,11 +232,18 @@ create_mainwin (void) loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_single)); gtk_widget_show (loop_single); gtk_container_add (GTK_CONTAINER (looping1_menu), loop_single); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (loop_single), TRUE); loop_disable = gtk_radio_menu_item_new_with_mnemonic (loop_all_group, "Don't Loop"); loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_disable)); gtk_widget_show (loop_disable); gtk_container_add (GTK_CONTAINER (looping1_menu), loop_disable); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (loop_disable), TRUE); + + cursor_follows_playback = gtk_check_menu_item_new_with_mnemonic ("Cursor follows playback"); + gtk_widget_show (cursor_follows_playback); + gtk_container_add (GTK_CONTAINER (playlist1_menu), cursor_follows_playback); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (cursor_follows_playback), TRUE); menuitem4 = gtk_menu_item_new_with_mnemonic ("_Help"); gtk_widget_show (menuitem4); @@ -414,6 +424,9 @@ create_mainwin (void) g_signal_connect ((gpointer) loop_disable, "activate", G_CALLBACK (on_loop_disable_activate), NULL); + g_signal_connect ((gpointer) cursor_follows_playback, "activate", + G_CALLBACK (on_cursor_follows_playback_activate), + NULL); g_signal_connect ((gpointer) about1, "activate", G_CALLBACK (on_about1_activate), NULL); @@ -573,6 +586,7 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, loop_all, "loop_all"); GLADE_HOOKUP_OBJECT (mainwin, loop_single, "loop_single"); GLADE_HOOKUP_OBJECT (mainwin, loop_disable, "loop_disable"); + GLADE_HOOKUP_OBJECT (mainwin, cursor_follows_playback, "cursor_follows_playback"); GLADE_HOOKUP_OBJECT (mainwin, menuitem4, "menuitem4"); GLADE_HOOKUP_OBJECT (mainwin, menuitem4_menu, "menuitem4_menu"); GLADE_HOOKUP_OBJECT (mainwin, about1, "about1"); @@ -619,6 +619,7 @@ main (int argc, char *argv[]) { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (lookup_widget (mainwin, w)), TRUE); w = loopingwidgets[session_get_playlist_looping ()]; gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (lookup_widget (mainwin, w)), TRUE); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (lookup_widget (mainwin, "cursor_follows_playback")), session_get_cursor_follows_playback () ? TRUE : FALSE); searchwin = create_searchwin (); gtk_window_set_transient_for (GTK_WINDOW (searchwin), GTK_WINDOW (mainwin)); @@ -47,7 +47,6 @@ progress_show (void) { void progress_hide (void) { - printf ("progress_hide\n"); gtk_widget_hide (progressdlg); } @@ -22,13 +22,31 @@ #include "session.h" #include "common.h" +#define SESS_CURRENT_VER 2 + +// NOTE: dont forget to update session_reset when changing that char session_dir[2048]; float session_volume; -int session_playlist_order; -int session_playlist_looping; +int8_t session_playlist_order; +int8_t session_playlist_looping; +int8_t session_cursor_follows_playback = 1; int session_win_attrs[5] = { 40, 40, 500, 300, 0 }; static uint8_t sessfile_magic[] = { 0xdb, 0xef, 0x5e, 0x55 }; // dbefsess in hexspeak +void +session_reset (void) { + session_volume = 0; + session_dir[0] = 0; + session_playlist_looping = 0; + session_playlist_order = 0; + session_cursor_follows_playback = 1; + session_win_attrs[0] = 40; + session_win_attrs[1] = 40; + session_win_attrs[2] = 500; + session_win_attrs[3] = 300; + session_win_attrs[4] = 0; +} + static int write_i16_be (uint16_t val, FILE *fp) { uint8_t b; @@ -105,19 +123,6 @@ read_i32_be (uint32_t *pval, FILE *fp) { return 4; } -void -session_reset (void) { - session_volume = 0; - session_dir[0] = 0; - session_playlist_looping = 0; - session_playlist_order = 0; - session_win_attrs[0] = 40; - session_win_attrs[1] = 40; - session_win_attrs[2] = 500; - session_win_attrs[3] = 300; - session_win_attrs[4] = 0; -} - int session_save (const char *fname) { FILE *fp = fopen (fname, "w+b"); @@ -129,7 +134,7 @@ session_save (const char *fname) { if (fwrite (sessfile_magic, 1, 4, fp) != 4) { goto session_save_fail; } - uint8_t version = 1; + uint8_t version = SESS_CURRENT_VER; if (fwrite (&version, 1, 1, fp) != 1) { goto session_save_fail; } @@ -143,10 +148,13 @@ session_save (const char *fname) { if (write_i32_be (*((uint32_t*)&session_volume), fp) != 4) { goto session_save_fail; } - if (write_i32_be (session_playlist_order, fp) != 4) { + if (fwrite (&session_playlist_order, 1, 1, fp) != 1) { + goto session_save_fail; + } + if (fwrite (&session_playlist_looping, 1, 1, fp) != 1) { goto session_save_fail; } - if (write_i32_be (session_playlist_looping, fp) != 4) { + if (fwrite (&session_cursor_follows_playback, 1, 1, fp) != 1) { goto session_save_fail; } for (int k = 0; k < 5; k++) { @@ -180,7 +188,7 @@ session_load (const char *fname) { if (fread (&version, 1, 1, fp) != 1) { goto session_load_fail; } - if (version != 1) { + if (version != SESS_CURRENT_VER) { goto session_load_fail; } uint16_t l; @@ -197,18 +205,21 @@ session_load (const char *fname) { if (read_i32_be ((uint32_t*)&session_volume, fp) != 4) { goto session_load_fail; } - if (read_i32_be (&session_playlist_order, fp) != 4) { + if (fread (&session_playlist_order, 1, 1, fp) != 1) { goto session_load_fail; } if (session_playlist_order < 0 || session_playlist_order > 2) { goto session_load_fail; } - if (read_i32_be (&session_playlist_looping, fp) != 4) { + if (fread (&session_playlist_looping, 1, 1, fp) != 1) { goto session_load_fail; } if (session_playlist_looping < 0 || session_playlist_looping > 2) { goto session_load_fail; } + if (fread (&session_cursor_follows_playback, 1, 1, fp) != 1) { + goto session_load_fail; + } for (int k = 0; k < 5; k++) { if (read_i32_be (&session_win_attrs[k], fp) != 4) { goto session_load_fail; @@ -265,3 +276,13 @@ int session_get_playlist_looping (void) { return session_playlist_looping; } + +void +session_set_cursor_follows_playback (int on) { + session_cursor_follows_playback = on; +} + +int +session_get_cursor_follows_playback (void) { + return session_cursor_follows_playback; +} @@ -52,6 +52,12 @@ int session_get_playlist_order (void); void +session_set_cursor_follows_playback (int on); + +int +session_get_cursor_follows_playback (void); + +void session_set_playlist_looping (int looping); int |