[gimp] Bug 343090 - Most brushes and all patterns appear renameable but aren't
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 343090 - Most brushes and all patterns appear renameable but aren't
- Date: Wed, 16 Nov 2016 14:16:19 +0000 (UTC)
commit 82a27545406480235d874dc91b0d2803cf492905
Author: Michael Natterer <mitch gimp org>
Date: Wed Nov 16 15:13:08 2016 +0100
Bug 343090 - Most brushes and all patterns appear renameable but aren't
Introduce virtual function GimpViewable::is_name_editable() and class
member "gboolean name_editable" for the default value. Default to
FALSE and only return TRUE if the name can actually be edited by the
user.
When attemting an edit, check the new API and beep instead of starting
the edit.
app/core/gimpbuffer.c | 1 +
app/core/gimpdata.c | 36 +++++++++++++++++++---------
app/core/gimpitem.c | 2 +
app/core/gimpsettings.c | 9 ++++--
app/core/gimptemplate.c | 1 +
app/core/gimpviewable.c | 23 ++++++++++++++++++
app/core/gimpviewable.h | 6 ++++
app/widgets/gimpcontainertreeview.c | 44 +++++++++++++++++++++++++++-------
8 files changed, 98 insertions(+), 24 deletions(-)
---
diff --git a/app/core/gimpbuffer.c b/app/core/gimpbuffer.c
index 7889105..800408d 100644
--- a/app/core/gimpbuffer.c
+++ b/app/core/gimpbuffer.c
@@ -95,6 +95,7 @@ gimp_buffer_class_init (GimpBufferClass *klass)
gimp_object_class->get_memsize = gimp_buffer_get_memsize;
viewable_class->default_icon_name = "edit-paste";
+ viewable_class->name_editable = TRUE;
viewable_class->get_size = gimp_buffer_get_size;
viewable_class->get_preview_size = gimp_buffer_get_preview_size;
viewable_class->get_popup_size = gimp_buffer_get_popup_size;
diff --git a/app/core/gimpdata.c b/app/core/gimpdata.c
index 85073cd..8af8160 100644
--- a/app/core/gimpdata.c
+++ b/app/core/gimpdata.c
@@ -98,6 +98,8 @@ static void gimp_data_name_changed (GimpObject *object);
static gint64 gimp_data_get_memsize (GimpObject *object,
gint64 *gui_size);
+static gboolean gimp_data_is_name_editable (GimpViewable *viewable);
+
static void gimp_data_real_dirty (GimpData *data);
static gboolean gimp_data_add_tag (GimpTagged *tagged,
@@ -154,8 +156,9 @@ gimp_data_get_type (void)
static void
gimp_data_class_init (GimpDataClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
+ GimpViewableClass *viewable_class = GIMP_VIEWABLE_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@@ -168,18 +171,21 @@ gimp_data_class_init (GimpDataClass *klass)
gimp_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- object_class->constructed = gimp_data_constructed;
- object_class->finalize = gimp_data_finalize;
- object_class->set_property = gimp_data_set_property;
- object_class->get_property = gimp_data_get_property;
+ object_class->constructed = gimp_data_constructed;
+ object_class->finalize = gimp_data_finalize;
+ object_class->set_property = gimp_data_set_property;
+ object_class->get_property = gimp_data_get_property;
+
+ gimp_object_class->name_changed = gimp_data_name_changed;
+ gimp_object_class->get_memsize = gimp_data_get_memsize;
- gimp_object_class->name_changed = gimp_data_name_changed;
- gimp_object_class->get_memsize = gimp_data_get_memsize;
+ viewable_class->name_editable = TRUE;
+ viewable_class->is_name_editable = gimp_data_is_name_editable;
- klass->dirty = gimp_data_real_dirty;
- klass->save = NULL;
- klass->get_extension = NULL;
- klass->duplicate = NULL;
+ klass->dirty = gimp_data_real_dirty;
+ klass->save = NULL;
+ klass->get_extension = NULL;
+ klass->duplicate = NULL;
g_object_class_install_property (object_class, PROP_FILE,
g_param_spec_object ("file", NULL, NULL,
@@ -364,6 +370,12 @@ gimp_data_get_memsize (GimpObject *object,
gui_size);
}
+static gboolean
+gimp_data_is_name_editable (GimpViewable *viewable)
+{
+ return gimp_data_is_writable (GIMP_DATA (viewable));
+}
+
static void
gimp_data_real_dirty (GimpData *data)
{
diff --git a/app/core/gimpitem.c b/app/core/gimpitem.c
index 7d705af..ab36f52 100644
--- a/app/core/gimpitem.c
+++ b/app/core/gimpitem.c
@@ -158,6 +158,7 @@ static void gimp_item_real_resize (GimpItem *item,
gint offset_y);
+
G_DEFINE_TYPE (GimpItem, gimp_item, GIMP_TYPE_FILTER)
#define parent_class gimp_item_parent_class
@@ -224,6 +225,7 @@ gimp_item_class_init (GimpItemClass *klass)
gimp_object_class->get_memsize = gimp_item_get_memsize;
+ viewable_class->name_editable = TRUE;
viewable_class->get_preview_size = gimp_item_get_preview_size;
viewable_class->get_popup_size = gimp_item_get_popup_size;
diff --git a/app/core/gimpsettings.c b/app/core/gimpsettings.c
index 1a7db22..9e89f0b 100644
--- a/app/core/gimpsettings.c
+++ b/app/core/gimpsettings.c
@@ -57,10 +57,13 @@ G_DEFINE_TYPE (GimpSettings, gimp_settings, GIMP_TYPE_VIEWABLE)
static void
gimp_settings_class_init (GimpSettingsClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GimpViewableClass *viewable_class = GIMP_VIEWABLE_CLASS (klass);
- object_class->set_property = gimp_settings_set_property;
- object_class->get_property = gimp_settings_get_property;
+ object_class->set_property = gimp_settings_set_property;
+ object_class->get_property = gimp_settings_get_property;
+
+ viewable_class->name_editable = TRUE;
GIMP_CONFIG_PROP_UINT (object_class, PROP_TIME,
"time",
diff --git a/app/core/gimptemplate.c b/app/core/gimptemplate.c
index cd19cf4..3984030 100644
--- a/app/core/gimptemplate.c
+++ b/app/core/gimptemplate.c
@@ -128,6 +128,7 @@ gimp_template_class_init (GimpTemplateClass *klass)
object_class->notify = gimp_template_notify;
viewable_class->default_icon_name = "gimp-template";
+ viewable_class->name_editable = TRUE;
GIMP_CONFIG_PROP_INT (object_class, PROP_WIDTH,
"width",
diff --git a/app/core/gimpviewable.c b/app/core/gimpviewable.c
index bdb535a..b6d7ee2 100644
--- a/app/core/gimpviewable.c
+++ b/app/core/gimpviewable.c
@@ -111,6 +111,7 @@ static gboolean gimp_viewable_real_get_popup_size (GimpViewable *viewable,
gint *popup_height);
static gchar * gimp_viewable_real_get_description (GimpViewable *viewable,
gchar **tooltip);
+static gboolean gimp_viewable_real_is_name_editable (GimpViewable *viewable);
static GimpContainer * gimp_viewable_real_get_children (GimpViewable *viewable);
static gboolean gimp_viewable_serialize_property (GimpConfig *config,
@@ -167,6 +168,7 @@ gimp_viewable_class_init (GimpViewableClass *klass)
klass->default_icon_name = "gimp-question";
klass->name_changed_signal = "name-changed";
+ klass->name_editable = FALSE;
klass->invalidate_preview = gimp_viewable_real_invalidate_preview;
klass->size_changed = NULL;
@@ -179,6 +181,7 @@ gimp_viewable_class_init (GimpViewableClass *klass)
klass->get_pixbuf = NULL;
klass->get_new_pixbuf = gimp_viewable_real_get_new_pixbuf;
klass->get_description = gimp_viewable_real_get_description;
+ klass->is_name_editable = gimp_viewable_real_is_name_editable;
klass->get_children = gimp_viewable_real_get_children;
klass->set_expanded = NULL;
klass->get_expanded = NULL;
@@ -421,6 +424,12 @@ gimp_viewable_real_get_description (GimpViewable *viewable,
return g_strdup (gimp_object_get_name (viewable));
}
+static gboolean
+gimp_viewable_real_is_name_editable (GimpViewable *viewable)
+{
+ return GIMP_VIEWABLE_GET_CLASS (viewable)->name_editable;
+}
+
static GimpContainer *
gimp_viewable_real_get_children (GimpViewable *viewable)
{
@@ -1150,6 +1159,20 @@ gimp_viewable_get_description (GimpViewable *viewable,
}
/**
+ * gimp_viewable_is_name_editable:
+ * @viewable: viewable object for which to retrieve a description.
+ *
+ * Returns: whether the viewable's name is editable by the user.
+ **/
+gboolean
+gimp_viewable_is_name_editable (GimpViewable *viewable)
+{
+ g_return_val_if_fail (GIMP_IS_VIEWABLE (viewable), FALSE);
+
+ return GIMP_VIEWABLE_GET_CLASS (viewable)->is_name_editable (viewable);
+}
+
+/**
* gimp_viewable_get_icon_name:
* @viewable: viewable object for which to retrieve a icon name.
*
diff --git a/app/core/gimpviewable.h b/app/core/gimpviewable.h
index cb55175..2d42ec8 100644
--- a/app/core/gimpviewable.h
+++ b/app/core/gimpviewable.h
@@ -52,6 +52,7 @@ struct _GimpViewableClass
const gchar *default_icon_name;
const gchar *name_changed_signal;
+ gboolean name_editable;
/* signals */
void (* invalidate_preview) (GimpViewable *viewable);
@@ -92,6 +93,8 @@ struct _GimpViewableClass
gchar * (* get_description) (GimpViewable *viewable,
gchar **tooltip);
+ gboolean (* is_name_editable) (GimpViewable *viewable);
+
GimpContainer * (* get_children) (GimpViewable *viewable);
void (* set_expanded) (GimpViewable *viewable,
@@ -163,6 +166,8 @@ GdkPixbuf * gimp_viewable_get_dummy_pixbuf (GimpViewable *viewable,
gchar * gimp_viewable_get_description (GimpViewable *viewable,
gchar **tooltip);
+gboolean gimp_viewable_is_name_editable (GimpViewable *viewable);
+
const gchar * gimp_viewable_get_icon_name (GimpViewable *viewable);
void gimp_viewable_set_icon_name (GimpViewable *viewable,
const gchar *icon_name);
@@ -176,6 +181,7 @@ void gimp_viewable_set_parent (GimpViewable *viewable,
GimpViewable *parent);
GimpContainer * gimp_viewable_get_children (GimpViewable *viewable);
+
gboolean gimp_viewable_get_expanded (GimpViewable *viewable);
void gimp_viewable_set_expanded (GimpViewable *viewable,
gboolean expanded);
diff --git a/app/widgets/gimpcontainertreeview.c b/app/widgets/gimpcontainertreeview.c
index 87e6a24..b679de3 100644
--- a/app/widgets/gimpcontainertreeview.c
+++ b/app/widgets/gimpcontainertreeview.c
@@ -882,23 +882,40 @@ static void
gimp_container_tree_view_real_edit_name (GimpContainerTreeView *tree_view)
{
GtkTreeIter selected_iter;
+ gboolean success = FALSE;
if (g_list_find (tree_view->priv->editable_cells,
tree_view->priv->name_cell) &&
gimp_container_tree_view_get_selected_single (tree_view,
&selected_iter))
{
- GtkTreePath *path;
+ GimpViewRenderer *renderer;
- path = gtk_tree_model_get_path (tree_view->model, &selected_iter);
+ gtk_tree_model_get (tree_view->model, &selected_iter,
+ GIMP_CONTAINER_TREE_STORE_COLUMN_RENDERER, &renderer,
+ -1);
- gtk_tree_view_set_cursor_on_cell (tree_view->view, path,
- tree_view->main_column,
- tree_view->priv->name_cell,
- TRUE);
+ if (gimp_viewable_is_name_editable (renderer->viewable))
+ {
+ GtkTreePath *path;
- gtk_tree_path_free (path);
+ path = gtk_tree_model_get_path (tree_view->model, &selected_iter);
+
+ gtk_tree_view_set_cursor_on_cell (tree_view->view, path,
+ tree_view->main_column,
+ tree_view->priv->name_cell,
+ TRUE);
+
+ gtk_tree_path_free (path);
+
+ success = TRUE;
+ }
+
+ g_object_unref (renderer);
}
+
+ if (! success)
+ gtk_widget_error_bell (GTK_WIDGET (tree_view));
}
@@ -1236,8 +1253,17 @@ gimp_container_tree_view_button_press (GtkWidget *widget,
{
if (edit_cell)
{
- gtk_tree_view_set_cursor_on_cell (tree_view->view, path,
- column, edit_cell, TRUE);
+ if (gimp_viewable_is_name_editable (renderer->viewable))
+ {
+ gtk_tree_view_set_cursor_on_cell (tree_view->view,
+ path,
+ column, edit_cell,
+ TRUE);
+ }
+ else
+ {
+ gtk_widget_error_bell (widget);
+ }
}
else if (! toggled_cell &&
! (bevent->state & gimp_get_all_modifiers_mask ()))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]