summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Janik <timj@src.gnome.org>2008-06-20 11:01:56 +0000
committerTim Janik <timj@src.gnome.org>2008-06-20 11:01:56 +0000
commit49b07b9460f0b857b1100431d48ffa4442590035 (patch)
tree6793f710756f37b0176c225fdbea639682f46033
parent66e81271ac659368e934509dbf6770be631441a3 (diff)
downloadgtk+-49b07b9460f0b857b1100431d48ffa4442590035.tar.gz
Seal GtkEntry
svn path=/trunk/; revision=20534
-rw-r--r--gtk/gtkentry.c100
-rw-r--r--gtk/gtkentry.h107
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);