diff options
author | Tim Janik <timj@src.gnome.org> | 2008-06-20 11:01:56 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 2008-06-20 11:01:56 +0000 |
commit | 49b07b9460f0b857b1100431d48ffa4442590035 (patch) | |
tree | 6793f710756f37b0176c225fdbea639682f46033 | |
parent | 66e81271ac659368e934509dbf6770be631441a3 (diff) | |
download | gtk+-49b07b9460f0b857b1100431d48ffa4442590035.tar.gz |
Seal GtkEntry
svn path=/trunk/; revision=20534
-rw-r--r-- | gtk/gtkentry.c | 100 | ||||
-rw-r--r-- | gtk/gtkentry.h | 107 |
2 files changed, 155 insertions, 52 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index def887607d..e70303faac 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -133,7 +133,9 @@ enum { PROP_TEXT, PROP_XALIGN, PROP_TRUNCATE_MULTILINE, - PROP_SHADOW_TYPE + PROP_SHADOW_TYPE, + PROP_OVERWRITE_MODE, + PROP_TEXT_LENGTH }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -632,6 +634,37 @@ gtk_entry_class_init (GtkEntryClass *class) GTK_SHADOW_IN, GTK_PARAM_READWRITE)); + /** + * GtkEntry:overwrite-mode: + * + * If text is overwritten when typing in the #GtkEntry. + * + * Since: 2.14 + */ + g_object_class_install_property (gobject_class, + PROP_OVERWRITE_MODE, + g_param_spec_boolean ("overwrite-mode", + P_("Overwrite mode"), + P_("Whether new text overwrites existing text"), + FALSE, + GTK_PARAM_READWRITE)); + /** + * GtkEntry:text-length: + * + * The length of the text in the #GtkEntry. + * + * Since: 2.14 + */ + g_object_class_install_property (gobject_class, + PROP_TEXT_LENGTH, + g_param_spec_uint ("text-length", + P_("Text length"), + P_("Length of the text currently in the entry"), + 0, + G_MAXUINT16, + 0, + GTK_PARAM_READABLE)); + signals[POPULATE_POPUP] = g_signal_new (I_("populate_popup"), G_OBJECT_CLASS_TYPE (gobject_class), @@ -1026,6 +1059,10 @@ gtk_entry_set_property (GObject *object, priv->shadow_type = g_value_get_enum (value); break; + case PROP_OVERWRITE_MODE: + gtk_entry_set_overwrite_mode (entry, g_value_get_boolean (value)); + break; + case PROP_SCROLL_OFFSET: case PROP_CURSOR_POSITION: default: @@ -1090,6 +1127,12 @@ gtk_entry_get_property (GObject *object, case PROP_SHADOW_TYPE: g_value_set_enum (value, priv->shadow_type); break; + case PROP_OVERWRITE_MODE: + g_value_set_boolean (value, entry->overwrite_mode); + break; + case PROP_TEXT_LENGTH: + g_value_set_boolean (value, entry->text_length); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -4630,6 +4673,43 @@ gtk_entry_set_editable (GtkEntry *entry, } /** + * gtk_entry_set_overwrite_mode: + * @entry: a #GtkEntry + * @setting: new value + * + * Sets whether the text is overwritten when typing in the #GtkEntry. + **/ +void +gtk_entry_set_overwrite_mode (GtkEntry *entry, + gboolean setting) +{ + g_return_if_fail (GTK_IS_ENTRY (entry)); + + if (entry->overwrite_mode == setting) + return; + + gtk_entry_toggle_overwrite (entry); + + g_object_notify (G_OBJECT (entry), "overwrite-mode"); +} + +/** + * gtk_entry_get_overwrite_mode: + * @entry: a #GtkEntry + * + * Gets the value set by gtk_entry_set_overwrite_mode(). + * + * Return value: whether the text is overwritten when typing. + **/ +gboolean +gtk_entry_get_overwrite_mode (GtkEntry *entry) +{ + g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); + + return entry->overwrite_mode; +} + +/** * gtk_entry_get_text: * @entry: a #GtkEntry * @@ -4716,6 +4796,24 @@ gtk_entry_get_max_length (GtkEntry *entry) } /** + * gtk_entry_get_text_length: + * @entry: a #GtkEntry + * + * Retrieves the current length of the text in + * @entry. + * + * Return value: the current number of characters + * in #GtkEntry, or 0 if there are none. + **/ +guint16 +gtk_entry_get_text_length (GtkEntry *entry) +{ + g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); + + return entry->text_length; +} + +/** * gtk_entry_set_activates_default: * @entry: a #GtkEntry * @setting: %TRUE to activate window's default widget on Enter keypress diff --git a/gtk/gtkentry.h b/gtk/gtkentry.h index 56a2b4016d..2019b1eee6 100644 --- a/gtk/gtkentry.h +++ b/gtk/gtkentry.h @@ -56,61 +56,62 @@ struct _GtkEntry { GtkWidget widget; - gchar *text; + gchar *GSEAL (text); - guint editable : 1; - guint visible : 1; - guint overwrite_mode : 1; - guint in_drag : 1; /* Dragging within the selection */ + guint GSEAL (editable) : 1; + guint GSEAL (visible) : 1; + guint GSEAL (overwrite_mode) : 1; + guint GSEAL (in_drag) : 1; /* FIXME: Should be private? + Dragging within the selection */ - guint16 text_length; /* length in use, in chars */ - guint16 text_max_length; + guint16 GSEAL (text_length); /* length in use, in chars */ + guint16 GSEAL (text_max_length); /*< private >*/ - GdkWindow *text_area; - GtkIMContext *im_context; - GtkWidget *popup_menu; - - gint current_pos; - gint selection_bound; - - PangoLayout *cached_layout; - - guint cache_includes_preedit : 1; - guint need_im_reset : 1; - guint has_frame : 1; - guint activates_default : 1; - guint cursor_visible : 1; - guint in_click : 1; /* Flag so we don't select all when clicking in entry to focus in */ - guint is_cell_renderer : 1; - guint editing_canceled : 1; /* Only used by GtkCellRendererText */ - guint mouse_cursor_obscured : 1; - guint select_words : 1; - guint select_lines : 1; - guint resolved_dir : 4; /* PangoDirection */ - guint truncate_multiline : 1; - - guint button; - guint blink_timeout; - guint recompute_idle; - gint scroll_offset; - gint ascent; /* font ascent, in pango units */ - gint descent; /* font descent, in pango units */ - - guint16 text_size; /* allocated size, in bytes */ - guint16 n_bytes; /* length in use, in bytes */ - - guint16 preedit_length; /* length of preedit string, in bytes */ - guint16 preedit_cursor; /* offset of cursor within preedit string, in chars */ - - gint dnd_position; /* In chars, -1 == no DND cursor */ - - gint drag_start_x; - gint drag_start_y; - - gunichar invisible_char; - - gint width_chars; + GdkWindow *GSEAL (text_area); + GtkIMContext *GSEAL (im_context); + GtkWidget *GSEAL (popup_menu); + + gint GSEAL (current_pos); + gint GSEAL (selection_bound); + + PangoLayout *GSEAL (cached_layout); + + guint GSEAL (cache_includes_preedit) : 1; + guint GSEAL (need_im_reset) : 1; + guint GSEAL (has_frame) : 1; + guint GSEAL (activates_default) : 1; + guint GSEAL (cursor_visible) : 1; + guint GSEAL (in_click) : 1; /* Flag so we don't select all when clicking in entry to focus in */ + guint GSEAL (is_cell_renderer) : 1; + guint GSEAL (editing_canceled) : 1; /* Only used by GtkCellRendererText */ + guint GSEAL (mouse_cursor_obscured) : 1; + guint GSEAL (select_words) : 1; + guint GSEAL (select_lines) : 1; + guint GSEAL (resolved_dir) : 4; /* PangoDirection */ + guint GSEAL (truncate_multiline) : 1; + + guint GSEAL (button); + guint GSEAL (blink_timeout); + guint GSEAL (recompute_idle); + gint GSEAL (scroll_offset); + gint GSEAL (ascent); /* font ascent in pango units */ + gint GSEAL (descent); /* font descent in pango units */ + + guint16 GSEAL (text_size); /* allocated size, in bytes */ + guint16 GSEAL (n_bytes); /* length in use, in bytes */ + + guint16 GSEAL (preedit_length); /* length of preedit string, in bytes */ + guint16 GSEAL (preedit_cursor); /* offset of cursor within preedit string, in chars */ + + gint GSEAL (dnd_position); /* In chars, -1 == no DND cursor */ + + gint GSEAL (drag_start_x); + gint GSEAL (drag_start_y); + + gunichar GSEAL (invisible_char); + + gint GSEAL (width_chars); }; struct _GtkEntryClass @@ -165,10 +166,14 @@ gboolean gtk_entry_get_has_frame (GtkEntry *entry); void gtk_entry_set_inner_border (GtkEntry *entry, const GtkBorder *border); G_CONST_RETURN GtkBorder* gtk_entry_get_inner_border (GtkEntry *entry); +void gtk_entry_set_overwrite_mode (GtkEntry *entry, + gboolean overwrite); +gboolean gtk_entry_get_overwrite_mode (GtkEntry *entry); /* text is truncated if needed */ void gtk_entry_set_max_length (GtkEntry *entry, gint max); gint gtk_entry_get_max_length (GtkEntry *entry); +guint16 gtk_entry_get_text_length (GtkEntry *entry); void gtk_entry_set_activates_default (GtkEntry *entry, gboolean setting); gboolean gtk_entry_get_activates_default (GtkEntry *entry); |