]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/utils.cpp
Fix for crash when the child has no menu
[wxWidgets.git] / src / motif / utils.cpp
index c43fe3189b5573b097002ad572f2f80ed9259287..6f80f461de009820c8357dee52dea35aae4d2c30 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
 #ifdef __VMS
 #define XtDisplay XTDISPLAY
 #endif
+
 #include "wx/setup.h"
 #include "wx/utils.h"
+#include "wx/apptrait.h"
 #include "wx/app.h"
 #include "wx/dcmemory.h"
 #include "wx/bitmap.h"
@@ -40,6 +45,8 @@
 #include "wx/unix/execute.h"
 
 #include <Xm/Xm.h>
+#include <Xm/Frame.h>
+
 #include "wx/motif/private.h"
 
 #if wxUSE_RESOURCES
@@ -124,25 +131,34 @@ int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
 // ----------------------------------------------------------------------------
 
 // Emit a beeeeeep
+#ifndef __EMX__
+// on OS/2, we use the wxBell from wxBase library (src/os2/utils.cpp)
 void wxBell()
 {
     // Use current setting for the bell
     XBell (wxGlobalDisplay(), 0);
 }
+#endif
 
-int wxGetOsVersion(int *majorVsn, int *minorVsn)
+wxToolkitInfo& wxGUIAppTraits::GetToolkitInfo()
 {
+    static wxToolkitInfo info;
+
+    info.shortName = _T("motif");
+    info.name = _T("wxMotif");
+#ifdef __WXUNIVERSAL__
+    info.shortName << _T("univ");
+    info.name << _T("/wxUniversal");
+#endif
     // FIXME TODO
     // This code is WRONG!! Does NOT return the
     // Motif version of the libs but the X protocol
     // version!
     Display *display = wxGlobalDisplay();
-    if (majorVsn)
-        *majorVsn = ProtocolVersion (display);
-    if (minorVsn)
-        *minorVsn = ProtocolRevision (display);
-
-    return wxMOTIF_X;
+    info.versionMajor = ProtocolVersion (display);
+    info.versionMinor = ProtocolRevision (display);
+    info.os = wxMOTIF_X;
+    return info;
 }
 
 // ----------------------------------------------------------------------------
@@ -618,249 +634,6 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
     return wxGenericFindWindowAtPoint(pt);
 }
 
-// ----------------------------------------------------------------------------
-// keycode translations
-// ----------------------------------------------------------------------------
-
-#include <X11/keysym.h>
-
-// FIXME what about tables??
-
-int wxCharCodeXToWX(KeySym keySym)
-{
-    int id;
-    switch (keySym)
-    {
-        case XK_Shift_L:
-        case XK_Shift_R:
-            id = WXK_SHIFT; break;
-        case XK_Control_L:
-        case XK_Control_R:
-            id = WXK_CONTROL; break;
-        case XK_BackSpace:
-            id = WXK_BACK; break;
-        case XK_Delete:
-            id = WXK_DELETE; break;
-        case XK_Clear:
-            id = WXK_CLEAR; break;
-        case XK_Tab:
-            id = WXK_TAB; break;
-        case XK_numbersign:
-            id = '#'; break;
-        case XK_Return:
-            id = WXK_RETURN; break;
-        case XK_Escape:
-            id = WXK_ESCAPE; break;
-        case XK_Pause:
-        case XK_Break:
-            id = WXK_PAUSE; break;
-        case XK_Num_Lock:
-            id = WXK_NUMLOCK; break;
-        case XK_Scroll_Lock:
-            id = WXK_SCROLL; break;
-
-        case XK_Home:
-            id = WXK_HOME; break;
-        case XK_End:
-            id = WXK_END; break;
-        case XK_Left:
-            id = WXK_LEFT; break;
-        case XK_Right:
-            id = WXK_RIGHT; break;
-        case XK_Up:
-            id = WXK_UP; break;
-        case XK_Down:
-            id = WXK_DOWN; break;
-        case XK_Next:
-            id = WXK_NEXT; break;
-        case XK_Prior:
-            id = WXK_PRIOR; break;
-        case XK_Menu:
-            id = WXK_MENU; break;
-        case XK_Select:
-            id = WXK_SELECT; break;
-        case XK_Cancel:
-            id = WXK_CANCEL; break;
-        case XK_Print:
-            id = WXK_PRINT; break;
-        case XK_Execute:
-            id = WXK_EXECUTE; break;
-        case XK_Insert:
-            id = WXK_INSERT; break;
-        case XK_Help:
-            id = WXK_HELP; break;
-
-        case XK_KP_Multiply:
-            id = WXK_MULTIPLY; break;
-        case XK_KP_Add:
-            id = WXK_ADD; break;
-        case XK_KP_Subtract:
-            id = WXK_SUBTRACT; break;
-        case XK_KP_Divide:
-            id = WXK_DIVIDE; break;
-        case XK_KP_Decimal:
-            id = WXK_DECIMAL; break;
-        case XK_KP_Equal:
-            id = '='; break;
-        case XK_KP_Space:
-            id = ' '; break;
-        case XK_KP_Tab:
-            id = WXK_TAB; break;
-        case XK_KP_Enter:
-            id = WXK_RETURN; break;
-        case XK_KP_0:
-            id = WXK_NUMPAD0; break;
-        case XK_KP_1:
-            id = WXK_NUMPAD1; break;
-        case XK_KP_2:
-            id = WXK_NUMPAD2; break;
-        case XK_KP_3:
-            id = WXK_NUMPAD3; break;
-        case XK_KP_4:
-            id = WXK_NUMPAD4; break;
-        case XK_KP_5:
-            id = WXK_NUMPAD5; break;
-        case XK_KP_6:
-            id = WXK_NUMPAD6; break;
-        case XK_KP_7:
-            id = WXK_NUMPAD7; break;
-        case XK_KP_8:
-            id = WXK_NUMPAD8; break;
-        case XK_KP_9:
-            id = WXK_NUMPAD9; break;
-        case XK_F1:
-            id = WXK_F1; break;
-        case XK_F2:
-            id = WXK_F2; break;
-        case XK_F3:
-            id = WXK_F3; break;
-        case XK_F4:
-            id = WXK_F4; break;
-        case XK_F5:
-            id = WXK_F5; break;
-        case XK_F6:
-            id = WXK_F6; break;
-        case XK_F7:
-            id = WXK_F7; break;
-        case XK_F8:
-            id = WXK_F8; break;
-        case XK_F9:
-            id = WXK_F9; break;
-        case XK_F10:
-            id = WXK_F10; break;
-        case XK_F11:
-            id = WXK_F11; break;
-        case XK_F12:
-            id = WXK_F12; break;
-        case XK_F13:
-            id = WXK_F13; break;
-        case XK_F14:
-            id = WXK_F14; break;
-        case XK_F15:
-            id = WXK_F15; break;
-        case XK_F16:
-            id = WXK_F16; break;
-        case XK_F17:
-            id = WXK_F17; break;
-        case XK_F18:
-            id = WXK_F18; break;
-        case XK_F19:
-            id = WXK_F19; break;
-        case XK_F20:
-            id = WXK_F20; break;
-        case XK_F21:
-            id = WXK_F21; break;
-        case XK_F22:
-            id = WXK_F22; break;
-        case XK_F23:
-            id = WXK_F23; break;
-        case XK_F24:
-            id = WXK_F24; break;
-        default:
-            id = (keySym <= 255) ? (int)keySym : -1;
-    }
-
-    return id;
-}
-
-KeySym wxCharCodeWXToX(int id)
-{
-    KeySym keySym;
-
-    switch (id)
-    {
-        case WXK_CANCEL:            keySym = XK_Cancel; break;
-        case WXK_BACK:              keySym = XK_BackSpace; break;
-        case WXK_TAB:            keySym = XK_Tab; break;
-        case WXK_CLEAR:        keySym = XK_Clear; break;
-        case WXK_RETURN:        keySym = XK_Return; break;
-        case WXK_SHIFT:        keySym = XK_Shift_L; break;
-        case WXK_CONTROL:        keySym = XK_Control_L; break;
-        case WXK_MENU :        keySym = XK_Menu; break;
-        case WXK_PAUSE:        keySym = XK_Pause; break;
-        case WXK_ESCAPE:        keySym = XK_Escape; break;
-        case WXK_SPACE:        keySym = ' '; break;
-        case WXK_PRIOR:        keySym = XK_Prior; break;
-        case WXK_NEXT :        keySym = XK_Next; break;
-        case WXK_END:        keySym = XK_End; break;
-        case WXK_HOME :        keySym = XK_Home; break;
-        case WXK_LEFT :        keySym = XK_Left; break;
-        case WXK_UP:        keySym = XK_Up; break;
-        case WXK_RIGHT:        keySym = XK_Right; break;
-        case WXK_DOWN :        keySym = XK_Down; break;
-        case WXK_SELECT:        keySym = XK_Select; break;
-        case WXK_PRINT:        keySym = XK_Print; break;
-        case WXK_EXECUTE:        keySym = XK_Execute; break;
-        case WXK_INSERT:        keySym = XK_Insert; break;
-        case WXK_DELETE:        keySym = XK_Delete; break;
-        case WXK_HELP :        keySym = XK_Help; break;
-        case WXK_NUMPAD0:        keySym = XK_KP_0; break;
-        case WXK_NUMPAD1:        keySym = XK_KP_1; break;
-        case WXK_NUMPAD2:        keySym = XK_KP_2; break;
-        case WXK_NUMPAD3:        keySym = XK_KP_3; break;
-        case WXK_NUMPAD4:        keySym = XK_KP_4; break;
-        case WXK_NUMPAD5:        keySym = XK_KP_5; break;
-        case WXK_NUMPAD6:        keySym = XK_KP_6; break;
-        case WXK_NUMPAD7:        keySym = XK_KP_7; break;
-        case WXK_NUMPAD8:        keySym = XK_KP_8; break;
-        case WXK_NUMPAD9:        keySym = XK_KP_9; break;
-        case WXK_MULTIPLY:        keySym = XK_KP_Multiply; break;
-        case WXK_ADD:        keySym = XK_KP_Add; break;
-        case WXK_SUBTRACT:        keySym = XK_KP_Subtract; break;
-        case WXK_DECIMAL:        keySym = XK_KP_Decimal; break;
-        case WXK_DIVIDE:        keySym = XK_KP_Divide; break;
-        case WXK_F1:        keySym = XK_F1; break;
-        case WXK_F2:        keySym = XK_F2; break;
-        case WXK_F3:        keySym = XK_F3; break;
-        case WXK_F4:        keySym = XK_F4; break;
-        case WXK_F5:        keySym = XK_F5; break;
-        case WXK_F6:        keySym = XK_F6; break;
-        case WXK_F7:        keySym = XK_F7; break;
-        case WXK_F8:        keySym = XK_F8; break;
-        case WXK_F9:        keySym = XK_F9; break;
-        case WXK_F10:        keySym = XK_F10; break;
-        case WXK_F11:        keySym = XK_F11; break;
-        case WXK_F12:        keySym = XK_F12; break;
-        case WXK_F13:        keySym = XK_F13; break;
-        case WXK_F14:        keySym = XK_F14; break;
-        case WXK_F15:        keySym = XK_F15; break;
-        case WXK_F16:        keySym = XK_F16; break;
-        case WXK_F17:        keySym = XK_F17; break;
-        case WXK_F18:        keySym = XK_F18; break;
-        case WXK_F19:        keySym = XK_F19; break;
-        case WXK_F20:        keySym = XK_F20; break;
-        case WXK_F21:        keySym = XK_F21; break;
-        case WXK_F22:        keySym = XK_F22; break;
-        case WXK_F23:        keySym = XK_F23; break;
-        case WXK_F24:        keySym = XK_F24; break;
-        case WXK_NUMLOCK:    keySym = XK_Num_Lock; break;
-        case WXK_SCROLL:     keySym = XK_Scroll_Lock; break;
-        default:             keySym = id <= 255 ? (KeySym)id : 0;
-    }
-
-    return keySym;
-}
-
 // ----------------------------------------------------------------------------
 // Some colour manipulation routines
 // ----------------------------------------------------------------------------
@@ -1211,3 +984,46 @@ wxBitmap wxCreateMaskedBitmap(const wxBitmap& bitmap, wxColour& colour)
 
     return newBitmap;
 }
+
+// ----------------------------------------------------------------------------
+// Miscellaneous functions
+// ----------------------------------------------------------------------------
+
+WXWidget wxCreateBorderWidget( WXWidget parent, long style )
+{
+    Widget borderWidget = (Widget)NULL, parentWidget = (Widget)parent;
+
+    if (style & wxSIMPLE_BORDER)
+    {
+        borderWidget = XtVaCreateManagedWidget
+                                   (
+                                    "simpleBorder",
+                                    xmFrameWidgetClass, parentWidget,
+                                    XmNshadowType, XmSHADOW_ETCHED_IN,
+                                    XmNshadowThickness, 1,
+                                    NULL
+                                   );
+    }
+    else if (style & wxSUNKEN_BORDER)
+    {
+        borderWidget = XtVaCreateManagedWidget
+                                   (
+                                    "sunkenBorder",
+                                    xmFrameWidgetClass, parentWidget,
+                                    XmNshadowType, XmSHADOW_IN,
+                                    NULL
+                                   );
+    }
+    else if (style & wxRAISED_BORDER)
+    {
+        borderWidget = XtVaCreateManagedWidget
+                                   (
+                                    "raisedBorder",
+                                    xmFrameWidgetClass, parentWidget,
+                                    XmNshadowType, XmSHADOW_OUT,
+                                    NULL
+                                   );
+    }
+
+    return borderWidget;
+}