[gtk+] scrolledwindow: Fully reset indicators' state on unrealize
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] scrolledwindow: Fully reset indicators' state on unrealize
- Date: Tue, 17 Feb 2015 15:37:29 +0000 (UTC)
commit c473afbdc9dac6c425d41a5827f5539140c38252
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Feb 17 16:15:26 2015 +0100
scrolledwindow: Fully reset indicators' state on unrealize
This avoids timers to run after realize(), and inconsistent initial states
if the scrolledwindow is just realized again.
gtk/gtkscrolledwindow.c | 41 +++++++++++++++++++++++++++++++++++++----
1 files changed, 37 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 84fa957..9c6f1cc 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -4031,6 +4031,41 @@ gtk_scrolled_window_realize (GtkWidget *widget)
}
static void
+indicator_reset (Indicator *indicator)
+{
+ if (indicator->conceil_timer)
+ {
+ g_source_remove (indicator->conceil_timer);
+ indicator->conceil_timer = 0;
+ }
+
+ if (indicator->over_timeout_id)
+ {
+ g_source_remove (indicator->over_timeout_id);
+ indicator->over_timeout_id = 0;
+ }
+
+ if (indicator->scrollbar && indicator->tick_id)
+ {
+ gtk_widget_remove_tick_callback (indicator->scrollbar,
+ indicator->tick_id);
+ indicator->tick_id = 0;
+ }
+
+ if (indicator->window)
+ {
+ gdk_window_destroy (indicator->window);
+ indicator->window = NULL;
+ }
+
+ indicator->scrollbar = NULL;
+ indicator->dragging = FALSE;
+ indicator->over = FALSE;
+ indicator->current_pos = indicator->source_pos = indicator->target_pos = 0;
+ indicator->start_time = indicator->end_time = indicator->last_scroll_time = 0;
+}
+
+static void
gtk_scrolled_window_unrealize (GtkWidget *widget)
{
GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
@@ -4038,13 +4073,11 @@ gtk_scrolled_window_unrealize (GtkWidget *widget)
gtk_widget_set_parent_window (priv->hscrollbar, NULL);
gtk_widget_unregister_window (widget, priv->hindicator.window);
- gdk_window_destroy (priv->hindicator.window);
- priv->hindicator.window = NULL;
+ indicator_reset (&priv->hindicator);
gtk_widget_set_parent_window (priv->vscrollbar, NULL);
gtk_widget_unregister_window (widget, priv->vindicator.window);
- gdk_window_destroy (priv->vindicator.window);
- priv->vindicator.window = NULL;
+ indicator_reset (&priv->hindicator);
GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unrealize (widget);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]