summaryrefslogtreecommitdiff
path: root/plugins/gtkui/ddbtabstrip.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2013-07-11 19:14:27 +0200
committerGravatar waker <wakeroid@gmail.com>2013-07-11 19:14:27 +0200
commitaa460609c68f8b10179a1c6a968911c343653f47 (patch)
tree6e5016c4bc93b601098edba750b8c97881f159ef /plugins/gtkui/ddbtabstrip.c
parenta20a3b8e0e7e83709756ddc518f968f2c879d36a (diff)
gtkui: added API for creating playlist context menu
Diffstat (limited to 'plugins/gtkui/ddbtabstrip.c')
-rw-r--r--plugins/gtkui/ddbtabstrip.c260
1 files changed, 1 insertions, 259 deletions
diff --git a/plugins/gtkui/ddbtabstrip.c b/plugins/gtkui/ddbtabstrip.c
index 1022d87b..5b54c78d 100644
--- a/plugins/gtkui/ddbtabstrip.c
+++ b/plugins/gtkui/ddbtabstrip.c
@@ -42,21 +42,6 @@ extern GtkWidget *theme_button;
#define arrow_sz 10
#define arrow_widget_width (arrow_sz+4)
-void
-plt_get_title_wrapper (int plt, char *buffer, int len) {
- if (plt == -1) {
- strcpy (buffer, "");
- return;
- }
- ddb_playlist_t *p = deadbeef->plt_get_for_idx (plt);
- deadbeef->plt_get_title (p, buffer, len);
- deadbeef->plt_unref (p);
- char *end;
- if (!g_utf8_validate (buffer, -1, (const gchar **)&end)) {
- *end = 0;
- }
-}
-
static void
ddb_tabstrip_send_configure (DdbTabStrip *darea)
{
@@ -843,249 +828,6 @@ get_tab_under_cursor (DdbTabStrip *ts, int x) {
return -1;
}
-void
-on_rename_playlist1_activate (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- GtkWidget *dlg = create_entrydialog ();
- gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK);
- gtk_window_set_title (GTK_WINDOW (dlg), _("Edit playlist"));
- GtkWidget *e;
- e = lookup_widget (dlg, "title_label");
- gtk_label_set_text (GTK_LABEL(e), _("Title:"));
- e = lookup_widget (dlg, "title");
- char t[1000];
- plt_get_title_wrapper (tab_clicked, t, sizeof (t));
- gtk_entry_set_text (GTK_ENTRY (e), t);
- int res = gtk_dialog_run (GTK_DIALOG (dlg));
- if (res == GTK_RESPONSE_OK) {
- const char *text = gtk_entry_get_text (GTK_ENTRY (e));
- deadbeef->pl_lock ();
- ddb_playlist_t *p = deadbeef->plt_get_for_idx (tab_clicked);
- deadbeef->plt_set_title (p, text);
- deadbeef->plt_unref (p);
- deadbeef->pl_unlock ();
- }
- gtk_widget_destroy (dlg);
-}
-
-
-void
-on_remove_playlist1_activate (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- if (tab_clicked != -1) {
- deadbeef->plt_remove (tab_clicked);
- search_refresh ();
- int playlist = deadbeef->plt_get_curr_idx ();
- deadbeef->conf_set_int ("playlist.current", playlist);
- }
-}
-
-void
-on_add_new_playlist1_activate (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- int playlist = gtkui_add_new_playlist ();
- if (playlist != -1) {
- gtkui_playlist_set_curr (playlist);
- }
-}
-
-static void
-on_actionitem_activate (GtkMenuItem *menuitem,
- DB_plugin_action_t *action)
-{
- if (action->flags & DB_ACTION_USING_API_14) {
- ddb_playlist_t *plt = NULL;
- if (tab_clicked != -1) {
- plt = deadbeef->plt_get_for_idx (tab_clicked);
- }
- typedef int (*action_callback_14_t)(struct DB_plugin_action_s *action, void *userdata);
- ((action_callback_14_t)action->callback) (action, plt);
- if (plt) {
- deadbeef->plt_unref (plt);
- }
- }
- else {
- action->callback (action, DDB_ACTION_CTX_PLAYLIST);
- }
-}
-
-static GtkWidget*
-find_popup (GtkWidget *widget,
- const gchar *widget_name)
-{
- GtkWidget *parent, *found_widget;
-
- for (;;)
- {
- if (GTK_IS_MENU (widget))
- parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
- else
- parent = gtk_widget_get_parent (widget);
- if (!parent)
- parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
- if (parent == NULL)
- break;
- widget = parent;
- }
-
- found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
- widget_name);
- return found_widget;
-}
-
-void
-add_tab_actions (GtkWidget *menu) {
- DB_plugin_t **plugins = deadbeef->plug_get_list();
- int i;
-
- int added_entries = 0;
- for (i = 0; plugins[i]; i++)
- {
- if (!plugins[i]->get_actions)
- continue;
-
- DB_plugin_action_t *actions = plugins[i]->get_actions (NULL);
- DB_plugin_action_t *action;
-
- int count = 0;
- for (action = actions; action; action = action->next)
- {
- char *tmp = NULL;
- if (!(action->flags & DB_ACTION_MULTIPLE_TRACKS))
- continue;
-
- // create submenus (separated with '/')
- const char *prev = action->title;
- while (*prev && *prev == '/') {
- prev++;
- }
-
- GtkWidget *popup = NULL;
-
- for (;;) {
- const char *slash = strchr (prev, '/');
- if (slash && *(slash-1) != '\\') {
- char name[slash-prev+1];
- // replace \/ with /
- const char *p = prev;
- char *t = name;
- while (*p && p < slash) {
- if (*p == '\\' && *(p+1) == '/') {
- *t++ = '/';
- p += 2;
- }
- else {
- *t++ = *p++;
- }
- }
- *t = 0;
-
- // add popup
- GtkWidget *prev_menu = popup ? popup : menu;
-
- popup = find_popup (prev_menu, name);
- if (!popup) {
- GtkWidget *item = gtk_image_menu_item_new_with_mnemonic (_(name));
- gtk_widget_show (item);
- gtk_container_add (GTK_CONTAINER (prev_menu), item);
- popup = gtk_menu_new ();
- //HOOKUP_OBJECT (prev_menu, popup, name);
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), popup);
- }
- }
- else {
- break;
- }
- prev = slash+1;
- }
-
-
- count++;
- added_entries++;
- GtkWidget *actionitem;
-
- // replace \/ with /
- const char *p = popup ? prev : action->title;
- char title[strlen (p)+1];
- char *t = title;
- while (*p) {
- if (*p == '\\' && *(p+1) == '/') {
- *t++ = '/';
- p += 2;
- }
- else {
- *t++ = *p++;
- }
- }
- *t = 0;
-
- actionitem = gtk_menu_item_new_with_mnemonic (_(title));
- gtk_widget_show (actionitem);
- gtk_container_add (popup ? GTK_CONTAINER (popup) : GTK_CONTAINER (menu), actionitem);
-
- g_signal_connect ((gpointer) actionitem, "activate",
- G_CALLBACK (on_actionitem_activate),
- action);
- }
- }
-}
-
-GtkWidget*
-create_plmenu (void)
-{
- GtkWidget *plmenu;
- GtkWidget *rename_playlist1;
- GtkWidget *remove_playlist1;
- GtkWidget *add_new_playlist1;
- GtkWidget *separator11;
- GtkWidget *load_playlist1;
- GtkWidget *save_playlist1;
- GtkWidget *save_all_playlists1;
-
- plmenu = gtk_menu_new ();
-
- rename_playlist1 = gtk_menu_item_new_with_mnemonic (_("Rename Playlist"));
- if (tab_clicked == -1) {
- gtk_widget_set_sensitive (rename_playlist1, FALSE);
- }
- gtk_widget_show (rename_playlist1);
- gtk_container_add (GTK_CONTAINER (plmenu), rename_playlist1);
-
- remove_playlist1 = gtk_menu_item_new_with_mnemonic (_("Remove Playlist"));
- if (tab_clicked == -1) {
- gtk_widget_set_sensitive (remove_playlist1, FALSE);
- }
- gtk_widget_show (remove_playlist1);
- gtk_container_add (GTK_CONTAINER (plmenu), remove_playlist1);
-
- add_new_playlist1 = gtk_menu_item_new_with_mnemonic (_("Add New Playlist"));
- gtk_widget_show (add_new_playlist1);
- gtk_container_add (GTK_CONTAINER (plmenu), add_new_playlist1);
-
- g_signal_connect ((gpointer) rename_playlist1, "activate",
- G_CALLBACK (on_rename_playlist1_activate),
- NULL);
- g_signal_connect ((gpointer) remove_playlist1, "activate",
- G_CALLBACK (on_remove_playlist1_activate),
- NULL);
- g_signal_connect ((gpointer) add_new_playlist1, "activate",
- G_CALLBACK (on_add_new_playlist1_activate),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (plmenu, plmenu, "plmenu");
- GLADE_HOOKUP_OBJECT (plmenu, rename_playlist1, "rename_playlist1");
- GLADE_HOOKUP_OBJECT (plmenu, remove_playlist1, "remove_playlist1");
- GLADE_HOOKUP_OBJECT (plmenu, add_new_playlist1, "add_new_playlist1");
-
- add_tab_actions (plmenu);
-
- return plmenu;
-}
-
static void
tabstrip_scroll_left (DdbTabStrip *ts) {
int tab = deadbeef->plt_get_curr_idx ();
@@ -1206,7 +948,7 @@ on_tabstrip_button_press_event(GtkWidget *widget,
tab_moved = 0;
}
else if (event->button == 3) {
- GtkWidget *menu = create_plmenu ();
+ GtkWidget *menu = gtkui_create_pltmenu (tab_clicked);
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, widget, 0, gtk_get_current_event_time());
}
else if (event->button == 2) {