[Goodies-commits] r5302 - xfmpc/trunk/src
Mike Massonnet
mmassonnet at xfce.org
Mon Aug 25 21:15:36 CEST 2008
Author: mmassonnet
Date: 2008-08-25 19:15:36 +0000 (Mon, 25 Aug 2008)
New Revision: 5302
Modified:
xfmpc/trunk/src/dbbrowser.c
Log:
Add a right click menu in the Database Browser to add the selected song(s)
* src/dbbrowser.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_dbbrowser_init): Build a menu with a first item "Add"
Modified: xfmpc/trunk/src/dbbrowser.c
===================================================================
--- xfmpc/trunk/src/dbbrowser.c 2008-08-25 19:15:33 UTC (rev 5301)
+++ xfmpc/trunk/src/dbbrowser.c 2008-08-25 19:15:36 UTC (rev 5302)
@@ -45,14 +45,16 @@
GtkTreeViewColumn *column);
static gboolean cb_key_pressed (XfmpcDbbrowser *dbbrowser,
GdkEventKey *event);
+static gboolean cb_button_pressed (XfmpcDbbrowser *dbbrowser,
+ GdkEventButton *event);
+static gboolean cb_popup_menu (XfmpcDbbrowser *dbbrowser);
+static void popup_menu (XfmpcDbbrowser *dbbrowser);
+
static void cb_search_entry_activated (XfmpcDbbrowser *dbbrowser);
-
static gboolean cb_search_entry_key_released (XfmpcDbbrowser *dbbrowser,
GdkEventKey *event);
static void cb_search_entry_changed (XfmpcDbbrowser *dbbrowser);
-
static gboolean timeout_search (XfmpcDbbrowser *dbbrowser);
-
static void timeout_search_destroy (XfmpcDbbrowser *dbbrowser);
@@ -88,6 +90,7 @@
GtkWidget *treeview;
GtkListStore *store;
GtkWidget *search_entry;
+ GtkWidget *menu;
guint search_timeout;
gboolean is_searching;
@@ -192,12 +195,22 @@
"text", COLUMN_BASENAME,
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_ADD, NULL);
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->menu), mi);
+ g_signal_connect_swapped (mi, "activate",
+ G_CALLBACK (xfmpc_dbbrowser_add_selected_rows), dbbrowser);
+
+ gtk_widget_show_all (priv->menu);
+
/* === Search entry === */
priv->search_entry = gtk_entry_new ();
@@ -216,6 +229,10 @@
G_CALLBACK (cb_row_activated), dbbrowser);
g_signal_connect_swapped (priv->treeview, "key-press-event",
G_CALLBACK (cb_key_pressed), dbbrowser);
+ g_signal_connect_swapped (priv->treeview, "button-press-event",
+ G_CALLBACK (cb_button_pressed), dbbrowser);
+ g_signal_connect_swapped (priv->treeview, "popup-menu",
+ G_CALLBACK (cb_popup_menu), dbbrowser);
/* Search entry */
g_signal_connect_swapped (priv->search_entry, "activate",
G_CALLBACK (cb_search_entry_activated), dbbrowser);
@@ -527,9 +544,58 @@
return TRUE;
}
+static gboolean
+cb_button_pressed (XfmpcDbbrowser *dbbrowser,
+ GdkEventButton *event)
+{
+ XfmpcDbbrowserPrivate *priv = XFMPC_DBBROWSER_GET_PRIVATE (dbbrowser);
+ 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 (dbbrowser);
+
+ return TRUE;
+}
+
+static gboolean
+cb_popup_menu (XfmpcDbbrowser *dbbrowser)
+{
+ popup_menu (dbbrowser);
+
+ return TRUE;
+}
+
static void
+popup_menu (XfmpcDbbrowser *dbbrowser)
+{
+ XfmpcDbbrowserPrivate *priv = XFMPC_DBBROWSER_GET_PRIVATE (dbbrowser);
+
+ gtk_menu_popup (GTK_MENU (priv->menu),
+ NULL, NULL,
+ NULL, NULL,
+ 0,
+ gtk_get_current_event_time ());
+}
+
+
+
+static void
cb_search_entry_activated (XfmpcDbbrowser *dbbrowser)
{
XfmpcDbbrowserPrivate *priv = XFMPC_DBBROWSER_GET_PRIVATE (dbbrowser);
More information about the Goodies-commits
mailing list