diff --git a/ChangeLog b/ChangeLog index 8183d2ffcf..425cb562ab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-04-16 Michael Natterer + + * app/widgets/Makefile.am + * app/widgets/widgets-types.h + * app/widgets/gimpcellrendereraccel.[ch]: remove GimpCellRenererAccel. + + * app/widgets/gimpactionview.c: use GtkCellRendererAccel instead. + If an action has no label, use its name as label. Always show the + "Name" column because there are too many actions with confusingly + similar names. + 2007-04-16 Sven Neumann * INSTALL diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am index ee83ff7b99..b751688bf3 100644 --- a/app/widgets/Makefile.am +++ b/app/widgets/Makefile.am @@ -37,8 +37,6 @@ libappwidgets_a_sources = \ gimpbrushselect.h \ gimpbufferview.c \ gimpbufferview.h \ - gimpcellrendereraccel.c \ - gimpcellrendereraccel.h \ gimpcellrendererdashes.c \ gimpcellrendererdashes.h \ gimpcellrendererviewable.c \ diff --git a/app/widgets/gimpactionview.c b/app/widgets/gimpactionview.c index 2761c803ab..50e63cb6f4 100644 --- a/app/widgets/gimpactionview.c +++ b/app/widgets/gimpactionview.c @@ -35,7 +35,6 @@ #include "gimpaction.h" #include "gimpactiongroup.h" #include "gimpactionview.h" -#include "gimpcellrendereraccel.h" #include "gimpmessagebox.h" #include "gimpmessagedialog.h" #include "gimpuimanager.h" @@ -56,11 +55,14 @@ static void gimp_action_view_accel_changed (GtkAccelGroup *accel_group, GdkModifierType unused2, GClosure *accel_closure, GimpActionView *view); -static void gimp_action_view_accel_edited (GimpCellRendererAccel *accel, +static void gimp_action_view_accel_edited (GtkCellRendererAccel *accel, const char *path_string, - gboolean delete, guint accel_key, GdkModifierType accel_mask, + guint hardware_keycode, + GimpActionView *view); +static void gimp_action_view_accel_cleared (GtkCellRendererAccel *accel, + const char *path_string, GimpActionView *view); @@ -241,6 +243,12 @@ gimp_action_view_new (GimpUIManager *manager, label = gimp_strip_uline (tmp); g_free (tmp); + if (! (label && strlen (label))) + { + g_free (label); + label = g_strdup (name); + } + if (show_shortcuts) { accel_closure = gtk_action_get_accel_closure (action); @@ -333,37 +341,38 @@ gimp_action_view_new (GimpUIManager *manager, column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Shortcut")); - cell = gimp_cell_renderer_accel_new (); + cell = gtk_cell_renderer_accel_new (); cell->mode = GTK_CELL_RENDERER_MODE_EDITABLE; GTK_CELL_RENDERER_TEXT (cell)->editable = TRUE; gtk_tree_view_column_pack_start (column, cell, TRUE); gtk_tree_view_column_set_attributes (column, cell, "accel-key", GIMP_ACTION_VIEW_COLUMN_ACCEL_KEY, - "accel-mask", + "accel-mods", GIMP_ACTION_VIEW_COLUMN_ACCEL_MASK, NULL); g_signal_connect (cell, "accel-edited", G_CALLBACK (gimp_action_view_accel_edited), view); + g_signal_connect (cell, "accel-cleared", + G_CALLBACK (gimp_action_view_accel_cleared), + view); gtk_tree_view_append_column (view, column); } - else - { - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, _("Name")); - cell = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start (column, cell, TRUE); - gtk_tree_view_column_set_attributes (column, cell, - "text", - GIMP_ACTION_VIEW_COLUMN_NAME, - NULL); + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (column, _("Name")); - gtk_tree_view_append_column (view, column); - } + cell = gtk_cell_renderer_text_new (); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_set_attributes (column, cell, + "text", + GIMP_ACTION_VIEW_COLUMN_NAME, + NULL); + + gtk_tree_view_append_column (view, column); if (select_path) { @@ -560,13 +569,10 @@ gimp_action_view_conflict_confirm (GimpActionView *view, gtk_widget_show (dialog); } -static void -gimp_action_view_accel_edited (GimpCellRendererAccel *accel, - const char *path_string, - gboolean delete, - guint accel_key, - GdkModifierType accel_mask, - GimpActionView *view) +static const gchar * +gimp_action_view_get_accel_action (GimpActionView *view, + const gchar *path_string, + GtkAction **action_return) { GtkTreeModel *model; GtkTreePath *path; @@ -574,15 +580,13 @@ gimp_action_view_accel_edited (GimpCellRendererAccel *accel, model = gtk_tree_view_get_model (GTK_TREE_VIEW (view)); if (! model) - return; + return NULL; path = gtk_tree_path_new_from_string (path_string); if (gtk_tree_model_get_iter (model, &iter, path)) { - GtkAction *action; - GtkActionGroup *group; - const gchar *accel_path; + GtkAction *action; gtk_tree_model_get (model, &iter, GIMP_ACTION_VIEW_COLUMN_ACTION, &action, @@ -591,100 +595,129 @@ gimp_action_view_accel_edited (GimpCellRendererAccel *accel, if (! action) goto done; - g_object_get (action, "action-group", &group, NULL); - - if (! group) - { - g_object_unref (action); - goto done; - } - - accel_path = gtk_action_get_accel_path (action); - - if (delete) - { - if (! gtk_accel_map_change_entry (accel_path, 0, 0, FALSE)) - { - gimp_message (view->manager->gimp, G_OBJECT (view), - GIMP_MESSAGE_ERROR, - _("Removing shortcut failed.")); - } - } - else if (! accel_key) - { - gimp_message (view->manager->gimp, G_OBJECT (view), - GIMP_MESSAGE_ERROR, - _("Invalid shortcut.")); - } - else if (! gtk_accel_map_change_entry (accel_path, - accel_key, accel_mask, FALSE)) - { - GtkAction *conflict_action = NULL; - GtkTreeIter iter; - gboolean iter_valid; - - for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); - iter_valid; - iter_valid = gtk_tree_model_iter_next (model, &iter)) - { - GtkTreeIter child_iter; - gboolean child_valid; - - for (child_valid = gtk_tree_model_iter_children (model, - &child_iter, - &iter); - child_valid; - child_valid = gtk_tree_model_iter_next (model, &child_iter)) - { - guint child_accel_key; - GdkModifierType child_accel_mask; - - gtk_tree_model_get (model, &child_iter, - GIMP_ACTION_VIEW_COLUMN_ACCEL_KEY, - &child_accel_key, - GIMP_ACTION_VIEW_COLUMN_ACCEL_MASK, - &child_accel_mask, - -1); - - if (accel_key == child_accel_key && - accel_mask == child_accel_mask) - { - gtk_tree_model_get (model, &child_iter, - GIMP_ACTION_VIEW_COLUMN_ACTION, - &conflict_action, - -1); - break; - } - } - - if (conflict_action) - break; - } - - if (conflict_action != action) - { - if (conflict_action) - { - gimp_action_view_conflict_confirm (view, conflict_action, - accel_key, - accel_mask, - accel_path); - g_object_unref (conflict_action); - } - else - { - gimp_message (view->manager->gimp, G_OBJECT (view), - GIMP_MESSAGE_ERROR, - _("Changing shortcut failed.")); - } - } - } - - g_object_unref (group); + gtk_tree_path_free (path); g_object_unref (action); + + *action_return = action; + + return gtk_action_get_accel_path (action); } done: - gtk_tree_path_free (path); + + return NULL; +} + +static void +gimp_action_view_accel_edited (GtkCellRendererAccel *accel, + const char *path_string, + guint accel_key, + GdkModifierType accel_mask, + guint hardware_keycode, + GimpActionView *view) +{ + GtkAction *action; + const gchar *accel_path; + + accel_path = gimp_action_view_get_accel_action (view, path_string, + &action); + + if (! accel_path) + return; + + if (! accel_key) + { + gimp_message (view->manager->gimp, G_OBJECT (view), + GIMP_MESSAGE_ERROR, + _("Invalid shortcut.")); + } + else if (! gtk_accel_map_change_entry (accel_path, + accel_key, accel_mask, FALSE)) + { + GtkTreeModel *model; + GtkAction *conflict_action = NULL; + GtkTreeIter iter; + gboolean iter_valid; + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (view)); + + for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); + iter_valid; + iter_valid = gtk_tree_model_iter_next (model, &iter)) + { + GtkTreeIter child_iter; + gboolean child_valid; + + for (child_valid = gtk_tree_model_iter_children (model, + &child_iter, + &iter); + child_valid; + child_valid = gtk_tree_model_iter_next (model, &child_iter)) + { + guint child_accel_key; + GdkModifierType child_accel_mask; + + gtk_tree_model_get (model, &child_iter, + GIMP_ACTION_VIEW_COLUMN_ACCEL_KEY, + &child_accel_key, + GIMP_ACTION_VIEW_COLUMN_ACCEL_MASK, + &child_accel_mask, + -1); + + if (accel_key == child_accel_key && + accel_mask == child_accel_mask) + { + gtk_tree_model_get (model, &child_iter, + GIMP_ACTION_VIEW_COLUMN_ACTION, + &conflict_action, + -1); + break; + } + } + + if (conflict_action) + break; + } + + if (conflict_action != action) + { + if (conflict_action) + { + gimp_action_view_conflict_confirm (view, conflict_action, + accel_key, + accel_mask, + accel_path); + g_object_unref (conflict_action); + } + else + { + gimp_message (view->manager->gimp, G_OBJECT (view), + GIMP_MESSAGE_ERROR, + _("Changing shortcut failed.")); + } + } + } +} + +static void +gimp_action_view_accel_cleared (GtkCellRendererAccel *accel, + const char *path_string, + GimpActionView *view) +{ + GtkAction *action; + const gchar *accel_path; + + accel_path = gimp_action_view_get_accel_action (view, path_string, + &action); + + if (! accel_path) + return; + + if (! gtk_accel_map_change_entry (accel_path, 0, 0, FALSE)) + { + gimp_message (view->manager->gimp, G_OBJECT (view), + GIMP_MESSAGE_ERROR, + _("Removing shortcut failed.")); + } } diff --git a/app/widgets/gimpcellrendereraccel.c b/app/widgets/gimpcellrendereraccel.c deleted file mode 100644 index 565a8d2405..0000000000 --- a/app/widgets/gimpcellrendereraccel.c +++ /dev/null @@ -1,502 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * gimpcellrendereraccel.c - * Copyright (C) 2004 Michael Natterer - * - * Derived from: libegg/libegg/treeviewutils/eggcellrendererkeys.c - * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include -#include -#include - -#include "widgets-types.h" - -#include "core/gimpmarshal.h" - -#include "gimpcellrendereraccel.h" -#include "gimpwidgets-utils.h" - -#include "gimp-intl.h" - - -enum -{ - ACCEL_EDITED, - LAST_SIGNAL -}; - -enum -{ - PROP_0, - PROP_ACCEL_KEY, - PROP_ACCEL_MASK -}; - -#define GIMP_CELL_RENDERER_ACCEL_PATH "gimp-cell-renderer-accel-path" - - -static void gimp_cell_renderer_accel_set_property (GObject *object, - guint param_id, - const GValue *value, - GParamSpec *pspec); -static void gimp_cell_renderer_accel_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec); - -static void gimp_cell_renderer_accel_get_size (GtkCellRenderer *cell, - GtkWidget *widget, - GdkRectangle *cell_area, - gint *x_offset, - gint *y_offset, - gint *width, - gint *height); -static GtkCellEditable * - gimp_cell_renderer_accel_start_editing (GtkCellRenderer *cell, - GdkEvent *event, - GtkWidget *widget, - const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GtkCellRendererState flags); - - -G_DEFINE_TYPE (GimpCellRendererAccel, gimp_cell_renderer_accel, - GTK_TYPE_CELL_RENDERER_TEXT) - -#define parent_class gimp_cell_renderer_accel_parent_class - -static guint accel_cell_signals[LAST_SIGNAL] = { 0 }; - - -static void -gimp_cell_renderer_accel_class_init (GimpCellRendererAccelClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (klass); - - accel_cell_signals[ACCEL_EDITED] = - g_signal_new ("accel-edited", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GimpCellRendererAccelClass, accel_edited), - NULL, NULL, - gimp_marshal_VOID__STRING_BOOLEAN_UINT_FLAGS, - G_TYPE_NONE, 4, - G_TYPE_STRING, - G_TYPE_BOOLEAN, - G_TYPE_UINT, - GDK_TYPE_MODIFIER_TYPE); - - object_class->set_property = gimp_cell_renderer_accel_set_property; - object_class->get_property = gimp_cell_renderer_accel_get_property; - - cell_class->get_size = gimp_cell_renderer_accel_get_size; - cell_class->start_editing = gimp_cell_renderer_accel_start_editing; - - g_object_class_install_property (object_class, PROP_ACCEL_KEY, - g_param_spec_uint ("accel-key", NULL, NULL, - 0, G_MAXINT, 0, - GIMP_PARAM_READWRITE | - G_PARAM_CONSTRUCT)); - - g_object_class_install_property (object_class, PROP_ACCEL_MASK, - g_param_spec_flags ("accel-mask", NULL, NULL, - GDK_TYPE_MODIFIER_TYPE, - 0, - GIMP_PARAM_READWRITE | - G_PARAM_CONSTRUCT)); -} - -static void -gimp_cell_renderer_accel_init (GimpCellRendererAccel *cell) -{ -} - -static void -gimp_cell_renderer_accel_set_property (GObject *object, - guint param_id, - const GValue *value, - GParamSpec *pspec) -{ - GimpCellRendererAccel *accel = GIMP_CELL_RENDERER_ACCEL (object); - - switch (param_id) - { - case PROP_ACCEL_KEY: - gimp_cell_renderer_accel_set_accelerator (accel, - g_value_get_uint (value), - accel->accel_mask); - break; - case PROP_ACCEL_MASK: - gimp_cell_renderer_accel_set_accelerator (accel, - accel->accel_key, - g_value_get_flags (value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - } -} - -static void -gimp_cell_renderer_accel_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec) -{ - GimpCellRendererAccel *accel = GIMP_CELL_RENDERER_ACCEL (object); - - switch (param_id) - { - case PROP_ACCEL_KEY: - g_value_set_uint (value, accel->accel_key); - break; - case PROP_ACCEL_MASK: - g_value_set_flags (value, accel->accel_mask); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - } -} - -static void -gimp_cell_renderer_accel_get_size (GtkCellRenderer *cell, - GtkWidget *widget, - GdkRectangle *cell_area, - gint *x_offset, - gint *y_offset, - gint *width, - gint *height) -{ - GimpCellRendererAccel *accel = GIMP_CELL_RENDERER_ACCEL (cell); - GtkRequisition requisition; - - if (! accel->sizing_label) - accel->sizing_label = gtk_label_new (_("Type a new accelerator, " - "or press Backspace to clear")); - - gtk_widget_size_request (accel->sizing_label, &requisition); - - GTK_CELL_RENDERER_CLASS (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); - if (height) - *height = MAX (*height, requisition.height); -} - -/* FIXME: Currently we don't differentiate between a 'bogus' key (like tab in - * GTK mode) and a removed key. - */ - -static gboolean -grab_key_callback (GtkWidget *widget, - GdkEventKey *event, - GimpCellRendererAccel *accel) -{ - GdkDisplay *display; - guint accel_key; - GdkModifierType accel_mods; - gchar *path; - gboolean delete = FALSE; - gboolean edited = FALSE; - GdkModifierType consumed_modifiers; - - switch (event->keyval) - { - case GDK_Shift_L: - case GDK_Shift_R: - case GDK_Control_L: - case GDK_Control_R: - case GDK_Alt_L: - case GDK_Alt_R: - return TRUE; - - case GDK_Delete: - case GDK_KP_Delete: - case GDK_BackSpace: - delete = TRUE; - break; - default: - break; - } - - display = gtk_widget_get_display (widget); - - gdk_keymap_translate_keyboard_state (gdk_keymap_get_for_display (display), - event->hardware_keycode, - event->state, - event->group, - NULL, NULL, NULL, &consumed_modifiers); - - accel_key = gdk_keyval_to_lower (event->keyval); - accel_mods = (event->state & - gtk_accelerator_get_default_mod_mask () & - ~consumed_modifiers); - - if (accel_key == GDK_ISO_Left_Tab) - accel_key = GDK_Tab; - - /* If lowercasing affects the keysym, then we need to include SHIFT - * in the modifiers, We re-upper case when we match against the - * keyval, but display and save in caseless form. - */ - if (accel_key != event->keyval) - accel_mods |= GDK_SHIFT_MASK; - - if (accel_key != GDK_Escape) - { - if (delete || ! gtk_accelerator_valid (accel_key, accel_mods)) - { - accel_key = 0; - accel_mods = 0; - } - - edited = TRUE; - } - - path = g_strdup (g_object_get_data (G_OBJECT (accel->edit_widget), - GIMP_CELL_RENDERER_ACCEL_PATH)); - - gdk_display_keyboard_ungrab (display, event->time); - gdk_display_pointer_ungrab (display, event->time); - - gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (accel->edit_widget)); - gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (accel->edit_widget)); - accel->edit_widget = NULL; - accel->grab_widget = NULL; - - if (edited) - g_signal_emit (accel, accel_cell_signals[ACCEL_EDITED], 0, - path, delete, accel_key, accel_mods); - - g_free (path); - - return TRUE; -} - -static void -ungrab_stuff (GtkWidget *widget, - GimpCellRendererAccel *accel) -{ - GdkDisplay *display = gtk_widget_get_display (widget); - - gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME); - gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); - - g_signal_handlers_disconnect_by_func (accel->grab_widget, - G_CALLBACK (grab_key_callback), - accel); -} - -static void -pointless_eventbox_start_editing (GtkCellEditable *cell_editable, - GdkEvent *event) -{ - /* do nothing, because we are pointless */ -} - -static void -pointless_eventbox_cell_editable_init (GtkCellEditableIface *iface) -{ - iface->start_editing = pointless_eventbox_start_editing; -} - -static GType -pointless_eventbox_subclass_get_type (void) -{ - static GType type = 0; - - if (! type) - { - const GTypeInfo info = - { - sizeof (GtkEventBoxClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - NULL, /* class_init */ - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GtkEventBox), - 0, /* n_preallocs */ - NULL /* instance init */ - }; - - const GInterfaceInfo editable_info = - { - (GInterfaceInitFunc) pointless_eventbox_cell_editable_init, - NULL, NULL - }; - - type = g_type_register_static (GTK_TYPE_EVENT_BOX, - "GimpCellEditableEventBox", - &info, 0); - - g_type_add_interface_static (type, GTK_TYPE_CELL_EDITABLE, - &editable_info); - } - - return type; -} - -static GtkCellEditable * -gimp_cell_renderer_accel_start_editing (GtkCellRenderer *cell, - GdkEvent *event, - GtkWidget *widget, - const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GtkCellRendererState flags) -{ - GtkCellRendererText *celltext = GTK_CELL_RENDERER_TEXT (cell); - GimpCellRendererAccel *accel = GIMP_CELL_RENDERER_ACCEL (cell); - GtkWidget *label; - GtkWidget *eventbox; - - if (! celltext->editable) - return NULL; - - g_return_val_if_fail (widget->window != NULL, NULL); - - if (gdk_keyboard_grab (widget->window, FALSE, - gdk_event_get_time (event)) != GDK_GRAB_SUCCESS) - return NULL; - - if (gdk_pointer_grab (widget->window, FALSE, - GDK_BUTTON_PRESS_MASK, - NULL, NULL, - gdk_event_get_time (event)) != GDK_GRAB_SUCCESS) - { - gdk_display_keyboard_ungrab (gtk_widget_get_display (widget), - gdk_event_get_time (event)); - return NULL; - } - - accel->grab_widget = widget; - - g_signal_connect (widget, "key-press-event", - G_CALLBACK (grab_key_callback), - accel); - - eventbox = g_object_new (pointless_eventbox_subclass_get_type (), NULL); - accel->edit_widget = eventbox; - g_object_add_weak_pointer (G_OBJECT (accel->edit_widget), - (gpointer) &accel->edit_widget); - - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - - gtk_widget_modify_bg (eventbox, GTK_STATE_NORMAL, - &widget->style->bg[GTK_STATE_SELECTED]); - - gtk_widget_modify_fg (label, GTK_STATE_NORMAL, - &widget->style->fg[GTK_STATE_SELECTED]); - - if (accel->accel_key != 0) - gtk_label_set_text (GTK_LABEL (label), - _("Type a new accelerator, or press Backspace to clear")); - else - gtk_label_set_text (GTK_LABEL (label), - _("Type a new accelerator")); - - gtk_container_add (GTK_CONTAINER (eventbox), label); - - g_object_set_data_full (G_OBJECT (accel->edit_widget), - GIMP_CELL_RENDERER_ACCEL_PATH, - g_strdup (path), g_free); - - gtk_widget_show_all (accel->edit_widget); - - g_signal_connect (accel->edit_widget, "unrealize", - G_CALLBACK (ungrab_stuff), - accel); - - accel->edit_key = accel->accel_key; - - return GTK_CELL_EDITABLE (accel->edit_widget); -} - - -/* public functions */ - -GtkCellRenderer * -gimp_cell_renderer_accel_new (void) -{ - return g_object_new (GIMP_TYPE_CELL_RENDERER_ACCEL, NULL); -} - -void -gimp_cell_renderer_accel_set_accelerator (GimpCellRendererAccel *accel, - guint accel_key, - GdkModifierType accel_mask) -{ - gboolean changed = FALSE; - - g_return_if_fail (GIMP_IS_CELL_RENDERER_ACCEL (accel)); - - g_object_freeze_notify (G_OBJECT (accel)); - - if (accel_key != accel->accel_key) - { - accel->accel_key = accel_key; - - g_object_notify (G_OBJECT (accel), "accel-key"); - changed = TRUE; - } - - if (accel_mask != accel->accel_mask) - { - accel->accel_mask = accel_mask; - - g_object_notify (G_OBJECT (accel), "accel-mask"); - changed = TRUE; - } - - g_object_thaw_notify (G_OBJECT (accel)); - - if (changed) - { - gchar *text = gimp_get_accel_string (accel->accel_key, - accel->accel_mask); - g_object_set (accel, "text", text, NULL); - g_free (text); - } -} - -void -gimp_cell_renderer_accel_get_accelerator (GimpCellRendererAccel *accel, - guint *accel_key, - GdkModifierType *accel_mask) -{ - g_return_if_fail (GIMP_IS_CELL_RENDERER_ACCEL (accel)); - - if (accel_key) - *accel_key = accel->accel_key; - - if (accel_mask) - *accel_mask = accel->accel_mask; -} diff --git a/app/widgets/gimpcellrendereraccel.h b/app/widgets/gimpcellrendereraccel.h deleted file mode 100644 index 3024ea661b..0000000000 --- a/app/widgets/gimpcellrendereraccel.h +++ /dev/null @@ -1,80 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * gimpcellrendereraccel.h - * Copyright (C) 2004 Michael Natterer - * - * Derived from: libegg/libegg/treeviewutils/eggcellrendererkeys.h - * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __GIMP_CELL_RENDERER_ACCEL_H__ -#define __GIMP_CELL_RENDERER_ACCEL_H__ - - -#include - - -#define GIMP_TYPE_CELL_RENDERER_ACCEL (gimp_cell_renderer_accel_get_type ()) -#define GIMP_CELL_RENDERER_ACCEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_CELL_RENDERER_ACCEL, GimpCellRendererAccel)) -#define GIMP_CELL_RENDERER_ACCEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_CELL_RENDERER_ACCEL, GimpCellRendererAccelClass)) -#define GIMP_IS_CELL_RENDERER_ACCEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_CELL_RENDERER_ACCEL)) -#define GIMP_IS_CELL_RENDERER_ACCEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CELL_RENDERER_ACCEL)) -#define GIMP_CELL_RENDERER_ACCEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_CELL_RENDERER_ACCEL, GimpCellRendererAccelClass)) - - -typedef struct _GimpCellRendererAccelClass GimpCellRendererAccelClass; - -struct _GimpCellRendererAccel -{ - GtkCellRendererText parent_instance; - - guint accel_key; - GdkModifierType accel_mask; - - GtkWidget *edit_widget; - GtkWidget *grab_widget; - guint edit_key; - - GtkWidget *sizing_label; -}; - -struct _GimpCellRendererAccelClass -{ - GtkCellRendererTextClass parent_class; - - void (* accel_edited) (GimpCellRendererAccel *accel, - const char *path_string, - gboolean delete, - guint accel_key, - GdkModifierType accel_mask); -}; - - -GType gimp_cell_renderer_accel_get_type (void) G_GNUC_CONST; - -GtkCellRenderer * gimp_cell_renderer_accel_new (void); - -void gimp_cell_renderer_accel_set_accelerator (GimpCellRendererAccel *accel, - guint accel_kaey, - GdkModifierType accel_mask); -void gimp_cell_renderer_accel_get_accelerator (GimpCellRendererAccel *accel, - guint *accel_key, - GdkModifierType *accel_mask); - - -#endif /* __GIMP_CELL_RENDERER_ACCEL_H__ */ diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h index 5c8c6ad32e..2c02ab10fc 100644 --- a/app/widgets/widgets-types.h +++ b/app/widgets/widgets-types.h @@ -198,7 +198,6 @@ typedef struct _GimpViewRendererVectors GimpViewRendererVectors; /* cell renderers */ -typedef struct _GimpCellRendererAccel GimpCellRendererAccel; typedef struct _GimpCellRendererDashes GimpCellRendererDashes; typedef struct _GimpCellRendererViewable GimpCellRendererViewable;