#include "gtktext.h"
#include "line-wrap.xbm"
#include "line-arrow.xbm"
+#include "gtkintl.h"
#define INITIAL_BUFFER_SIZE 1024
#define CACHE_DATA(c) (*(LineParams*)(c)->data)
enum {
- ARG_0,
- ARG_HADJUSTMENT,
- ARG_VADJUSTMENT,
- ARG_LINE_WRAP,
- ARG_WORD_WRAP
+ PROP_0,
+ PROP_HADJUSTMENT,
+ PROP_VADJUSTMENT,
+ PROP_LINE_WRAP,
+ PROP_WORD_WRAP
};
typedef struct _TextProperty TextProperty;
static void gtk_text_class_init (GtkTextClass *klass);
-static void gtk_text_set_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id);
-static void gtk_text_get_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id);
+static void gtk_text_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gtk_text_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
static void gtk_text_init (GtkText *text);
static void gtk_text_destroy (GtkObject *object);
static void gtk_text_finalize (GObject *object);
static void
gtk_text_class_init (GtkTextClass *class)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+ GObjectClass *gobject_class;
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GtkOldEditableClass *old_editable_class;
-
+
+ gobject_class = G_OBJECT_CLASS (class);
object_class = (GtkObjectClass*) class;
widget_class = (GtkWidgetClass*) class;
old_editable_class = (GtkOldEditableClass*) class;
parent_class = gtk_type_class (GTK_TYPE_OLD_EDITABLE);
gobject_class->finalize = gtk_text_finalize;
-
- object_class->set_arg = gtk_text_set_arg;
- object_class->get_arg = gtk_text_get_arg;
+ gobject_class->set_property = gtk_text_set_property;
+ gobject_class->get_property = gtk_text_get_property;
+
object_class->destroy = gtk_text_destroy;
widget_class->realize = gtk_text_realize;
class->set_scroll_adjustments = gtk_text_set_adjustments;
- gtk_object_add_arg_type ("GtkText::hadjustment",
- GTK_TYPE_ADJUSTMENT,
- GTK_ARG_READWRITE,
- ARG_HADJUSTMENT);
- gtk_object_add_arg_type ("GtkText::vadjustment",
- GTK_TYPE_ADJUSTMENT,
- GTK_ARG_READWRITE,
- ARG_VADJUSTMENT);
- gtk_object_add_arg_type ("GtkText::line_wrap",
- GTK_TYPE_BOOL,
- GTK_ARG_READWRITE,
- ARG_LINE_WRAP);
- gtk_object_add_arg_type ("GtkText::word_wrap",
- GTK_TYPE_BOOL,
- GTK_ARG_READWRITE,
- ARG_WORD_WRAP);
-
+ g_object_class_install_property (gobject_class,
+ PROP_HADJUSTMENT,
+ g_param_spec_object ("hadjustment",
+ _("Horizontal Adjustment"),
+ _("Horizontal adjustment for the text widget"),
+ GTK_TYPE_ADJUSTMENT,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_VADJUSTMENT,
+ g_param_spec_object ("vadjustment",
+ _("Vertical Adjustment"),
+ _("Vertical adjustment for the text widget"),
+ GTK_TYPE_ADJUSTMENT,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_LINE_WRAP,
+ g_param_spec_boolean ("line_wrap",
+ _("Line Wrap"),
+ _("Whether lines are wrapped at widget edges"),
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_WORD_WRAP,
+ g_param_spec_boolean ("word_wrap",
+ _("Word Wrap"),
+ _("Whether words are wrapped at widget edges"),
+ FALSE,
+ G_PARAM_READWRITE));
+
widget_class->set_scroll_adjustments_signal =
gtk_signal_new ("set_scroll_adjustments",
GTK_RUN_LAST,
}
static void
-gtk_text_set_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id)
+gtk_text_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
GtkText *text;
text = GTK_TEXT (object);
- switch (arg_id)
+ switch (prop_id)
{
- case ARG_HADJUSTMENT:
+ case PROP_HADJUSTMENT:
gtk_text_set_adjustments (text,
- GTK_VALUE_POINTER (*arg),
+ g_value_get_object (value),
text->vadj);
break;
- case ARG_VADJUSTMENT:
+ case PROP_VADJUSTMENT:
gtk_text_set_adjustments (text,
text->hadj,
- GTK_VALUE_POINTER (*arg));
+ g_value_get_object (value));
break;
- case ARG_LINE_WRAP:
- gtk_text_set_line_wrap (text, GTK_VALUE_BOOL (*arg));
+ case PROP_LINE_WRAP:
+ gtk_text_set_line_wrap (text, g_value_get_boolean (value));
break;
- case ARG_WORD_WRAP:
- gtk_text_set_word_wrap (text, GTK_VALUE_BOOL (*arg));
+ case PROP_WORD_WRAP:
+ gtk_text_set_word_wrap (text, g_value_get_boolean (value));
break;
default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
-gtk_text_get_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id)
+gtk_text_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
GtkText *text;
text = GTK_TEXT (object);
- switch (arg_id)
+ switch (prop_id)
{
- case ARG_HADJUSTMENT:
- GTK_VALUE_POINTER (*arg) = text->hadj;
+ case PROP_HADJUSTMENT:
+ g_value_set_object (value, text->hadj);
break;
- case ARG_VADJUSTMENT:
- GTK_VALUE_POINTER (*arg) = text->vadj;
+ case PROP_VADJUSTMENT:
+ g_value_set_object (value, text->vadj);
break;
- case ARG_LINE_WRAP:
- GTK_VALUE_BOOL (*arg) = text->line_wrap;
+ case PROP_LINE_WRAP:
+ g_value_set_boolean (value, text->line_wrap);
break;
- case ARG_WORD_WRAP:
- GTK_VALUE_BOOL (*arg) = text->word_wrap;
+ case PROP_WORD_WRAP:
+ g_value_set_boolean (value, text->word_wrap);
break;
default:
- arg->type = GTK_TYPE_INVALID;
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
recompute_geometry (text);
gtk_widget_queue_draw (GTK_WIDGET (text));
}
+
+ g_object_notify (G_OBJECT (text), "word_wrap");
}
void
recompute_geometry (text);
gtk_widget_queue_draw (GTK_WIDGET (text));
}
+
+ g_object_notify (G_OBJECT (text), "line_wrap");
}
void
(GtkSignalFunc) gtk_text_adjustment_destroyed,
text);
gtk_text_adjustment (hadj, text);
+
+ g_object_notify (G_OBJECT (text), "hadjustment");
}
if (text->vadj != vadj)
(GtkSignalFunc) gtk_text_adjustment_destroyed,
text);
gtk_text_adjustment (vadj, text);
+
+ g_object_notify (G_OBJECT (text), "vadjustment");
}
}
gc = text->bg_gc;
}
else
- gc = widget->style->bg_gc[widget->state];
+ gc = widget->style->base_gc[widget->state];
gdk_draw_rectangle (GTK_WIDGET (text)->window, gc, TRUE,
area_x, area_y, area_width, area_height);
switch (event->keyval)
{
+ case GDK_KP_Home:
case GDK_Home:
if (event->state & GDK_CONTROL_MASK)
move_cursor_buffer_ver (text, -1);
else
gtk_text_move_beginning_of_line (text);
break;
+ case GDK_KP_End:
case GDK_End:
if (event->state & GDK_CONTROL_MASK)
move_cursor_buffer_ver (text, +1);
else
gtk_text_move_end_of_line (text);
break;
+ case GDK_KP_Page_Up:
case GDK_Page_Up: move_cursor_page_ver (text, -1); break;
+ case GDK_KP_Page_Down:
case GDK_Page_Down: move_cursor_page_ver (text, +1); break;
/* CUA has Ctrl-Up/Ctrl-Down as paragraph up down */
+ case GDK_KP_Up:
case GDK_Up: move_cursor_ver (text, -1); break;
+ case GDK_KP_Down:
case GDK_Down: move_cursor_ver (text, +1); break;
+ case GDK_KP_Left:
case GDK_Left:
if (event->state & GDK_CONTROL_MASK)
gtk_text_move_backward_word (text);
else
move_cursor_hor (text, -1);
break;
+ case GDK_KP_Right:
case GDK_Right:
if (event->state & GDK_CONTROL_MASK)
gtk_text_move_forward_word (text);
}
break;
case GDK_Delete:
+ case GDK_KP_Delete:
if (event->state & GDK_CONTROL_MASK)
gtk_text_delete_forward_word (text);
else if (event->state & GDK_SHIFT_MASK)
gtk_text_delete_forward_character (text);
break;
case GDK_Tab:
+ case GDK_ISO_Left_Tab:
position = text->point.index;
gtk_editable_insert_text (GTK_EDITABLE (old_editable), "\t", 1, &position);
break;
+ case GDK_KP_Enter:
case GDK_Return:
if (event->state & GDK_CONTROL_MASK)
gtk_signal_emit_by_name (GTK_OBJECT (text), "activate");
(mark.index < selection_end_pos))
{
if (old_editable->has_selection)
- fg_gc = GTK_WIDGET(text)->style->fg_gc[GTK_STATE_SELECTED];
+ fg_gc = GTK_WIDGET(text)->style->text_gc[GTK_STATE_SELECTED];
else
- fg_gc = GTK_WIDGET(text)->style->fg_gc[GTK_STATE_ACTIVE];
+ fg_gc = GTK_WIDGET(text)->style->text_gc[GTK_STATE_ACTIVE];
}
else
{