[geany/geany-plugins] 1f7495: commander: Split out tree view focus movements

Colomban Wendling git-noreply at xxxxx
Sat Aug 4 15:08:40 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 15:08:40
Commit:      1f7495c2f5c6b6bcb4037f987cf70661065d3fc5
             https://github.com/geany/geany-plugins/commit/1f7495c2f5c6b6bcb4037f987cf70661065d3fc5

Log Message:
-----------
commander: Split out tree view focus movements


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

Modified: commander/src/commander-plugin.c
94 files changed, 68 insertions(+), 26 deletions(-)
===================================================================
@@ -238,6 +238,64 @@ enum {
   gtk_tree_path_free (path);
 }
 
+static void
+tree_view_move_focus (GtkTreeView    *view,
+                      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;
+  
+  if (! gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+    valid = gtk_tree_model_get_iter_first (model, &iter);
+  } else {
+    switch (step) {
+      case GTK_MOVEMENT_BUFFER_ENDS:
+        valid = gtk_tree_model_get_iter_first (model, &iter);
+        if (valid && amount > 0) {
+          GtkTreeIter prev;
+          
+          do {
+            prev = iter;
+          } while (gtk_tree_model_iter_next (model, &iter));
+          iter = prev;
+        }
+        break;
+      
+      case GTK_MOVEMENT_PAGES:
+        /* FIXME: move by page */
+      case GTK_MOVEMENT_DISPLAY_LINES:
+        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 ();
+    }
+  }
+  
+  if (valid) {
+    tree_view_set_active_cell (view, &iter);
+  } else {
+    gtk_widget_error_bell (GTK_WIDGET (view));
+  }
+}
+
 static gboolean
 on_panel_key_press_event (GtkWidget    *widget,
                           GdkEventKey  *event,
@@ -292,34 +350,18 @@ enum {
       return TRUE;
     }
     
+    case GDK_KEY_Page_Up:
+    case GDK_KEY_Page_Down:
+      tree_view_move_focus (GTK_TREE_VIEW (plugin_data.view),
+                            GTK_MOVEMENT_PAGES,
+                            event->keyval == GDK_KEY_Page_Up ? -1 : 1);
+      return TRUE;
+    
     case GDK_KEY_Up:
     case GDK_KEY_Down: {
-      GtkTreeIter       iter;
-      GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (plugin_data.view));
-      GtkTreeModel     *model = gtk_tree_view_get_model (GTK_TREE_VIEW (plugin_data.view));
-      gboolean          valid;
-      
-      if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
-        if (event->keyval == GDK_KEY_Up) {
-          GtkTreePath *path = gtk_tree_model_get_path (model, &iter);
-          
-          valid = gtk_tree_path_prev (path);
-          if (valid) {
-            gtk_tree_model_get_iter (model, &iter, path);
-          }
-          gtk_tree_path_free (path);
-        } else {
-          valid = gtk_tree_model_iter_next (model, &iter);
-        }
-      } else {
-        valid = gtk_tree_model_get_iter_first (model, &iter);
-      }
-      
-      if (valid) {
-        tree_view_set_active_cell (GTK_TREE_VIEW (plugin_data.view), &iter);
-      } else {
-        gdk_beep ();
-      }
+      tree_view_move_focus (GTK_TREE_VIEW (plugin_data.view),
+                            GTK_MOVEMENT_DISPLAY_LINES,
+                            event->keyval == GDK_KEY_Up ? -1 : 1);
       return TRUE;
     }
   }


@@ 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