changeset 3320:3a3f43afd9a0 trunk

plugin-customizable menu entries: added AUDACIOUS_MENU_PLAYLIST_RCLICK to manage custom entries for the playlist right-click menu
author Giacomo Lozito <james@develia.org>
date Sat, 11 Aug 2007 00:24:20 +0200
parents d4f6507cded3
children a6a76ab7ce0a
files src/audacious/ui/playlist.ui src/audacious/ui_manager.c src/audacious/ui_plugin_menu.h
diffstat 3 files changed, 57 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/audacious/ui/playlist.ui	Fri Aug 10 21:58:19 2007 +0200
+++ b/src/audacious/ui/playlist.ui	Sat Aug 11 00:24:20 2007 +0200
@@ -10,6 +10,10 @@
 			<menuitem action="playlist remove all" />
 			<separator />
 			<menuitem action="queue toggle" />
+			<separator />
+			<menu action="plugins" name="plugins-menu">
+			   <menuitem action="dummy" name="plugins-menu-dummy" />
+			</menu>
 		</menu>
 
 		<menu action="dummy" name="add-menu">
@@ -83,7 +87,6 @@
 			   <menuitem action="dummy" name="plugins-menu-dummy" />
 			</menu>
 			<separator />
-			<separator />
 			<menuitem action="playlist refresh" />
 			<separator />
 <!--			<menuitem action="playlist delete" /> -->
--- a/src/audacious/ui_manager.c	Fri Aug 10 21:58:19 2007 +0200
+++ b/src/audacious/ui_manager.c	Sat Aug 11 00:24:20 2007 +0200
@@ -699,6 +699,7 @@
 
   /* initialize plugins-menu for playlist-menus */
   ui_manager_create_menus_init_pmenu( "/playlist-menus/playlist-menu/plugins-menu" );
+  ui_manager_create_menus_init_pmenu( "/playlist-menus/playlist-rightclick-menu/plugins-menu" );
 
   gtk_ui_manager_add_ui_from_file( ui_manager , DATA_DIR "/ui/equalizer.ui" , &gerr );
 
@@ -777,31 +778,44 @@
 {
   if ( menu_created )
   {
+    GtkWidget *plugins_menu = NULL;
+    GtkWidget *plugins_menu_item = NULL;
+
     switch (menu_id)
     {
       case AUDACIOUS_MENU_MAIN:
-      {
-        GtkWidget *plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
+        plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
           "/mainwin-menus/main-menu/plugins-menu" );
-        GtkWidget *plugins_menu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(plugins_menu_item) );
-        gtk_menu_shell_append( GTK_MENU_SHELL(plugins_menu) , item );
-        gtk_widget_show( plugins_menu_item );
-        return 0;
-      }
+        break;
 
       case AUDACIOUS_MENU_PLAYLIST:
-      {
-        GtkWidget *plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
+        plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
           "/playlist-menus/playlist-menu/plugins-menu" );
-        GtkWidget *plugins_menu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(plugins_menu_item) );
-        gtk_menu_shell_append( GTK_MENU_SHELL(plugins_menu) , item );
-        gtk_widget_show( plugins_menu_item );
-        return 0;
-      }
+        break;
+
+      case AUDACIOUS_MENU_PLAYLIST_RCLICK:
+        plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
+          "/playlist-menus/playlist-menu/plugins-menu" );
+        break;
 
       default:
         return -1;
     }
+
+    if ( plugins_menu_item )
+    {
+      plugins_menu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(plugins_menu_item) );
+      if ( plugins_menu )
+      {
+        gtk_menu_shell_append( GTK_MENU_SHELL(plugins_menu) , item );
+        gtk_widget_show( plugins_menu_item );
+        return 0; /* success */
+      }
+      else
+        return -1;
+    }
+    else
+      return -1;
   }
   else
     return -1;
@@ -820,37 +834,42 @@
     switch (menu_id)
     {
       case AUDACIOUS_MENU_MAIN:
-      {
         plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
           "/mainwin-menus/main-menu/plugins-menu" );
-        plugins_menu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(plugins_menu_item) );
-        gtk_container_remove( GTK_CONTAINER(plugins_menu) , item );
         break;
-      }
 
       case AUDACIOUS_MENU_PLAYLIST:
-      {
         plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
           "/playlist-menus/playlist-menu/plugins-menu" );
-        plugins_menu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(plugins_menu_item) );
-        gtk_container_remove( GTK_CONTAINER(plugins_menu) , item );
         break;
-      }
+
+      case AUDACIOUS_MENU_PLAYLIST_RCLICK:
+        plugins_menu_item = gtk_ui_manager_get_widget( ui_manager ,
+          "/playlist-menus/playlist-menu/plugins-menu" );
+        break;
 
       default:
         return -1;
     }
 
-    if ( plugins_menu )
+    if ( plugins_menu_item )
     {
-      /* check the current number of items in plugins-menu against its initial count
-         of items; if these are equal, it means that the menu is "empty", so hide it */
-      gint ic = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(plugins_menu),"ic"));
-      plugins_menu_children = gtk_container_get_children( GTK_CONTAINER(plugins_menu) );
-      if ( ic == g_list_length(plugins_menu_children) )
-        gtk_widget_hide( plugins_menu_item );
-      g_list_free( plugins_menu_children );
-      return 0;
+      plugins_menu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(plugins_menu_item) );
+      if ( plugins_menu )
+      {
+        /* remove the plugin-added entry */
+        gtk_container_remove( GTK_CONTAINER(plugins_menu) , item );
+        /* check the current number of items in plugins-menu against its initial count
+           of items; if these are equal, it means that the menu is "empty", so hide it */
+        gint ic = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(plugins_menu),"ic"));
+        plugins_menu_children = gtk_container_get_children( GTK_CONTAINER(plugins_menu) );
+        if ( ic == g_list_length(plugins_menu_children) )
+          gtk_widget_hide( plugins_menu_item );
+        g_list_free( plugins_menu_children );
+        return 0; /* success */
+      }
+      else
+        return -1;
     }
     else
       return -1;
--- a/src/audacious/ui_plugin_menu.h	Fri Aug 10 21:58:19 2007 +0200
+++ b/src/audacious/ui_plugin_menu.h	Sat Aug 11 00:24:20 2007 +0200
@@ -28,8 +28,9 @@
 #include <gtk/gtk.h>
 
 
-#define AUDACIOUS_MENU_MAIN        0
-#define AUDACIOUS_MENU_PLAYLIST    1
+#define AUDACIOUS_MENU_MAIN             0
+#define AUDACIOUS_MENU_PLAYLIST         1
+#define AUDACIOUS_MENU_PLAYLIST_RCLICK  2
 
 gint audacious_menu_plugin_item_add( gint , GtkWidget * );
 gint audacious_menu_plugin_item_remove( gint , GtkWidget * );