diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2007-06-11 04:41:55 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-06-11 04:41:55 +0000 |
commit | fff5939da54b37c7864827b47e8a09ff3b8d42b2 (patch) | |
tree | c7e63abeba2b54055d0f0f7563ccc639c4054607 /gtk/gtkentry.c | |
parent | 3c89a6b47c737b904420916df2058909793cb638 (diff) | |
download | gtk+-fff5939da54b37c7864827b47e8a09ff3b8d42b2.tar.gz |
Store cursor_hadjustment as object data
svn path=/trunk/; revision=18100
Diffstat (limited to 'gtk/gtkentry.c')
-rw-r--r-- | gtk/gtkentry.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 063822c848..7d4b494b3a 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -73,6 +73,7 @@ static const GtkBorder default_inner_border = { 2, 2, 2, 2 }; static GQuark quark_inner_border = 0; static GQuark quark_password_hint = 0; +static GQuark quark_cursor_hadjustment = 0; typedef struct _GtkEntryPrivate GtkEntryPrivate; @@ -83,14 +84,12 @@ struct _GtkEntryPrivate gfloat xalign; gint insert_pos; guint blink_time; /* time in msec the cursor has blinked since last user event */ - guint real_changed : 1; - guint change_count : 8; + guint interior_focus : 1; + guint real_changed : 1; + guint change_count : 8; gint focus_width; - gboolean interior_focus; GtkShadowType shadow_type; - - GtkAdjustment *cursor_hadjustment; }; typedef struct _GtkEntryPasswordHint GtkEntryPasswordHint; @@ -470,6 +469,7 @@ gtk_entry_class_init (GtkEntryClass *class) quark_inner_border = g_quark_from_static_string ("gtk-entry-inner-border"); quark_password_hint = g_quark_from_static_string ("gtk-entry-password-hint"); + quark_cursor_hadjustment = g_quark_from_static_string ("gtk-hadjustment"); g_object_class_install_property (gobject_class, PROP_CURSOR_POSITION, @@ -1242,9 +1242,6 @@ gtk_entry_finalize (GObject *object) entry->text = NULL; } - if (priv->cursor_hadjustment) - g_object_unref (priv->cursor_hadjustment); - G_OBJECT_CLASS (gtk_entry_parent_class)->finalize (object); } @@ -2357,11 +2354,16 @@ gtk_entry_style_set (GtkWidget *widget, { GtkEntry *entry = GTK_ENTRY (widget); GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry); + gint focus_width; + gboolean interior_focus; gtk_widget_style_get (widget, - "focus-line-width", &priv->focus_width, - "interior-focus", &priv->interior_focus, + "focus-line-width", &focus_width, + "interior-focus", &interior_focus, NULL); + + priv->focus_width = focus_width; + priv->interior_focus = interior_focus; gtk_entry_recompute (entry); @@ -3854,13 +3856,14 @@ gtk_entry_adjust_scroll (GtkEntry *entry) static void gtk_entry_move_adjustments (GtkEntry *entry) { - GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry); PangoContext *context; PangoFontMetrics *metrics; gint x, layout_x, border_x, border_y; gint char_width; + GtkAdjustment *adjustment; - if (!priv->cursor_hadjustment) + adjustment = g_object_get_qdata (G_OBJECT (entry), quark_cursor_hadjustment); + if (!adjustment) return; /* Cursor position, layout offset, border width, and widget allocation */ @@ -3877,7 +3880,7 @@ gtk_entry_move_adjustments (GtkEntry *entry) char_width = pango_font_metrics_get_approximate_char_width (metrics) / PANGO_SCALE; /* Scroll it */ - gtk_adjustment_clamp_page (priv->cursor_hadjustment, + gtk_adjustment_clamp_page (adjustment, x - (char_width + 1), /* one char + one pixel before */ x + (char_width + 2)); /* one char + cursor + one pixel after */ } @@ -6208,18 +6211,17 @@ void gtk_entry_set_cursor_hadjustment (GtkEntry *entry, GtkAdjustment *adjustment) { - GtkEntryPrivate *priv; - g_return_if_fail (GTK_IS_ENTRY (entry)); if (adjustment) g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); - priv = GTK_ENTRY_GET_PRIVATE (entry); - if (priv->cursor_hadjustment) - g_object_unref (priv->cursor_hadjustment); if (adjustment) g_object_ref (adjustment); - priv->cursor_hadjustment = adjustment; + + g_object_set_qdata_full (G_OBJECT (entry), + quark_cursor_hadjustment, + adjustment, + g_object_unref); } /** @@ -6237,13 +6239,9 @@ gtk_entry_set_cursor_hadjustment (GtkEntry *entry, GtkAdjustment* gtk_entry_get_cursor_hadjustment (GtkEntry *entry) { - GtkEntryPrivate *priv; - g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); - priv = GTK_ENTRY_GET_PRIVATE (entry); - - return priv->cursor_hadjustment; + return g_object_get_qdata (G_OBJECT (entry), quark_cursor_hadjustment); } #define __GTK_ENTRY_C__ |