Avoid chaining up to parent impl, since we have a INPUT_ONLY window.

Mon Apr  2 16:13:58 2001  Owen Taylor  <otaylor@redhat.com>

	* gtk/gtkinvisible.c (gtk_invisible_style_set): Avoid
	chaining up to parent impl, since we have a INPUT_ONLY
	window.

	* gtk/gtkentry.[ch]: Add a cursor_color property to set the
	foreground color for the cursor.
This commit is contained in:
Owen Taylor 2001-04-02 20:15:18 +00:00 committed by Owen Taylor
parent 096fdfb797
commit 3961437bab
3 changed files with 61 additions and 11 deletions

View File

@ -425,7 +425,14 @@ gtk_entry_class_init (GtkEntryClass *class)
-1,
G_PARAM_READABLE | G_PARAM_WRITABLE));
gtk_widget_class_install_style_property (widget_class,
g_param_spec_boxed ("cursor_color",
_("Cursor color"),
_("Color with which to draw insertion cursor"),
GTK_TYPE_GDK_COLOR,
G_PARAM_READABLE));
signals[INSERT_TEXT] =
gtk_signal_new ("insert_text",
GTK_RUN_LAST,
@ -824,6 +831,24 @@ gtk_entry_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gtk_entry_realize_cursor_gc (GtkEntry *entry)
{
GdkColor *cursor_color;
if (entry->cursor_gc)
gdk_gc_unref (entry->cursor_gc);
gtk_widget_style_get (GTK_WIDGET (entry), "cursor_color", &cursor_color, NULL);
if (cursor_color)
{
entry->cursor_gc = gdk_gc_new (entry->text_area);
gdk_gc_set_rgb_fg_color (entry->cursor_gc, cursor_color);
}
else
entry->cursor_gc = gdk_gc_ref (GTK_WIDGET (entry)->style->bg_gc[GTK_STATE_SELECTED]);
}
static void
gtk_entry_realize (GtkWidget *widget)
{
@ -883,9 +908,11 @@ gtk_entry_realize (GtkWidget *widget)
gdk_window_set_user_data (entry->text_area, entry);
gdk_cursor_destroy (attributes.cursor);
widget->style = gtk_style_attach (widget->style, widget->window);
gtk_entry_realize_cursor_gc (entry);
gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);
gdk_window_set_background (entry->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]);
@ -915,8 +942,17 @@ gtk_entry_unrealize (GtkWidget *widget)
entry->text_area = NULL;
}
if (entry->cursor_gc)
{
gdk_gc_unref (entry->cursor_gc);
entry->cursor_gc = NULL;
}
if (entry->popup_menu)
gtk_widget_destroy (entry->popup_menu);
{
gtk_widget_destroy (entry->popup_menu);
entry->popup_menu = NULL;
}
if (GTK_WIDGET_CLASS (parent_class)->unrealize)
(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
@ -1653,6 +1689,8 @@ gtk_entry_style_set (GtkWidget *widget,
gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);
gdk_window_set_background (entry->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]);
gtk_entry_realize_cursor_gc (entry);
}
}
@ -2373,7 +2411,7 @@ gtk_entry_draw_cursor (GtkEntry *entry,
gtk_entry_get_cursor_locations (entry, type, &strong_x, &weak_x);
gdk_draw_line (entry->text_area, widget->style->bg_gc[GTK_STATE_SELECTED],
gdk_draw_line (entry->text_area, entry->cursor_gc,
xoffset + strong_x, INNER_BORDER,
xoffset + strong_x, text_area_height - INNER_BORDER);

View File

@ -102,6 +102,8 @@ struct _GtkEntry
gunichar invisible_char;
gint width_chars;
GdkGC *cursor_gc;
};
struct _GtkEntryClass

View File

@ -28,13 +28,15 @@
#include "gtksignal.h"
#include "gtkinvisible.h"
static void gtk_invisible_class_init (GtkInvisibleClass *klass);
static void gtk_invisible_init (GtkInvisible *invisible);
static void gtk_invisible_destroy (GtkObject *object);
static void gtk_invisible_realize (GtkWidget *widget);
static void gtk_invisible_show (GtkWidget *widget);
static void gtk_invisible_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_invisible_class_init (GtkInvisibleClass *klass);
static void gtk_invisible_init (GtkInvisible *invisible);
static void gtk_invisible_destroy (GtkObject *object);
static void gtk_invisible_realize (GtkWidget *widget);
static void gtk_invisible_style_set (GtkWidget *widget,
GtkStyle *previous_style);
static void gtk_invisible_show (GtkWidget *widget);
static void gtk_invisible_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
GtkType
gtk_invisible_get_type (void)
@ -71,6 +73,7 @@ gtk_invisible_class_init (GtkInvisibleClass *class)
object_class = (GtkObjectClass*) class;
widget_class->realize = gtk_invisible_realize;
widget_class->style_set = gtk_invisible_style_set;
widget_class->show = gtk_invisible_show;
widget_class->size_allocate = gtk_invisible_size_allocate;
@ -138,6 +141,13 @@ gtk_invisible_realize (GtkWidget *widget)
widget->style = gtk_style_attach (widget->style, widget->window);
}
static void
gtk_invisible_style_set (GtkWidget *widget,
GtkStyle *previous_style)
{
/* Don't chain up to parent implementation */
}
static void
gtk_invisible_show (GtkWidget *widget)
{