diff --git a/ChangeLog b/ChangeLog index 2d3e3a49793aee923cfaa09482eaa18f6632aabd..c330fe275cf83c072df922c43384fc113b5fcc89 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-01-16 Christian Persch + + * gtk/gtkwidget.c: Store the event mask and extension event mode + directly in the gobject data pointer, instead of in an allocated + gint. Bug #506604. + 2008-01-16 Michael Natterer * configure.in (GDK_PIXBUF_PACKAGES): add "gio-2.0" because diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 53cce49c94e85b466bf0d65121410ce4bfb8b277..06a090094b7cdbad7248c5571e537a56f198e8b8 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2468,8 +2468,8 @@ gtk_widget_get_property (GObject *object, switch (prop_id) { - gint *eventp; - GdkExtensionMode *modep; + gpointer *eventp; + gpointer *modep; case PROP_NAME: if (widget->name) @@ -2532,17 +2532,11 @@ gtk_widget_get_property (GObject *object, break; case PROP_EVENTS: eventp = g_object_get_qdata (G_OBJECT (widget), quark_event_mask); - if (!eventp) - g_value_set_flags (value, 0); - else - g_value_set_flags (value, *eventp); + g_value_set_flags (value, GPOINTER_TO_INT (eventp)); break; case PROP_EXTENSION_EVENTS: modep = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode); - if (!modep) - g_value_set_enum (value, 0); - else - g_value_set_enum (value, (GdkExtensionMode) *modep); + g_value_set_enum (value, GPOINTER_TO_INT (modep)); break; case PROP_NO_SHOW_ALL: g_value_set_boolean (value, gtk_widget_get_no_show_all (widget)); @@ -7117,27 +7111,11 @@ void gtk_widget_set_events (GtkWidget *widget, gint events) { - gint *eventp; - g_return_if_fail (GTK_IS_WIDGET (widget)); g_return_if_fail (!GTK_WIDGET_REALIZED (widget)); - eventp = g_object_get_qdata (G_OBJECT (widget), quark_event_mask); - - if (events) - { - if (!eventp) - eventp = g_slice_new (gint); - - *eventp = events; - g_object_set_qdata (G_OBJECT (widget), quark_event_mask, eventp); - } - else if (eventp) - { - g_slice_free (gint, eventp); - g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL); - } - + g_object_set_qdata (G_OBJECT (widget), quark_event_mask, + GINT_TO_POINTER (events)); g_object_notify (G_OBJECT (widget), "events"); } @@ -7179,28 +7157,13 @@ void gtk_widget_add_events (GtkWidget *widget, gint events) { - gint *eventp; - + gint old_events; + g_return_if_fail (GTK_IS_WIDGET (widget)); - eventp = g_object_get_qdata (G_OBJECT (widget), quark_event_mask); - - if (events) - { - if (!eventp) - { - eventp = g_slice_new (gint); - *eventp = 0; - } - - *eventp |= events; - g_object_set_qdata (G_OBJECT (widget), quark_event_mask, eventp); - } - else if (eventp) - { - g_slice_free (gint, eventp); - g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL); - } + old_events = GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (widget), quark_event_mask)); + g_object_set_qdata (G_OBJECT (widget), quark_event_mask, + GINT_TO_POINTER (old_events | events)); if (GTK_WIDGET_REALIZED (widget)) { @@ -7231,20 +7194,13 @@ void gtk_widget_set_extension_events (GtkWidget *widget, GdkExtensionMode mode) { - GdkExtensionMode *modep; - g_return_if_fail (GTK_IS_WIDGET (widget)); - modep = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode); - - if (!modep) - modep = g_slice_new (GdkExtensionMode); - if (GTK_WIDGET_REALIZED (widget)) gtk_widget_set_extension_events_internal (widget, mode, NULL); - *modep = mode; - g_object_set_qdata (G_OBJECT (widget), quark_extension_event_mode, modep); + g_object_set_qdata (G_OBJECT (widget), quark_extension_event_mode, + GINT_TO_POINTER (mode)); g_object_notify (G_OBJECT (widget), "extension-events"); } @@ -7437,15 +7393,9 @@ gtk_widget_set_colormap (GtkWidget *widget, gint gtk_widget_get_events (GtkWidget *widget) { - gint *events; - g_return_val_if_fail (GTK_IS_WIDGET (widget), 0); - - events = g_object_get_qdata (G_OBJECT (widget), quark_event_mask); - if (events) - return *events; - - return 0; + + return GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (widget), quark_event_mask)); } /** @@ -7460,15 +7410,9 @@ gtk_widget_get_events (GtkWidget *widget) GdkExtensionMode gtk_widget_get_extension_events (GtkWidget *widget) { - GdkExtensionMode *mode; - g_return_val_if_fail (GTK_IS_WIDGET (widget), 0); - - mode = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode); - if (mode) - return *mode; - - return 0; + + return GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode)); } /** @@ -7883,8 +7827,6 @@ gtk_widget_finalize (GObject *object) { GtkWidget *widget = GTK_WIDGET (object); GtkWidgetAuxInfo *aux_info; - gint *events; - GdkExtensionMode *mode; GtkAccessible *accessible; gtk_grab_remove (widget); @@ -7897,14 +7839,6 @@ gtk_widget_finalize (GObject *object) aux_info =_gtk_widget_get_aux_info (widget, FALSE); if (aux_info) gtk_widget_aux_info_destroy (aux_info); - - events = g_object_get_qdata (G_OBJECT (widget), quark_event_mask); - if (events) - g_slice_free (gint, events); - - mode = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode); - if (mode) - g_slice_free (GdkExtensionMode, mode); accessible = g_object_get_qdata (G_OBJECT (widget), quark_accessible_object); if (accessible)