]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/app.cpp
merged deleted code back
[wxWidgets.git] / src / x11 / app.cpp
index a1eb5192b5d7f1a243bc7ecb72249883c1818ed0..74fb19c9af6c29fad664456ec36fea48a19cf935 100644 (file)
@@ -105,6 +105,10 @@ bool wxApp::Initialize()
 {
     wxClassInfo::InitializeClasses();
 
+#if wxUSE_INTL
+    wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
+#endif
+
     // 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
@@ -200,7 +204,7 @@ int wxEntryStart( int& argc, char *argv[] )
     // We can't use wxCmdLineParser or OnInitCmdLine and friends because
     // we have to create the Display earlier. If we can find a way to
     // use the wxAppBase API then I'll be quite happy to change it.
-    g_newArgv = new wxChar*[argc];
+    g_newArgv = new wxChar*[argc + 1];
     g_newArgc = 0;
     int i;
     for (i = 0; i < argc; i++)
@@ -249,7 +253,8 @@ int wxEntryStart( int& argc, char *argv[] )
         g_newArgv[g_newArgc] = argv[i];
         g_newArgc ++;
     }
-
+    g_newArgv[g_newArgc] = NULL;
+    
     Display* xdisplay = NULL;
     if (displayName.IsEmpty())
         xdisplay = XOpenDisplay(NULL);
@@ -384,21 +389,17 @@ wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NUL
 
 wxApp::wxApp()
 {
-    m_topWindow = NULL;
-    wxTheApp = this;
-    m_className = "";
-    m_wantDebugOutput = TRUE ;
-    m_appName = "";
+    // TODO: parse the command line
     argc = 0;
     argv = NULL;
-    m_exitOnFrameDelete = TRUE;
+
     m_mainColormap = (WXColormap) NULL;
     m_topLevelWidget = (WXWindow) NULL;
     m_maxRequestSize = 0;
     m_mainLoop = NULL;
     m_showIconic = FALSE;
     m_initialSize = wxDefaultSize;
-    
+
 #if !wxUSE_NANOX
     m_visualColormap = NULL;
     m_colorCube = NULL;
@@ -410,7 +411,7 @@ wxApp::~wxApp()
 #if !wxUSE_NANOX
     if (m_colorCube)
         free( m_colorCube );
-        
+
     if (m_visualColormap)
         delete [] (XColor*)m_visualColormap;
 #endif
@@ -510,7 +511,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
         case Expose:
         {
 #if wxUSE_TWO_WINDOWS && !wxUSE_NANOX
-            if (event->xexpose.window != (Window)win->GetClientWindow())
+            if (event->xexpose.window != (Window)win->GetClientAreaWindow())
             {
                 XEvent tmp_event;
                 wxExposeInfo info;
@@ -552,7 +553,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
 
                 // If we only have one X11 window, always indicate
                 // that borders might have to be redrawn.
-                if (win->GetMainWindow() == win->GetClientWindow())
+                if (win->GetMainWindow() == win->GetClientAreaWindow())
                     win->NeedUpdateNcAreaInIdle();
 
                 // Only erase background, paint in idle time.
@@ -568,9 +569,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
         {
             printf( "GraphicExpose event\n" );
 
-            wxLogTrace( _T("expose"), _T("GraphicsExpose from %s"), win->GetName().c_str(),
-                                          event->xgraphicsexpose.x, event->xgraphicsexpose.y,
-                                          event->xgraphicsexpose.width, event->xgraphicsexpose.height);
+            wxLogTrace( _T("expose"), _T("GraphicsExpose from %s"), win->GetName().c_str());
 
             win->GetUpdateRegion().Union( event->xgraphicsexpose.x, event->xgraphicsexpose.y,
                                           event->xgraphicsexpose.width, event->xgraphicsexpose.height);
@@ -740,7 +739,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
         {
             if (!win->IsEnabled())
                 return FALSE;
-                
+
             // Here we check if the top level window is
             // disabled, which is one aspect of modality.
             wxWindow *tlw = win;
@@ -791,7 +790,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
 #endif
                 {
                     wxLogTrace( _T("focus"), _T("FocusIn from %s of type %s"), win->GetName().c_str(), win->GetClassInfo()->GetClassName() );
-                    
+
                     extern wxWindow* g_GettingFocus;
                     if (g_GettingFocus && g_GettingFocus->GetParent() == win)
                     {
@@ -1029,44 +1028,44 @@ bool wxApp::OnInitGui()
     vinfo_template.visual = xvisual;
     vinfo_template.visualid = XVisualIDFromVisual( xvisual );
     vinfo_template.depth = xdepth;
-        
+
     int nitem = 0;
     XVisualInfo *vi = XGetVisualInfo( xdisplay, VisualIDMask|VisualDepthMask, &vinfo_template, &nitem );
     wxASSERT_MSG( vi, wxT("No visual info") );
-    
+
     m_visualType = vi->visual->c_class;
     m_visualScreen = vi->screen;
-    
+
     m_visualRedMask = vi->red_mask;
     m_visualGreenMask = vi->green_mask;
     m_visualBlueMask = vi->blue_mask;
-    
+
     if (m_visualType != GrayScale && m_visualType != PseudoColor)
     {
         wxCalcPrecAndShift( m_visualRedMask, &m_visualRedShift, &m_visualRedPrec );
         wxCalcPrecAndShift( m_visualGreenMask, &m_visualGreenShift, &m_visualGreenPrec );
         wxCalcPrecAndShift( m_visualBlueMask, &m_visualBlueShift, &m_visualBluePrec );
     }
-    
+
     m_visualDepth = xdepth;
     if (xdepth == 16)
         xdepth = m_visualRedPrec + m_visualGreenPrec + m_visualBluePrec;
-        
+
     m_visualColormapSize = vi->colormap_size;
-        
+
     XFree( vi );
-    
+
     if (m_visualDepth > 8)
         return TRUE;
-    
+
     m_visualColormap = new XColor[m_visualColormapSize];
     XColor* colors = (XColor*) m_visualColormap;
-    
+
     for (int i = 0; i < m_visualColormapSize; i++)
            colors[i].pixel = i;
 
     XQueryColors( xdisplay, DefaultColormap(xdisplay,xscreen), colors, m_visualColormapSize );
-        
+
     m_colorCube = (unsigned char*)malloc(32 * 32 * 32);
 
     for (int r = 0; r < 32; r++)
@@ -1109,7 +1108,7 @@ bool wxApp::OnInitGui()
         }
     }
 #endif
-    
+
     return TRUE;
 }
 
@@ -1176,57 +1175,64 @@ void wxExit()
 
 bool wxApp::Yield(bool onlyIfNeeded)
 {
-    bool s_inYield = FALSE;
-
-    if ( s_inYield )
+    // Sometimes only 2 yields seem
+    // to do the trick, e.g. in the
+    // progress dialog
+    int i;
+    for (i = 0; i < 2; i++)
     {
-        if ( !onlyIfNeeded )
+        bool s_inYield = FALSE;
+
+        if ( s_inYield )
         {
-            wxFAIL_MSG( wxT("wxYield called recursively" ) );
-        }
+            if ( !onlyIfNeeded )
+            {
+                wxFAIL_MSG( wxT("wxYield called recursively" ) );
+            }
 
-        return FALSE;
-    }
+            return FALSE;
+        }
 
-    s_inYield = TRUE;
+        s_inYield = TRUE;
 
-    // Make sure we have an event loop object,
-    // or Pending/Dispatch will fail
-    wxEventLoop* eventLoop = wxEventLoop::GetActive();
-    wxEventLoop* newEventLoop = NULL;
-    if (!eventLoop)
-    {
-        newEventLoop = new wxEventLoop;
-        wxEventLoop::SetActive(newEventLoop);
-    }
+        // Make sure we have an event loop object,
+        // or Pending/Dispatch will fail
+        wxEventLoop* eventLoop = wxEventLoop::GetActive();
+        wxEventLoop* newEventLoop = NULL;
+        if (!eventLoop)
+        {
+            newEventLoop = new wxEventLoop;
+            wxEventLoop::SetActive(newEventLoop);
+        }
 
-    while (wxTheApp && wxTheApp->Pending())
-        wxTheApp->Dispatch();
+        while (wxTheApp && wxTheApp->Pending())
+            wxTheApp->Dispatch();
 
 #if wxUSE_TIMER
-    wxTimer::NotifyTimers();
+        wxTimer::NotifyTimers();
 #endif
-    ProcessIdle();
+        ProcessIdle();
 
-    if (newEventLoop)
-    {
-        wxEventLoop::SetActive(NULL);
-        delete newEventLoop;
-    }
+        if (newEventLoop)
+        {
+            wxEventLoop::SetActive(NULL);
+            delete newEventLoop;
+        }
 
-    s_inYield = FALSE;
+        s_inYield = FALSE;
+    }
 
     return TRUE;
 }
 
 #ifdef __WXDEBUG__
 
-void wxApp::OnAssert(const wxChar *file, int line, const wxChar *msg)
+void wxApp::OnAssert(const wxChar *file, int line, const wxChar* cond, const wxChar *msg)
 {
     // While the GUI isn't working that well, just print out the
     // message.
 #if 1
-    wxAppBase::OnAssert(file, line, msg);
+    wxAppBase::OnAssert(file, line, cond, msg);
 #else
     wxString msg2;
     msg2.Printf("At file %s:%d: %s", file, line, msg);