[geany/geany-plugins] 5107e6: commander: Use tree view cursor, not selection

Colomban Wendling git-noreply at xxxxx
Sat Aug 4 16:07:21 UTC 2012


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Sat, 04 Aug 2012 16:07:21
Commit:      5107e66d9a1f1c9ea8cb3e7514908d52c089ae5c
             https://github.com/geany/geany-plugins/commit/5107e66d9a1f1c9ea8cb3e7514908d52c089ae5c

Log Message:
-----------
commander: Use tree view cursor, not selection

A tree view has a cursor, which is what we actually want to move or
activate, rather than the selection.  The cursor is displayed through
the selection, so it doesn't change anything visually.


Modified Paths:
--------------
    commander/src/commander-plugin.c

Modified: commander/src/commander-plugin.c
75 files changed, 37 insertions(+), 38 deletions(-)
===================================================================
@@ -175,14 +175,13 @@ enum {
 }
 
 static void
-tree_view_set_active_cell (GtkTreeView *view,
-                           GtkTreeIter *iter)
+tree_view_set_cursor_from_iter (GtkTreeView *view,
+                                GtkTreeIter *iter)
 {
   GtkTreePath *path;
   
   path = gtk_tree_model_get_path (gtk_tree_view_get_model (view), iter);
-  gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), iter);
-  gtk_tree_view_scroll_to_cell (view, path, NULL, FALSE, 0.0, 0.0);
+  gtk_tree_view_set_cursor (view, path, NULL, FALSE);
   gtk_tree_path_free (path);
 }
 
@@ -191,12 +190,13 @@ enum {
                       GtkMovementStep step,
                       gint            amount)
 {
-  GtkTreeIter       iter;
-  GtkTreeSelection *selection = gtk_tree_view_get_selection (view);
-  GtkTreeModel     *model = gtk_tree_view_get_model (view);
-  gboolean          valid = FALSE;
+  GtkTreeIter   iter;
+  GtkTreePath  *path;
+  GtkTreeModel *model = gtk_tree_view_get_model (view);
+  gboolean      valid = FALSE;
   
-  if (! gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+  gtk_tree_view_get_cursor (view, &path, NULL);
+  if (! path) {
     valid = gtk_tree_model_get_iter_first (model, &iter);
   } else {
     switch (step) {
@@ -215,36 +215,48 @@ enum {
       case GTK_MOVEMENT_PAGES:
         /* FIXME: move by page */
       case GTK_MOVEMENT_DISPLAY_LINES:
+        gtk_tree_model_get_iter (model, &iter, path);
         if (amount > 0) {
           while ((valid = gtk_tree_model_iter_next (model, &iter)) &&
                  --amount > 0)
             ;
         } else if (amount < 0) {
-          GtkTreePath *path = gtk_tree_model_get_path (model, &iter);
-          
           while ((valid = gtk_tree_path_prev (path)) && --amount > 0)
             ;
           
           if (valid) {
             gtk_tree_model_get_iter (model, &iter, path);
           }
-          gtk_tree_path_free (path);
         }
         break;
       
       default:
         g_assert_not_reached ();
     }
+    gtk_tree_path_free (path);
   }
   
   if (valid) {
-    tree_view_set_active_cell (view, &iter);
+    tree_view_set_cursor_from_iter (view, &iter);
   } else {
     gtk_widget_error_bell (GTK_WIDGET (view));
   }
 }
 
 static void
+tree_view_activate_focused_row (GtkTreeView *view)
+{
+  GtkTreePath        *path;
+  GtkTreeViewColumn  *column;
+  
+  gtk_tree_view_get_cursor (view, &path, &column);
+  if (path) {
+    gtk_tree_view_row_activated (view, path, column);
+    gtk_tree_path_free (path);
+  }
+}
+
+static void
 store_populate_menu_items (GtkListStore  *store,
                            GtkMenuShell  *menu,
                            const gchar   *parent_path)
@@ -431,20 +443,9 @@ enum {
     
     case GDK_KEY_Return:
     case GDK_KEY_KP_Enter:
-    case GDK_KEY_ISO_Enter: {
-      GtkTreeIter       iter;
-      GtkTreeView      *view      = GTK_TREE_VIEW (plugin_data.view);
-      GtkTreeSelection *selection = gtk_tree_view_get_selection (view);
-      GtkTreeModel     *model;
-      
-      if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
-        GtkTreePath *path = gtk_tree_model_get_path (model, &iter);
-        gtk_tree_view_row_activated (view, path, NULL);
-        gtk_tree_path_free (path);
-      }
-      
+    case GDK_KEY_ISO_Enter:
+      tree_view_activate_focused_row (GTK_TREE_VIEW (plugin_data.view));
       return TRUE;
-    }
     
     case GDK_KEY_Page_Up:
     case GDK_KEY_Page_Down:
@@ -483,7 +484,7 @@ enum {
                                            sort_func, NULL, NULL);
   
   if (gtk_tree_model_get_iter_first (model, &iter)) {
-    tree_view_set_active_cell (view, &iter);
+    tree_view_set_cursor_from_iter (view, &iter);
   }
 }
 
@@ -492,17 +493,12 @@ enum {
                gpointer   dummy)
 {
   GtkTreeView  *view = GTK_TREE_VIEW (plugin_data.view);
-  GtkTreeModel *model;
-  GtkTreeIter   iter;
   
   if (plugin_data.last_path) {
     gtk_tree_path_free (plugin_data.last_path);
     plugin_data.last_path = NULL;
   }
-  if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (view),
-                                       &model, &iter)) {
-    plugin_data.last_path = gtk_tree_model_get_path (model, &iter);
-  }
+  gtk_tree_view_get_cursor (view, &plugin_data.last_path, NULL);
   
   gtk_list_store_clear (plugin_data.store);
 }
@@ -511,6 +507,7 @@ enum {
 on_panel_show (GtkWidget *widget,
                gpointer   dummy)
 {
+  GtkTreePath *path;
   GtkTreeView *view = GTK_TREE_VIEW (plugin_data.view);
   
   fill_store (plugin_data.store);
@@ -518,17 +515,19 @@ enum {
   gtk_widget_grab_focus (plugin_data.entry);
   
   if (plugin_data.last_path) {
-    gtk_tree_selection_select_path (gtk_tree_view_get_selection (view),
-                                    plugin_data.last_path);
+    gtk_tree_view_set_cursor (view, plugin_data.last_path, NULL, FALSE);
     gtk_tree_view_scroll_to_cell (view, plugin_data.last_path, NULL,
                                   TRUE, 0.5, 0.5);
   }
-  if (! gtk_tree_selection_get_selected (gtk_tree_view_get_selection (view),
-                                         NULL, NULL)) {
+  /* make sure the cursor is set (e.g. if plugin_data.last_path wasn't valid) */
+  gtk_tree_view_get_cursor (view, &path, NULL);
+  if (path) {
+    gtk_tree_path_free (path);
+  } else {
     GtkTreeIter iter;
     
     if (gtk_tree_model_get_iter_first (gtk_tree_view_get_model (view), &iter)) {
-      tree_view_set_active_cell (GTK_TREE_VIEW (plugin_data.view), &iter);
+      tree_view_set_cursor_from_iter (GTK_TREE_VIEW (plugin_data.view), &iter);
     }
   }
 }


@@ Diff output truncated at 100000 characters. @@


--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).



More information about the Plugins-Commits mailing list