rpms/pan/devel pan-0.97-tree-expanders.patch, NONE, 1.1 pan.spec, 1.15, 1.16

Michael A. Peters (mpeters) fedora-extras-commits at redhat.com
Tue May 16 10:57:22 UTC 2006


Author: mpeters

Update of /cvs/extras/rpms/pan/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv11658

Modified Files:
	pan.spec 
Added Files:
	pan-0.97-tree-expanders.patch 
Log Message:
patch from upstream


pan-0.97-tree-expanders.patch:

--- NEW FILE pan-0.97-tree-expanders.patch ---
diff -u pan/gui-bak/group-pane.cc pan/gui/group-pane.cc
--- pan/gui-bak/group-pane.cc	2006-05-15 14:22:21.000000000 -0500
+++ pan/gui/group-pane.cc	2006-05-15 14:22:41.000000000 -0500
@@ -251,13 +251,56 @@
   g_idle_add (on_row_activated_idle, pane_g);
 }
 
+namespace
+{
+  bool row_collapsed_or_expanded (false);
+
+  void row_collapsed_or_expanded_cb (GtkTreeView *view, GtkTreeIter *iter, GtkTreePath *path, gpointer unused)
+  {
+    row_collapsed_or_expanded = true;
+  }
+
+  struct Blah
+  {
+    GtkTreeView * view;
+    GtkTreePath * path;
+    GtkTreeViewColumn * col;
+  };
+
+  gboolean maybe_activate_on_idle_idle (gpointer blah_gpointer)
+  {
+    Blah * blah = (Blah*) blah_gpointer;
+    if (!row_collapsed_or_expanded)
+      gtk_tree_view_row_activated (blah->view, blah->path, blah->col);
+    gtk_tree_path_free (blah->path);
+    g_free (blah);
+    return false;
+  }
+
+  /**
+   * There doesn't seem to be any way to see if a mouse click in a tree view
+   * happened on the expander or elsewhere in a row, so when deciding whether or
+   * not to activate a row on single click, let's wait and see if a row expands or
+   * collapses.
+   */
+  void maybe_activate_on_idle (GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *col)
+  {
+    row_collapsed_or_expanded = false;
+    Blah * blah = (Blah*) g_new (Blah, 1);
+    blah->view = view;
+    blah->path = path;
+    blah->col = col;
+    g_idle_add (maybe_activate_on_idle_idle, blah);
+  } 
+}
+
 gboolean
 GroupPane :: on_button_pressed (GtkWidget *treeview, GdkEventButton *event, gpointer userdata)
 {
   GroupPane * pane (static_cast<GroupPane*>(userdata));
 
   // single click with the right mouse button?
-  if (event->type == GDK_BUTTON_PRESS  &&  event->button == 3)
+  if (event->type == GDK_BUTTON_PRESS && event->button == 3)
   {
     GtkTreeSelection * selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
     GtkTreePath * path;
@@ -271,20 +314,21 @@
     do_popup_menu (treeview, event, userdata);
     return true;
   }
-  else if (pane->_prefs.get_flag("single-click-activates-group", true)
-           && event->type == GDK_BUTTON_PRESS
-           && event->button == 1)
+  else if (pane->_prefs.get_flag("single-click-activates-group",true)
+           && (event->type == GDK_BUTTON_RELEASE)
+           && (event->button == 1)
+           && (event->send_event == false)
+           && (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW(treeview)))
+           && !(event->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_MOD1_MASK)))
   {
     GtkTreePath * path;
     GtkTreeViewColumn * col;
+    gint cell_x(0), cell_y(0);
     if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview),
-                                      (gint) event->x, 
+                                      (gint) event->x,
                                       (gint) event->y,
-                                      &path, &col, NULL, NULL))
-    {
-      gtk_tree_view_row_activated (GTK_TREE_VIEW(treeview), path, col);
-      gtk_tree_path_free(path);
-    }
+                                      &path, &col, &cell_x, &cell_y))
+      maybe_activate_on_idle (GTK_TREE_VIEW(treeview), path, col);
   }
 
   return false;
@@ -704,7 +748,10 @@
   gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW(_tree_view), true);
 #endif
 
+  g_signal_connect (_tree_view, "row_collapsed", G_CALLBACK(row_collapsed_or_expanded_cb), 0);
+  g_signal_connect (_tree_view, "row_expanded", G_CALLBACK(row_collapsed_or_expanded_cb), 0);
   g_signal_connect (_tree_view, "button-press-event", G_CALLBACK(on_button_pressed), this);
+  g_signal_connect (_tree_view, "button-release-event", G_CALLBACK(on_button_pressed), this);
   g_signal_connect (_tree_view, "popup-menu", G_CALLBACK(on_popup_menu), this);
   g_signal_connect (_tree_view, "row-activated", G_CALLBACK(on_row_activated), this);
   g_object_unref (G_OBJECT(_tree_store));
diff -u pan/gui-bak/header-pane.cc pan/gui/header-pane.cc
--- pan/gui-bak/header-pane.cc	2006-05-15 14:22:22.000000000 -0500
+++ pan/gui/header-pane.cc	2006-05-15 14:27:50.000000000 -0500
@@ -1013,7 +1013,48 @@
     return true;
   }
 }
+namespace
+{
+  bool row_collapsed_or_expanded (false);
+
+  void row_collapsed_or_expanded_cb (GtkTreeView *view, GtkTreeIter *iter, GtkTreePath *path, gpointer unused)
+  {
+    row_collapsed_or_expanded = true;
+  }
+
+  struct Blah
+  {
+    GtkTreeView * view;
+    GtkTreePath * path;
+    GtkTreeViewColumn * col;
+  };
 
+  gboolean maybe_activate_on_idle_idle (gpointer blah_gpointer)
+  {
+    Blah * blah = (Blah*) blah_gpointer;
+    if (!row_collapsed_or_expanded)
+      gtk_tree_view_row_activated (blah->view, blah->path, blah->col);
+    gtk_tree_path_free (blah->path);
+    g_free (blah);
+    return false;
+  }
+
+  /**
+   * There doesn't seem to be any way to see if a mouse click in a tree view
+   * happened on the expander or elsewhere in a row, so when deciding whether or
+   * not to activate a row on single click, let's wait and see if a row expands or
+   * collapses.
+   */
+  void maybe_activate_on_idle (GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *col)
+  {
+    row_collapsed_or_expanded = false;
+    Blah * blah = (Blah*) g_new (Blah, 1);
+    blah->view = view;
+    blah->path = path;
+    blah->col = col;
+    g_idle_add (maybe_activate_on_idle_idle, blah);
+  }
+}
 
 gboolean
 HeaderPane :: on_button_pressed (GtkWidget * treeview, GdkEventButton *event, gpointer userdata)
@@ -1044,6 +1085,7 @@
            && (event->type == GDK_BUTTON_RELEASE)
            && (event->button == 1)
            && (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW(treeview)))
+           && (event->send_event == false)
            && !(event->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_MOD1_MASK)))
   {
     GtkTreePath * path;
@@ -1053,14 +1095,7 @@
                                       (gint) event->x,
                                       (gint) event->y,
                                       &path, &col, &cell_x, &cell_y))
-    {
-      // get the cell area to make sure they didn't click on an expander.
-  //    GdkRectangle rect;
-  //    gtk_tree_view_get_cell_area (GTK_TREE_VIEW(treeview), path, col, &rect);
-  //    if (rect.x<=cell_x && cell_x<(rect.x+rect.width) && rect.y<=cell_y && cell_y<(rect.y+rect.height))
-        gtk_tree_view_row_activated (GTK_TREE_VIEW(treeview), path, col);
-      gtk_tree_path_free(path);
-    }
+      maybe_activate_on_idle (GTK_TREE_VIEW(treeview), path, col);
   }
 
   return false;
@@ -1602,6 +1637,8 @@
 
   g_signal_connect (_tree_view, "button-release-event", G_CALLBACK(on_button_pressed), this);
   g_signal_connect (_tree_view, "button-press-event", G_CALLBACK(on_button_pressed), this);
+  g_signal_connect (_tree_view, "row-collapsed", G_CALLBACK(row_collapsed_or_expanded_cb), NULL);
+  g_signal_connect (_tree_view, "row-expanded", G_CALLBACK(row_collapsed_or_expanded_cb), NULL);
   g_signal_connect (_tree_view, "popup-menu", G_CALLBACK(on_popup_menu), this);
   g_signal_connect (_tree_view, "row-activated", G_CALLBACK(on_row_activated), this);
   GtkWidget * scroll = gtk_scrolled_window_new (0, 0);


Index: pan.spec
===================================================================
RCS file: /cvs/extras/rpms/pan/devel/pan.spec,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- pan.spec	14 May 2006 04:12:20 -0000	1.15
+++ pan.spec	16 May 2006 10:57:22 -0000	1.16
@@ -1,12 +1,13 @@
 Summary: A GNOME/GTK+ news reader for X
 Name: pan
 Version: 0.97
-Release: 1%{?dist}
+Release: 2%{?dist}
 Epoch: 1
 License: GPL
 Group: Applications/Internet
 Source0: http://pan.rebelbase.com/download/%{version}/SOURCE/%{name}-%{version}.tar.bz2
 Patch0: pan-0.97-crash-on-shutdown.patch
+Patch1: pan-0.97-tree-expanders.patch
 URL: http://pan.rebelbase.com/
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: desktop-file-utils
@@ -28,6 +29,7 @@
 %prep
 %setup -q
 %patch0 -p0
+%patch1 -p0
 
 echo "StartupNotify=true" >> pan.desktop
 
@@ -72,6 +74,9 @@
 %{_datadir}/applications/fedora-pan.desktop
 
 %changelog
+* Tue May 16 2006 Michael A. Peters <mpeters at mac.com> - 1:0.97-2
+- Added pan-0.97-tree-expanders.patch from upstream
+
 * Sat May 13 2006 Michael A. Peters <mpeters at mac.com> - 1:0.97-1
 - Update to 0.97 (previous patches no longer needed)
 - Patch pan-0.97-crash-on-shutdown.patch from upstream added




More information about the fedora-extras-commits mailing list