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

Mike Massonnet mmassonnet at xfce.org
Fri Mar 28 01:50:08 CET 2008


Author: mmassonnet
Date: 2008-03-28 00:50:08 +0000 (Fri, 28 Mar 2008)
New Revision: 4121

Modified:
   xfmpc/trunk/src/dbbrowser.c
   xfmpc/trunk/src/dbbrowser.h
Log:
Add multiple selection to the XfmpcDbbrowser tree view, and go to parent directory with backspace
* src/dbbrowser.c(xfmpc_dbbrowser_init):
  - Enable rubber banding
* src/dbbrowser.c,
  src/dbbrowser.h:
  - Add new callback cb_key_pressed to add the selected rows on key Return
  - New function xfmpc_dbbrowser_add_selected_rows
* src/dbbrowser.c(cb_key_pressed):
  - Go to parent directory when key GDK_BackSpace is pressed


Modified: xfmpc/trunk/src/dbbrowser.c
===================================================================
--- xfmpc/trunk/src/dbbrowser.c	2008-03-28 00:50:03 UTC (rev 4120)
+++ xfmpc/trunk/src/dbbrowser.c	2008-03-28 00:50:08 UTC (rev 4121)
@@ -21,6 +21,7 @@
 #endif
 
 #include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 #include <libxfce4util/libxfce4util.h>
 
 #include "dbbrowser.h"
@@ -42,6 +43,8 @@
 static void             cb_row_activated                       (XfmpcDbbrowser *dbbrowser,
                                                                 GtkTreePath *path,
                                                                 GtkTreeViewColumn *column);
+static gboolean         cb_key_pressed                         (XfmpcDbbrowser *dbbrowser,
+                                                                GdkEventKey *event);
 
 
 
@@ -153,6 +156,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), TRUE);
   gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->treeview), COLUMN_BASENAME);
   gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->treeview), FALSE);
@@ -196,6 +200,8 @@
   /* Tree view */
   g_signal_connect_swapped (priv->treeview, "row-activated",
                             G_CALLBACK (cb_row_activated), dbbrowser);
+  g_signal_connect_swapped (priv->treeview, "key-press-event",
+                            G_CALLBACK (cb_key_pressed), dbbrowser);
 }
 
 static void
@@ -260,6 +266,36 @@
 }
 
 void
+xfmpc_dbbrowser_add_selected_rows (XfmpcDbbrowser *dbbrowser)
+{
+  XfmpcDbbrowserPrivate *priv = XFMPC_DBBROWSER_GET_PRIVATE (dbbrowser);
+  GtkTreeModel         *store = GTK_TREE_MODEL (priv->store);
+  GtkTreeIter           iter;
+  GList                *list;
+  gchar                *filename;
+
+  list = gtk_tree_selection_get_selected_rows (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)),
+                                               &store);
+  while (NULL != list)
+    {
+      if (gtk_tree_model_get_iter (store, &iter, list->data))
+        {       
+          gtk_tree_model_get (store, &iter,
+                              COLUMN_FILENAME, &filename,
+                              -1);
+          xfmpc_mpdclient_queue_add (dbbrowser->mpdclient, filename);
+          g_free (filename);
+        }
+      list = g_list_next (list);
+    }
+
+  xfmpc_mpdclient_queue_commit (dbbrowser->mpdclient);
+
+  g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL);
+  g_list_free (list);
+}
+
+void
 xfmpc_dbbrowser_reload (XfmpcDbbrowser *dbbrowser)
 {
   XfmpcDbbrowserPrivate    *priv = XFMPC_DBBROWSER_GET_PRIVATE (dbbrowser);
@@ -372,3 +408,38 @@
   g_free (filename);
 }
 
+static gboolean
+cb_key_pressed (XfmpcDbbrowser *dbbrowser,
+                GdkEventKey *event)
+{
+  XfmpcDbbrowserPrivate    *priv = XFMPC_DBBROWSER_GET_PRIVATE (dbbrowser);
+  GtkTreeSelection         *selection;
+  gchar                    *filename;
+
+  if (event->type != GDK_KEY_PRESS)
+    return FALSE;
+
+  switch (event->keyval)
+    {
+    case GDK_Return:
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+      if (gtk_tree_selection_count_selected_rows (selection) > 1)
+        xfmpc_dbbrowser_add_selected_rows (dbbrowser);
+      else
+        return FALSE;
+      break;
+
+    case GDK_BackSpace:
+      filename = xfmpc_dbbrowser_get_parent_wdir (dbbrowser);
+      xfmpc_dbbrowser_set_wdir (dbbrowser, filename);
+      g_free (filename);
+      xfmpc_dbbrowser_reload (dbbrowser);
+      break;
+
+    default:
+      return FALSE;
+    }
+
+  return TRUE;
+}
+

Modified: xfmpc/trunk/src/dbbrowser.h
===================================================================
--- xfmpc/trunk/src/dbbrowser.h	2008-03-28 00:50:03 UTC (rev 4120)
+++ xfmpc/trunk/src/dbbrowser.h	2008-03-28 00:50:08 UTC (rev 4121)
@@ -45,6 +45,8 @@
                                                          gchar *filename,
                                                          gchar *basename,
                                                          gboolean is_dir);
+void            xfmpc_dbbrowser_add_selected_rows       (XfmpcDbbrowser *dbbrowser);
+
 void            xfmpc_dbbrowser_reload                  (XfmpcDbbrowser *dbbrowser);
 
 void            xfmpc_dbbrowser_set_wdir                (XfmpcDbbrowser *dbbrowser,




More information about the Goodies-commits mailing list