From 5cb538d805d025936c453c80dbcd8e62390d16a1 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Tue, 5 May 1998 21:22:35 +0000 Subject: [PATCH] A guint * was being passed where X expected a Keysym *, and keysyms are Tue May 5 17:04:14 1998 Owen Taylor * gdk/gdk.c (gdk_event_translate): A guint * was being passed where X expected a Keysym *, and keysyms are long's on Alpha Linux. This was causing segfaults in Xlib, apparently because of alignment. --- ChangeLog | 7 +++++++ ChangeLog.pre-2-0 | 7 +++++++ ChangeLog.pre-2-10 | 7 +++++++ ChangeLog.pre-2-2 | 7 +++++++ ChangeLog.pre-2-4 | 7 +++++++ ChangeLog.pre-2-6 | 7 +++++++ ChangeLog.pre-2-8 | 7 +++++++ gdk/gdk.c | 20 ++++++++++---------- gdk/x11/gdkmain-x11.c | 20 ++++++++++---------- 9 files changed, 69 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 743f2bcb24..74b2e8846e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue May 5 17:04:14 1998 Owen Taylor + + * gdk/gdk.c (gdk_event_translate): A guint * was + being passed where X expected a Keysym *, and + keysyms are long's on Alpha Linux. This was causing + segfaults in Xlib, apparently because of alignment. + Tue May 5 11:03:00 1998 Owen Taylor * gtk/gtkselection.c (gtk_selection_clear): Fixed diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 743f2bcb24..74b2e8846e 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Tue May 5 17:04:14 1998 Owen Taylor + + * gdk/gdk.c (gdk_event_translate): A guint * was + being passed where X expected a Keysym *, and + keysyms are long's on Alpha Linux. This was causing + segfaults in Xlib, apparently because of alignment. + Tue May 5 11:03:00 1998 Owen Taylor * gtk/gtkselection.c (gtk_selection_clear): Fixed diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 743f2bcb24..74b2e8846e 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Tue May 5 17:04:14 1998 Owen Taylor + + * gdk/gdk.c (gdk_event_translate): A guint * was + being passed where X expected a Keysym *, and + keysyms are long's on Alpha Linux. This was causing + segfaults in Xlib, apparently because of alignment. + Tue May 5 11:03:00 1998 Owen Taylor * gtk/gtkselection.c (gtk_selection_clear): Fixed diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 743f2bcb24..74b2e8846e 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Tue May 5 17:04:14 1998 Owen Taylor + + * gdk/gdk.c (gdk_event_translate): A guint * was + being passed where X expected a Keysym *, and + keysyms are long's on Alpha Linux. This was causing + segfaults in Xlib, apparently because of alignment. + Tue May 5 11:03:00 1998 Owen Taylor * gtk/gtkselection.c (gtk_selection_clear): Fixed diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 743f2bcb24..74b2e8846e 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Tue May 5 17:04:14 1998 Owen Taylor + + * gdk/gdk.c (gdk_event_translate): A guint * was + being passed where X expected a Keysym *, and + keysyms are long's on Alpha Linux. This was causing + segfaults in Xlib, apparently because of alignment. + Tue May 5 11:03:00 1998 Owen Taylor * gtk/gtkselection.c (gtk_selection_clear): Fixed diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 743f2bcb24..74b2e8846e 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Tue May 5 17:04:14 1998 Owen Taylor + + * gdk/gdk.c (gdk_event_translate): A guint * was + being passed where X expected a Keysym *, and + keysyms are long's on Alpha Linux. This was causing + segfaults in Xlib, apparently because of alignment. + Tue May 5 11:03:00 1998 Owen Taylor * gtk/gtkselection.c (gtk_selection_clear): Fixed diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 743f2bcb24..74b2e8846e 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Tue May 5 17:04:14 1998 Owen Taylor + + * gdk/gdk.c (gdk_event_translate): A guint * was + being passed where X expected a Keysym *, and + keysyms are long's on Alpha Linux. This was causing + segfaults in Xlib, apparently because of alignment. + Tue May 5 11:03:00 1998 Owen Taylor * gtk/gtkselection.c (gtk_selection_clear): Fixed diff --git a/gdk/gdk.c b/gdk/gdk.c index 1b5dc599d7..7541af3c7b 100644 --- a/gdk/gdk.c +++ b/gdk/gdk.c @@ -1685,7 +1685,8 @@ gdk_event_translate (GdkEvent *event, GdkWindow *window; GdkWindowPrivate *window_private; - XComposeStatus compose; + static XComposeStatus compose; + KeySym keysym; int charcount; #ifdef USE_XIM static gchar* buf = NULL; @@ -1767,16 +1768,16 @@ gdk_event_translate (GdkEvent *event, buf_len = 128; buf = g_new (gchar, buf_len); } + keysym = GDK_VoidSymbol; + if (xim_using == TRUE && xim_ic) { Status status; /* Clear keyval. Depending on status, may not be set */ - event->key.keyval = GDK_VoidSymbol; charcount = XmbLookupString(xim_ic->xic, &xevent->xkey, buf, buf_len-1, - (KeySym*) &event->key.keyval, - &status); + &keysym, &status); if (status == XBufferOverflow) { /* retry */ /* alloc adequate size of buffer */ @@ -1789,8 +1790,7 @@ gdk_event_translate (GdkEvent *event, charcount = XmbLookupString (xim_ic->xic, &xevent->xkey, buf, buf_len-1, - (KeySym*) &event->key.keyval, - &status); + &keysym, &status); } if (status == XLookupNone) { @@ -1800,13 +1800,13 @@ gdk_event_translate (GdkEvent *event, } else charcount = XLookupString (&xevent->xkey, buf, buf_len, - (KeySym*) &event->key.keyval, - &compose); + &keysym, &compose); #else charcount = XLookupString (&xevent->xkey, buf, 16, - (KeySym*) &event->key.keyval, - &compose); + &keysym, &compose); #endif + event->key.keyval = keysym; + if (charcount > 0 && buf[charcount-1] == '\0') charcount --; else diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c index 1b5dc599d7..7541af3c7b 100644 --- a/gdk/x11/gdkmain-x11.c +++ b/gdk/x11/gdkmain-x11.c @@ -1685,7 +1685,8 @@ gdk_event_translate (GdkEvent *event, GdkWindow *window; GdkWindowPrivate *window_private; - XComposeStatus compose; + static XComposeStatus compose; + KeySym keysym; int charcount; #ifdef USE_XIM static gchar* buf = NULL; @@ -1767,16 +1768,16 @@ gdk_event_translate (GdkEvent *event, buf_len = 128; buf = g_new (gchar, buf_len); } + keysym = GDK_VoidSymbol; + if (xim_using == TRUE && xim_ic) { Status status; /* Clear keyval. Depending on status, may not be set */ - event->key.keyval = GDK_VoidSymbol; charcount = XmbLookupString(xim_ic->xic, &xevent->xkey, buf, buf_len-1, - (KeySym*) &event->key.keyval, - &status); + &keysym, &status); if (status == XBufferOverflow) { /* retry */ /* alloc adequate size of buffer */ @@ -1789,8 +1790,7 @@ gdk_event_translate (GdkEvent *event, charcount = XmbLookupString (xim_ic->xic, &xevent->xkey, buf, buf_len-1, - (KeySym*) &event->key.keyval, - &status); + &keysym, &status); } if (status == XLookupNone) { @@ -1800,13 +1800,13 @@ gdk_event_translate (GdkEvent *event, } else charcount = XLookupString (&xevent->xkey, buf, buf_len, - (KeySym*) &event->key.keyval, - &compose); + &keysym, &compose); #else charcount = XLookupString (&xevent->xkey, buf, 16, - (KeySym*) &event->key.keyval, - &compose); + &keysym, &compose); #endif + event->key.keyval = keysym; + if (charcount > 0 && buf[charcount-1] == '\0') charcount --; else