[Goodies-commits] r5303 - xfmpc/trunk/src

Mike Massonnet mmassonnet at xfce.org
Mon Aug 25 21:54:55 CEST 2008


Author: mmassonnet
Date: 2008-08-25 19:54:55 +0000 (Mon, 25 Aug 2008)
New Revision: 5303

Modified:
   xfmpc/trunk/src/dbbrowser.c
   xfmpc/trunk/src/playlist.c
Log:
Add a right click menu in the Playlist to remove the selected song(s)

* src/playlist.c:
  - 3 new functions: cb_button_pressed (catches right click),
  cb_popup_menu (catches the menu key from the keyboard), and
  popup_menu to popup the gtk menu
  - (xfmpc_playlist_init): Build a menu with a first item "Remove"

Modified: xfmpc/trunk/src/dbbrowser.c
===================================================================
--- xfmpc/trunk/src/dbbrowser.c	2008-08-25 19:15:36 UTC (rev 5302)
+++ xfmpc/trunk/src/dbbrowser.c	2008-08-25 19:54:55 UTC (rev 5303)
@@ -201,7 +201,7 @@
                                   GTK_POLICY_AUTOMATIC,
                                   GTK_POLICY_ALWAYS);
 
-  /* === Menu === */
+  /* Menu */
   priv->menu = gtk_menu_new ();
 
   GtkWidget *mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_ADD, NULL);

Modified: xfmpc/trunk/src/playlist.c
===================================================================
--- xfmpc/trunk/src/playlist.c	2008-08-25 19:15:36 UTC (rev 5302)
+++ xfmpc/trunk/src/playlist.c	2008-08-25 19:54:55 UTC (rev 5303)
@@ -41,20 +41,21 @@
 static void             xfmpc_playlist_finalize                 (GObject *object);
 
 static void             cb_song_changed                         (XfmpcPlaylist *playlist);
-
 static void             cb_playlist_changed                     (XfmpcPlaylist *playlist);
-
 static void             cb_row_activated                        (XfmpcPlaylist *playlist,
                                                                  GtkTreePath *path,
                                                                  GtkTreeViewColumn *column);
 static gboolean         cb_key_released                         (XfmpcPlaylist *playlist,
                                                                  GdkEventKey *event);
+static gboolean         cb_button_pressed                       (XfmpcPlaylist *playlist,
+                                                                 GdkEventButton *event);
+static gboolean         cb_popup_menu                           (XfmpcPlaylist *playlist);
+static void             popup_menu                              (XfmpcPlaylist *playlist);
+
 static void             cb_filter_entry_activated               (XfmpcPlaylist *playlist);
-
 static gboolean         cb_filter_entry_key_released            (XfmpcPlaylist *playlist,
                                                                  GdkEventKey *event);
 static void             cb_filter_entry_changed                 (XfmpcPlaylist *playlist);
-
 static gboolean         visible_func_filter_tree                (GtkTreeModel *filter,
                                                                  GtkTreeIter *iter,
                                                                  XfmpcPlaylist *playlist);
@@ -92,6 +93,7 @@
   GtkTreeModelFilter   *filter;
   GtkListStore         *store;
   GtkWidget            *filter_entry;
+  GtkWidget            *menu;
 
   gint                  current;
   gboolean              autocenter;
@@ -175,6 +177,7 @@
   /* === Tree view === */
   priv->treeview = gtk_tree_view_new ();
   gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)), GTK_SELECTION_MULTIPLE);
+  gtk_tree_view_set_rubber_banding (GTK_TREE_VIEW (priv->treeview), TRUE);
   gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->treeview), FALSE);
   gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->treeview), FALSE);
   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (priv->treeview), TRUE);
@@ -207,12 +210,22 @@
                                                "weight", COLUMN_WEIGHT,
                                                NULL);
 
-  /* === Scrolled window === */
+  /* Scrolled window */
   GtkWidget *scrolled = gtk_scrolled_window_new (NULL, NULL);
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
                                   GTK_POLICY_AUTOMATIC,
                                   GTK_POLICY_ALWAYS);
 
+  /* Menu */
+  priv->menu = gtk_menu_new ();
+
+  GtkWidget *mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_REMOVE, NULL);
+  gtk_menu_shell_append (GTK_MENU_SHELL (priv->menu), mi);
+  g_signal_connect_swapped (mi, "activate",
+                            G_CALLBACK (xfmpc_playlist_delete_selection), playlist);
+
+  gtk_widget_show_all (priv->menu);
+
   /* === Filter entry === */
   priv->filter_entry = gtk_entry_new ();
 
@@ -231,6 +244,10 @@
                             G_CALLBACK (cb_row_activated), playlist);
   g_signal_connect_swapped (priv->treeview, "key-release-event",
                             G_CALLBACK (cb_key_released), playlist);
+  g_signal_connect_swapped (priv->treeview, "button-press-event",
+                            G_CALLBACK (cb_button_pressed), playlist);
+  g_signal_connect_swapped (priv->treeview, "popup-menu",
+                            G_CALLBACK (cb_popup_menu), playlist);
   /* Filter entry */
   g_signal_connect_swapped (priv->filter_entry, "activate",
                             G_CALLBACK (cb_filter_entry_activated), playlist);
@@ -430,7 +447,58 @@
   return TRUE;
 }
 
+static gboolean
+cb_button_pressed (XfmpcPlaylist *playlist,
+                   GdkEventButton *event)
+{
+  XfmpcPlaylistPrivate *priv = XFMPC_PLAYLIST_GET_PRIVATE (playlist);
+  GtkTreeSelection     *selection;
+  GtkTreePath          *path;
+  
+  if (event->type != GDK_BUTTON_PRESS || event->button != 3)
+    return FALSE;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+  if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (priv->treeview),
+                                     event->x, event->y,
+                                     &path, NULL, NULL, NULL))
+    {
+      if (!gtk_tree_selection_path_is_selected (selection, path))
+        {
+          gtk_tree_selection_unselect_all (selection);
+          gtk_tree_selection_select_path (selection, path);
+        }
+      gtk_tree_path_free (path);
+    }
+
+  popup_menu (playlist);
+
+  return TRUE;
+}
+
+static gboolean
+cb_popup_menu (XfmpcPlaylist *playlist)
+{
+  popup_menu (playlist);
+
+  return TRUE;
+}
+
 static void
+popup_menu (XfmpcPlaylist *playlist)
+{
+  XfmpcPlaylistPrivate *priv = XFMPC_PLAYLIST_GET_PRIVATE (playlist);
+
+  gtk_menu_popup (GTK_MENU (priv->menu),
+                  NULL, NULL,
+                  NULL, NULL,
+                  0,
+                  gtk_get_current_event_time ());
+}
+
+
+
+static void
 cb_filter_entry_activated (XfmpcPlaylist *playlist)
 {
   XfmpcPlaylistPrivate *priv = XFMPC_PLAYLIST_GET_PRIVATE (playlist);




More information about the Goodies-commits mailing list