fix bug in key handling code: toupper() shouldn't be applied to the values outside of the ASCII range (patch 631236)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17715 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-11-04 23:05:00 +00:00
parent 5b47d4f175
commit 8bbb50ba61
4 changed files with 49 additions and 78 deletions

View File

@@ -3336,6 +3336,11 @@ bool wxWindowGTK::Show( bool show )
else else
gtk_widget_hide( m_widget ); gtk_widget_hide( m_widget );
wxShowEvent eventShow(GetId(), show);
eventShow.m_eventObject = this;
GetEventHandler()->ProcessEvent(eventShow);
return TRUE; return TRUE;
} }

View File

@@ -3336,6 +3336,11 @@ bool wxWindowGTK::Show( bool show )
else else
gtk_widget_hide( m_widget ); gtk_widget_hide( m_widget );
wxShowEvent eventShow(GetId(), show);
eventShow.m_eventObject = this;
GetEventHandler()->ProcessEvent(eventShow);
return TRUE; return TRUE;
} }

View File

@@ -2201,33 +2201,8 @@ static void wxCanvasInputEvent(Widget drawingArea,
} }
case KeyPress: case KeyPress:
{ {
KeySym keySym; wxKeyEvent event (wxEVT_CHAR);
static char buf[100]; if (wxTranslateKeyEvent (event, canvas, (Widget) 0, &local_event))
#if 0
XComposeStatus compose;
(void) XLookupString ((XKeyEvent *) & local_event, buf, 20, &keySym, &compose);
#endif // 0
(void) XLookupString ((XKeyEvent *) & local_event, buf, 20, &keySym, NULL);
int id = wxCharCodeXToWX (keySym);
wxEventType eventType = wxEVT_CHAR;
wxKeyEvent event (eventType);
if (local_event.xkey.state & ShiftMask)
event.m_shiftDown = TRUE;
if (local_event.xkey.state & ControlMask)
event.m_controlDown = TRUE;
if (local_event.xkey.state & Mod3Mask)
event.m_altDown = TRUE;
if (local_event.xkey.state & Mod1Mask)
event.m_metaDown = TRUE;
event.SetEventObject(canvas);
event.m_keyCode = id;
event.SetTimestamp(local_event.xkey.time);
if (id > -1)
{ {
// Implement wxFrame::OnCharHook by checking ancestor. // Implement wxFrame::OnCharHook by checking ancestor.
wxWindow *parent = canvas->GetParent(); wxWindow *parent = canvas->GetParent();
@@ -2256,26 +2231,8 @@ static void wxCanvasInputEvent(Widget drawingArea,
} }
case KeyRelease: case KeyRelease:
{ {
static char buf[100];
KeySym keySym;
(void) XLookupString ((XKeyEvent *) & local_event, buf, 20, &keySym, NULL);
int id = wxCharCodeXToWX (keySym);
wxKeyEvent event (wxEVT_KEY_UP); wxKeyEvent event (wxEVT_KEY_UP);
if (wxTranslateKeyEvent (event, canvas, (Widget) 0, &local_event))
if (local_event.xkey.state & ShiftMask)
event.m_shiftDown = TRUE;
if (local_event.xkey.state & ControlMask)
event.m_controlDown = TRUE;
if (local_event.xkey.state & Mod3Mask)
event.m_altDown = TRUE;
if (local_event.xkey.state & Mod1Mask)
event.m_metaDown = TRUE;
event.SetEventObject(canvas);
event.m_keyCode = id;
event.SetTimestamp(local_event.xkey.time);
if (id > -1)
{ {
canvas->GetEventHandler()->ProcessEvent (event); canvas->GetEventHandler()->ProcessEvent (event);
} }
@@ -2828,6 +2785,10 @@ bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Widget WXUNUSED(wid
#endif // 0 #endif // 0
(void) XLookupString ((XKeyEvent *) xevent, buf, 20, &keySym, NULL); (void) XLookupString ((XKeyEvent *) xevent, buf, 20, &keySym, NULL);
int id = wxCharCodeXToWX (keySym); int id = wxCharCodeXToWX (keySym);
// id may be WXK_xxx code - these are outside ASCII range, so we
// can't just use toupper() on id
if (id >= 'a' && id <= 'z')
id = toupper(id);
if (xevent->xkey.state & ShiftMask) if (xevent->xkey.state & ShiftMask)
wxevent.m_shiftDown = TRUE; wxevent.m_shiftDown = TRUE;

View File

@@ -1474,23 +1474,23 @@ bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Window WXUNUSED(win
KeySym keySym; KeySym keySym;
(void) XLookupString ((XKeyEvent *) xevent, buf, 20, &keySym, NULL); (void) XLookupString ((XKeyEvent *) xevent, buf, 20, &keySym, NULL);
int id = wxCharCodeXToWX (keySym); int id = wxCharCodeXToWX (keySym);
// id may be WXK_xxx code - these are outside ASCII range, so we
// can't just use toupper() on id
if (id >= 'a' && id <= 'z')
id = toupper(id);
wxevent.m_shiftDown = XKeyEventShiftIsDown(xevent); wxevent.m_shiftDown = XKeyEventShiftIsDown(xevent);
wxevent.m_controlDown = XKeyEventCtrlIsDown(xevent); wxevent.m_controlDown = XKeyEventCtrlIsDown(xevent);
wxevent.m_altDown = XKeyEventAltIsDown(xevent); wxevent.m_altDown = XKeyEventAltIsDown(xevent);
wxevent.m_metaDown = XKeyEventMetaIsDown(xevent); wxevent.m_metaDown = XKeyEventMetaIsDown(xevent);
wxevent.SetEventObject(win); wxevent.SetEventObject(win);
wxevent.m_keyCode = wxToupper(id); wxevent.m_keyCode = id;
wxevent.SetTimestamp(XKeyEventGetTime(xevent)); wxevent.SetTimestamp(XKeyEventGetTime(xevent));
wxevent.m_x = XKeyEventGetX(xevent); wxevent.m_x = XKeyEventGetX(xevent);
wxevent.m_y = XKeyEventGetY(xevent); wxevent.m_y = XKeyEventGetY(xevent);
if (id > -1) return id > -1;
return TRUE;
else
return FALSE;
break;
} }
default: default:
break; break;