Ensure to show the initial-hint the first time the pannable becomes
authorAlejandro Piñeiro <apinheiro@igalia.com>
Mon, 25 May 2009 16:12:15 +0000 (18:12 +0200)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Mon, 25 May 2009 16:35:25 +0000 (18:35 +0200)
scrollable

* src/hildon-pannable-area.c
(hildon_pannable_area_initial_effect): set to FALSE initial_effect
if the fadeout effect was used
(hildon_pannable_area_expose_event): check if it is required to
manage the initial effect on the begining of the function. Previously
it was made at the end, but this doesn't ensure that the scrollbars
will be painted on the first show. Do not set to FALSE initial_effect,
to ensure that the initial hint is showed the first time the pannable
becomes scrollable
* examples/Makefile.am
* examples/hildon-pannable-area-initial-hint-example.c:
New example, to show that the initial-hint is showed when the widget
becomes scrollable

Fixes: NB#116607 (Pannable area should always have scrollbar visible
initially if the application can be scrolled)

ChangeLog
examples/Makefile.am
examples/hildon-pannable-area-initial-hint-example.c [new file with mode: 0644]
hildon/hildon-pannable-area.c

index 990a489..28f1005 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2009-05-25  Alejandro Pinheiro <apinheiro@igalia.com>
+
+       * src/hildon-pannable-area.c
+       (hildon_pannable_area_initial_effect): set to FALSE initial_effect
+       if the fadeout effect was used
+       (hildon_pannable_area_expose_event): check if it is required to
+       manage the initial effect on the begining of the function. Previously
+       it was made at the end, but this doesn't ensure that the scrollbars
+       will be painted on the first show. Do not set to FALSE initial_effect,
+       to ensure that the initial hint is showed the first time the pannable
+       becomes scrollable.
+       * examples/Makefile.am
+       * examples/hildon-pannable-area-initial-hint-example.c:
+       New example, to show that the initial-hint is showed when the widget
+       becomes scrollable
+
+       Fixes: NB#116607 (Pannable area should always have scrollbar visible
+       initially if the application can be scrolled)
+
 2009-05-25  Alberto Garcia  <agarcia@igalia.com>
 
        * hildon/hildon-app-menu.c (hildon_app_menu_repack_items):
index 6de44f6..aa7826d 100644 (file)
@@ -22,6 +22,7 @@ EXAMPLES                              = hildon-window-example                         \
                                          hildon-pannable-area-scroll-jump-example      \
                                          hildon-pannable-area-buttons-scroll-example   \
                                          hildon-pannable-area-gesture-signals-example  \
+                                         hildon-pannable-area-initial-hint-example     \
                                          hildon-logical-color-example                  \
                                          hildon-app-menu-example                       \
                                          hildon-stackable-window-example               \
@@ -360,6 +361,11 @@ hildon_pannable_area_gesture_signals_example_LDADD         = $(HILDON_OBJ_LIBS)
 hildon_pannable_area_gesture_signals_example_CFLAGS            = $(HILDON_OBJ_CFLAGS)
 hildon_pannable_area_gesture_signals_example_SOURCES           = hildon-pannable-area-gesture-signals-example.c
 
+# Hildon pannable area initial hint example
+hildon_pannable_area_initial_hint_example_LDADD                = $(HILDON_OBJ_LIBS)
+hildon_pannable_area_initial_hint_example_CFLAGS       = $(HILDON_OBJ_CFLAGS)
+hildon_pannable_area_initial_hint_example_SOURCES      = hildon-pannable-area-initial-hint-example.c
+
 # Hildon pannable area touch list
 hildon_pannable_area_touch_list_example_LDADD  = $(HILDON_OBJ_LIBS)
 hildon_pannable_area_touch_list_example_CFLAGS = $(HILDON_OBJ_CFLAGS)                  \
diff --git a/examples/hildon-pannable-area-initial-hint-example.c b/examples/hildon-pannable-area-initial-hint-example.c
new file mode 100644 (file)
index 0000000..3c448c1
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * This file is a part of hildon examples
+ *
+ * Copyright (C) 2009 Nokia Corporation, all rights reserved.
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include                                        <stdio.h>
+#include                                        <stdlib.h>
+#include                                        <glib.h>
+#include                                        <gtk/gtk.h>
+#include                                        <string.h>
+#include                                        <hildon/hildon.h>
+
+enum { TEXT_COLUMN, N_COLUMNS };
+
+static void
+on_button_clicked (GtkButton *button,
+                   gpointer user_data)
+{
+  GtkListStore *store = NULL;
+  GtkTreeIter   iter;
+  gint          i;
+
+  store = GTK_LIST_STORE (user_data);
+
+  for (i = 0; i < 5; i++) {
+    gtk_list_store_append (store, &iter);
+    gtk_list_store_set (store, &iter,
+                        TEXT_COLUMN, "Extra row", -1);
+  }
+}
+
+static GtkWidget*
+create_content ()
+{
+  gint               i;
+  GtkWidget         *tv       = NULL;
+  GtkWidget         *panarea  = NULL;
+  GtkWidget         *button   = NULL;;
+  GtkTreeViewColumn *col      = NULL;
+  GtkCellRenderer   *renderer = NULL;
+  GtkListStore      *store    = NULL;
+  GtkWidget         *vbox     = NULL;
+
+  /* Create a treeview */
+#ifdef MAEMO_GTK
+  tv = hildon_gtk_tree_view_new (HILDON_UI_MODE_NORMAL);
+#else
+  tv = GTK_TREE_VIEW (gtk_tree_view_new ());
+#endif /* MAEMO_GTK */
+
+  renderer = gtk_cell_renderer_text_new ();
+  g_object_set (renderer, "width", 1, "xalign", 0.5, NULL);
+
+  col = gtk_tree_view_column_new ();
+  gtk_tree_view_column_set_title (col, "Title");
+
+  gtk_tree_view_column_pack_start (col, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (col, renderer, "text", TEXT_COLUMN, NULL);
+
+  gtk_tree_view_append_column (GTK_TREE_VIEW (tv), col);
+
+  /* Add some rows to the treeview */
+  store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);
+
+  for (i = 0; i < 3; i++) {
+    GtkTreeIter iter;
+
+    gtk_list_store_append (store, &iter);
+    gtk_list_store_set (store, &iter,
+                        TEXT_COLUMN, "One row", -1);
+  }
+
+  gtk_tree_view_set_model (GTK_TREE_VIEW (tv), GTK_TREE_MODEL (store));
+  g_object_unref (store);
+
+  /* Put everything in a pannable area */
+  panarea = hildon_pannable_area_new ();
+  gtk_container_add (GTK_CONTAINER (panarea), GTK_WIDGET (tv));
+
+  vbox = gtk_vbox_new (FALSE, 5);
+
+  button = gtk_button_new_with_label ("Add some rows");
+  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_button_clicked), store);
+
+  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), panarea, TRUE, TRUE, 6);
+
+  return vbox;
+}
+
+int
+main (int argc, char **argv)
+{
+  HildonProgram *program = NULL;
+  GtkWidget     *window  = NULL;
+  GtkWidget     *content = NULL;
+
+  hildon_gtk_init (&argc, &argv);
+
+  program = hildon_program_get_instance ();
+
+  /* Create the main window */
+  window = hildon_window_new ();
+  hildon_program_add_window (program, HILDON_WINDOW (window));
+  gtk_container_set_border_width (GTK_CONTAINER (window), 5);
+
+  content = create_content ();
+
+  gtk_container_add (GTK_CONTAINER (window), content);
+
+  g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);
+
+  gtk_widget_show_all (GTK_WIDGET (window));
+
+  gtk_main ();
+
+  return 0;
+}
index ebe9c86..10bd3a3 100644 (file)
@@ -1484,6 +1484,8 @@ hildon_pannable_area_initial_effect (GtkWidget * widget)
       priv->scroll_delay_counter = priv->scrollbar_fade_delay;
 
       hildon_pannable_area_launch_fade_timeout (HILDON_PANNABLE_AREA (widget), 1.0);
+
+      priv->initial_effect = FALSE;
     }
   }
 }
@@ -1614,6 +1616,11 @@ hildon_pannable_area_expose_event (GtkWidget * widget,
   GdkColor scroll_color = widget->style->fg[GTK_STATE_INSENSITIVE];
 #endif
 
+  if (G_UNLIKELY (priv->initial_effect)) {
+
+    hildon_pannable_area_initial_effect (widget);
+  }
+
   if (gtk_bin_get_child (GTK_BIN (widget))) {
 
     if (priv->scroll_indicator_alpha > 0.1) {
@@ -1702,13 +1709,6 @@ hildon_pannable_area_expose_event (GtkWidget * widget,
 
   }
 
-  if (G_UNLIKELY (priv->initial_effect)) {
-
-    hildon_pannable_area_initial_effect (widget);
-
-    priv->initial_effect = FALSE;
-  }
-
   return GTK_WIDGET_CLASS (hildon_pannable_area_parent_class)->expose_event (widget, event);
 }