From 56c6c64162252d9c5d8ee24f74dda79afe534b69 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alejandro=20Pi=C3=B1eiro?= Date: Thu, 28 May 2009 17:50:40 +0200 Subject: [PATCH] Ensure to show the scrollbars, if required, on the adjustment::changed signal handler * hildon/hildon-pannable-area.c (hildon_pannable_area_initial_effect): Remove the initial_effect management, check initial_hint (hildon_pannable_are_expose_event): Remove the initial_hint management, set initial_effect to FALSE (hildon_pannable_are_refresh): Check if we need to show the scrollbars, by launching the fade_timeout if the scrollbars state has changed and are visible * examples/hildon-pannable-area-initial-hint-example.c Modified to allow to remove rows too. Add and remove rows one by one --- ChangeLog | 13 ++++++++ .../hildon-pannable-area-initial-hint-example.c | 35 +++++++++++++++----- hildon/hildon-pannable-area.c | 25 ++++++++++---- 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2046825..913183c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2009-05-28 Alejandro Pinheiro + + * hildon/hildon-pannable-area.c + (hildon_pannable_area_initial_effect): Remove the initial_effect + management, check initial_hint + (hildon_pannable_are_expose_event): Remove the initial_hint management, + set initial_effect to FALSE + (hildon_pannable_are_refresh): Check if we need to show the scrollbars, + by launching the fade_timeout if the scrollbars state has changed and are + visible + * examples/hildon-pannable-area-initial-hint-example.c + Modified to allow to remove rows too. Add and remove rows one by one. + 2009-05-28 Alberto Garcia * hildon/hildon-app-menu.c (hildon_app_menu_find_intruder): diff --git a/examples/hildon-pannable-area-initial-hint-example.c b/examples/hildon-pannable-area-initial-hint-example.c index 3c448c1..6272f51 100644 --- a/examples/hildon-pannable-area-initial-hint-example.c +++ b/examples/hildon-pannable-area-initial-hint-example.c @@ -31,22 +31,35 @@ enum { TEXT_COLUMN, N_COLUMNS }; static void -on_button_clicked (GtkButton *button, +on_add_clicked (GtkButton *button, + gpointer user_data) +{ + GtkListStore *store = NULL; + GtkTreeIter iter; + + store = GTK_LIST_STORE (user_data); + + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, + TEXT_COLUMN, "Extra row", -1); +} + +static void +on_remove_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); + if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), + &iter)) { + gtk_list_store_remove (store, &iter); } } + static GtkWidget* create_content () { @@ -80,7 +93,7 @@ create_content () /* Add some rows to the treeview */ store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING); - for (i = 0; i < 3; i++) { + for (i = 0; i < 6; i++) { GtkTreeIter iter; gtk_list_store_append (store, &iter); @@ -97,10 +110,14 @@ create_content () 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); + button = gtk_button_new_with_label ("Add a row"); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_add_clicked), store); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + button = gtk_button_new_with_label ("Remove a row"); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_remove_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; diff --git a/hildon/hildon-pannable-area.c b/hildon/hildon-pannable-area.c index f3f9eff..f50bcbe 100644 --- a/hildon/hildon-pannable-area.c +++ b/hildon/hildon-pannable-area.c @@ -1485,14 +1485,14 @@ hildon_pannable_area_initial_effect (GtkWidget * widget) { HildonPannableAreaPrivate *priv = HILDON_PANNABLE_AREA (widget)->priv; - if (priv->vscroll_visible || priv->hscroll_visible) { + if (priv->initial_hint) { + if (priv->vscroll_visible || priv->hscroll_visible) { - priv->scroll_indicator_event_interrupt = 0; - priv->scroll_delay_counter = priv->scrollbar_fade_delay; - - hildon_pannable_area_launch_fade_timeout (HILDON_PANNABLE_AREA (widget), 1.0); + priv->scroll_indicator_event_interrupt = 0; + priv->scroll_delay_counter = priv->scrollbar_fade_delay; - priv->initial_effect = FALSE; + hildon_pannable_area_launch_fade_timeout (HILDON_PANNABLE_AREA (widget), 1.0); + } } } @@ -1622,8 +1622,10 @@ hildon_pannable_area_expose_event (GtkWidget * widget, GdkColor scroll_color = widget->style->fg[GTK_STATE_INSENSITIVE]; #endif - if (G_UNLIKELY ((priv->initial_hint) && (priv->initial_effect))) { + if (G_UNLIKELY (priv->initial_effect)) { hildon_pannable_area_initial_effect (widget); + + priv->initial_effect = FALSE; } if (gtk_bin_get_child (GTK_BIN (widget))) { @@ -1951,7 +1953,16 @@ hildon_pannable_area_refresh (HildonPannableArea * area) { if (GTK_WIDGET_DRAWABLE (area) && hildon_pannable_area_check_scrollbars (area)) { + HildonPannableAreaPrivate *priv = area->priv; + gtk_widget_queue_resize (GTK_WIDGET (area)); + + if ((priv->vscroll_visible) || (priv->hscroll_visible)) { + priv->scroll_indicator_event_interrupt = 0; + priv->scroll_delay_counter = area->priv->scrollbar_fade_delay; + + hildon_pannable_area_launch_fade_timeout (area, 1.0); + } } else { hildon_pannable_area_redraw (area); } -- 1.7.9.5