[glade/evaluate-sensitivity: 1/2] Add glade_command_set_sensitive() and port a bit of the GTK+ plugin code to it
- From: Denis Washington <denisw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade/evaluate-sensitivity: 1/2] Add glade_command_set_sensitive() and port a bit of the GTK+ plugin code to it
- Date: Tue, 13 Dec 2011 06:55:08 +0000 (UTC)
commit e015ce5bb4d422586fb8371a24db1af8e4c11441
Author: Denis Washington <denisw src gnome org>
Date: Tue Nov 15 17:56:03 2011 +0100
Add glade_command_set_sensitive() and port a bit of the GTK+ plugin code to it
The aim of this is to let all changes to the sensitivity of properties through
the command system so that the code in the "gbinding" branch can cleanly react
to the source or target of a property binding becoming insensitive (e.g. by
undoably removing the binding).
gladeui/glade-command.c | 145 +++++++++++++++++++++++++++++
gladeui/glade-command.h | 5 +
gladeui/glade-widget-adaptor.c | 34 +++++++
gladeui/glade-widget-adaptor.h | 23 +++++-
gladeui/glade-widget.c | 19 ++++
gladeui/glade-widget.h | 3 +
gladeui/glade-xml-utils.h | 1 +
plugins/gtk+/glade-entry-editor.c | 10 ++
plugins/gtk+/glade-gtk.c | 180 ++++++++++++++++++++++---------------
9 files changed, 345 insertions(+), 75 deletions(-)
---
diff --git a/gladeui/glade-command.c b/gladeui/glade-command.c
index 617994c..45fdd40 100644
--- a/gladeui/glade-command.c
+++ b/gladeui/glade-command.c
@@ -786,6 +786,151 @@ glade_command_set_property (GladeProperty * property, ...)
glade_command_set_property_value (property, value);
}
+/***********************************************************/
+/******* GLADE_COMMAND_SET_PROPERTY_SENSITIVE ******/
+/***********************************************************/
+
+/* create a new GladeCommandSetPropertySensitive class. Objects of this class will
+ * encapsulate a "set property (in)sensitive" operation */
+
+typedef struct
+{
+ GladeCommand parent;
+ GladeProperty *property;
+ gboolean sensitive;
+ gchar *new_reason;
+ gchar *old_reason;
+ gboolean undo;
+} GladeCommandSetPropertySensitive;
+
+/* standard macros */
+GLADE_MAKE_COMMAND (GladeCommandSetPropertySensitive, glade_command_set_property_sensitive);
+#define GLADE_COMMAND_SET_PROPERTY_SENSITIVE_TYPE (glade_command_set_property_sensitive_get_type ())
+#define GLADE_COMMAND_SET_PROPERTY_SENSITIVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_SET_PROPERTY_SENSITIVE_TYPE, GladeCommandSetPropertySensitive))
+#define GLADE_COMMAND_SET_PROPERTY_SENSITIVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_SET_PROPERTY_SENSITIVE_TYPE, GladeCommandSetPropertySensitiveClass))
+#define GLADE_IS_COMMAND_SET_PROPERTY_SENSITIVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_SET_PROPERTY_SENSITIVE_TYPE))
+#define GLADE_IS_COMMAND_SET_PROPERTY_SENSITIVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_SET_PROPERTY_SENSITIVE_TYPE))
+
+/* Undo the last "set property (in)sensitive" command" */
+static gboolean
+glade_command_set_property_sensitive_undo (GladeCommand * cmd)
+{
+ return glade_command_set_property_sensitive_execute (cmd);
+}
+
+/*
+ * Execute the set property command and revert it. IE, after the execution of
+ * this function cmd will point to the undo action
+ */
+static gboolean
+glade_command_set_property_sensitive_execute (GladeCommand * cmd)
+{
+ GladeCommandSetPropertySensitive *scmd;
+
+ g_return_val_if_fail (GLADE_IS_COMMAND_SET_PROPERTY_SENSITIVE (cmd), TRUE);
+
+ scmd = GLADE_COMMAND_SET_PROPERTY_SENSITIVE (cmd);
+ glade_property_set_sensitive (scmd->property,
+ scmd->undo ? !scmd->sensitive : scmd->sensitive,
+ scmd->undo ? scmd->old_reason : scmd->new_reason);
+
+ scmd->undo = !scmd->undo;
+ return TRUE;
+}
+
+static void
+glade_command_set_property_sensitive_finalize (GObject * obj)
+{
+ GladeCommandSetPropertySensitive *cmd;
+
+ cmd = GLADE_COMMAND_SET_PROPERTY_SENSITIVE (obj);
+ g_free (cmd->new_reason);
+ g_free (cmd->old_reason);
+
+ glade_command_finalize (obj);
+}
+
+static gboolean
+glade_command_set_property_sensitive_unifies (GladeCommand * this_cmd,
+ GladeCommand * other_cmd)
+{
+ GladeCommandSetPropertySensitive *cmd1, *cmd2;
+
+ if (GLADE_IS_COMMAND_SET_PROPERTY_SENSITIVE (this_cmd) &&
+ GLADE_IS_COMMAND_SET_PROPERTY_SENSITIVE (other_cmd))
+ {
+ cmd1 = GLADE_COMMAND_SET_PROPERTY_SENSITIVE (this_cmd);
+ cmd2 = GLADE_COMMAND_SET_PROPERTY_SENSITIVE (other_cmd);
+
+ return (cmd1->property == cmd2->property &&
+ cmd1->new_reason == cmd2->new_reason);
+ }
+
+ return FALSE;
+}
+
+static void
+glade_command_set_property_sensitive_collapse (GladeCommand * this_cmd,
+ GladeCommand * other_cmd)
+{
+ g_return_if_fail (GLADE_IS_COMMAND_SET_PROPERTY_SENSITIVE (this_cmd));
+ g_return_if_fail (GLADE_IS_COMMAND_SET_PROPERTY_SENSITIVE (other_cmd));
+
+ /* Nothing to do */
+}
+
+void
+glade_command_widget_set_property_sensitive (GladeWidget * widget,
+ const gchar * property_id,
+ gboolean sensitive,
+ const gchar * reason)
+{
+ GladeProperty *property;
+
+ g_return_if_fail (GLADE_IS_WIDGET (widget));
+ g_return_if_fail (property_id != NULL);
+
+ if ((property = glade_widget_get_property (widget, property_id)) != NULL)
+ glade_command_set_property_sensitive (property, sensitive, reason);
+}
+
+void
+glade_command_set_property_sensitive (GladeProperty * property,
+ gboolean sensitive,
+ const gchar * reason)
+{
+ GladeCommandSetPropertySensitive *me;
+ GladeCommand *cmd;
+
+ g_return_if_fail (GLADE_IS_PROPERTY (property));
+
+ me = g_object_new (GLADE_COMMAND_SET_PROPERTY_SENSITIVE_TYPE, NULL);
+ me->undo = FALSE;
+ me->property = property;
+ me->sensitive = sensitive;
+
+ me->new_reason = g_strdup (reason);
+ me->old_reason = g_strdup (glade_propert_get_insensitive_tooltip (me->property));
+ if (me->old_reason)
+ me->old_reason = g_strdup (me->old_reason);
+
+ cmd = GLADE_COMMAND (me);
+ cmd->priv->project =
+ glade_widget_get_project (glade_property_get_widget (me->property));
+
+ /* This command is always part of a group, thus its description should
+ * never be visible
+ */
+ cmd->priv->description = g_strdup ("dummy");
+
+ glade_command_check_group (GLADE_COMMAND (me));
+
+ if (glade_command_set_property_sensitive_execute (GLADE_COMMAND (me)))
+ glade_project_push_undo (cmd->priv->project, cmd);
+ else
+ g_object_unref (G_OBJECT (me));
+}
+
/**************************************************/
/******* GLADE_COMMAND_SET_NAME *******/
/**************************************************/
diff --git a/gladeui/glade-command.h b/gladeui/glade-command.h
index 0e7837d..7bc0cf4 100644
--- a/gladeui/glade-command.h
+++ b/gladeui/glade-command.h
@@ -95,6 +95,11 @@ void glade_command_set_properties (GladeProperty *property,
void glade_command_set_properties_list (GladeProject *project,
GList *props); /* list of GCSetPropData */
+void glade_command_widget_set_property_sensitive (GladeWidget *widget,
+ const gchar *property_id,
+ gboolean sensitive,
+ const gchar *reason);
+
/************************** name ******************************/
void glade_command_set_name (GladeWidget *glade_widget, const gchar *name);
diff --git a/gladeui/glade-widget-adaptor.c b/gladeui/glade-widget-adaptor.c
index 87d31ee..eb26687 100644
--- a/gladeui/glade-widget-adaptor.c
+++ b/gladeui/glade-widget-adaptor.c
@@ -1325,6 +1325,13 @@ glade_widget_adaptor_object_get_children (GladeWidgetAdaptor *adaptor,
return children;
}
+static void
+glade_widget_adaptor_object_adjust_property_flags (GladeWidgetAdaptor * adaptor,
+ GladeWidget * widget,
+ gboolean use_command)
+{
+ /* Nothing to do */
+}
/*******************************************************************************
GladeWidgetAdaptor type registration and class initializer
@@ -1378,6 +1385,7 @@ glade_widget_adaptor_class_init (GladeWidgetAdaptorClass * adaptor_class)
adaptor_class->create_eprop = glade_widget_adaptor_object_create_eprop;
adaptor_class->string_from_value = glade_widget_adaptor_object_string_from_value;
adaptor_class->create_editable = glade_widget_adaptor_object_create_editable;
+ adaptor_class->adjust_property_flags = glade_widget_adaptor_object_adjust_property_flags;
/* Base defaults here */
adaptor_class->toplevel = FALSE;
@@ -1645,6 +1653,10 @@ gwa_extend_with_node_load_sym (GladeWidgetAdaptorClass * klass,
&symbol))
klass->create_editable = symbol;
+ if (glade_xml_load_sym_from_node (node, module,
+ GLADE_TAG_ADJUST_PROPERTY_FLAGS_FUNCTION,
+ &symbol))
+ klass->adjust_property_flags = symbol;
}
static void
@@ -4358,3 +4370,25 @@ glade_widget_adaptor_create_editable (GladeWidgetAdaptor * adaptor,
return GLADE_WIDGET_ADAPTOR_GET_CLASS
(adaptor)->create_editable (adaptor, type);
}
+
+/**
+ * glade_widget_adaptor_adjust_property_flags:
+ * @adaptor: A #GladeWidgetAdaptor
+ * @widget: The #GladeWidget
+ * @use_command: whether to use the GladeCommand interface
+ *
+ * This is called after a widget is loaded or a widget's
+ * property value has changed. It allows the backend to keep the
+ * sensitive/enabled flags of all properties consistent with the
+ * property values.
+ */
+void
+glade_widget_adaptor_adjust_property_flags (GladeWidgetAdaptor * adaptor,
+ GladeWidget * widget,
+ gboolean use_command)
+{
+ g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
+
+ GLADE_WIDGET_ADAPTOR_GET_CLASS
+ (adaptor)->adjust_property_flags (adaptor, widget, use_command);
+}
diff --git a/gladeui/glade-widget-adaptor.h b/gladeui/glade-widget-adaptor.h
index ab33a53..a1a2a29 100644
--- a/gladeui/glade-widget-adaptor.h
+++ b/gladeui/glade-widget-adaptor.h
@@ -553,6 +553,21 @@ typedef GladeEditable *(* GladeCreateEditableFunc) (GladeWidgetAdaptor *adapto
GladeEditorPageType type);
+/**
+ * GladeAdjustPropertyFlagsFunc:
+ * @adaptor: A #GladeWidgetAdaptor
+ * @widget: The #GladeWidget
+ * @use_command: whether to use the GladeCommand interface
+ *
+ * This is called after a widget is loaded or a widget's
+ * property value has changed. It allows the backend to keep the
+ * sensitive/enabled flags of all properties consistent with the
+ * property values.
+ */
+typedef void (* GladeAdjustPropertyFlagsFunc) (GladeWidgetAdaptor *adaptor,
+ GladeWidget *widget,
+ gboolean use_command);
+
/* Note that everything that must be processed at the creation of
* every instance is managed on the instance structure, and everywhere
* that we want to take advantage of inheritance is handled in the class
@@ -659,7 +674,8 @@ struct _GladeWidgetAdaptorClass
GladeCreateEPropFunc create_eprop; /* Creates a GladeEditorProperty */
GladeStringFromValueFunc string_from_value; /* Creates a string for a value */
GladeCreateEditableFunc create_editable; /* Creates a page for the editor */
-
+ GladeAdjustPropertyFlagsFunc adjust_property_flags; /* Appropiately sets all properties' sensitive/enabled flags */
+
void (* glade_reserved1) (void);
void (* glade_reserved2) (void);
void (* glade_reserved3) (void);
@@ -667,7 +683,6 @@ struct _GladeWidgetAdaptorClass
void (* glade_reserved5) (void);
void (* glade_reserved6) (void);
void (* glade_reserved7) (void);
- void (* glade_reserved8) (void);
};
#define glade_widget_adaptor_create_widget(adaptor, query, ...) \
@@ -845,6 +860,10 @@ GladeWidgetAdaptor *glade_widget_adaptor_get_parent_adaptor (GladeWidgetAdapto
gboolean glade_widget_adaptor_has_internal_children (GladeWidgetAdaptor *adaptor);
+void glade_widget_adaptor_adjust_property_flags (GladeWidgetAdaptor *adaptor,
+ GladeWidget *widget,
+ gboolean use_command);
+
G_END_DECLS
#endif /* _GLADE_WIDGET_ADAPTOR_H_ */
diff --git a/gladeui/glade-widget.c b/gladeui/glade-widget.c
index 53226bd..b8eb1ba 100644
--- a/gladeui/glade-widget.c
+++ b/gladeui/glade-widget.c
@@ -3779,6 +3779,9 @@ glade_widget_read (GladeProject * project,
}
glade_widget_adaptor_read_widget (adaptor, widget, node);
+
+ /* Set initial property sensitivity */
+ glade_widget_adaptor_adjust_property_flags (adaptor, widget, FALSE);
}
else
{
@@ -3996,6 +3999,22 @@ glade_widget_is_ancestor (GladeWidget * widget, GladeWidget * ancestor)
return FALSE;
}
+/**
+ * glade_widget_adjust_property_flags:
+ * @widget: A #GladeWidget
+ * @use_command: whether to use the GladeCommand interface
+ *
+ * Adjusts the sensitive/enabled flags of all widget properties to match
+ * the widget's property values.
+ */
+void
+glade_widget_adjust_property_flags (GladeWidget * widget, gboolean use_command)
+{
+ g_return_if_fail (GLADE_IS_WIDGET (widget));
+
+ glade_widget_adaptor_adjust_property_flags (widget->priv->adaptor,
+ widget, use_command);
+}
static gint glade_widget_su_stack = 0;
diff --git a/gladeui/glade-widget.h b/gladeui/glade-widget.h
index aa0726f..038c090 100644
--- a/gladeui/glade-widget.h
+++ b/gladeui/glade-widget.h
@@ -216,6 +216,9 @@ gchar *glade_widget_generate_path_name (GladeWidget *w
gboolean glade_widget_is_ancestor (GladeWidget *widget,
GladeWidget *ancestor);
+void glade_widget_adjust_property_flags (GladeWidget *widget,
+ gboolean use_command);
+
/*******************************************************************************
Project, object property references
*******************************************************************************/
diff --git a/gladeui/glade-xml-utils.h b/gladeui/glade-xml-utils.h
index c7b116f..8dcdc94 100644
--- a/gladeui/glade-xml-utils.h
+++ b/gladeui/glade-xml-utils.h
@@ -113,6 +113,7 @@ typedef struct _GladeProject GladeProject;
#define GLADE_TAG_CREATE_EPROP_FUNCTION "create-editor-property-function"
#define GLADE_TAG_STRING_FROM_VALUE_FUNCTION "string-from-value-function"
#define GLADE_TAG_CREATE_EDITABLE_FUNCTION "create-editable-function"
+#define GLADE_TAG_ADJUST_PROPERTY_FLAGS_FUNCTION "adjust-property-flags-function"
#define GLADE_TAG_PROPERTIES "properties"
#define GLADE_TAG_PACKING_PROPERTIES "packing-properties"
#define GLADE_TAG_PROPERTY "property"
diff --git a/plugins/gtk+/glade-entry-editor.c b/plugins/gtk+/glade-entry-editor.c
index 86320da..4cf3f18 100644
--- a/plugins/gtk+/glade-entry-editor.c
+++ b/plugins/gtk+/glade-entry-editor.c
@@ -24,9 +24,11 @@
#include <glib/gi18n-lib.h>
#include <gdk/gdkkeysyms.h>
+#include "glade-gtk.h"
#include "glade-entry-editor.h"
#include "glade-image-editor.h" // For GladeImageEditMode
+#include <gladeui/glade-widget-adaptor.h>
static void glade_entry_editor_finalize (GObject * object);
@@ -208,6 +210,7 @@ text_toggled (GtkWidget * widget, GladeEntryEditor * entry_editor)
/* Incase the NULL text didnt change */
glade_property_sync (property);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
@@ -242,6 +245,7 @@ buffer_toggled (GtkWidget * widget, GladeEntryEditor * entry_editor)
glade_widget_get_property (gwidget, "use-entry-buffer");
glade_command_set_property (property, TRUE);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
@@ -324,6 +328,7 @@ primary_stock_toggled (GtkWidget * widget, GladeEntryEditor * entry_editor)
glade_command_push_group (_("Setting %s to use a primary icon from stock"),
glade_widget_get_name (gwidget));
set_stock_mode (entry_editor, TRUE);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
@@ -350,6 +355,7 @@ primary_icon_name_toggled (GtkWidget * widget, GladeEntryEditor * entry_editor)
glade_command_push_group (_("Setting %s to use a primary icon from the icon theme"),
glade_widget_get_name (gwidget));
set_icon_name_mode (entry_editor, TRUE);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
@@ -375,6 +381,7 @@ primary_pixbuf_toggled (GtkWidget * widget, GladeEntryEditor * entry_editor)
glade_command_push_group (_("Setting %s to use a primary icon from filename"),
glade_widget_get_name (gwidget));
set_pixbuf_mode (entry_editor, TRUE);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
@@ -401,6 +408,7 @@ secondary_stock_toggled (GtkWidget * widget, GladeEntryEditor * entry_editor)
glade_command_push_group (_("Setting %s to use a secondary icon from stock"),
glade_widget_get_name (gwidget));
set_stock_mode (entry_editor, FALSE);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
@@ -428,6 +436,7 @@ secondary_icon_name_toggled (GtkWidget * widget,
glade_command_push_group (_("Setting %s to use a secondary icon from the icon theme"),
glade_widget_get_name (gwidget));
set_icon_name_mode (entry_editor, FALSE);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
@@ -453,6 +462,7 @@ secondary_pixbuf_toggled (GtkWidget * widget, GladeEntryEditor * entry_editor)
glade_command_push_group (_("Setting %s to use a secondary icon from filename"),
glade_widget_get_name (gwidget));
set_pixbuf_mode (entry_editor, FALSE);
+ glade_widget_adjust_property_flags (gwidget, TRUE);
glade_command_pop_group ();
glade_editable_unblock (GLADE_EDITABLE (entry_editor));
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index 5ffd148..bd94e8b 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -1053,6 +1053,23 @@ glade_gtk_widget_action_submenu (GladeWidgetAdaptor * adaptor,
return NULL;
}
+static void
+glade_gtk_widget_property_set_sensitive (GladeWidget * gwidget,
+ const gchar * id, gboolean sensitive,
+ const gchar * reason,
+ gboolean use_command)
+{
+ if (use_command)
+ {
+ GladeProperty *property;
+
+ if ((property = glade_widget_get_property (gwidget, id)) != NULL)
+ glade_command_set_property_sensitive (property, sensitive, reason);
+ }
+ else
+ glade_widget_property_set_sensitive (gwidget, id, sensitive, reason);
+}
+
/* ----------------------------- GtkContainer ------------------------------ */
void
glade_gtk_container_post_create (GladeWidgetAdaptor * adaptor,
@@ -3415,80 +3432,11 @@ glade_gtk_entry_set_property (GladeWidgetAdaptor * adaptor,
GObject * object,
const gchar * id, const GValue * value)
{
- GladeImageEditMode mode;
GladeWidget *gwidget = glade_widget_get_from_gobject (object);
GladeProperty *property = glade_widget_get_property (gwidget, id);
- if (!strcmp (id, "use-entry-buffer"))
- {
- glade_widget_property_set_sensitive (gwidget, "text", FALSE,
- NOT_SELECTED_MSG);
- glade_widget_property_set_sensitive (gwidget, "buffer", FALSE,
- NOT_SELECTED_MSG);
-
- if (g_value_get_boolean (value))
- glade_widget_property_set_sensitive (gwidget, "buffer", TRUE, NULL);
- else
- glade_widget_property_set_sensitive (gwidget, "text", TRUE, NULL);
- }
- else if (!strcmp (id, "primary-icon-mode"))
- {
- mode = g_value_get_int (value);
-
- glade_widget_property_set_sensitive (gwidget, "primary-icon-stock", FALSE,
- NOT_SELECTED_MSG);
- glade_widget_property_set_sensitive (gwidget, "primary-icon-name", FALSE,
- NOT_SELECTED_MSG);
- glade_widget_property_set_sensitive (gwidget, "primary-icon-pixbuf",
- FALSE, NOT_SELECTED_MSG);
-
- switch (mode)
- {
- case GLADE_IMAGE_MODE_STOCK:
- glade_widget_property_set_sensitive (gwidget, "primary-icon-stock",
- TRUE, NULL);
- break;
- case GLADE_IMAGE_MODE_ICON:
- glade_widget_property_set_sensitive (gwidget, "primary-icon-name",
- TRUE, NULL);
- break;
- case GLADE_IMAGE_MODE_FILENAME:
- glade_widget_property_set_sensitive (gwidget, "primary-icon-pixbuf",
- TRUE, NULL);
- break;
- }
- }
- else if (!strcmp (id, "secondary-icon-mode"))
- {
- mode = g_value_get_int (value);
-
- glade_widget_property_set_sensitive (gwidget, "secondary-icon-stock",
- FALSE, NOT_SELECTED_MSG);
- glade_widget_property_set_sensitive (gwidget, "secondary-icon-name",
- FALSE, NOT_SELECTED_MSG);
- glade_widget_property_set_sensitive (gwidget, "secondary-icon-pixbuf",
- FALSE, NOT_SELECTED_MSG);
-
- switch (mode)
- {
- case GLADE_IMAGE_MODE_STOCK:
- glade_widget_property_set_sensitive (gwidget,
- "secondary-icon-stock", TRUE,
- NULL);
- break;
- case GLADE_IMAGE_MODE_ICON:
- glade_widget_property_set_sensitive (gwidget, "secondary-icon-name",
- TRUE, NULL);
- break;
- case GLADE_IMAGE_MODE_FILENAME:
- glade_widget_property_set_sensitive (gwidget,
- "secondary-icon-pixbuf", TRUE,
- NULL);
- break;
- }
- }
- else if (!strcmp (id, "primary-icon-tooltip-text") ||
- !strcmp (id, "primary-icon-tooltip-markup"))
+ if (!strcmp (id, "primary-icon-tooltip-text") ||
+ !strcmp (id, "primary-icon-tooltip-markup"))
{
/* Avoid a silly crash in GTK+ */
if (gtk_entry_get_icon_storage_type (GTK_ENTRY (object),
@@ -3519,14 +3467,100 @@ glade_gtk_entry_set_property (GladeWidgetAdaptor * adaptor,
g_signal_handlers_unblock_by_func (object, glade_gtk_entry_changed,
gwidget);
-
}
- else if (GPC_VERSION_CHECK
+ else if (strcmp (id, "use-entry-buffer") != 0 && /* virtual */
+ strcmp (id, "primary-icon-mode") != 0 && /* virtual */
+ strcmp (id, "secondary-icon-mode") != 0 && /* virtual */
+ GPC_VERSION_CHECK
(glade_property_get_class (property), gtk_major_version, gtk_minor_version + 1))
GWA_GET_CLASS (GTK_TYPE_WIDGET)->set_property (adaptor, object, id, value);
}
void
+glade_gtk_entry_adjust_property_flags (GladeWidgetAdaptor * adaptor,
+ GladeWidget * widget, gboolean use_command)
+{
+ gboolean use_buffer;
+ GladeImageEditMode mode;
+
+ GWA_GET_CLASS (GTK_TYPE_WIDGET)->adjust_property_flags (adaptor, widget, use_command);
+
+ glade_widget_property_get (widget, "use-entry-buffer", &use_buffer);
+ if (use_buffer)
+ {
+ glade_gtk_widget_property_set_sensitive (widget, "buffer", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "text", FALSE,
+ NOT_SELECTED_MSG, use_command);
+ }
+ else
+ {
+ glade_gtk_widget_property_set_sensitive (widget, "text", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "buffer", FALSE,
+ NOT_SELECTED_MSG, use_command);
+ }
+
+ glade_widget_property_get (widget, "primary-icon-mode", &mode);
+ switch (mode)
+ {
+ case GLADE_IMAGE_MODE_STOCK:
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-stock", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-name", FALSE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-pixbuf", FALSE,
+ NULL, use_command);
+ break;
+ case GLADE_IMAGE_MODE_ICON:
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-name", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-stock", FALSE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-pixbuf", FALSE,
+ NULL, use_command);
+ break;
+ case GLADE_IMAGE_MODE_FILENAME:
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-pixbuf", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-stock", FALSE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "primary-icon-name", FALSE,
+ NULL, use_command);
+ break;
+ }
+
+ glade_widget_property_get (widget, "secondary-icon-mode", &mode);
+ switch (mode)
+ {
+ case GLADE_IMAGE_MODE_STOCK:
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-stock", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-name", FALSE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-pixbuf", FALSE,
+ NULL, use_command);
+ break;
+ case GLADE_IMAGE_MODE_ICON:
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-name", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-stock", FALSE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-pixbuf", FALSE,
+ NULL, use_command);
+ break;
+ case GLADE_IMAGE_MODE_FILENAME:
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-pixbuf", TRUE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-stock", FALSE,
+ NULL, use_command);
+ glade_gtk_widget_property_set_sensitive (widget, "secondary-icon-name", FALSE,
+ NULL, use_command);
+ break;
+ }
+}
+
+void
glade_gtk_entry_read_widget (GladeWidgetAdaptor * adaptor,
GladeWidget * widget, GladeXmlNode * node)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]