2006-08-23 [colin] 2.4.0cvs79
authorColin Leroy <colin@colino.net>
Wed, 23 Aug 2006 17:43:52 +0000 (17:43 +0000)
committerColin Leroy <colin@colino.net>
Wed, 23 Aug 2006 17:43:52 +0000 (17:43 +0000)
* src/gtk/gtksctree.c
When selecting or deselecting range, only
freeze/thaw when selection is bigger than 10

ChangeLog
PATCHSETS
configure.ac
src/gtk/gtksctree.c

index 5b39dfd3aec35b2c6d494e39d8e859faa13a68d7..d4cecf5c5f6d74f37591be3f8e170da29efabcc8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-08-23 [colin]     2.4.0cvs79
+
+       * src/gtk/gtksctree.c
+               When selecting or deselecting range, only
+               freeze/thaw when selection is bigger than 10
+
 2006-08-23 [colin]     2.4.0cvs78
 
        * src/messageview.c
index 3f0282f27efdf874d5a40a4a4d3bfcf192cbb54f..29422b888c259bec0f52546d51ef10d634baccfc 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.49.2.80 -r 1.49.2.81 src/procmime.c;  ) > 2.4.0cvs76.patchset
 ( cvs diff -u -r 1.1.2.8 -r 1.1.2.9 src/image_viewer.c;  cvs diff -u -r 1.96.2.139 -r 1.96.2.140 src/textview.c;  ) > 2.4.0cvs77.patchset
 ( cvs diff -u -r 1.94.2.97 -r 1.94.2.98 src/messageview.c;  cvs diff -u -r 1.83.2.81 -r 1.83.2.82 src/mimeview.c;  cvs diff -u -r 1.20.2.13 -r 1.20.2.14 src/mimeview.h;  cvs diff -u -r 1.12.2.12 -r 1.12.2.13 src/plugins/dillo_viewer/dillo_viewer.c;  ) > 2.4.0cvs78.patchset
+( cvs diff -u -r 1.1.4.22 -r 1.1.4.23 src/gtk/gtksctree.c;  ) > 2.4.0cvs79.patchset
index 2fe4490dcee8a372d87485ecabcf2533deec1421..9f73275d02052e85bb7fa381f7ce29627d439cb0 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=4
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=78
+EXTRA_VERSION=79
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 851c0eadae1fc8705b1e479573a098035409c405..438c24673a23499bf91091d9f1040bf4bdc23bf5 100644 (file)
@@ -241,6 +241,10 @@ select_range (GtkSCTree *sctree, gint row)
                min = max;
                max = t;
        }
+       
+       if (max - min > 10)
+               gtk_clist_freeze(GTK_CLIST(sctree));
+
        node = g_list_nth((GTK_CLIST(sctree))->row_list, min);
        for (i = min; i < max; i++) {
                if (node && GTK_CTREE_ROW (node)->row.selectable) {
@@ -249,11 +253,25 @@ select_range (GtkSCTree *sctree, gint row)
                }
                node = node->next;
        }
+       if (max - min > 10)
+               gtk_clist_thaw(GTK_CLIST(sctree));
+
 
        sctree->selecting_range = FALSE;
        gtk_clist_select_row (GTK_CLIST (sctree), max, -1);
 }
 
+static gboolean sc_g_list_bigger(GList *list, gint max)
+{
+       GList *cur = list;
+       int i = 0;
+       while (cur && i <= max+1) {
+               i++;
+               cur = cur->next;
+       }
+       return (i > max);
+}
+
 /* Handles row selection according to the specified modifier state */
 /* in certain cases, we arrive here from a function knowing the GtkCTreeNode, and having
  * already slowly found row using g_list_position. In which case, _node will be non-NULL
@@ -272,13 +290,6 @@ select_row (GtkSCTree *sctree, gint row, gint col, guint state, GtkCTreeNode *_n
                   (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_SINGLE) &&
                   (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_BROWSE);
 
-       /* heavy GUI updates will be done only if we're selecting a range.
-        * additive selection is ctrl-click, where the user is the slow factor.
-        * So we only freeze the list if selecting a range (potentially thousands 
-        * of lines. */
-       if (range)
-               gtk_clist_freeze (GTK_CLIST (sctree));
-
        GTK_CLIST(sctree)->focus_row = row;
 
        if (!additive) {
@@ -288,8 +299,7 @@ select_row (GtkSCTree *sctree, gint row, gint col, guint state, GtkCTreeNode *_n
                 * which case, freeze, else don't. */
 
                gboolean should_freeze = FALSE;
-               if (GTK_CLIST(sctree)->selection
-                && GTK_CLIST(sctree)->selection->next) {
+               if (sc_g_list_bigger(GTK_CLIST(sctree)->selection, 10)) {
                        should_freeze = TRUE;
                        sctree->selecting_range = TRUE;
                        gtk_clist_freeze (GTK_CLIST (sctree));
@@ -324,9 +334,6 @@ select_row (GtkSCTree *sctree, gint row, gint col, guint state, GtkCTreeNode *_n
                sctree->anchor_row = node;
        } else
                select_range (sctree, row);
-       
-       if (range)
-               gtk_clist_thaw (GTK_CLIST (sctree));
 }
 
 /* Our handler for button_press events.  We override all of GtkCList's broken