r3916 - in trunk/src/target/OM-2007.2/libraries/libmokoui2: . libmokoui
chris at sita.openmoko.org
chris at sita.openmoko.org
Tue Jan 22 15:33:05 CET 2008
Author: chris
Date: 2008-01-22 15:33:04 +0100 (Tue, 22 Jan 2008)
New Revision: 3916
Modified:
trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog
trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c
Log:
* libmokoui/moko-finger-scroll.c: (parent_set_cb),
(moko_finger_scroll_add), (moko_finger_scroll_dispose),
(moko_finger_scroll_init), (moko_finger_scroll_mode_get_type):
Fix removal of widgets from a MokoFingerScroll causing crashes/weird
behaviour
Modified: trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog 2008-01-22 13:41:36 UTC (rev 3915)
+++ trunk/src/target/OM-2007.2/libraries/libmokoui2/ChangeLog 2008-01-22 14:33:04 UTC (rev 3916)
@@ -1,5 +1,13 @@
2008-01-22 Chris Lord <chris at openedhand.com>
+ * libmokoui/moko-finger-scroll.c: (parent_set_cb),
+ (moko_finger_scroll_add), (moko_finger_scroll_dispose),
+ (moko_finger_scroll_init), (moko_finger_scroll_mode_get_type):
+ Fix removal of widgets from a MokoFingerScroll causing crashes/weird
+ behaviour
+
+2008-01-22 Chris Lord <chris at openedhand.com>
+
Patch by: Frank Li <frank.li at intel.com>
* Makefile.am:
Modified: trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c 2008-01-22 13:41:36 UTC (rev 3915)
+++ trunk/src/target/OM-2007.2/libraries/libmokoui2/libmokoui/moko-finger-scroll.c 2008-01-22 14:33:04 UTC (rev 3916)
@@ -632,14 +632,19 @@
}
static void
-moko_finger_scroll_remove_cb (GtkContainer *container,
- GtkWidget *child,
- MokoFingerScroll *scroll)
+parent_set_cb (GtkWidget *widget, GtkObject *parent, MokoFingerScroll *scroll)
{
- g_signal_handlers_disconnect_by_func (child,
- moko_finger_scroll_refresh, scroll);
- g_signal_handlers_disconnect_by_func (child,
- gtk_widget_queue_resize, scroll);
+ MokoFingerScrollPrivate *priv = FINGER_SCROLL_PRIVATE (scroll);
+
+ if (!parent) {
+ g_signal_handlers_disconnect_by_func (widget,
+ moko_finger_scroll_refresh, scroll);
+ g_signal_handlers_disconnect_by_func (widget,
+ gtk_widget_queue_resize, scroll);
+ g_signal_handlers_disconnect_by_func (widget,
+ parent_set_cb, scroll);
+ gtk_widget_set_scroll_adjustments (widget, NULL, NULL);
+ }
}
static void
@@ -649,10 +654,12 @@
MokoFingerScrollPrivate *priv = FINGER_SCROLL_PRIVATE (container);
gtk_container_add (GTK_CONTAINER (priv->align), child);
- g_signal_connect_swapped (G_OBJECT (child), "size-allocate",
+ g_signal_connect_swapped (child, "size-allocate",
G_CALLBACK (moko_finger_scroll_refresh), container);
- g_signal_connect_swapped (G_OBJECT (child), "size-request",
+ g_signal_connect_swapped (child, "size-request",
G_CALLBACK (gtk_widget_queue_resize), container);
+ g_signal_connect (child, "parent-set",
+ G_CALLBACK (parent_set_cb), container);
if (!gtk_widget_set_scroll_adjustments (
child, priv->hadjust, priv->vadjust))
@@ -725,9 +732,16 @@
static void
moko_finger_scroll_dispose (GObject * object)
{
- /*MokoFingerScrollPrivate *priv = FINGER_SCROLL_PRIVATE (object);*/
+ MokoFingerScrollPrivate *priv = FINGER_SCROLL_PRIVATE (object);
- while (g_source_remove_by_user_data (object));
+ if (priv->hadjust) {
+ g_object_unref (priv->hadjust);
+ priv->hadjust = NULL;
+ }
+ if (priv->vadjust) {
+ g_object_unref (priv->vadjust);
+ priv->vadjust = NULL;
+ }
if (G_OBJECT_CLASS (moko_finger_scroll_parent_class)->dispose)
G_OBJECT_CLASS (moko_finger_scroll_parent_class)->
@@ -897,8 +911,6 @@
G_CALLBACK (moko_finger_scroll_button_release_cb), NULL);
g_signal_connect (G_OBJECT (self), "motion-notify-event",
G_CALLBACK (moko_finger_scroll_motion_notify_cb), NULL);
- g_signal_connect (G_OBJECT (priv->align), "remove",
- G_CALLBACK (moko_finger_scroll_remove_cb), self);
g_signal_connect_swapped (G_OBJECT (priv->hadjust), "changed",
G_CALLBACK (moko_finger_scroll_refresh), self);
@@ -979,7 +991,7 @@
static GType etype = 0;
if (etype == 0) {
- static const GEnumValue values[] = {
+ static const GFlagsValue values[] = {
{ MOKO_FINGER_SCROLL_MODE_PUSH,
"MOKO_FINGER_SCROLL_MODE_PUSH", "" },
{ MOKO_FINGER_SCROLL_MODE_ACCEL,
@@ -988,8 +1000,8 @@
};
etype = g_flags_register_static (
- g_intern_static_string ("MokoFingerScrollMode"),
- values);
+ g_intern_static_string ("MokoFingerScrollMode"),
+ values);
}
return etype;
More information about the commitlog
mailing list