]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/app.cpp
Mini-fix for wxStaticBitmap
[wxWidgets.git] / src / motif / app.cpp
index 48519f37d29409e8bac7bb9328592fc1b97636f3..5ef52fda83b55722a2873b2d2a6ec5f36339a665 100644 (file)
@@ -10,7 +10,8 @@
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-#pragma implementation "app.h"
+    #pragma implementation "app.h"
+    #pragma implementation "appbase.h"
 #endif
 
 #include "wx/frame.h"
 #include "wx/log.h"
 #include "wx/module.h"
 #include "wx/memory.h"
+#include "wx/log.h"
+#include "wx/intl.h"
 
 #if wxUSE_THREADS
-#include "wx/thread.h"
+    #include "wx/thread.h"
 #endif
 
 #if wxUSE_WX_RESOURCES
 
 extern char *wxBuffer;
 extern wxList wxPendingDelete;
+
 #if wxUSE_THREADS
-extern wxList wxPendingEvents;
-extern wxList wxPendingEventsLocker;
-#endif
+extern wxList *wxPendingEvents;
+extern wxCriticalSection *wxPendingEventsLocker;
+#endif // wxUSE_THREADS
 
 wxApp *wxTheApp = NULL;
 
@@ -74,6 +78,13 @@ bool wxApp::Initialize()
 
     wxClassInfo::InitializeClasses();
 
+    // GL: I'm annoyed ... I don't know where to put this and I don't want to
+    // create a module for that as it's part of the core.
+#if wxUSE_THREADS
+    wxPendingEvents = new wxList();
+    wxPendingEventsLocker = new wxCriticalSection();
+#endif
+
     wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
     wxTheColourDatabase->Initialize();
 
@@ -151,6 +162,13 @@ void wxApp::CleanUp()
     delete wxTheApp;
     wxTheApp = NULL;
 
+    // GL: I'm annoyed ... I don't know where to put this and I don't want to
+    // create a module for that as it's part of the core.
+#if wxUSE_THREADS
+    delete wxPendingEvents;
+    delete wxPendingEventsLocker;
+#endif
+
 #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
     // At this point we want to check if there are any memory
     // blocks that aren't part of the wxDebugContext itself,
@@ -244,7 +262,7 @@ int wxEntry( int argc, char *argv[] )
 };
 
 // Static member initialization
-wxAppInitializerFunction wxApp::m_appInitFn = (wxAppInitializerFunction) NULL;
+wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL;
 
 wxApp::wxApp()
 {
@@ -255,9 +273,7 @@ wxApp::wxApp()
     m_appName = "";
     argc = 0;
     argv = NULL;
-    m_printMode = wxPRINT_POSTSCRIPT;
     m_exitOnFrameDelete = TRUE;
-    m_auto3D = TRUE;
 
     m_mainColormap = (WXColormap) NULL;
     m_appContext = (WXAppContext) NULL;
@@ -322,10 +338,24 @@ void wxApp::ProcessXEvent(WXEvent* _event)
 {
     XEvent* event = (XEvent*) _event;
 
-    if ((event->type == KeyPress) && CheckForAccelerator(_event))
+    if (event->type == KeyPress)
     {
-        // Do nothing! We intercepted and processed the event as an accelerator.
+      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;
+      }
     }
     else if (event->type == PropertyNotify)
     {
@@ -334,10 +364,10 @@ void wxApp::ProcessXEvent(WXEvent* _event)
     }
     else if (event->type == ResizeRequest)
     {
-    /* Terry Gitnick <terryg@scientech.com> - 1/21/98
-    * If resize event, don't resize until the last resize event for this
-    * window is recieved. Prevents flicker as windows are resized.
-        */
+        /* Terry Gitnick <terryg@scientech.com> - 1/21/98
+         * If resize event, don't resize until the last resize event for this
+         * window is recieved. Prevents flicker as windows are resized.
+         */
 
         Display *disp = XtDisplay((Widget) wxTheApp->GetTopLevelWidget());
         Window win = event->xany.window;
@@ -494,9 +524,9 @@ void wxApp::DeletePendingObjects()
 
 #if wxUSE_THREADS
 void wxApp::ProcessPendingEvents()
-
-    wxNode *node = wxPendingEvents.First();
-    wxCriticalSectionLocker locker(wxPendingEventsLocker);
+{
+    wxNode *node = wxPendingEvents->First();
+    wxCriticalSectionLocker locker(*wxPendingEventsLocker);
 
     while (node)
     {
@@ -505,25 +535,10 @@ void wxApp::ProcessPendingEvents()
         handler->ProcessPendingEvents();
 
         delete node;
-        node = wxPendingEvents.First();
+        node = wxPendingEvents->First();
     }
-
-#endif
-
-wxLog* wxApp::CreateLogTarget()
-{
-    return new wxLogGui;
-}
-
-wxWindow* wxApp::GetTopWindow() const
-{
-    if (m_topWindow)
-        return m_topWindow;
-    else if (wxTopLevelWindows.GetCount() > 0)
-        return wxTopLevelWindows.GetFirst()->GetData();
-    else
-        return NULL;
 }
+#endif // wxUSE_THREADS
 
 // Create an application context
 bool wxApp::OnInitGui()
@@ -614,6 +629,37 @@ bool wxApp::CheckForAccelerator(WXEvent* event)
     return FALSE;
 }
 
+bool wxApp::CheckForKeyDown(WXEvent* event)
+{
+    XEvent* xEvent = (XEvent*) event;
+    // VZ: this code doesn't work for me because it never finds the correct
+    //     window. Also, if we go this way, we should generate KEY_UP and
+    //     CHAR events as well, not only KEY_DOWN.
+#if 0
+    if (xEvent->xany.type == KeyPress)
+    {
+      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);
+
+      win->ProcessEvent( keyEvent );
+      return (keyEvent.GetSkipped() != TRUE);
+    }
+#endif // 0
+
+    return FALSE;
+}
+
 void wxExit()
 {
     int retValue = 0;
@@ -642,3 +688,32 @@ bool wxYield()
     return TRUE;
 }
 
+// TODO use XmGetPixmap (?) to get the really standard icons!
+
+#include "wx/generic/info.xpm"
+#include "wx/generic/error.xpm"
+#include "wx/generic/question.xpm"
+#include "wx/generic/warning.xpm"
+
+wxIcon
+wxApp::GetStdIcon(int which) const
+{
+    switch(which)
+    {
+        case wxICON_INFORMATION:
+            return wxIcon(info_xpm);
+
+        case wxICON_QUESTION:
+            return wxIcon(question_xpm);
+
+        case wxICON_EXCLAMATION:
+            return wxIcon(warning_xpm);
+
+        default:
+            wxFAIL_MSG("requested non existent standard icon");
+            // still fall through
+
+        case wxICON_HAND:
+            return wxIcon(error_xpm);
+    }
+}