]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/app.cpp
rewrote wxHtmlHelpFrame using sizers
[wxWidgets.git] / src / x11 / app.cpp
index ebcb2d9da1ce6ffc6571bc4ffe9246d85126cda2..c21c217a82574af1ce79911b25f5c88878ceecd0 100644 (file)
@@ -60,8 +60,6 @@ wxApp *wxTheApp = NULL;
 
 wxHashTable *wxWidgetHashTable = NULL;
 
-static Window wxGetParentWindow(Window window);
-
 IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler)
 
 BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
@@ -295,11 +293,18 @@ void wxApp::ProcessXEvent(WXEvent* _event)
     // Find the first wxWindow that corresponds to this event window
     // TODO: may need to translate coordinates from actualWindow
     // to window, if the receiving window != wxWindow window
-    while (window && !(win = wxGetWindowFromTable(window)))
-        window = wxGetParentWindow(window);
+    //    while (window && !(win = wxGetWindowFromTable(window)))
+    //        window = wxGetWindowParent(window);
+
+    // Because we're receiving events after a window
+    // has been destroyed, assume a 1:1 match between
+    // Window and wxWindow, so if it's not in the table,
+    // it must have been destroyed.
+
+    win = wxGetWindowFromTable(window);
+    if (!win)
+       return;
 
-    // TODO: shouldn't all the ProcessEvents below
-    // be win->GetEventHandler()->ProcessEvent?
     switch (event->type)
     {
         case KeyPress:
@@ -353,7 +358,7 @@ void wxApp::ProcessXEvent(WXEvent* _event)
 
             if (event->xclient.message_type == wm_protocols)
             {
-                if (event->xclient.data.l[0] == wm_delete_window)
+                if ((Atom) (event->xclient.data.l[0]) == wm_delete_window)
                 {
                     if (win)
                     {
@@ -363,6 +368,16 @@ void wxApp::ProcessXEvent(WXEvent* _event)
             }
             return;
         }
+        case ConfigureNotify:
+        {
+            if (win)
+            {
+                wxSizeEvent sizeEvent( wxSize(event->xconfigure.width,event->xconfigure.height), win->GetId() );
+                sizeEvent.SetEventObject( win );
+                
+                win->GetEventHandler()->ProcessEvent( sizeEvent );
+            }
+        }
         case ResizeRequest:
         {
             /* Terry Gitnick <terryg@scientech.com> - 1/21/98
@@ -602,6 +617,13 @@ void wxApp::DeletePendingObjects()
 // Create an application context
 bool wxApp::OnInitGui()
 {
+    // Eventually this line will be removed, but for
+    // now we don't want to try popping up a dialog
+    // for error messages.
+    delete wxLog::SetActiveTarget(new wxLogStderr);
+    if (!wxAppBase::OnInitGui())
+       return FALSE;
+    
     // TODO: parse argv and get display to pass to XOpenDisplay
     Display* dpy = XOpenDisplay(NULL);
     m_initialDisplay = (WXDisplay*) dpy;
@@ -643,12 +665,16 @@ WXColormap wxApp::GetMainColormap(WXDisplay* display)
     return (WXColormap) c;
 }
 
-Window wxGetParentWindow(Window window)
+Window wxGetWindowParent(Window window)
 {
     Window parent, root = 0;
     unsigned int noChildren = 0;
-    if (XQueryTree((Display*) wxGetDisplay(), window, & root, & parent,
-        NULL, & noChildren))
+    Window* children = NULL;
+    int res = XQueryTree((Display*) wxGetDisplay(), window, & root, & parent,
+                        & children, & noChildren);
+    if (children)
+        XFree(children);
+    if (res)
         return parent;
     else
         return (Window) 0;