52
59
RBShellClipboard *clipboard);
53
60
static void rb_shell_clipboard_cmd_delete (GtkAction *action,
54
61
RBShellClipboard *clipboard);
62
static void rb_shell_clipboard_cmd_queue_delete (GtkAction *action,
63
RBShellClipboard *clipboard);
64
static void rb_shell_clipboard_cmd_move_to_trash (GtkAction *action,
65
RBShellClipboard *clipboard);
55
66
static void rb_shell_clipboard_set (RBShellClipboard *clipboard,
57
68
static gboolean rb_shell_clipboard_idle_poll_deletions (RBShellClipboard *clipboard);
60
71
RBShellClipboard *clipboard);
61
72
static void rb_shell_clipboard_entryview_changed_cb (RBEntryView *view,
62
73
RBShellClipboard *clipboard);
74
static void rb_shell_clipboard_cmd_add_song_to_queue (GtkAction *action,
75
RBShellClipboard *clipboard);
76
static void rb_shell_clipboard_cmd_song_info (GtkAction *action,
77
RBShellClipboard *clipboard);
78
static void rb_shell_clipboard_cmd_queue_song_info (GtkAction *action,
79
RBShellClipboard *clipboard);
64
81
struct RBShellClipboardPrivate
85
RBStaticPlaylistSource *queue_source;
69
87
GtkActionGroup *actiongroup;
105
126
{ "EditDelete", NULL, N_("_Delete"), NULL,
106
127
N_("Delete selection"),
107
128
G_CALLBACK (rb_shell_clipboard_cmd_delete) },
129
{ "EditMovetoTrash", NULL, N_("_Move To Trash"), "<control>T",
130
N_("Move selection to the trash"),
131
G_CALLBACK (rb_shell_clipboard_cmd_move_to_trash) },
133
{ "AddToQueue", GTK_STOCK_ADD, N_("Add _to Play Queue"), "<control>T",
134
N_("Add the selected songs to the play queue"),
135
G_CALLBACK (rb_shell_clipboard_cmd_add_song_to_queue) },
136
{ "QueueDelete", NULL, N_("Delete"), NULL,
137
N_("Delete selection"),
138
G_CALLBACK (rb_shell_clipboard_cmd_queue_delete) },
140
{ "MusicProperties", GTK_STOCK_PROPERTIES, N_("_Properties"), "<Alt>Return",
141
N_("Show information on the selected song"),
142
G_CALLBACK (rb_shell_clipboard_cmd_song_info) },
143
{ "QueueMusicProperties", GTK_STOCK_PROPERTIES, N_("_Properties"), NULL,
144
N_("Show information on the selected song"),
145
G_CALLBACK (rb_shell_clipboard_cmd_queue_song_info) },
109
147
static guint rb_shell_clipboard_n_actions = G_N_ELEMENTS (rb_shell_clipboard_actions);
111
static GObjectClass *parent_class = NULL;
114
rb_shell_clipboard_get_type (void)
116
static GType rb_shell_clipboard_type = 0;
118
if (rb_shell_clipboard_type == 0)
120
static const GTypeInfo our_info =
122
sizeof (RBShellClipboardClass),
125
(GClassInitFunc) rb_shell_clipboard_class_init,
128
sizeof (RBShellClipboard),
130
(GInstanceInitFunc) rb_shell_clipboard_init
133
rb_shell_clipboard_type = g_type_register_static (G_TYPE_OBJECT,
138
return rb_shell_clipboard_type;
149
G_DEFINE_TYPE (RBShellClipboard, rb_shell_clipboard, G_TYPE_OBJECT)
142
152
rb_shell_clipboard_class_init (RBShellClipboardClass *klass)
144
154
GObjectClass *object_class = G_OBJECT_CLASS (klass);
146
parent_class = g_type_class_peek_parent (klass);
148
156
object_class->finalize = rb_shell_clipboard_finalize;
149
157
object_class->constructor = rb_shell_clipboard_constructor;
172
180
"RhythmDB database",
174
182
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
183
g_object_class_install_property (object_class,
185
g_param_spec_object ("queue-source",
187
"RBPlaylistSource object",
188
RB_TYPE_PLAYLIST_SOURCE,
191
g_type_class_add_private (klass, sizeof (RBShellClipboardPrivate));
179
195
rb_shell_clipboard_init (RBShellClipboard *shell_clipboard)
181
shell_clipboard->priv = g_new0 (RBShellClipboardPrivate, 1);
197
shell_clipboard->priv = RB_SHELL_CLIPBOARD_GET_PRIVATE (shell_clipboard);
183
199
shell_clipboard->priv->signal_hash = g_hash_table_new_full (g_direct_hash, g_direct_equal,
282
296
clipboard->priv->db = g_value_get_object (value);
298
case PROP_QUEUE_SOURCE:
299
clipboard->priv->queue_source = g_value_get_object (value);
300
if (clipboard->priv->queue_source) {
301
RBEntryView *sidebar;
302
g_object_get (G_OBJECT (clipboard->priv->queue_source), "sidebar", &sidebar, NULL);
303
g_signal_connect_object (G_OBJECT (sidebar), "selection-changed",
304
G_CALLBACK (rb_shell_clipboard_entryview_changed_cb),
306
g_object_unref (G_OBJECT (sidebar));
285
310
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
335
364
rb_shell_clipboard_sync (RBShellClipboard *clipboard)
337
366
gboolean have_selection;
367
gboolean have_sidebar_selection = FALSE;
368
gboolean can_cut = FALSE;
369
gboolean can_paste = FALSE;
370
gboolean can_delete = FALSE;
371
gboolean can_copy = FALSE;
372
gboolean can_add_to_queue = FALSE;
373
gboolean can_move_to_trash = FALSE;
342
374
GtkAction *action;
344
376
if (!clipboard->priv->source)
347
379
have_selection = rb_entry_view_have_selection (rb_source_get_entry_view (clipboard->priv->source));
348
can_cut = have_selection;
349
can_paste = have_selection;
350
can_delete = have_selection;
351
can_copy = have_selection;
380
if (clipboard->priv->queue_source) {
381
RBEntryView *sidebar;
382
g_object_get (G_OBJECT (clipboard->priv->queue_source), "sidebar", &sidebar, NULL);
383
have_sidebar_selection = rb_entry_view_have_selection (sidebar);
384
g_object_unref (G_OBJECT (sidebar));
353
387
rb_debug ("syncing clipboard");
389
if (g_list_length (clipboard->priv->entries) > 0)
390
can_paste = rb_source_can_cut (clipboard->priv->source);
392
if (have_selection) {
356
393
can_cut = rb_source_can_cut (clipboard->priv->source);
358
can_paste = rb_source_can_cut (clipboard->priv->source);
361
394
can_delete = rb_source_can_delete (clipboard->priv->source);
363
395
can_copy = rb_source_can_copy (clipboard->priv->source);
396
can_move_to_trash = rb_source_can_move_to_trash (clipboard->priv->source);
397
if (clipboard->priv->queue_source)
398
can_add_to_queue = rb_source_can_add_to_queue (clipboard->priv->source);
365
401
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
370
406
g_object_set (G_OBJECT (action), "sensitive", can_delete, NULL);
371
407
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
409
g_object_set (G_OBJECT (action), "sensitive", can_move_to_trash, NULL);
410
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
373
412
g_object_set (G_OBJECT (action), "sensitive", can_copy, NULL);
375
can_paste = can_paste && g_list_length (clipboard->priv->entries) > 0;
377
414
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
379
416
g_object_set (G_OBJECT (action), "sensitive", can_paste, NULL);
418
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
420
g_object_set (G_OBJECT (action), "sensitive", can_add_to_queue, NULL);
422
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
424
g_object_set (G_OBJECT (action), "sensitive", have_selection, NULL);
426
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
427
"QueueMusicProperties");
428
g_object_set (G_OBJECT (action), "sensitive", have_sidebar_selection, NULL);
429
action = gtk_action_group_get_action (clipboard->priv->actiongroup,
431
g_object_set (G_OBJECT (action), "sensitive", have_sidebar_selection, NULL);
491
rb_shell_clipboard_cmd_queue_delete (GtkAction *action,
492
RBShellClipboard *clipboard)
495
rb_play_queue_source_sidebar_delete (RB_PLAY_QUEUE_SOURCE (clipboard->priv->queue_source));
499
rb_shell_clipboard_cmd_move_to_trash (GtkAction *action,
500
RBShellClipboard *clipboard)
502
rb_debug ("movetotrash");
503
rb_source_move_to_trash (clipboard->priv->source);
439
507
rb_shell_clipboard_set (RBShellClipboard *clipboard,
517
585
rb_debug ("entryview changed");
518
586
rb_shell_clipboard_sync (clipboard);
590
rb_shell_clipboard_cmd_add_song_to_queue (GtkAction *action,
591
RBShellClipboard *clipboard)
593
rb_debug ("add to queue");
594
rb_source_add_to_queue (clipboard->priv->source,
595
RB_SOURCE (clipboard->priv->queue_source));
599
rb_shell_clipboard_cmd_song_info (GtkAction *action,
600
RBShellClipboard *clipboard)
602
rb_debug ("song info");
604
rb_source_song_properties (clipboard->priv->source);
608
rb_shell_clipboard_cmd_queue_song_info (GtkAction *action,
609
RBShellClipboard *clipboard)
611
rb_debug ("song info");
612
rb_play_queue_source_sidebar_song_info (RB_PLAY_QUEUE_SOURCE (clipboard->priv->queue_source));