summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2009-08-27 20:37:13 +0200
committerGravatar waker <wakeroid@gmail.com>2009-08-27 20:37:13 +0200
commitf66ceea04ef9a373398f0416130b300629405952 (patch)
treea4b50ec4011845499cf1e934cd903ce35d63e149
parent05bd1d579b05814725b65d1380b600bfdec5ae28 (diff)
cursor follows playback mode
-rw-r--r--callbacks.c8
-rw-r--r--callbacks.h4
-rw-r--r--deadbeef.glade19
-rw-r--r--gtkplaylist.c20
-rw-r--r--interface.c14
-rw-r--r--main.c1
-rw-r--r--progress.c1
-rw-r--r--session.c63
-rw-r--r--session.h6
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");
diff --git a/main.c b/main.c
index 72ef14f0..40490f6d 100644
--- a/main.c
+++ b/main.c
@@ -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));
diff --git a/progress.c b/progress.c
index cf220228..4c413dfc 100644
--- a/progress.c
+++ b/progress.c
@@ -47,7 +47,6 @@ progress_show (void) {
void
progress_hide (void) {
- printf ("progress_hide\n");
gtk_widget_hide (progressdlg);
}
diff --git a/session.c b/session.c
index 6863e2e5..c76bfe7a 100644
--- a/session.c
+++ b/session.c
@@ -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;
+}
diff --git a/session.h b/session.h
index ea07732e..9e530695 100644
--- a/session.h
+++ b/session.h
@@ -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