2005-08-30 Tommi Komulainen <tommi.komulainen@nokia.com>
+ * hildon-widgets/hildon-number-editor.c (add_select_all_idle,
+ hildon_number_editor_finalize, hildon_number_editor_entry_changed):
+ Save the id of the idle callback and remove it when the widget is
+ destroyed to avoid crashing. N#18096
+
+2005-08-30 Tommi Komulainen <tommi.komulainen@nokia.com>
+
* hildon-widgets/hildon-number-editor.c (button_event_id): GSource
id's are unsigned and undefined at zero (instead of signed and -1)
gint end;
gint default_val;
gint button_type;
+
guint button_event_id;
+ guint select_all_idle_id;
gboolean negative;
};
if (priv->button_event_id)
g_source_remove (priv->button_event_id);
+ if (priv->select_all_idle_id)
+ g_source_remove (priv->select_all_idle_id);
+
/* Call parent class finalize, if have one */
if (G_OBJECT_CLASS (parent_class)->finalize)
G_OBJECT_CLASS (parent_class)->finalize(self);
GTK_WIDGET_UNSET_FLAGS( priv->plus, GTK_CAN_FOCUS );
priv->button_event_id = 0;
+ priv->select_all_idle_id = 0;
gtk_widget_set_parent(priv->minus, GTK_WIDGET(editor));
gtk_widget_set_parent(priv->num_entry, GTK_WIDGET(editor));
}
static void
+add_select_all_idle (HildonNumberEditorPrivate *priv)
+{
+ if (!priv->select_all_idle_id)
+ {
+ priv->select_all_idle_id =
+ g_idle_add((GSourceFunc) hildon_number_editor_select_all, priv);
+ }
+}
+
+static void
hildon_number_editor_entry_changed (GtkWidget *widget, gpointer data)
{
HildonNumberEditor *editor;
0, MAXIMUM_VALUE_EXCEED, &r);
tmpstr = integer_to_string(priv->end);
gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
- g_idle_add ((GSourceFunc)hildon_number_editor_select_all, priv);
+ add_select_all_idle(priv);
if (tmpstr)
g_free(tmpstr);
}
0, MINIMUM_VALUE_EXCEED, &r);
tmpstr = integer_to_string(priv->start);
gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
- g_idle_add ((GSourceFunc)hildon_number_editor_select_all, priv);
+ add_select_all_idle(priv);
if (tmpstr)
g_free(tmpstr);
}
0, ERRONEOUS_VALUE, &r);
tmpstr = integer_to_string(priv->start);
gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
- g_idle_add ((GSourceFunc)hildon_number_editor_select_all, priv);
+ add_select_all_idle(priv);
if (tmpstr)
g_free(tmpstr);
}
hildon_number_editor_select_all (HildonNumberEditorPrivate *priv)
{
gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
+ priv->select_all_idle_id = 0;
return FALSE;
}