]> Pileus Git - ~andy/gtk/blobdiff - gtk/tests/treeview-scrolling.c
filechooserbutton: Don't duplicate tests for GTK_RESPONSE_DELETE_EVENT
[~andy/gtk] / gtk / tests / treeview-scrolling.c
index ade22289add17b6aa013fae062781f5020d2addc..77dca9abc44699dce08b76ae569e3767f0b8235b 100644 (file)
@@ -14,9 +14,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /* Original v1.0 -- December 26, 2006
@@ -125,6 +123,8 @@ scroll_fixture_setup (ScrollFixture *fixture,
 
        fixture->tree_view = gtk_tree_view_new_with_model (model);
        g_object_unref (model);
+       gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (sw), VIEW_WIDTH);
+       gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (sw), VIEW_HEIGHT);
        gtk_widget_set_size_request (fixture->tree_view, VIEW_WIDTH, VIEW_HEIGHT);
 
        renderer = gtk_cell_renderer_text_new ();
@@ -297,32 +297,31 @@ static enum Pos
 get_pos_from_path (GtkTreeView   *tree_view,
                   GtkTreePath   *path,
                   gdouble        row_height,
-                  GtkAdjustment *vadj)
+                  GtkAdjustment *vadjustment)
 {
        int row_start;
 
        row_start = get_row_start_for_index (tree_view,
                                             gtk_tree_path_get_indices (path)[0]);
 
-       if (row_start + row_height < vadj->page_size)
+       if (row_start + row_height < gtk_adjustment_get_page_size (vadjustment))
                return POS_TOP;
 
-       if (row_start >= vadj->upper - vadj->page_size)
+       if (row_start >= gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment))
                return POS_BOTTOM;
 
        return POS_CENTER;
 }
 
-static gboolean
-test_position_with_align (GtkTreeView  *tree_view,
-                         enum Pos      pos,
-                         gint          row_y,
-                         gint          row_start,
-                         gdouble       row_height,
-                         gdouble       row_align)
+static void
+assert_position_with_align (GtkTreeView  *tree_view,
+                            enum Pos      pos,
+                            gint          row_y,
+                            gint          row_start,
+                            gdouble       row_height,
+                            gdouble       row_align)
 {
-       gboolean passed = TRUE;
-       GtkAdjustment *vadj = gtk_tree_view_get_vadjustment (tree_view);
+       GtkAdjustment *vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view));
 
        /* Switch on row-align: 0.0, 0.5, 1.0 */
        switch ((int)(row_align * 2.)) {
@@ -334,42 +333,37 @@ test_position_with_align (GtkTreeView  *tree_view,
                         *    - dy should be equal to the top
                         *      y coordinate of the row.
                         */
-                       if (row_y != 0)
-                               passed = FALSE;
-                       if (vadj->value != row_start)
-                               passed = FALSE;
+                       g_assert (row_y == 0);
+                       g_assert (gtk_adjustment_get_value (vadjustment) == row_start);
                } else {
                        /* The row can be anywhere at the last
                         * page of the tree view.
                         *   - dy is set to the start of the
                         *     last page.
                         */
-                       if (vadj->value != vadj->upper - vadj->page_size)
-                               passed = FALSE;
+                       g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
                }
                break;
 
        case 1:
                /* 0.5 */
                if (pos == POS_TOP
-                   && row_start < vadj->page_size / 2) {
+                   && row_start < (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2) {
                        /* For the first half of the top view we can't
                         * center the row in the view, instead we
                         * show the first page.
                         *   - dy should be zero
                         */
-                       if (vadj->value != 0)
-                               passed = FALSE;
+                       g_assert (gtk_adjustment_get_value (vadjustment) == 0);
                } else if (pos == POS_BOTTOM
-                          && row_start >= vadj->upper - vadj->page_size / 2) {
+                          && row_start + row_height >= gtk_adjustment_get_upper (vadjustment) - (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2) {
                        /* For the last half of the bottom view we
                         * can't center the row in the view, instead
                         * we show the last page.
                         *   - dy should be the start of the 
                         *     last page.
                         */
-                       if (vadj->value != vadj->upper - vadj->page_size)
-                               passed = FALSE;
+                       g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
                } else {
                        /* The row is located in the middle of
                         * the view.
@@ -379,9 +373,8 @@ test_position_with_align (GtkTreeView  *tree_view,
                         *      (ie. the row's center is at the
                         *       center of the view).
                         */
-                       gdouble middle = vadj->page_size / 2 - row_height / 2;
-                       if (row_y != ceil (middle) && row_y != floor (middle))
-                               passed = FALSE;
+                       gdouble middle = (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2.0;
+                       g_assert (row_y == ceil (middle) || row_y == floor (middle));
                }
                break;
 
@@ -392,8 +385,7 @@ test_position_with_align (GtkTreeView  *tree_view,
                         * first page of the tree view.
                         *   - dy is zero.
                         */
-                       if (vadj->value != 0)
-                               passed = FALSE;
+                       g_assert (gtk_adjustment_get_value (vadjustment) == 0);
                } else if (pos == POS_CENTER || pos == POS_BOTTOM) {
                        /* The row is the last row visible in the
                         * view.
@@ -403,44 +395,34 @@ test_position_with_align (GtkTreeView  *tree_view,
                         *     (ie we are not on the first page).
                         *   - dy is greater than zero
                         */
-                       if (row_start < vadj->page_size
-                           && row_start + row_height < vadj->page_size)
-                               passed = FALSE;
-                       if (vadj->value <= 0)
-                               passed = FALSE;
-                       if (row_y != vadj->page_size - row_height)
-                               passed = FALSE;
+                       g_assert (row_start >= gtk_adjustment_get_page_size (vadjustment)
+                                 || row_start + row_height >= gtk_adjustment_get_page_size (vadjustment));
+                       g_assert (row_y == gtk_adjustment_get_page_size (vadjustment) - row_height);
                }
                break;
        }
-
-       return passed;
 }
 
-static gboolean
-test_position_without_align (GtkTreeView *tree_view,
-                            gdouble      row_start,
-                            gdouble      row_height)
+static void
+assert_position_without_align (GtkTreeView *tree_view,
+                               gdouble      row_start,
+                               gdouble      row_height)
 {
-       GtkAdjustment *vadj = gtk_tree_view_get_vadjustment (tree_view);
-
-       /* Without align the tree view does as less work as possible,
-        * so basically we only have to check whether the row
-        * is visible on the screen.
-        */
-       if (vadj->value <= row_start
-           && vadj->value + vadj->page_size >= row_start + row_height)
-               return TRUE;
-
-       return FALSE;
+  GtkAdjustment *vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view));
+
+  /* Without align the tree view does as less work as possible,
+   * so basically we only have to check whether the row
+   * is visible on the screen.
+   */
+  g_assert (gtk_adjustment_get_value (vadjustment) <= row_start);
+  g_assert (gtk_adjustment_get_value (vadjustment) + gtk_adjustment_get_page_size (vadjustment) >= row_start + row_height);
 }
 
 static void
 test_position (GtkTreeView *tree_view,
               GtkTreePath *path,
               gboolean     use_align,
-              gdouble      row_align,
-              gdouble      col_align)
+              gdouble      row_align)
 {
        gint pos;
        gchar *path_str;
@@ -458,7 +440,7 @@ test_position (GtkTreeView *tree_view,
        /* Ugh */
        pos = get_pos_from_path (GTK_TREE_VIEW (tree_view),
                                 path, rect.height,
-                                gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (tree_view)));
+                                gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view)));
 
        /* This is only tested for during test_single() */
        model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
@@ -480,10 +462,10 @@ test_position (GtkTreeView *tree_view,
 
        path_str = gtk_tree_path_to_string (path);
        if (use_align) {
-               g_assert (test_position_with_align (tree_view, pos, rect.y,
-                                                   row_start, rect.height, row_align));
+               assert_position_with_align (tree_view, pos, rect.y,
+                                            row_start, rect.height, row_align);
        } else {
-               g_assert (test_position_without_align (tree_view, row_start, rect.height));
+               assert_position_without_align (tree_view, row_start, rect.height);
        }
 
        g_free (path_str);
@@ -496,6 +478,17 @@ test_position (GtkTreeView *tree_view,
 
 /* Testing scrolling to various positions with various alignments */
 
+static void
+ensure_layout (void)
+{
+        /* HACK: sleep for more than one frame, to give the paint clock
+         * time to prepare the new layout */
+        g_usleep (100 * 1000);
+
+       while (gtk_events_pending ())
+               gtk_main_iteration ();
+}
+
 static void
 scroll (ScrollFixture *fixture,
        GtkTreePath   *path,
@@ -510,11 +503,9 @@ scroll (ScrollFixture *fixture,
 
        gtk_widget_show_all (fixture->window);
 
-       while (gtk_events_pending ())
-               gtk_main_iteration ();
-
+        ensure_layout ();
        test_position (GTK_TREE_VIEW (fixture->tree_view), path,
-                      use_align, row_align, 0.0);
+                      use_align, row_align);
 }
 
 static void
@@ -579,11 +570,9 @@ scroll_after_realize (ScrollFixture *fixture,
                                      path, NULL,
                                      use_align, row_align, 0.0);
 
-       while (gtk_events_pending ())
-               gtk_main_iteration ();
-
+        ensure_layout ();
        test_position (GTK_TREE_VIEW (fixture->tree_view), path,
-                      use_align, row_align, 0.0);
+                      use_align, row_align);
 }
 
 static void
@@ -661,11 +650,9 @@ scroll_both_realize (ScrollFixture *fixture,
                                      path, NULL,
                                      use_align, row_align, 0.0);
 
-       while (gtk_events_pending ())
-               gtk_main_iteration ();
-
+        ensure_layout ();
        test_position (GTK_TREE_VIEW (fixture->tree_view), path,
-                      use_align, row_align, 0.0);
+                      use_align, row_align);
 }
 
 static void
@@ -776,13 +763,10 @@ test_editable_position (GtkWidget   *tree_view,
 {
         GtkAllocation allocation;
        GdkRectangle rect;
-       GtkAdjustment *vadj;
 
        gtk_tree_view_get_background_area (GTK_TREE_VIEW (tree_view),
                                           cursor_path, NULL, &rect);
 
-       vadj = gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (tree_view));
-
        /* There are all in bin_window coordinates */
         gtk_widget_get_allocation (editable, &allocation);
         g_assert (allocation.y == rect.y + ((rect.height - allocation.height) / 2));
@@ -833,12 +817,11 @@ scroll_new_row (ScrollFixture *fixture,
                                  column,
                                  TRUE);
 
-       while (gtk_events_pending ())
-               gtk_main_iteration ();
+        ensure_layout ();
 
        /* Test position */
        test_position (GTK_TREE_VIEW (fixture->tree_view), scroll_path,
-                      FALSE, 0.0, 0.0);
+                      FALSE, 0.0);
        test_editable_position (fixture->tree_view, editable, scroll_path);
 
        gtk_tree_path_free (scroll_path);
@@ -870,7 +853,7 @@ scroll_new_row_tree (ScrollFixture *fixture,
                gtk_main_iteration ();
 
        model = gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view));
-       vadjustment = gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (fixture->tree_view));
+       vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (fixture->tree_view));
 
        for (i = 0; i < 5; i++) {
                GtkTreeIter scroll_iter;
@@ -886,11 +869,10 @@ scroll_new_row_tree (ScrollFixture *fixture,
                                              scroll_path, NULL, FALSE, 0.0, 0.0);
                gtk_tree_path_free (scroll_path);
 
-               while (gtk_events_pending ())
-                       gtk_main_iteration ();
+                ensure_layout ();
 
                /* Test position, the scroll bar must be at the end */
-               g_assert (vadjustment->value == vadjustment->upper - vadjustment->page_size);
+               g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
        }
 }
 
@@ -903,7 +885,7 @@ test_bug316689 (ScrollFixture *fixture,
 {
        GtkTreeIter iter;
        GtkTreePath *path;
-       GtkAdjustment *vadj;
+       GtkAdjustment *vadjustment;
        GtkTreeModel *model;
 
        /* The aim of this test is to scroll to the bottom of a TreeView,
@@ -933,10 +915,10 @@ test_bug316689 (ScrollFixture *fixture,
        while (gtk_events_pending ())
                gtk_main_iteration ();
 
-       vadj = gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (fixture->tree_view));
+       vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (fixture->tree_view));
 
-       g_assert (vadj->value + vadj->page_size <= vadj->upper);
-       g_assert (vadj->value == vadj->upper - vadj->page_size);
+       g_assert (gtk_adjustment_get_value (vadjustment) + gtk_adjustment_get_page_size (vadjustment) <= gtk_adjustment_get_upper (vadjustment));
+       g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
 }
 
 
@@ -1034,6 +1016,9 @@ test_bug93584 (ScrollFixture *fixture,
        row = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
        row -= 20;
 
+       while (gtk_events_pending ())
+               gtk_main_iteration ();
+
        path = gtk_tree_path_new_from_indices (row, -1);
        scroll (fixture, path, TRUE, 0.5);
        gtk_tree_path_free (path);
@@ -1089,7 +1074,7 @@ test_bug111500 (ScrollFixture *fixture,
 
        gtk_tree_path_down (path);
 
-       scroll (fixture, path, TRUE, 0.5);
+       scroll (fixture, path, FALSE, 0.5);
        gtk_tree_path_free (path);
 }
 
@@ -1145,7 +1130,7 @@ test_bug111500_mixed (ScrollFixture *fixture,
 
        gtk_tree_path_down (path);
 
-       scroll (fixture, path, TRUE, 0.5);
+       scroll (fixture, path, FALSE, 0.5);
        gtk_tree_path_free (path);
 }