summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-03-13 19:17:19 -0400
committerMatthias Clasen <mclasen@redhat.com>2019-03-14 18:42:07 -0400
commit56ee1f3566218b8a8be9e24e994f7caf6490194d (patch)
treea16bac29e15164a88d9143e9e68247e474d02269
parent4afad781fe7fd27b5cbb3b190f944f1a36c92cb2 (diff)
downloadgtk+-56ee1f3566218b8a8be9e24e994f7caf6490194d.tar.gz
password entry: Add placeholder-text and activates-default
Add ::placeholder-text and ::activates-default properties. Password entries are going to be used in dialogs, where these two properties are useful.
-rw-r--r--gtk/gtkpasswordentry.c62
1 files changed, 59 insertions, 3 deletions
diff --git a/gtk/gtkpasswordentry.c b/gtk/gtkpasswordentry.c
index 847056eecf..887620750c 100644
--- a/gtk/gtkpasswordentry.c
+++ b/gtk/gtkpasswordentry.c
@@ -29,6 +29,7 @@
#include "gtkbox.h"
#include "gtkimage.h"
#include "gtkintl.h"
+#include "gtkprivate.h"
#include "gtkmarshalers.h"
#include "gtkstylecontext.h"
#include "gtkeventcontrollerkey.h"
@@ -56,6 +57,14 @@ typedef struct {
GdkKeymap *keymap;
} GtkPasswordEntryPrivate;
+enum {
+ PROP_PLACEHOLDER_TEXT = 1,
+ PROP_ACTIVATES_DEFAULT,
+ NUM_PROPERTIES
+};
+
+static GParamSpec *props[NUM_PROPERTIES] = { NULL, };
+
static void gtk_password_entry_editable_init (GtkEditableInterface *iface);
G_DEFINE_TYPE_WITH_CODE (GtkPasswordEntry, gtk_password_entry, GTK_TYPE_WIDGET,
@@ -158,10 +167,26 @@ gtk_password_entry_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
+ GtkPasswordEntry *entry = GTK_PASSWORD_ENTRY (object);
+ GtkPasswordEntryPrivate *priv = gtk_password_entry_get_instance_private (entry);
+
if (gtk_editable_delegate_set_property (object, prop_id, value, pspec))
return;
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ switch (prop_id)
+ {
+ case PROP_PLACEHOLDER_TEXT:
+ gtk_text_set_placeholder_text (GTK_TEXT (priv->entry), g_value_get_string (value));
+ break;
+
+ case PROP_ACTIVATES_DEFAULT:
+ gtk_text_set_activates_default (GTK_TEXT (priv->entry), g_value_get_boolean (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
static void
@@ -170,10 +195,26 @@ gtk_password_entry_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
+ GtkPasswordEntry *entry = GTK_PASSWORD_ENTRY (object);
+ GtkPasswordEntryPrivate *priv = gtk_password_entry_get_instance_private (entry);
+
if (gtk_editable_delegate_get_property (object, prop_id, value, pspec))
return;
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ switch (prop_id)
+ {
+ case PROP_PLACEHOLDER_TEXT:
+ g_value_set_string (value, gtk_text_get_placeholder_text (GTK_TEXT (priv->entry)));
+ break;
+
+ case PROP_ACTIVATES_DEFAULT:
+ g_value_set_boolean (value, gtk_text_get_activates_default (GTK_TEXT (priv->entry)));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
static void
@@ -257,7 +298,22 @@ gtk_password_entry_class_init (GtkPasswordEntryClass *klass)
widget_class->grab_focus = gtk_password_entry_grab_focus;
widget_class->mnemonic_activate = gtk_password_entry_mnemonic_activate;
- gtk_editable_install_properties (object_class, 1);
+ props[PROP_PLACEHOLDER_TEXT] =
+ g_param_spec_string ("placeholder-text",
+ P_("Placeholder text"),
+ P_("Show text in the entry when it’s empty and unfocused"),
+ NULL,
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
+ props[PROP_ACTIVATES_DEFAULT] =
+ g_param_spec_boolean ("activates-default",
+ P_("Activates default"),
+ P_("Whether to activate the default widget (such as the default button in a dialog) when Enter is pressed"),
+ FALSE,
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
+ g_object_class_install_properties (object_class, NUM_PROPERTIES, props);
+ gtk_editable_install_properties (object_class, NUM_PROPERTIES);
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ENTRY_ACCESSIBLE);
gtk_widget_class_set_css_name (widget_class, I_("entry"));