X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;ds=sidebyside;f=gtk%2Fgtktext.c;h=e39279ca567d9500d3b835acbf31ffa180974e45;hb=6dfbe3b4f8e6a1f9f8e9b494c21da35618684936;hp=dd5d11de33872dab3f84e61d8778635199c0842b;hpb=af89d145f72d824ee7ff757faca012550c50f349;p=~andy%2Fgtk diff --git a/gtk/gtktext.c b/gtk/gtktext.c index dd5d11de3..e39279ca5 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -37,7 +37,6 @@ #include "gtkselection.h" #include "gtksignal.h" #include "gtkstyle.h" -#include "gtkobject.h" #define GTK_ENABLE_BROKEN #include "gtktext.h" #include "line-wrap.xbm" @@ -442,74 +441,8 @@ static void gtk_text_show_props (GtkText* test, #define TEXT_SHOW_ADJ(text,adj,msg) #endif -/* Memory Management. */ -static GMemChunk *params_mem_chunk = NULL; -static GMemChunk *text_property_chunk = NULL; - static GtkWidgetClass *parent_class = NULL; - -static const GtkTextFunction control_keys[26] = -{ - (GtkTextFunction)gtk_text_move_beginning_of_line, /* a */ - (GtkTextFunction)gtk_text_move_backward_character, /* b */ - (GtkTextFunction)gtk_editable_copy_clipboard, /* c */ - (GtkTextFunction)gtk_text_delete_forward_character, /* d */ - (GtkTextFunction)gtk_text_move_end_of_line, /* e */ - (GtkTextFunction)gtk_text_move_forward_character, /* f */ - NULL, /* g */ - (GtkTextFunction)gtk_text_delete_backward_character, /* h */ - NULL, /* i */ - NULL, /* j */ - (GtkTextFunction)gtk_text_delete_to_line_end, /* k */ - NULL, /* l */ - NULL, /* m */ - (GtkTextFunction)gtk_text_move_next_line, /* n */ - NULL, /* o */ - (GtkTextFunction)gtk_text_move_previous_line, /* p */ - NULL, /* q */ - NULL, /* r */ - NULL, /* s */ - NULL, /* t */ - (GtkTextFunction)gtk_text_delete_line, /* u */ - (GtkTextFunction)gtk_editable_paste_clipboard, /* v */ - (GtkTextFunction)gtk_text_delete_backward_word, /* w */ - (GtkTextFunction)gtk_editable_cut_clipboard, /* x */ - NULL, /* y */ - NULL, /* z */ -}; - -static const GtkTextFunction alt_keys[26] = -{ - NULL, /* a */ - (GtkTextFunction)gtk_text_move_backward_word, /* b */ - NULL, /* c */ - (GtkTextFunction)gtk_text_delete_forward_word, /* d */ - NULL, /* e */ - (GtkTextFunction)gtk_text_move_forward_word, /* f */ - NULL, /* g */ - NULL, /* h */ - NULL, /* i */ - NULL, /* j */ - NULL, /* k */ - NULL, /* l */ - NULL, /* m */ - NULL, /* n */ - NULL, /* o */ - NULL, /* p */ - NULL, /* q */ - NULL, /* r */ - NULL, /* s */ - NULL, /* t */ - NULL, /* u */ - NULL, /* v */ - NULL, /* w */ - NULL, /* x */ - NULL, /* y */ - NULL, /* z */ -}; - - /**********************************************************************/ /* Widget Crap */ /**********************************************************************/ @@ -735,12 +668,6 @@ gtk_text_init (GtkText *text) text->freeze_count = 0; - if (!params_mem_chunk) - params_mem_chunk = g_mem_chunk_new ("LineParams", - sizeof (LineParams), - 256 * sizeof (LineParams), - G_ALLOC_AND_FREE); - text->default_tab_width = 4; text->tab_stops = NULL; @@ -799,7 +726,7 @@ gtk_text_set_word_wrap (GtkText *text, gtk_widget_queue_draw (GTK_WIDGET (text)); } - g_object_notify (G_OBJECT (text), "word_wrap"); + g_object_notify (G_OBJECT (text), "word-wrap"); } void @@ -816,7 +743,7 @@ gtk_text_set_line_wrap (GtkText *text, gtk_widget_queue_draw (GTK_WIDGET (text)); } - g_object_notify (G_OBJECT (text), "line_wrap"); + g_object_notify (G_OBJECT (text), "line-wrap"); } void @@ -877,8 +804,7 @@ gtk_text_set_adjustments (GtkText *text, if (text->hadj != hadj) { text->hadj = hadj; - gtk_object_ref (GTK_OBJECT (text->hadj)); - gtk_object_sink (GTK_OBJECT (text->hadj)); + g_object_ref_sink (text->hadj); gtk_signal_connect (GTK_OBJECT (text->hadj), "changed", (GtkSignalFunc) gtk_text_adjustment, @@ -897,8 +823,7 @@ gtk_text_set_adjustments (GtkText *text, if (text->vadj != vadj) { text->vadj = vadj; - gtk_object_ref (GTK_OBJECT (text->vadj)); - gtk_object_sink (GTK_OBJECT (text->vadj)); + g_object_ref_sink (text->vadj); gtk_signal_connect (GTK_OBJECT (text->vadj), "changed", (GtkSignalFunc) gtk_text_adjustment, @@ -1014,8 +939,7 @@ gtk_text_insert (GtkText *text, g_free (text->text.ch); text->text.wc = g_new (GdkWChar, INITIAL_BUFFER_SIZE); text->text_len = INITIAL_BUFFER_SIZE; - if (text->scratch_buffer.ch) - g_free (text->scratch_buffer.ch); + g_free (text->scratch_buffer.ch); text->scratch_buffer.wc = NULL; text->scratch_buffer_len = 0; } @@ -1107,7 +1031,7 @@ gboolean gtk_text_forward_delete (GtkText *text, guint nchars) { - guint old_lines, old_height; + guint old_lines = 0, old_height = 0; GtkOldEditable *old_editable = GTK_OLD_EDITABLE (text); gboolean frozen = FALSE; @@ -1240,11 +1164,7 @@ gtk_text_get_chars (GtkOldEditable *old_editable, static void gtk_text_destroy (GtkObject *object) { - GtkText *text; - - g_return_if_fail (GTK_IS_TEXT (object)); - - text = GTK_TEXT (object); + GtkText *text = GTK_TEXT (object); if (text->hadj) { @@ -1271,12 +1191,8 @@ gtk_text_destroy (GtkObject *object) static void gtk_text_finalize (GObject *object) { - GtkText *text; + GtkText *text = GTK_TEXT (object); GList *tmp_list; - - g_return_if_fail (GTK_IS_TEXT (object)); - - text = GTK_TEXT (object); /* Clean up the internal structures */ if (text->use_wchar) @@ -1298,13 +1214,11 @@ gtk_text_finalize (GObject *object) if (text->use_wchar) { - if (text->scratch_buffer.wc) - g_free (text->scratch_buffer.wc); + g_free (text->scratch_buffer.wc); } else { - if (text->scratch_buffer.ch) - g_free (text->scratch_buffer.ch); + g_free (text->scratch_buffer.ch); } g_list_free (text->tab_stops); @@ -1315,15 +1229,11 @@ gtk_text_finalize (GObject *object) static void gtk_text_realize (GtkWidget *widget) { - GtkText *text; - GtkOldEditable *old_editable; + GtkText *text = GTK_TEXT (widget); + GtkOldEditable *old_editable = GTK_OLD_EDITABLE (widget); GdkWindowAttr attributes; gint attributes_mask; - - g_return_if_fail (GTK_IS_TEXT (widget)); - - text = GTK_TEXT (widget); - old_editable = GTK_OLD_EDITABLE (widget); + GTK_WIDGET_SET_FLAGS (text, GTK_REALIZED); attributes.window_type = GDK_WINDOW_CHILD; @@ -1437,11 +1347,7 @@ gtk_text_state_changed (GtkWidget *widget, static void gtk_text_unrealize (GtkWidget *widget) { - GtkText *text; - - g_return_if_fail (GTK_IS_TEXT (widget)); - - text = GTK_TEXT (widget); + GtkText *text = GTK_TEXT (widget); gdk_window_set_user_data (text->text_area, NULL); gdk_window_destroy (text->text_area); @@ -1575,10 +1481,7 @@ gtk_text_size_request (GtkWidget *widget, gint ythickness; gint char_height; gint char_width; - - g_return_if_fail (GTK_IS_TEXT (widget)); - g_return_if_fail (requisition != NULL); - + xthickness = widget->style->xthickness + TEXT_BORDER_ROOM; ythickness = widget->style->ythickness + TEXT_BORDER_ROOM; @@ -1600,15 +1503,8 @@ static void gtk_text_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { - GtkText *text; - GtkOldEditable *old_editable; - - g_return_if_fail (GTK_IS_TEXT (widget)); - g_return_if_fail (allocation != NULL); - - text = GTK_TEXT (widget); - old_editable = GTK_OLD_EDITABLE (widget); - + GtkText *text = GTK_TEXT (widget); + widget->allocation = *allocation; if (GTK_WIDGET_REALIZED (widget)) { @@ -1632,9 +1528,6 @@ static gint gtk_text_expose (GtkWidget *widget, GdkEventExpose *event) { - g_return_val_if_fail (GTK_IS_TEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - if (event->window == GTK_TEXT (widget)->text_area) { TDEBUG (("in gtk_text_expose (expose)\n")); @@ -1656,8 +1549,6 @@ gtk_text_scroll_timeout (gpointer data) gint x, y; GdkModifierType mask; - GDK_THREADS_ENTER (); - text = GTK_TEXT (data); text->timer = 0; @@ -1677,8 +1568,6 @@ gtk_text_scroll_timeout (gpointer data) gdk_event_free (event); } - GDK_THREADS_LEAVE (); - return FALSE; } @@ -1686,14 +1575,8 @@ static gint gtk_text_button_press (GtkWidget *widget, GdkEventButton *event) { - GtkText *text; - GtkOldEditable *old_editable; - - g_return_val_if_fail (GTK_IS_TEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - text = GTK_TEXT (widget); - old_editable = GTK_OLD_EDITABLE (widget); + GtkText *text = GTK_TEXT (widget); + GtkOldEditable *old_editable = GTK_OLD_EDITABLE (widget); if (text->button && (event->button != text->button)) return FALSE; @@ -1783,15 +1666,10 @@ static gint gtk_text_button_release (GtkWidget *widget, GdkEventButton *event) { - GtkText *text; + GtkText *text = GTK_TEXT (widget); GtkOldEditable *old_editable; GdkDisplay *display; - g_return_val_if_fail (GTK_IS_TEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - text = GTK_TEXT (widget); - gtk_grab_remove (widget); if (text->button != event->button) @@ -1851,16 +1729,11 @@ static gint gtk_text_motion_notify (GtkWidget *widget, GdkEventMotion *event) { - GtkText *text; + GtkText *text = GTK_TEXT (widget); gint x, y; gint height; GdkModifierType mask; - - g_return_val_if_fail (GTK_IS_TEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - text = GTK_TEXT (widget); - + x = event->x; y = event->y; mask = event->state; @@ -1879,7 +1752,7 @@ gtk_text_motion_notify (GtkWidget *widget, { if (text->timer == 0) { - text->timer = g_timeout_add (SCROLL_TIME, + text->timer = gdk_threads_add_timeout (SCROLL_TIME, gtk_text_scroll_timeout, text); @@ -1932,12 +1805,10 @@ gtk_text_delete_text (GtkEditable *editable, gint start_pos, gint end_pos) { - GtkText *text; + GtkText *text = GTK_TEXT (editable); g_return_if_fail (start_pos >= 0); - - text = GTK_TEXT (editable); - + gtk_text_set_point (text, start_pos); if (end_pos < 0) end_pos = TEXT_LENGTH (text); @@ -1950,18 +1821,12 @@ static gint gtk_text_key_press (GtkWidget *widget, GdkEventKey *event) { - GtkText *text; - GtkOldEditable *old_editable; + GtkText *text = GTK_TEXT (widget); + GtkOldEditable *old_editable = GTK_OLD_EDITABLE (widget); gchar key; gint return_val; gint position; - - g_return_val_if_fail (GTK_IS_TEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - text = GTK_TEXT (widget); - old_editable = GTK_OLD_EDITABLE (widget); - + key = event->keyval; return_val = TRUE; @@ -1992,6 +1857,7 @@ gtk_text_key_press (GtkWidget *widget, case GDK_KP_Down: case GDK_Down: scroll_int (text, +KEY_SCROLL_PIXELS); break; case GDK_Return: + case GDK_ISO_Enter: case GDK_KP_Enter: if (event->state & GDK_CONTROL_MASK) gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); @@ -2111,6 +1977,7 @@ gtk_text_key_press (GtkWidget *widget, gtk_editable_insert_text (GTK_EDITABLE (old_editable), "\t", 1, &position); break; case GDK_KP_Enter: + case GDK_ISO_Enter: case GDK_Return: if (event->state & GDK_CONTROL_MASK) gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); @@ -2130,26 +1997,79 @@ gtk_text_key_press (GtkWidget *widget, if (event->state & GDK_CONTROL_MASK) { + return_val = TRUE; if ((key >= 'A') && (key <= 'Z')) key -= 'A' - 'a'; - - if ((key >= 'a') && (key <= 'z') && control_keys[(int) (key - 'a')]) + + switch (key) { - (* control_keys[(int) (key - 'a')]) (old_editable, event->time); - return_val = TRUE; + case 'a': + gtk_text_move_beginning_of_line (text); + break; + case 'b': + gtk_text_move_backward_character (text); + break; + case 'c': + gtk_editable_copy_clipboard (GTK_EDITABLE (text)); + break; + case 'd': + gtk_text_delete_forward_character (text); + break; + case 'e': + gtk_text_move_end_of_line (text); + break; + case 'f': + gtk_text_move_forward_character (text); + break; + case 'h': + gtk_text_delete_backward_character (text); + break; + case 'k': + gtk_text_delete_to_line_end (text); + break; + case 'n': + gtk_text_move_next_line (text); + break; + case 'p': + gtk_text_move_previous_line (text); + break; + case 'u': + gtk_text_delete_line (text); + break; + case 'v': + gtk_editable_paste_clipboard (GTK_EDITABLE (text)); + break; + case 'w': + gtk_text_delete_backward_word (text); + break; + case 'x': + gtk_editable_cut_clipboard (GTK_EDITABLE (text)); + break; + default: + return_val = FALSE; } - + break; } else if (event->state & GDK_MOD1_MASK) { + return_val = TRUE; if ((key >= 'A') && (key <= 'Z')) key -= 'A' - 'a'; - if ((key >= 'a') && (key <= 'z') && alt_keys[(int) (key - 'a')]) + switch (key) { - (* alt_keys[(int) (key - 'a')]) (old_editable, event->time); - return_val = TRUE; + case 'b': + gtk_text_move_backward_word (text); + break; + case 'd': + gtk_text_delete_forward_word (text); + break; + case 'f': + gtk_text_move_forward_word (text); + break; + default: + return_val = FALSE; } break; @@ -2297,7 +2217,7 @@ line_params_iterate (GtkText* text, for (;;) { if (alloc) - lp = g_chunk_new (LineParams, params_mem_chunk); + lp = g_slice_new (LineParams); else lp = &lpbuf; @@ -2368,7 +2288,7 @@ fetch_lines (GtkText* text, static void fetch_lines_backward (GtkText* text) { - GList* new_lines = NULL, *new_line_start; + GList *new_line_start; GtkPropertyMark mark; if (CACHE_DATA(text->line_start_cache).start.index == 0) @@ -2378,7 +2298,7 @@ fetch_lines_backward (GtkText* text) CACHE_DATA(text->line_start_cache).start.index - 1, &CACHE_DATA(text->line_start_cache).start); - new_line_start = new_lines = fetch_lines (text, &mark, NULL, FetchLinesCount, 1); + new_line_start = fetch_lines (text, &mark, NULL, FetchLinesCount, 1); while (new_line_start->next) new_line_start = new_line_start->next; @@ -2981,15 +2901,7 @@ new_text_property (GtkText *text, GdkFont *font, const GdkColor* fore, { TextProperty *prop; - if (text_property_chunk == NULL) - { - text_property_chunk = g_mem_chunk_new ("text property mem chunk", - sizeof(TextProperty), - 1024*sizeof(TextProperty), - G_ALLOC_AND_FREE); - } - - prop = g_chunk_new(TextProperty, text_property_chunk); + prop = g_slice_new (TextProperty); prop->flags = 0; if (font) @@ -3026,7 +2938,7 @@ destroy_text_property (TextProperty *prop) if (prop->font) text_font_unref (prop->font); - g_mem_chunk_free (text_property_chunk, prop); + g_slice_free (TextProperty, prop); } /* Flop the memory between the point and the gap around like a @@ -3782,7 +3694,7 @@ free_cache (GtkText* text) } for (; cache; cache = cache->next) - g_mem_chunk_free (params_mem_chunk, cache->data); + g_slice_free (LineParams, cache->data); g_list_free (text->line_start_cache); @@ -3808,7 +3720,7 @@ remove_cache_line (GtkText* text, GList* member) list = member->next; - g_mem_chunk_free (params_mem_chunk, member->data); + g_slice_free (LineParams, member->data); g_list_free_1 (member); return list; @@ -5106,12 +5018,8 @@ drawn_cursor_min (GtkText* text) static gint drawn_cursor_max (GtkText* text) { - GdkFont* font; - g_assert(text->cursor_mark.property); - font = MARK_CURRENT_FONT(text, &text->cursor_mark); - return text->cursor_pos_y - text->cursor_char_offset; }