[sound-juicer/wip/better-editing] Add play-row signal
- From: Phillip Wood <pwood src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sound-juicer/wip/better-editing] Add play-row signal
- Date: Tue, 5 Aug 2014 11:14:55 +0000 (UTC)
commit 1c3fbba298a559ebf6ace4d45c80cb9598edf77d
Author: Phillip Wood <phillip wood dunelm org uk>
Date: Sun Jul 27 18:47:41 2014 +0100
Add play-row signal
data/sound-juicer.ui | 1 +
src/sj-play.c | 7 +++++++
src/sj-tree-view.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++---
src/sj-tree-view.h | 2 ++
4 files changed, 57 insertions(+), 3 deletions(-)
---
diff --git a/data/sound-juicer.ui b/data/sound-juicer.ui
index e553c3c..ee95f6f 100644
--- a/data/sound-juicer.ui
+++ b/data/sound-juicer.ui
@@ -313,6 +313,7 @@
</child>
<signal name="cursor_changed" handler="on_tracklist_row_selected"/>
<signal name="row_activated" handler="on_tracklist_row_activate"/>
+ <signal name="play_row" handler="on_tracklist_row_activate"/>
</object>
</child>
</object>
diff --git a/src/sj-play.c b/src/sj-play.c
index 396efaf..9b83779 100644
--- a/src/sj-play.c
+++ b/src/sj-play.c
@@ -435,6 +435,13 @@ on_tracklist_row_activate (GtkTreeView * treeview, GtkTreePath * path,
if (!gtk_tree_model_get_iter (model, &iter, path))
return;
gtk_tree_model_get (model, &iter, COLUMN_NUMBER, &track, -1);
+ if (track == current_track + 1) {
+ if (is_playing () || is_paused ()) {
+ toggle_play ();
+ return;
+ }
+ }
+
if (setup (&err)) {
seek_to_track = track - 1;
set_gst_ui_and_play ();
diff --git a/src/sj-tree-view.c b/src/sj-tree-view.c
index 9dcee38..9631400 100644
--- a/src/sj-tree-view.c
+++ b/src/sj-tree-view.c
@@ -19,10 +19,29 @@
#include "sj-tree-view.h"
-GtkTreeViewClass* parent_class;
+static GtkTreeViewClass* parent_class;
+
+enum {
+ PLAY_ROW,
+ PLAY_CURSOR_ROW,
+ SIGNAL_LAST
+};
+
+static guint signals[SIGNAL_LAST];
G_DEFINE_TYPE (SjTreeView, sj_tree_view, GTK_TYPE_TREE_VIEW);
+static void
+sj_tree_view_play_curent_row (SjTreeView *self)
+{
+ GtkTreePath *path;
+
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (self), &path, NULL);
+ if (path != NULL)
+ g_signal_emit (self, signals[PLAY_ROW], 0, path);
+ gtk_tree_path_free (path);
+}
+
/**
* Find out if the focused cell is being edited
*/
@@ -425,6 +444,7 @@ static void
sj_tree_view_class_init (SjTreeViewClass *class)
{
GtkBindingSet *binding_set;
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
GtkTreeViewClass *tree_class = GTK_TREE_VIEW_CLASS (class);
@@ -434,8 +454,26 @@ sj_tree_view_class_init (SjTreeViewClass *class)
widget_class->key_press_event = sj_tree_view_key_press;
tree_class->move_cursor = sj_tree_view_move_cursor;
-
- /* Keybindings - Ctrl-Tab moves focus */
+ class->play_cursor_row = sj_tree_view_play_curent_row;
+
+ signals[PLAY_ROW] =
+ g_signal_new ("play-row",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (SjTreeViewClass, play_row),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_TREE_PATH);
+
+ signals[PLAY_CURSOR_ROW] =
+ g_signal_new ("play-cursor-row",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (SjTreeViewClass, play_cursor_row),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
+ /* Keybindings - Ctrl-Tab moves focus, Ctrl-Spaces plays current row */
gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, GDK_CONTROL_MASK,
"move-focus", 1,
@@ -460,6 +498,12 @@ sj_tree_view_class_init (SjTreeViewClass *class)
gtk_binding_entry_add_signal (binding_set, GDK_KEY_ISO_Left_Tab, GDK_CONTROL_MASK,
"move-focus", 1,
GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD);
+
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_CONTROL_MASK,
+ "play-current-row", 0);
+
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_CONTROL_MASK,
+ "play-current-row", 0);
}
GtkWidget*
diff --git a/src/sj-tree-view.h b/src/sj-tree-view.h
index 03575b9..66c9409 100644
--- a/src/sj-tree-view.h
+++ b/src/sj-tree-view.h
@@ -38,6 +38,8 @@ typedef struct _SjTreeView SjTreeView;
struct _SjTreeViewClass
{
GtkTreeViewClass parent_class;
+ void (*play_row)(SjTreeView*, GtkTreePath*);
+ void (*play_cursor_row)(SjTreeView*);
};
struct _SjTreeView
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]