diff options
author | Owen Taylor <otaylor@redhat.com> | 1998-12-09 06:36:57 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-12-09 06:36:57 +0000 |
commit | 207757e70d8b2d9aa8335d968fd7ac79796264ab (patch) | |
tree | ae572a9674c8dc7b8a0ae7200e6d4e7c5c7632e8 /gtk/gtkeditable.c | |
parent | af84227184f9cbe2c87f0aa09d5c93564150bb70 (diff) | |
download | gtk+-207757e70d8b2d9aa8335d968fd7ac79796264ab.tar.gz |
Destroy widgets _after_ propagating unrealize signals through the widget
Mon Dec 7 10:27:09 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c: Destroy widgets _after_ propagating unrealize
signals through the widget heirarchy. This is unpleasant, as it
causes more X traffic, but is necessary, because we have to clean
up our Input Contexts before destroying the X windows.
(from matsu-981109-0.patch)
Mon Dec 7 10:18:18 1998 Owen Taylor <otaylor@redhat.com>
Applied gtk-a-higuti-981202-0 :
[ a-higuti@math.sci.hokudai.ac.jp (Akira Higuchi) ]
* gdk/gdk.h gdk/gdk.c
(gdk_mbstowcs): New function. Nearly equals to mbstowcs, but
implemented by a combination of Xlib functions, so
it works even with X_LOCALE.
(gdk_wcstombs): New function.
(g_mbtowc): Removed. No longer needed.
* gdk/gdk.h gdk/gdkfont.c gdk/gdkdraw.c:
Added _wc() variants to gdk_text_width(),
gdk_char_width(), gdk_draw_text(),
* gdk/gdki18n.h
(mblen, mbtowc, wctomb, mbstowcs, wcstombs,
wcslen, wcscpy, wcsncpy):
Removed. No longer needed.
(iswalnum): Removed.
(gdk_iswalnum): New macro.
(gdk_iswspace): New macro.
* gdk/gdktype.h
(GdkWChar): New typedef.
* gtk/gtkentry.h, gtk/gtkentry.c
There are many changes according to the change of the
internal representation of text, from multibyte string
to wide characters.
* gtk/gtkprivate.h, gtk/gtkmain.c
Removed the variable gtk_use_mb and related codes.
* gtk/gtkspinbutton.c
Some changes according to the change of type of entry->text.
* gtk/gtktext.h, gtk/gtktext.c
Changed the internal representation of text. We use GdkWchar
if a fontset is supplied. If not, we use guchar to save
memory.
Diffstat (limited to 'gtk/gtkeditable.c')
-rw-r--r-- | gtk/gtkeditable.c | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/gtk/gtkeditable.c b/gtk/gtkeditable.c index 5335274876..5d8248471e 100644 --- a/gtk/gtkeditable.c +++ b/gtk/gtkeditable.c @@ -75,7 +75,6 @@ static void gtk_editable_set_arg (GtkObject *object, static void gtk_editable_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void gtk_editable_finalize (GtkObject *object); static gint gtk_editable_selection_clear (GtkWidget *widget, GdkEventSelection *event); static void gtk_editable_selection_get (GtkWidget *widget, @@ -96,7 +95,7 @@ static void gtk_editable_real_copy_clipboard (GtkEditable *editable); static void gtk_editable_real_paste_clipboard (GtkEditable *editable); static void gtk_editable_real_set_editable (GtkEditable *editable, gboolean is_editable); - + static GtkWidgetClass *parent_class = NULL; static guint editable_signals[LAST_SIGNAL] = { 0 }; @@ -291,7 +290,6 @@ gtk_editable_class_init (GtkEditableClass *class) object_class->set_arg = gtk_editable_set_arg; object_class->get_arg = gtk_editable_get_arg; - object_class->finalize = gtk_editable_finalize; widget_class->selection_clear_event = gtk_editable_selection_clear; widget_class->selection_received = gtk_editable_selection_received; @@ -399,27 +397,6 @@ gtk_editable_init (GtkEditable *editable) targets, n_targets); } -static void -gtk_editable_finalize (GtkObject *object) -{ - GtkEditable *editable; - - g_return_if_fail (object != NULL); - g_return_if_fail (GTK_IS_EDITABLE (object)); - - editable = GTK_EDITABLE (object); - -#ifdef USE_XIM - if (editable->ic) - { - gdk_ic_destroy (editable->ic); - editable->ic = NULL; - } -#endif - - (* GTK_OBJECT_CLASS (parent_class)->finalize) (object); -} - void gtk_editable_insert_text (GtkEditable *editable, const gchar *new_text, @@ -594,7 +571,9 @@ gtk_editable_selection_get (GtkWidget *widget, str = gtk_editable_get_chars(editable, selection_start_pos, selection_end_pos); - length = selection_end_pos - selection_start_pos; + if (!str) + return; /* Refuse */ + length = strlen (str); } else /* CLIPBOARD */ { @@ -938,3 +917,32 @@ gtk_editable_changed (GtkEditable *editable) gtk_signal_emit (GTK_OBJECT (editable), editable_signals[CHANGED]); } + +#if 0 +static void +gtk_editable_parent_set (GtkWidget *widget, + GtkWidget *old_parent, + GtkWidget *editable) +{ + GtkWidget *parent; + + parent = old_parent; + while (parent) + { + gtk_signal_disconnect_by_func (GTK_OBJECT (parent), + GTK_SIGNAL_FUNC (gtk_editable_parent_set), + editable); + parent = parent->parent; + } + + parent = widget->parent; + while (parent) + { + gtk_signal_connect (GTK_OBJECT (parent), "parent_set", + GTK_SIGNAL_FUNC (gtk_editable_parent_set), + editable); + + parent = parent->parent; + } +} +#endif |