diff --git a/ChangeLog b/ChangeLog index 9f08570349..0301089f39 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,17 @@ +2007-03-07 Michael Natterer + + * gtk/gtkcellrendereraccel.c: use multihead safe ungrab functions + instead of gdk_keyboard_ungrab() and gdk_pointer_ungrab(), remove + empty finalize() implementation, some cosmetic cleanup + (bug #415645). + 2007-03-06 Chris Wilson * gtk/gtkicontheme.c (update_current_theme), (gtk_icon_theme_init), (do_theme_change), (gtk_icon_theme_set_custom_theme), (load_themes): - Be careful not to trigger a style reset before we have loaded - the icon theme. (#414875). + Be careful not to trigger a style reset before we have loaded + the icon theme. (#414875). 2007-03-06 Tor Lillqvist diff --git a/gtk/gtkcellrendereraccel.c b/gtk/gtkcellrendereraccel.c index 9157fc2b60..139f7701f9 100644 --- a/gtk/gtkcellrendereraccel.c +++ b/gtk/gtkcellrendereraccel.c @@ -29,15 +29,6 @@ #include "gtkalias.h" -static void gtk_cell_renderer_accel_finalize (GObject *object); -static GtkCellEditable *gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell, - GdkEvent *event, - GtkWidget *widget, - const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GtkCellRendererState flags); - static void gtk_cell_renderer_accel_get_property (GObject *object, guint param_id, GValue *value, @@ -53,6 +44,14 @@ static void gtk_cell_renderer_accel_get_size (GtkCellRenderer *cell, gint *y_offset, gint *width, gint *height); +static GtkCellEditable * + gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell, + GdkEvent *event, + GtkWidget *widget, + const gchar *path, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkCellRendererState flags); enum { ACCEL_EDITED, @@ -85,14 +84,12 @@ gtk_cell_renderer_accel_class_init (GtkCellRendererAccelClass *cell_accel_class) object_class = G_OBJECT_CLASS (cell_accel_class); cell_renderer_class = GTK_CELL_RENDERER_CLASS (cell_accel_class); - - GTK_CELL_RENDERER_CLASS (cell_accel_class)->start_editing = gtk_cell_renderer_accel_start_editing; object_class->set_property = gtk_cell_renderer_accel_set_property; object_class->get_property = gtk_cell_renderer_accel_get_property; - cell_renderer_class->get_size = gtk_cell_renderer_accel_get_size; - object_class->finalize = gtk_cell_renderer_accel_finalize; + cell_renderer_class->get_size = gtk_cell_renderer_accel_get_size; + cell_renderer_class->start_editing = gtk_cell_renderer_accel_start_editing; /** * GtkCellRendererAccel:accel-key: @@ -221,14 +218,7 @@ gtk_cell_renderer_accel_class_init (GtkCellRendererAccelClass *cell_accel_class) GtkCellRenderer * gtk_cell_renderer_accel_new (void) { - return GTK_CELL_RENDERER (g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL, NULL)); -} - -static void -gtk_cell_renderer_accel_finalize (GObject *object) -{ - - (* G_OBJECT_CLASS (gtk_cell_renderer_accel_parent_class)->finalize) (object); + return g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL, NULL); } static gchar * @@ -272,12 +262,8 @@ gtk_cell_renderer_accel_get_property (GObject *object, GValue *value, GParamSpec *pspec) { - GtkCellRendererAccel *accel; + GtkCellRendererAccel *accel = GTK_CELL_RENDERER_ACCEL (object); - g_return_if_fail (GTK_IS_CELL_RENDERER_ACCEL (object)); - - accel = GTK_CELL_RENDERER_ACCEL (object); - switch (param_id) { case PROP_ACCEL_KEY: @@ -303,13 +289,9 @@ gtk_cell_renderer_accel_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - GtkCellRendererAccel *accel; + GtkCellRendererAccel *accel = GTK_CELL_RENDERER_ACCEL (object); gboolean changed = FALSE; - g_return_if_fail (GTK_IS_CELL_RENDERER_ACCEL (object)); - - accel = GTK_CELL_RENDERER_ACCEL (object); - switch (param_id) { case PROP_ACCEL_KEY: @@ -382,8 +364,10 @@ gtk_cell_renderer_accel_get_size (GtkCellRenderer *cell, accel->sizing_label = gtk_label_new (_("New accelerator...")); gtk_widget_size_request (accel->sizing_label, &requisition); - (* GTK_CELL_RENDERER_CLASS (gtk_cell_renderer_accel_parent_class)->get_size) (cell, widget, cell_area, - x_offset, y_offset, width, height); + + GTK_CELL_RENDERER_CLASS (gtk_cell_renderer_accel_parent_class)->get_size (cell, widget, cell_area, + x_offset, y_offset, width, height); + /* FIXME: need to take the cell_area et al. into account */ if (width) *width = MAX (*width, requisition.width); @@ -392,23 +376,20 @@ gtk_cell_renderer_accel_get_size (GtkCellRenderer *cell, } static gboolean -grab_key_callback (GtkWidget *widget, - GdkEventKey *event, - void *data) +grab_key_callback (GtkWidget *widget, + GdkEventKey *event, + GtkCellRendererAccel *accel) { GdkModifierType accel_mods = 0; guint accel_key; - GtkCellRendererAccel *accel; - char *path; + gchar *path; gboolean edited; gboolean cleared; - GdkModifierType consumed_modifiers; + GdkModifierType consumed_modifiers; GdkDisplay *display; - - accel = GTK_CELL_RENDERER_ACCEL (data); display = gtk_widget_get_display (widget); - + if (event->is_modifier) return TRUE; @@ -465,9 +446,9 @@ grab_key_callback (GtkWidget *widget, edited = TRUE; out: - gdk_keyboard_ungrab (event->time); - gdk_pointer_ungrab (event->time); - + gdk_display_keyboard_ungrab (display, event->time); + gdk_display_pointer_ungrab (display, event->time); + path = g_strdup (g_object_get_data (G_OBJECT (accel->edit_widget), "gtk-cell-renderer-text")); gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (accel->edit_widget)); @@ -487,16 +468,17 @@ grab_key_callback (GtkWidget *widget, } static void -ungrab_stuff (GtkWidget *widget, - gpointer data) +ungrab_stuff (GtkWidget *widget, + GtkCellRendererAccel *accel) { - GtkCellRendererAccel *accel = GTK_CELL_RENDERER_ACCEL (data); + GdkDisplay *display = gtk_widget_get_display (widget); - gdk_keyboard_ungrab (GDK_CURRENT_TIME); - gdk_pointer_ungrab (GDK_CURRENT_TIME); + gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME); + gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); g_signal_handlers_disconnect_by_func (G_OBJECT (accel->grab_widget), - G_CALLBACK (grab_key_callback), data); + G_CALLBACK (grab_key_callback), + accel); } static void @@ -562,7 +544,8 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell, NULL, NULL, gdk_event_get_time (event)) != GDK_GRAB_SUCCESS) { - gdk_keyboard_ungrab (gdk_event_get_time (event)); + gdk_display_keyboard_ungrab (gtk_widget_get_display (widget), + gdk_event_get_time (event)); return NULL; } @@ -575,7 +558,7 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell, eventbox = g_object_new (_gtk_cell_editable_event_box_get_type (), NULL); accel->edit_widget = eventbox; g_object_add_weak_pointer (G_OBJECT (accel->edit_widget), - (void**) &accel->edit_widget); + (gpointer) &accel->edit_widget); label = gtk_label_new (NULL); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);