[gtk/wip/chergert/textundo: 17/21] entry: allow disabling undo for GtkEntry
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/textundo: 17/21] entry: allow disabling undo for GtkEntry
- Date: Fri, 1 Nov 2019 18:39:53 +0000 (UTC)
commit 80dd67aaeb1607f8d156c8014df907c24e406dc3
Author: Christian Hergert <chergert redhat com>
Date: Fri Nov 1 11:17:00 2019 -0700
entry: allow disabling undo for GtkEntry
This plumbs support for enabling/disabling undo support on a GtkEntry to
the underlying GtkText widget. By default it is enabled. You may also
change the number of actions that may be undone.
docs/reference/gtk/gtk4-sections.txt | 4 ++
gtk/gtkentry.c | 96 ++++++++++++++++++++++++++++++++++++
gtk/gtkentry.h | 10 ++++
3 files changed, 110 insertions(+)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index 97954788d3..297775c50f 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -1007,6 +1007,10 @@ gtk_entry_get_input_hints
gtk_entry_grab_focus_without_selecting
gtk_entry_set_extra_menu
gtk_entry_get_extra_menu
+gtk_entry_get_enable_undo
+gtk_entry_set_enable_undo
+gtk_entry_get_max_undo_levels
+gtk_entry_set_max_undo_levels
<SUBSECTION Standard>
GTK_ENTRY
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index ff6074a7df..66a2647bbd 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -224,6 +224,7 @@ enum {
PROP_EXTRA_MENU,
PROP_SHOW_EMOJI_ICON,
PROP_ENABLE_EMOJI_COMPLETION,
+ PROP_ENABLE_UNDO,
PROP_EDITING_CANCELED,
NUM_PROPERTIES = PROP_EDITING_CANCELED,
};
@@ -841,6 +842,19 @@ gtk_entry_class_init (GtkEntryClass *class)
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+ /**
+ * GtkEntry:enable-undo:
+ *
+ * Setting this to %TRUE allows the user to use keyboard shortcuts to
+ * undo or redo actions on the #GtkEntry.
+ */
+ entry_props[PROP_ENABLE_UNDO] =
+ g_param_spec_boolean ("enable-undo",
+ P_("Enable Undo"),
+ P_("Whether to enable undo support"),
+ TRUE,
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (gobject_class, NUM_PROPERTIES, entry_props);
g_object_class_override_property (gobject_class, PROP_EDITING_CANCELED, "editing-canceled");
gtk_editable_install_properties (gobject_class, PROP_EDITING_CANCELED + 1);
@@ -947,6 +961,10 @@ gtk_entry_set_property (GObject *object,
g_object_set_property (G_OBJECT (priv->text), pspec->name, value);
break;
+ case PROP_ENABLE_UNDO:
+ g_object_set_property (G_OBJECT (priv->text), pspec->name, value);
+ break;
+
case PROP_HAS_FRAME:
gtk_entry_set_has_frame (entry, g_value_get_boolean (value));
break;
@@ -1102,6 +1120,10 @@ gtk_entry_get_property (GObject *object,
g_object_get_property (G_OBJECT (priv->text), pspec->name, value);
break;
+ case PROP_ENABLE_UNDO:
+ g_object_get_property (G_OBJECT (priv->text), pspec->name, value);
+ break;
+
case PROP_HAS_FRAME:
g_value_set_boolean (value, gtk_entry_get_has_frame (entry));
break;
@@ -3591,3 +3613,77 @@ gtk_entry_get_extra_menu (GtkEntry *entry)
return gtk_text_get_extra_menu (GTK_TEXT (priv->text));
}
+
+/**
+ * gtk_entry_get_enable_undo:
+ * @entry: a #GtkEntry
+ *
+ * Gets if undo is enabled for the entry.
+ *
+ * Returns: %TRUE if undo is enabled
+ */
+gboolean
+gtk_entry_get_enable_undo (GtkEntry *entry)
+{
+ GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
+
+ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE);
+
+ return gtk_text_get_enable_undo (GTK_TEXT (priv->text));
+}
+
+/**
+ * gtk_entry_set_enable_undo:
+ * @entry: a #GtkEntry
+ * @enable_undo: if undo should be enabled
+ *
+ * Enables or disables undo for the entry.
+ */
+void
+gtk_entry_set_enable_undo (GtkEntry *entry,
+ gboolean enable_undo)
+{
+ GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
+
+ g_return_if_fail (GTK_IS_ENTRY (entry));
+
+ gtk_text_set_enable_undo (GTK_TEXT (priv->text), enable_undo);
+
+ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ENABLE_UNDO]);
+}
+
+/**
+ * gtk_entry_get_max_undo_levels:
+ * @entry: a #GtkEntry
+ *
+ * Gets the maximum number of undo actions to store while editing
+ * within the #GtkEntry.
+ */
+guint
+gtk_entry_get_max_undo_levels (GtkEntry *entry)
+{
+ GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
+
+ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0);
+
+ return gtk_text_get_max_undo_levels (GTK_TEXT (priv->text));
+}
+
+/**
+ * gtk_entry_set_max_undo_levels:
+ * @entry: a #GtkEntry
+ * @max_undo_levels: maximum number of undo actions
+ *
+ * Sets the maximum number of undo actions that can be performed on the
+ * entry. Setting this to 0 results in unlimited undo operations.
+ */
+void
+gtk_entry_set_max_undo_levels (GtkEntry *entry,
+ guint max_undo_levels)
+{
+ GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
+
+ g_return_if_fail (GTK_IS_ENTRY (entry));
+
+ gtk_text_set_max_undo_levels (GTK_TEXT (priv->text), max_undo_levels);
+}
diff --git a/gtk/gtkentry.h b/gtk/gtkentry.h
index fca03bc2b8..3048202e97 100644
--- a/gtk/gtkentry.h
+++ b/gtk/gtkentry.h
@@ -311,6 +311,16 @@ void gtk_entry_set_extra_menu (GtkEntry
GMenuModel *model);
GDK_AVAILABLE_IN_ALL
GMenuModel * gtk_entry_get_extra_menu (GtkEntry *entry);
+GDK_AVAILABLE_IN_ALL
+gboolean gtk_entry_get_enable_undo (GtkEntry *entry);
+GDK_AVAILABLE_IN_ALL
+void gtk_entry_set_enable_undo (GtkEntry *entry,
+ gboolean enable_undo);
+GDK_AVAILABLE_IN_ALL
+guint gtk_entry_get_max_undo_levels (GtkEntry *entry);
+GDK_AVAILABLE_IN_ALL
+void gtk_entry_set_max_undo_levels (GtkEntry *entry,
+ guint max_undo_levels);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]