commit 96029fb57f2ffc65395d758ed9158d6c57fd19b7
Author: phantomjinx <[email protected]>
Date: Sat Oct 9 22:25:15 2010 +0100
New track exec command interface
* track_command_iface.*
* Plugins can register themselves with this interface to execute a function
on the current selection of tracks
* display_tracks.c
* Tracks no longer directly editable. Maybe that edit plugin registers
itself as a track exec command?
* Track is double-clicked to execute a command. More than one comamand
should display a menu of commands to execute. Menu is still TODO
* media_player/plugin.c
* First implementation of track command. Result is user double clicks a
track and the track starts to play in the media player
libgtkpod/Makefile.am | 1 +
libgtkpod/gtkpod_app_iface.c | 37 +++
libgtkpod/gtkpod_app_iface.h | 7 +
libgtkpod/track_command_iface.c | 52 ++++
libgtkpod/track_command_iface.h | 55 ++++
plugins/media_player/plugin.c | 9 +
plugins/track_display/display_tracks.c | 301 +-------------------
plugins/track_display/track_display_context_menu.c | 2 -
8 files changed, 172 insertions(+), 292 deletions(-)
---
diff --git a/libgtkpod/Makefile.am b/libgtkpod/Makefile.am
index 345b7c7..f49667c 100644
--- a/libgtkpod/Makefile.am
+++ b/libgtkpod/Makefile.am
@@ -1,6 +1,7 @@
lib_LTLIBRARIES = libgtkpod.la
libgtkpod_la_SOURCES = gtkpod_app_iface.h gtkpod_app_iface.c \
+ track_command_iface.h
track_command_iface.c \
exporter_iface.h
exporter_iface.c \
repository_editor_iface.h
repository_editor_iface.c \
details_editor_iface.h
details_editor_iface.c \
diff --git a/libgtkpod/gtkpod_app_iface.c b/libgtkpod/gtkpod_app_iface.c
index 7c05285..fa0dc9e 100644
--- a/libgtkpod/gtkpod_app_iface.c
+++ b/libgtkpod/gtkpod_app_iface.c
@@ -563,3 +563,40 @@ void gtkpod_edit_photos(iTunesDB *itdb) {
PhotoEditorInterface *editor_iface =
PHOTO_EDITOR_GET_INTERFACE(gp_iface->photo_editor);
editor_iface->edit_photos(itdb);
}
+
+void gtkpod_register_track_command(TrackCommandInterface *command) {
+ g_return_if_fail(GTKPOD_IS_APP(gtkpod_app));
+ GtkPodAppInterface *gp_iface = GTKPOD_APP_GET_INTERFACE (gtkpod_app);
+ gp_iface->track_commands = g_list_append(gp_iface->track_commands,
command);
+}
+
+void gtkpod_unregister_track_command(TrackCommandInterface *command) {
+ g_return_if_fail(GTKPOD_IS_APP(gtkpod_app));
+ GtkPodAppInterface *gp_iface = GTKPOD_APP_GET_INTERFACE (gtkpod_app);
+ gp_iface->track_commands = g_list_remove(gp_iface->track_commands,
command);
+}
+
+void gtkpod_execute_track_command(GList *tracks) {
+ g_return_if_fail(GTKPOD_IS_APP(gtkpod_app));
+ GtkPodAppInterface *gp_iface = GTKPOD_APP_GET_INTERFACE (gtkpod_app);
+
+ if (!tracks) {
+ return;
+ }
+
+ switch(g_list_length(gp_iface->track_commands)) {
+ case 0:
+ // Do nothing
+ break;
+ case 1:
+ ;
+ TrackCommandInterface *command =
g_list_nth_data(gp_iface->track_commands, 0);
+ command->execute(tracks);
+ break;
+ default:
+ // Show menu
+ // TODO
+ // FIXME - seems cannot play the vixen files with the parantheses in
+ g_warning("Display context menu of options");
+ }
+}
diff --git a/libgtkpod/gtkpod_app_iface.h b/libgtkpod/gtkpod_app_iface.h
index 38cc2f9..7a077c0 100644
--- a/libgtkpod/gtkpod_app_iface.h
+++ b/libgtkpod/gtkpod_app_iface.h
@@ -41,6 +41,7 @@
#include "details_editor_iface.h"
#include "lyrics_editor_iface.h"
#include "photo_editor_iface.h"
+#include "track_command_iface.h"
#define GTKPOD_APP_ICON_STOCK_ID "gtkpod"
@@ -136,6 +137,8 @@ struct _GtkPodAppInterface {
LyricsEditor *lyrics_editor;
/* Photo Editor */
PhotoEditor *photo_editor;
+ /* Track Commands */
+ GList *track_commands;
void (*itdb_updated)(GtkPodApp *obj, iTunesDB *oldItdb, iTunesDB *newItbd);
void (*statusbar_message)(GtkPodApp *obj, gchar* message);
@@ -228,6 +231,10 @@ void gtkpod_unregister_photo_editor();
gboolean gtkpod_has_photo_editor();
void gtkpod_edit_photos(iTunesDB *itdb);
+void gtkpod_register_track_command(TrackCommandInterface *command);
+void gtkpod_unregister_track_command(TrackCommandInterface *command);
+void gtkpod_execute_track_command(GList *tracks);
+
GtkPodApp *gtkpod_app;
guint gtkpod_app_signals[LAST_SIGNAL];
diff --git a/libgtkpod/track_command_iface.c b/libgtkpod/track_command_iface.c
new file mode 100644
index 0000000..7053957
--- /dev/null
+++ b/libgtkpod/track_command_iface.c
@@ -0,0 +1,52 @@
+/*
+ | Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+ | Paul Richardson <phantom_sf at
users.sourceforge.net>
+ | Part of the gtkpod project.
+ |
+ | URL: http://www.gtkpod.org/
+ | URL: http://gtkpod.sourceforge.net/
+ |
+ | This program is free software; you can redistribute it and/or modify
+ | it under the terms of the GNU General Public License as published by
+ | the Free Software Foundation; either version 2 of the License, or
+ | (at your option) any later version.
+ |
+ | This program is distributed in the hope that it will be useful,
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ | GNU General Public License for more details.
+ |
+ | You should have received a copy of the GNU General Public License
+ | along with this program; if not, write to the Free Software
+ | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ |
+ | iTunes and iPod are trademarks of Apple
+ |
+ | This product is not supported/written/published by Apple!
+ |
+ */
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#include "track_command_iface.h"
+
+static void track_command_base_init(TrackCommandInterface *klass) {
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ klass->execute = NULL;
+ initialized = TRUE;
+ }
+}
+
+GType track_command_get_type(void) {
+ static GType type = 0;
+ if (!type) {
+ static const GTypeInfo info =
+ { sizeof(TrackCommandInterface), (GBaseInitFunc)
track_command_base_init, NULL, NULL, NULL, NULL, 0, 0, NULL };
+ type = g_type_register_static(G_TYPE_INTERFACE,
"TrackCommandInterface", &info, 0);
+ g_type_interface_add_prerequisite(type, G_TYPE_OBJECT);
+ }
+ return type;
+}
diff --git a/libgtkpod/track_command_iface.h b/libgtkpod/track_command_iface.h
new file mode 100644
index 0000000..154fd5a
--- /dev/null
+++ b/libgtkpod/track_command_iface.h
@@ -0,0 +1,55 @@
+/*
+ | Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+ | Paul Richardson <phantom_sf at
users.sourceforge.net>
+ | Part of the gtkpod project.
+ |
+ | URL: http://www.gtkpod.org/
+ | URL: http://gtkpod.sourceforge.net/
+ |
+ | This program is free software; you can redistribute it and/or modify
+ | it under the terms of the GNU General Public License as published by
+ | the Free Software Foundation; either version 2 of the License, or
+ | (at your option) any later version.
+ |
+ | This program is distributed in the hope that it will be useful,
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ | GNU General Public License for more details.
+ |
+ | You should have received a copy of the GNU General Public License
+ | along with this program; if not, write to the Free Software
+ | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ |
+ | iTunes and iPod are trademarks of Apple
+ |
+ | This product is not supported/written/published by Apple!
+ |
+ */
+
+#ifndef TRACK_COMMAND_IFACE_H_
+#define TRACK_COMMAND_IFACE_H_
+
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include "itdb.h"
+
+typedef struct _TrackCommand TrackCommand;
+typedef struct _TrackCommandInterface TrackCommandInterface;
+
+struct _TrackCommandInterface {
+ GTypeInterface g_iface;
+
+ void (*execute)(GList *tracks);
+};
+
+GType track_command_get_type(void);
+
+#define TRACK_COMMAND_TYPE (track_command_get_type ())
+#define TRACK_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
TRACK_COMMAND_TYPE, TrackCommand))
+#define TRACK_IS_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
TRACK_COMMAND_TYPE))
+#define TRACK_COMMAND_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE
((inst), TRACK_COMMAND_TYPE, TrackCommandInterface))
+
+#endif /* TRACK_COMMAND_IFACE_H_ */
diff --git a/plugins/media_player/plugin.c b/plugins/media_player/plugin.c
index a763d24..9d2c477 100644
--- a/plugins/media_player/plugin.c
+++ b/plugins/media_player/plugin.c
@@ -84,6 +84,8 @@ static gboolean activate_plugin(AnjutaPlugin *plugin) {
init_media_player(media_player_plugin->media_player_window);
+
gtkpod_register_track_command(TRACK_COMMAND_GET_INTERFACE(media_player_plugin));
+
// Do not show all as video widget is initially invisible
gtk_widget_show(media_player_plugin->media_player_window);
anjuta_shell_add_widget(plugin->shell,
media_player_plugin->media_player_window, "MediaPlayerPlugin", " Media
Player", PLAYER_ICON_STOCK_ID, ANJUTA_SHELL_PLACEMENT_BOTTOM, NULL);
@@ -98,6 +100,8 @@ static gboolean deactivate_plugin(AnjutaPlugin *plugin) {
media_player_plugin = (MediaPlayerPlugin*) plugin;
ui = anjuta_shell_get_ui(plugin->shell, NULL);
+
gtkpod_unregister_track_command(TRACK_COMMAND_GET_INTERFACE(media_player_plugin));
+
/* Destroy the browser */
destroy_media_player();
@@ -160,7 +164,12 @@ static void media_player_plugin_class_init(GObjectClass
*klass) {
// iface->unmerge = ipreferences_unmerge;
//}
+static void track_command_iface_init(TrackCommandInterface *iface) {
+ iface->execute = media_player_play_tracks;
+}
+
ANJUTA_PLUGIN_BEGIN (MediaPlayerPlugin, media_player_plugin);
+ANJUTA_PLUGIN_ADD_INTERFACE(track_command, TRACK_COMMAND_TYPE);
// ANJUTA_PLUGIN_ADD_INTERFACE(ipreferences, IANJUTA_TYPE_PREFERENCES);
ANJUTA_PLUGIN_END;
diff --git a/plugins/track_display/display_tracks.c
b/plugins/track_display/display_tracks.c
index f188da1..6effce2 100644
--- a/plugins/track_display/display_tracks.c
+++ b/plugins/track_display/display_tracks.c
@@ -47,6 +47,7 @@
#include "libgtkpod/misc.h"
#include "libgtkpod/prefs.h"
#include "libgtkpod/directories.h"
+#include "libgtkpod/gtkpod_app_iface.h"
#include "display_tracks.h"
#include "rb_cell_renderer_rating.h"
#include "sort_window.h"
@@ -309,10 +310,6 @@ static void on_tm_dnd_get_uri_foreach(GtkTreeModel *tm,
GtkTreePath *tp, GtkTree
}
}
-static void tm_drag_begin(GtkWidget *widget, GdkDragContext *dc, gpointer
user_data) {
- tm_stop_editing(TRUE);
-}
-
/* remove dragged playlist after successful MOVE */
static void tm_drag_data_delete(GtkWidget *widget, GdkDragContext *dc,
gpointer user_data) {
GtkTreeSelection *ts;
@@ -785,160 +782,6 @@ static void tm_rating_edited(RBCellRendererRating
*renderer, const gchar *path_s
}
}
-/* Called when editable cell is being edited. Stores new data to the
- track list. ID3 tags in the corresponding files are updated as
- well, if activated in the pref settings */
-static void tm_cell_edited(GtkCellRendererText *renderer, const gchar
*path_string, const gchar *new_text, gpointer data) {
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- TM_item column;
- gboolean multi_edit;
- gint sel_rows_num;
- GList *row_list, *row_node, *first;
-
- column = (TM_item) g_object_get_data(G_OBJECT(renderer), "column");
- multi_edit = prefs_get_int("multi_edit");
- /* if (column == TM_COLUMN_TITLE)
- multi_edit &= prefs_get_int("multi_edit_title"); */
- selection = gtk_tree_view_get_selection(track_treeview);
- row_list = gtk_tree_selection_get_selected_rows(selection, &model);
-
- /* printf("tm_cell_edited: column: %d\n", column); */
-
- sel_rows_num = g_list_length(row_list);
-
- /* block widgets and update display if multi-edit is active */
- if (multi_edit && (sel_rows_num > 1))
- block_widgets();
-
- first = g_list_first(row_list);
-
- for (row_node = first; row_node && (multi_edit || (row_node == first));
row_node = g_list_next(row_node)) {
- Track *track;
- ExtraTrackData *etr;
- gboolean changed = FALSE;
- GtkTreeIter iter;
- gchar *str;
-
- gtk_tree_model_get_iter(model, &iter, (GtkTreePath *) row_node->data);
- gtk_tree_model_get(model, &iter, READOUT_COL, &track, -1);
- g_return_if_fail (track);
- etr = track->userdata;
- g_return_if_fail (etr);
-
- changed = FALSE;
-
- switch (column) {
- case TM_COLUMN_TITLE:
- case TM_COLUMN_ALBUM:
- case TM_COLUMN_ALBUMARTIST:
- case TM_COLUMN_ARTIST:
- case TM_COLUMN_GENRE:
- case TM_COLUMN_COMPOSER:
- case TM_COLUMN_COMMENT:
- case TM_COLUMN_FILETYPE:
- case TM_COLUMN_GROUPING:
- case TM_COLUMN_CATEGORY:
- case TM_COLUMN_DESCRIPTION:
- case TM_COLUMN_PODCASTURL:
- case TM_COLUMN_PODCASTRSS:
- case TM_COLUMN_SUBTITLE:
- case TM_COLUMN_TRACK_NR:
- case TM_COLUMN_TRACKLEN:
- case TM_COLUMN_CD_NR:
- case TM_COLUMN_YEAR:
- case TM_COLUMN_PLAYCOUNT:
- case TM_COLUMN_RATING:
- case TM_COLUMN_TIME_ADDED:
- case TM_COLUMN_TIME_PLAYED:
- case TM_COLUMN_TIME_MODIFIED:
- case TM_COLUMN_TIME_RELEASED:
- case TM_COLUMN_VOLUME:
- case TM_COLUMN_SOUNDCHECK:
- case TM_COLUMN_BITRATE:
- case TM_COLUMN_SAMPLERATE:
- case TM_COLUMN_BPM:
- case TM_COLUMN_MEDIA_TYPE:
- case TM_COLUMN_TV_SHOW:
- case TM_COLUMN_TV_EPISODE:
- case TM_COLUMN_TV_NETWORK:
- case TM_COLUMN_SEASON_NR:
- case TM_COLUMN_EPISODE_NR:
- case TM_COLUMN_SORT_TITLE:
- case TM_COLUMN_SORT_ALBUM:
- case TM_COLUMN_SORT_ALBUMARTIST:
- case TM_COLUMN_SORT_COMPOSER:
- case TM_COLUMN_SORT_TVSHOW:
- case TM_COLUMN_SORT_ARTIST:
- changed = track_set_text(track, new_text, TM_to_T(column));
- if (changed && (column == TM_COLUMN_TRACKLEN)) { /* be on the safe
side and reset starttime, stoptime and
- * filesize */
- gchar *path = get_file_name_from_source(track,
SOURCE_PREFER_LOCAL);
- track->starttime = 0;
- track->stoptime = 0;
- if (path) {
- struct stat filestat;
- stat(path, &filestat);
- track->size = filestat.st_size;
- }
- }
- /* redisplay some items to be on the safe side */
- switch (column) {
- case TM_COLUMN_TRACK_NR:
- case TM_COLUMN_CD_NR:
- case TM_COLUMN_TRACKLEN:
- case TM_COLUMN_TIME_ADDED:
- case TM_COLUMN_TIME_PLAYED:
- case TM_COLUMN_TIME_MODIFIED:
- case TM_COLUMN_TIME_RELEASED:
- str = track_get_text(track, TM_to_T(column));
- g_object_set(G_OBJECT (renderer), "text", str, NULL);
- g_free(str);
- break;
- default:
- break;
- }
- break;
- case TM_COLUMN_IPOD_ID:
- case TM_COLUMN_PC_PATH:
- case TM_COLUMN_TRANSFERRED:
- case TM_COLUMN_SIZE:
- case TM_COLUMN_IPOD_PATH:
- case TM_COLUMN_COMPILATION:
- case TM_COLUMN_THUMB_PATH:
- case TM_COLUMN_LYRICS:
- case TM_NUM_COLUMNS:
- /* These are not editable text fields */
- break;
- }
- /* printf (" changed: %d\n", changed); */
- if (changed) {
- track->time_modified = time(NULL);
- gtkpod_track_updated (track); /* notify playlist model... */
- data_changed(track->itdb); /* indicate that data has changed */
-
- if (prefs_get_int("id3_write")) {
- /* T_item tag_id;*/
- /* should we update all ID3 tags or just the one
- changed? -- obsoleted in 0.71*/
- /* if (prefs_get_id3_writeall ()) tag_id = T_ALL;
- else tag_id = TM_to_T (column);*/
- write_tags_to_file(track);
- /* display possible duplicates that have been removed */
- gp_duplicate_remove(NULL, NULL);
- }
- }
- while (widgets_blocked && gtk_events_pending())
- gtk_main_iteration();
- }
-
- if (multi_edit && (sel_rows_num > 1))
- release_widgets();
-
- g_list_foreach(row_list, (GFunc) gtk_tree_path_free, NULL);
- g_list_free(row_list);
-}
-
static void update_text_column_layout(GtkTreeViewColumn *tree_column,
GtkCellRenderer *renderer, const gchar* text) {
GtkWidget* tree_widget;
PangoLayout* layout;
@@ -1439,37 +1282,6 @@ tm_get_all_tracks(void) {
return result;
}
-static void cell_renderer_stop_editing(GtkCellRenderer *renderer, gpointer
user_data) {
- gtk_cell_renderer_stop_editing (renderer, (gboolean)
GPOINTER_TO_INT(user_data));
-}
-
-/* Stop editing. If @cancel is TRUE, the edited value will be
- discarded (I have the feeling that the "discarding" part does not
- work quite the way intended). */
-void tm_stop_editing(gboolean cancel) {
- GtkTreeViewColumn *col;
-
- if (!track_treeview)
- return;
-
- gtk_tree_view_get_cursor(track_treeview, NULL, &col);
- if (col) {
- GList *cells;
-
- /* Before removing the widget we set multi_edit to FALSE. That
- way at most one entry will be changed (this also doesn't
- seem to work the way intended) */
- gboolean me = prefs_get_int("multi_edit");
- prefs_set_int("multi_edit", FALSE);
-
- cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT (col));
- g_list_foreach(cells, (GFunc) cell_renderer_stop_editing,
GINT_TO_POINTER((gint) cancel));
- g_list_free(cells);
-
- prefs_set_int("multi_edit", me);
- }
-}
-
/* Function to compare @tm_item of @track1 and @track2. Used by
tm_data_compare_func() */
static gint tm_data_compare(Track *track1, Track *track2, TM_item tm_item) {
@@ -1943,84 +1755,6 @@ void tm_sort(TM_item col, GtkSortType order) {
}
}
-static void tm_setup_renderer(GtkCellRenderer *renderer) {
- TM_item column;
- column = (TM_item) g_object_get_data(G_OBJECT (renderer), "column");
-
- g_return_if_fail ((column >= 0) && (column < TM_NUM_COLUMNS));
-
- switch (column) {
- case TM_COLUMN_TITLE:
- case TM_COLUMN_ARTIST:
- case TM_COLUMN_ALBUM:
- case TM_COLUMN_GENRE:
- case TM_COLUMN_COMPOSER:
- case TM_COLUMN_COMMENT:
- case TM_COLUMN_FILETYPE:
- case TM_COLUMN_GROUPING:
- case TM_COLUMN_CATEGORY:
- case TM_COLUMN_DESCRIPTION:
- case TM_COLUMN_PODCASTURL:
- case TM_COLUMN_PODCASTRSS:
- case TM_COLUMN_SUBTITLE:
- case TM_COLUMN_TIME_PLAYED:
- case TM_COLUMN_TIME_MODIFIED:
- case TM_COLUMN_TIME_ADDED:
- case TM_COLUMN_TIME_RELEASED:
- case TM_COLUMN_TV_SHOW:
- case TM_COLUMN_TV_EPISODE:
- case TM_COLUMN_TV_NETWORK:
- case TM_COLUMN_ALBUMARTIST:
- case TM_COLUMN_SORT_ARTIST:
- case TM_COLUMN_SORT_TITLE:
- case TM_COLUMN_SORT_ALBUM:
- case TM_COLUMN_SORT_ALBUMARTIST:
- case TM_COLUMN_SORT_COMPOSER:
- case TM_COLUMN_SORT_TVSHOW:
- g_object_set(G_OBJECT (renderer), "editable", TRUE, "xalign", 0.0,
NULL);
- break;
- case TM_COLUMN_MEDIA_TYPE:
- g_object_set(G_OBJECT (renderer), "editable", FALSE, "xalign", 0.0,
NULL);
- break;
- case TM_COLUMN_TRACK_NR:
- case TM_COLUMN_CD_NR:
- case TM_COLUMN_BITRATE:
- case TM_COLUMN_SAMPLERATE:
- case TM_COLUMN_BPM:
- case TM_COLUMN_PLAYCOUNT:
- case TM_COLUMN_YEAR:
- case TM_COLUMN_VOLUME:
- case TM_COLUMN_SOUNDCHECK:
- case TM_COLUMN_TRACKLEN:
- case TM_COLUMN_SEASON_NR:
- case TM_COLUMN_EPISODE_NR:
- g_object_set(G_OBJECT (renderer), "editable", TRUE, "xalign", 1.0,
NULL);
- break;
- case TM_COLUMN_IPOD_ID:
- case TM_COLUMN_SIZE:
- g_object_set(G_OBJECT (renderer), "editable", FALSE, "xalign", 1.0,
NULL);
- break;
- case TM_COLUMN_PC_PATH:
- case TM_COLUMN_IPOD_PATH:
- case TM_COLUMN_THUMB_PATH:
- g_object_set(G_OBJECT (renderer), "editable", FALSE, "xalign", 0.0,
NULL);
- break;
- case TM_COLUMN_LYRICS:
- g_object_set(G_OBJECT (renderer), "activatable", TRUE, NULL);
- break;
- case TM_COLUMN_TRANSFERRED:
- g_object_set(G_OBJECT (renderer), "activatable", FALSE, NULL);
- break;
- case TM_COLUMN_COMPILATION:
- g_object_set(G_OBJECT (renderer), "activatable", TRUE, NULL);
- break;
- case TM_COLUMN_RATING:
- break;
- case TM_NUM_COLUMNS:
- g_return_if_reached();
- }
-}
-
/* 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);
@@ -2102,7 +1836,7 @@ static GtkTreeViewColumn *tm_add_column(TM_item tm_item,
gint pos) {
text = _("ID");
break;
case TM_COLUMN_TRANSFERRED:
- text = _("Trnsfrd");
+ text = _("Transferred");
renderer = gtk_cell_renderer_toggle_new();
cell_data_func = tm_cell_data_toggle_func;
break;
@@ -2159,18 +1893,13 @@ static GtkTreeViewColumn *tm_add_column(TM_item
tm_item, gint pos) {
G_CALLBACK (tm_rating_edited), NULL);
}
else {
- /* text renderer -- editable/not editable is done in
- tm_cell_data_func() */
+ /* text renderer */
renderer = gtk_cell_renderer_text_new();
- g_signal_connect (G_OBJECT (renderer), "edited",
- G_CALLBACK (tm_cell_edited), model);
}
}
g_object_set_data(G_OBJECT (renderer), "column", (gint *) tm_item);
- tm_setup_renderer(renderer);
-
gtk_tree_view_column_set_title(col, text);
gtk_tree_view_column_pack_start(col, renderer, FALSE);
gtk_tree_view_column_set_cell_data_func(col, renderer, cell_data_func,
NULL, NULL);
@@ -2241,6 +1970,11 @@ static gboolean tm_button_press_event(GtkWidget *w,
GdkEventButton *e, gpointer
return (FALSE);
}
+static void tm_row_activated_event(GtkTreeView *tree_view, GtkTreePath *path,
GtkTreeViewColumn *column, gpointer user_data) {
+ GList *tracks = tm_get_selected_tracks();
+ gtkpod_execute_track_command(tracks);
+}
+
static gboolean tm_selection_changed_cb(gpointer data) {
GtkTreeView *treeview = GTK_TREE_VIEW (data);
GtkTreePath *path;
@@ -2300,28 +2034,12 @@ static void tm_create_treeview(void) {
NULL);
tm_add_columns();
- /* gtk_drag_source_set (GTK_WIDGET (track_treeview), GDK_BUTTON1_MASK, */
- /* tm_drag_types, TGNR (tm_drag_types), */
- /* GDK_ACTION_COPY|GDK_ACTION_MOVE); */
- /* gtk_tree_view_enable_model_drag_dest(track_treeview, tm_drop_types, */
- /* TGNR (tm_drop_types), */
- /*
GDK_ACTION_COPY|GDK_ACTION_MOVE); */
- /* /\* need the gtk_drag_dest_set() with no actions ("0") so that the */
- /* data_received callback gets the correct info value. This is most */
- /* likely a bug... *\/ */
- /* gtk_drag_dest_set_target_list (GTK_WIDGET (track_treeview), */
- /* gtk_target_list_new (tm_drop_types, */
- /* TGNR
(tm_drop_types))); */
gtk_drag_source_set(GTK_WIDGET (track_treeview), GDK_BUTTON1_MASK,
tm_drag_types, TGNR (tm_drag_types), GDK_ACTION_COPY
| GDK_ACTION_MOVE);
gtk_drag_dest_set(GTK_WIDGET (track_treeview), 0, tm_drop_types, TGNR
(tm_drop_types), GDK_ACTION_COPY
| GDK_ACTION_MOVE);
- g_signal_connect ((gpointer) track_treeview, "drag-begin",
- G_CALLBACK (tm_drag_begin),
- NULL);
-
g_signal_connect ((gpointer) track_treeview, "drag-data-delete",
G_CALLBACK (tm_drag_data_delete),
NULL);
@@ -2356,6 +2074,9 @@ static void tm_create_treeview(void) {
g_signal_connect ((gpointer) track_treeview, "button-press-event",
G_CALLBACK (tm_button_press_event),
NULL);
+ g_signal_connect ((gpointer) track_treeview, "row-activated",
+ G_CALLBACK (tm_row_activated_event),
+ NULL);
g_signal_connect (G_OBJECT (model), "sort-column-changed",
G_CALLBACK (tm_sort_column_changed),
(gpointer)0);
diff --git a/plugins/track_display/track_display_context_menu.c
b/plugins/track_display/track_display_context_menu.c
index 9166325..61de20b 100644
--- a/plugins/track_display/track_display_context_menu.c
+++ b/plugins/track_display/track_display_context_menu.c
@@ -137,8 +137,6 @@ void tm_context_menu_init(void) {
if (widgets_blocked)
return;
- tm_stop_editing(TRUE);
-
GtkWidget *menu = NULL;
Playlist *pl;
------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3.
Spend less time writing and rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2