#include "gtkselection.h"
#include "gtksignal.h"
#include "gtkstyle.h"
-#include "gtkobject.h"
#define GTK_ENABLE_BROKEN
#include "gtktext.h"
#include "line-wrap.xbm"
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 */
/**********************************************************************/
gtk_widget_queue_draw (GTK_WIDGET (text));
}
- g_object_notify (G_OBJECT (text), "word_wrap");
+ g_object_notify (G_OBJECT (text), "word-wrap");
}
void
gtk_widget_queue_draw (GTK_WIDGET (text));
}
- g_object_notify (G_OBJECT (text), "line_wrap");
+ g_object_notify (G_OBJECT (text), "line-wrap");
}
void
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;
}
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)
{
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)
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);
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;
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);
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;
gtk_text_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
- GtkText *text;
-
- g_return_if_fail (GTK_IS_TEXT (widget));
- g_return_if_fail (allocation != NULL);
-
- text = GTK_TEXT (widget);
-
+ GtkText *text = GTK_TEXT (widget);
+
widget->allocation = *allocation;
if (GTK_WIDGET_REALIZED (widget))
{
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"));
gint x, y;
GdkModifierType mask;
- GDK_THREADS_ENTER ();
-
text = GTK_TEXT (data);
text->timer = 0;
gdk_event_free (event);
}
- GDK_THREADS_LEAVE ();
-
return FALSE;
}
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;
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)
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;
{
if (text->timer == 0)
{
- text->timer = g_timeout_add (SCROLL_TIME,
+ text->timer = gdk_threads_add_timeout (SCROLL_TIME,
gtk_text_scroll_timeout,
text);
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);
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;
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");
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");
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;