+2008-10-28 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed the threading handling of the pannable widget, we have
+ used the gdk_threads_add_timeout function instead of the usual
+ glib handlers. This avoids some problems with the threads.
+
+ * src/hildon-pannable-area.c (hildon_pannable_area_grab_notify),
+ (hildon_pannable_area_initial_effect),
+ (hildon_pannable_area_scroll_indicator_fade),
+ (hildon_pannable_area_button_press_cb),
+ (hildon_pannable_area_timeout),
+ (hildon_pannable_area_motion_notify_cb),
+ (hildon_pannable_area_button_release_cb),
+ (hildon_pannable_area_scroll_cb),
+ (hildon_pannable_area_scroll_to): Removed the
+ GDK_THREAD_ENTER/LEAVE and replaced g_timeout_add with
+ gdk_threads_add_timeout.
+
+ Fixes: NB#89541 (Crash in pannable area when closing picker dialog)
+
2008-10-27 Claudio Saavedra <csaavedra@igalia.com>
[Release 2.1.18]
priv->scroll_delay_counter = SCROLLBAR_FADE_DELAY;
if (!priv->scroll_indicator_timeout) {
- priv->scroll_indicator_timeout = g_timeout_add
+ priv->scroll_indicator_timeout = gdk_threads_add_timeout
((gint) (1000.0 / (gdouble) priv->sps),
(GSourceFunc) hildon_pannable_area_scroll_indicator_fade, widget);
}
}
if (vscroll_visible || hscroll_visible) {
- priv->idle_id = g_timeout_add ((gint) (1000.0 / (gdouble) priv->sps),
- (GSourceFunc)
- hildon_pannable_area_timeout, widget);
+ priv->idle_id = gdk_threads_add_timeout ((gint) (1000.0 / (gdouble) priv->sps),
+ (GSourceFunc)
+ hildon_pannable_area_timeout, widget);
}
}
priv->scroll_indicator_alpha = 1.0;
priv->scroll_indicator_timeout =
- g_timeout_add ((gint) (1000.0 / (gdouble) priv->sps),
- (GSourceFunc) hildon_pannable_area_scroll_indicator_fade,
- widget);
+ gdk_threads_add_timeout ((gint) (1000.0 / (gdouble) priv->sps),
+ (GSourceFunc) hildon_pannable_area_scroll_indicator_fade,
+ widget);
}
}
}
gint retval = TRUE;
HildonPannableAreaPrivate *priv = area->priv;
- GDK_THREADS_ENTER ();
-
/* if moving do not fade out */
if (((ABS (priv->vel_y)>1.0)||
(ABS (priv->vel_x)>1.0))&&(!priv->clicked)) {
- GDK_THREADS_LEAVE ();
-
return TRUE;
}
- if (!priv->scroll_indicator_timeout) {
-
- GDK_THREADS_LEAVE ();
-
- return FALSE;
- }
-
if (priv->scroll_indicator_event_interrupt) {
/* Stop a fade out, and fade back in */
if (priv->scroll_indicator_alpha >= 0.9) {
(priv->scroll_delay_counter > 0)) {
priv->scroll_delay_counter--;
- GDK_THREADS_LEAVE ();
-
return TRUE;
}
hildon_pannable_area_redraw (area);
}
- GDK_THREADS_LEAVE ();
-
return retval;
}
priv->scroll_delay_counter = SCROLLBAR_FADE_DELAY;
if (!priv->scroll_indicator_timeout){
- priv->scroll_indicator_timeout = g_timeout_add
+ priv->scroll_indicator_timeout = gdk_threads_add_timeout
((gint) (1000.0 / (gdouble) (priv->sps*2)),
(GSourceFunc) hildon_pannable_area_scroll_indicator_fade, widget);
}
{
HildonPannableAreaPrivate *priv = area->priv;
- GDK_THREADS_ENTER ();
-
if ((!priv->enabled) || (priv->mode == HILDON_PANNABLE_AREA_MODE_PUSH)) {
priv->idle_id = 0;
- GDK_THREADS_LEAVE ();
-
return FALSE;
}
priv->vel_y = 0;
priv->idle_id = 0;
- GDK_THREADS_LEAVE ();
-
return FALSE;
}
}
} else if (priv->mode == HILDON_PANNABLE_AREA_MODE_AUTO) {
priv->idle_id = 0;
- GDK_THREADS_LEAVE ();
-
return FALSE;
}
hildon_pannable_area_scroll (area, priv->vel_x, priv->vel_y);
- GDK_THREADS_LEAVE ();
-
return TRUE;
}
(priv->mode != HILDON_PANNABLE_AREA_MODE_AUTO)) {
if (!priv->idle_id)
- priv->idle_id = g_timeout_add ((gint)
- (1000.0 / (gdouble) priv->sps),
- (GSourceFunc)
- hildon_pannable_area_timeout, area);
+ priv->idle_id = gdk_threads_add_timeout ((gint)
+ (1000.0 / (gdouble) priv->sps),
+ (GSourceFunc)
+ hildon_pannable_area_timeout, area);
}
}
}
if (!priv->scroll_indicator_timeout) {
- priv->scroll_indicator_timeout = g_timeout_add
+ priv->scroll_indicator_timeout = gdk_threads_add_timeout
((gint) (1000.0 / (gdouble) priv->sps),
(GSourceFunc) hildon_pannable_area_scroll_indicator_fade, widget);
}
}
if (!priv->idle_id)
- priv->idle_id = g_timeout_add ((gint) (1000.0 / (gdouble) priv->sps),
- (GSourceFunc)
- hildon_pannable_area_timeout, widget);
+ priv->idle_id = gdk_threads_add_timeout ((gint) (1000.0 / (gdouble) priv->sps),
+ (GSourceFunc)
+ hildon_pannable_area_timeout, widget);
}
priv->last_time = event->time;
priv->scroll_delay_counter = SCROLLBAR_FADE_DELAY + 20;
if (!priv->scroll_indicator_timeout) {
- priv->scroll_indicator_timeout = g_timeout_add
+ priv->scroll_indicator_timeout = gdk_threads_add_timeout
((gint) (1000.0 / (gdouble) (priv->sps*2)),
(GSourceFunc) hildon_pannable_area_scroll_indicator_fade, widget);
}
priv->scroll_indicator_alpha = 1.0;
if (!priv->scroll_indicator_timeout)
- priv->scroll_indicator_timeout = g_timeout_add
+ priv->scroll_indicator_timeout = gdk_threads_add_timeout
((gint) (1000.0 / (gdouble) priv->sps),
(GSourceFunc) hildon_pannable_area_scroll_indicator_fade, area);
if (!priv->idle_id)
- priv->idle_id = g_timeout_add ((gint) (1000.0 / (gdouble) priv->sps),
- (GSourceFunc)
- hildon_pannable_area_timeout, area);
+ priv->idle_id = gdk_threads_add_timeout ((gint) (1000.0 / (gdouble) priv->sps),
+ (GSourceFunc)
+ hildon_pannable_area_timeout, area);
}
/**