summaryrefslogtreecommitdiff
path: root/gtk/gtkeditable.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1998-12-09 06:36:57 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-12-09 06:36:57 +0000
commit207757e70d8b2d9aa8335d968fd7ac79796264ab (patch)
treeae572a9674c8dc7b8a0ae7200e6d4e7c5c7632e8 /gtk/gtkeditable.c
parentaf84227184f9cbe2c87f0aa09d5c93564150bb70 (diff)
downloadgtk+-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.c58
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