]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/app.cpp
Added makeg295.env file for building with gcc-2.95/mingw
[wxWidgets.git] / src / motif / app.cpp
index 8845b9782f03a676015d85228e9bd8c33bd8beda..72ab9cb7b27d040ce1901ad2839b4e37461e0e33 100644 (file)
@@ -346,22 +346,43 @@ void wxApp::ProcessXEvent(WXEvent* _event)
                    widget, XtParent(widget));
 #endif // DEBUG
 
-      if (CheckForAccelerator(_event))
-      {
-        // Do nothing! We intercepted and processed the event as an
-        // accelerator.
-        return;
-      }
-      else if (CheckForKeyDown(_event))
-      {
-        // We intercepted and processed the key down event
-        return;
-      }
-      else
-      {
-        XtDispatchEvent(event);
-        return;
-      }
+       if (CheckForAccelerator(_event))
+       {
+            // Do nothing! We intercepted and processed the event as an
+            // accelerator.
+            return;
+       }
+#if 1
+        // It seemed before that this hack was redundant and 
+        // key down events were being generated by wxCanvasInputEvent.
+        // But no longer - why ???
+        //
+       else if (CheckForKeyDown(_event))
+       {
+            // We intercepted and processed the key down event
+            return;
+       }
+#endif        
+       else
+       {
+            XtDispatchEvent(event);
+           return;
+       }
+    }
+    else if (event->type == KeyRelease)
+    {
+        // TODO: work out why we still need this !  -michael
+        //
+        if (CheckForKeyUp(_event))
+       {
+           // We intercepted and processed the key up event
+           return;
+       }
+       else
+       {
+           XtDispatchEvent(event);
+           return;
+       }
     }
     else if (event->type == PropertyNotify)
     {
@@ -640,21 +661,46 @@ bool wxApp::CheckForKeyDown(WXEvent* event)
     XEvent* xEvent = (XEvent*) event;
     if (xEvent->xany.type == KeyPress)
     {
-      Widget widget = XtWindowToWidget((Display*) wxGetDisplay(),
-                                       xEvent->xany.window);
-      wxWindow* win = NULL;
+        Widget widget = XtWindowToWidget((Display*) wxGetDisplay(),
+                                        xEvent->xany.window);
+       wxWindow* win = NULL;
+
+       // Find the first wxWindow that corresponds to this event window
+       while (widget && !(win = wxGetWindowFromTable(widget)))
+            widget = XtParent(widget);
+
+       if (!widget || !win)
+            return FALSE;
+
+       wxKeyEvent keyEvent(wxEVT_KEY_DOWN);
+       wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent);
+
+       return win->ProcessEvent( keyEvent );
+    }
+
+    return FALSE;
+}
+
+bool wxApp::CheckForKeyUp(WXEvent* event)
+{
+    XEvent* xEvent = (XEvent*) event;
+    if (xEvent->xany.type == KeyRelease)
+    {
+        Widget widget = XtWindowToWidget((Display*) wxGetDisplay(),
+                                        xEvent->xany.window);
+       wxWindow* win = NULL;
 
-      // Find the first wxWindow that corresponds to this event window
-      while (widget && !(win = wxGetWindowFromTable(widget)))
-          widget = XtParent(widget);
+       // Find the first wxWindow that corresponds to this event window
+       while (widget && !(win = wxGetWindowFromTable(widget)))
+            widget = XtParent(widget);
 
-      if (!widget || !win)
-          return FALSE;
+       if (!widget || !win)
+            return FALSE;
 
-      wxKeyEvent keyEvent(wxEVT_KEY_DOWN);
-      wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent);
+       wxKeyEvent keyEvent(wxEVT_KEY_UP);
+       wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent);
 
-      return win->ProcessEvent( keyEvent );
+       return win->ProcessEvent( keyEvent );
     }
 
     return FALSE;