[Xfce4-commits] [xfce/thunar] 11/13: Keep selection in original tree view when middle-clicking for new tab/window

noreply at xfce.org noreply at xfce.org
Tue May 12 09:58:24 CEST 2015


This is an automated email from the git hooks/post-receive script.

hjudt pushed a commit to branch master
in repository xfce/thunar.

commit aec146bf4d11d17ce8ee31c8bf0412948706940d
Author: Harald Judt <h.judt at gmx.at>
Date:   Mon May 11 13:10:03 2015 +0200

    Keep selection in original tree view when middle-clicking for new tab/window
    
    When middle-clicking on an item in the tree view, the cursor will be set
    on the clicked item so that the new tab/window will show this item. However,
    the original tree view should still show the old location and behave as if
    the middle-click did not happen.
---
 thunar/thunar-tree-view.c |   31 ++++++++++++++++++++++++-------
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/thunar/thunar-tree-view.c b/thunar/thunar-tree-view.c
index 9f9e7f4..8d87f6e 100644
--- a/thunar/thunar-tree-view.c
+++ b/thunar/thunar-tree-view.c
@@ -708,9 +708,16 @@ thunar_tree_view_button_press_event (GtkWidget      *widget,
   /* reset the pressed button state */
   view->pressed_button = -1;
 
-  /* completely ignore double middle clicks */
-  if (event->type == GDK_2BUTTON_PRESS && event->button == 2)
-    return TRUE;
+  if (event->button == 2)
+    {
+      /* completely ignore double middle clicks */
+      if (event->type == GDK_2BUTTON_PRESS)
+        return TRUE;
+
+      /* remember the current selection as we want to restore it later */
+      gtk_tree_path_free (view->select_path);
+      gtk_tree_view_get_cursor(GTK_TREE_VIEW (view), &(view->select_path), NULL);
+    }
 
   /* let the widget process the event first (handles focussing and scrolling) */
   result = (*GTK_WIDGET_CLASS (thunar_tree_view_parent_class)->button_press_event) (widget, event);
@@ -731,17 +738,16 @@ thunar_tree_view_button_press_event (GtkWidget      *widget,
               result = TRUE;
             }
         }
-      else if ((event->button == 1 || event->button == 2)
-               && event->type == GDK_BUTTON_PRESS)
+      else if ((event->button == 1 || event->button == 2) && event->type == GDK_BUTTON_PRESS)
         {
           GdkRectangle rect;
           gtk_tree_view_get_cell_area (GTK_TREE_VIEW (widget), path, column, &rect);
 
           /* set cursor only when the user did not click the expander */
           if (rect.x <= event->x && event->x <= (rect.x + rect.width))
-              gtk_tree_view_set_cursor (GTK_TREE_VIEW (widget), path, NULL, FALSE);
+            gtk_tree_view_set_cursor (GTK_TREE_VIEW (widget), path, NULL, FALSE);
 
-          /* remember the button as pressed and handled it in the release handler */
+          /* remember the button as pressed and handle it in the release handler */
           view->pressed_button = event->button;
         }
 
@@ -772,6 +778,7 @@ thunar_tree_view_button_release_event (GtkWidget      *widget,
       else if (G_UNLIKELY (event->button == 2))
         {
           g_object_get (view->preferences, "misc-middle-click-in-tab", &in_tab, NULL);
+
           /* holding ctrl inverts the action */
           if ((event->state & GDK_CONTROL_MASK) != 0)
             in_tab = !in_tab;
@@ -780,6 +787,14 @@ thunar_tree_view_button_release_event (GtkWidget      *widget,
             thunar_tree_view_action_open_in_new_tab (view);
           else
             thunar_tree_view_action_open_in_new_window (view);
+
+          /* set the cursor back to the previously selected item */
+          if (view->select_path != NULL)
+            {
+              gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), view->select_path, NULL, FALSE);
+              gtk_tree_path_free (view->select_path);
+              view->select_path = NULL;
+            }
         }
       gtk_widget_grab_focus (widget);
     }
@@ -791,6 +806,8 @@ thunar_tree_view_button_release_event (GtkWidget      *widget,
   return (*GTK_WIDGET_CLASS (thunar_tree_view_parent_class)->button_release_event) (widget, event);
 }
 
+
+
 static gboolean
 thunar_tree_view_key_press_event(GtkWidget   *widget,
                                  GdkEventKey *event)

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list