diff options
author | Owen Taylor <otaylor@gtk.org> | 1998-05-22 07:07:11 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-05-22 07:07:11 +0000 |
commit | 579856439b9d4a088717d15caaa1bc6cc7d10242 (patch) | |
tree | 830d51f7895280d656fbc411db4dacaeef14dd57 /gtk/gtktext.c | |
parent | bf874e967e1627a21bb8f25e5db13e3f68a2f083 (diff) | |
download | gdk-pixbuf-579856439b9d4a088717d15caaa1bc6cc7d10242.tar.gz |
Added style_set handler.
Fri May 22 03:02:40 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtkhandlebox.c: Added style_set handler.
Fri May 22 02:55:57 1998 Owen Taylor <otaylor@gtk.org>
[ From: Chris Lahey <clahey@umich.edu> ]
* gtk/gtkeditable.c, gtk/gtkeditable.h,
gtk/gtktext.c, gtk/gtkentry.c: Added get_position,
and set_position functions to get and set the cursor position.
* gtk/gtkeditable.c: Restored "insert_text" and "delete_text" to
signal status. Make GtkText do user-controlled insertion
and deletion through the Editable widget so that these
signals are properly emitted.
* gtk/gtkentry.c: Changed gtk_entry_set_visibility to
display asterisks instead of empty space when visible = FALSE)
Diffstat (limited to 'gtk/gtktext.c')
-rw-r--r-- | gtk/gtktext.c | 69 |
1 files changed, 34 insertions, 35 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 69b533c29..448f913aa 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -302,6 +302,9 @@ static void gtk_text_select_word (GtkText *text, static void gtk_text_select_line (GtkText *text, guint32 time); +static void gtk_text_set_position (GtkEditable *editable, + gint position); + /* #define DEBUG_GTK_TEXT */ #if defined(DEBUG_GTK_TEXT) && defined(__GNUC__) @@ -478,6 +481,7 @@ gtk_text_class_init (GtkTextClass *class) editable_class->update_text = gtk_text_update_text; editable_class->get_chars = gtk_text_get_chars; editable_class->set_selection = gtk_text_set_selection; + editable_class->set_position = gtk_text_set_position; } static void @@ -834,6 +838,20 @@ gtk_text_forward_delete (GtkText *text, return TRUE; } + +static void +gtk_text_set_position (GtkEditable *editable, + gint position) +{ + GtkText *text = (GtkText *) editable; + + undraw_cursor( text, FALSE ); + text->has_cursor = 1; + text->cursor_mark = find_mark( text, position ); + find_cursor( text, TRUE ); + draw_cursor( text, FALSE ); + gtk_editable_select_region (editable, 0, 0); +} static gchar * gtk_text_get_chars (GtkEditable *editable, @@ -1584,16 +1602,6 @@ gtk_text_motion_notify (GtkWidget *widget, return FALSE; } -static void -gtk_text_insert_1_at_point (GtkText* text, gchar key) -{ - gtk_text_insert (text, - MARK_CURRENT_FONT (&text->point), - MARK_CURRENT_FORE (&text->point), - MARK_CURRENT_BACK (&text->point), - &key, 1); -} - static void gtk_text_insert_text (GtkEditable *editable, const gchar *new_text, @@ -1635,6 +1643,7 @@ gtk_text_key_press (GtkWidget *widget, GtkEditable *editable; gchar key; gint return_val; + gint position; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_TEXT (widget), FALSE); @@ -1765,16 +1774,16 @@ gtk_text_key_press (GtkWidget *widget, gtk_text_delete_forward_character (text); break; case GDK_Tab: - gtk_text_insert_1_at_point (text, '\t'); - gtk_editable_changed (editable); + position = text->point.index; + gtk_editable_insert_text (editable, "\t", 1, &position); break; case GDK_Return: if (event->state & GDK_CONTROL_MASK) gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); else { - gtk_text_insert_1_at_point (text, '\n'); - gtk_editable_changed (editable); + position = text->point.index; + gtk_editable_insert_text (editable, "\n", 1, &position); } break; case GDK_Escape: @@ -1818,8 +1827,8 @@ gtk_text_key_press (GtkWidget *widget, if (event->length == 1) { gtk_editable_delete_selection (editable); - gtk_text_insert_1_at_point (text, event->string[0]); - gtk_editable_changed (editable); + position = text->point.index; + gtk_editable_insert_text (editable, &(event->string[0]), 1, &position); } return_val = TRUE; @@ -3488,8 +3497,7 @@ gtk_text_delete_forward_character (GtkText *text) gtk_editable_delete_selection (editable); else { - gtk_text_forward_delete (text, 1); - gtk_editable_changed (editable); + gtk_editable_delete_text (editable, text->point.index, text->point.index + 1); } } @@ -3503,8 +3511,7 @@ gtk_text_delete_backward_character (GtkText *text) gtk_editable_delete_selection (editable); else { - gtk_text_backward_delete (text, 1); - gtk_editable_changed (editable); + gtk_editable_delete_text (editable, text->point.index - 1, text->point.index); } } @@ -3522,9 +3529,7 @@ gtk_text_delete_forward_word (GtkText *text) { old_pos = text->cursor_mark.index; gtk_text_move_forward_word (text); - gtk_text_set_point (text, text->cursor_mark.index); - gtk_text_backward_delete (text, text->cursor_mark.index - old_pos); - gtk_editable_changed (editable); + gtk_editable_delete_text (editable, old_pos, text->cursor_mark.index); } } @@ -3540,11 +3545,9 @@ gtk_text_delete_backward_word (GtkText *text) gtk_editable_delete_selection (editable); else { - old_pos = text->point.index; + old_pos = text->cursor_mark.index; gtk_text_move_backward_word (text); - gtk_text_set_point (text, text->cursor_mark.index); - gtk_text_forward_delete (text, old_pos - text->cursor_mark.index); - gtk_editable_changed (editable); + gtk_editable_delete_text (editable, text->cursor_mark.index, old_pos); } } @@ -3553,6 +3556,7 @@ gtk_text_delete_line (GtkText *text) { gint start_pos; gint end_pos; + GtkEditable *editable = GTK_EDITABLE (text); gtk_text_move_beginning_of_line (text); start_pos = text->cursor_mark.index; @@ -3561,10 +3565,7 @@ gtk_text_delete_line (GtkText *text) gtk_text_move_forward_character (text); end_pos = text->cursor_mark.index; - gtk_text_set_point (text, start_pos); - gtk_text_forward_delete (text, end_pos - start_pos); - - gtk_editable_changed (GTK_EDITABLE (text)); + gtk_editable_delete_text (editable, start_pos, end_pos); } static void @@ -3572,6 +3573,7 @@ gtk_text_delete_to_line_end (GtkText *text) { gint start_pos; gint end_pos; + GtkEditable *editable = GTK_EDITABLE (text); start_pos = text->cursor_mark.index; @@ -3581,10 +3583,7 @@ gtk_text_delete_to_line_end (GtkText *text) gtk_text_move_forward_character (text); end_pos = text->cursor_mark.index; - gtk_text_set_point (text, start_pos); - gtk_text_forward_delete (text, end_pos - start_pos); - - gtk_editable_changed (GTK_EDITABLE (text)); + gtk_editable_delete_text (editable, start_pos, end_pos); } static void |