]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/window.cpp
added default style wxFRAME_TOOL_WINDOW to creation
[wxWidgets.git] / src / x11 / window.cpp
index 31875c8e7db9f385e4867241f551583d66656df5..0ddb71547623ab9d78cc6e6dd097414993e0efc2 100644 (file)
@@ -125,6 +125,7 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id,
 
     Display *xdisplay = (Display*) wxGlobalDisplay();
     int xscreen = DefaultScreen( xdisplay );
+    Visual *xvisual = DefaultVisual( xdisplay, xscreen );
     Colormap cm = DefaultColormap( xdisplay, xscreen );
 
     m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
@@ -133,35 +134,40 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id,
     m_foregroundColour = *wxBLACK;
     m_foregroundColour.CalcPixel( (WXColormap) cm ); 
 
-    Window parentWindow = (Window) parent->GetMainWindow();
+    Window xparent = (Window) parent->GetMainWindow();
 
+    XSetWindowAttributes xattributes;
+    
+    long xattributes_mask =
+        CWEventMask |
+        CWBorderPixel | CWBackPixel;
+        
+    xattributes.background_pixel = m_backgroundColour.GetPixel();
+    xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
+    
+    xattributes.event_mask = 
+        ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
+        ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
+        KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
+        PropertyChangeMask;
+    
     wxSize size2(size);
     if (size2.x == -1)
-       size2.x = 100;
+       size2.x = 20;
     if (size2.y == -1)
-       size2.y = 100;
+       size2.y = 20;
 
     wxPoint pos2(pos);
     if (pos2.x == -1)
-       pos2.x = 100;
+       pos2.x = 0;
     if (pos2.y == -1)
-       pos2.y = 100;
+       pos2.y = 0;
     
-    Window xwindow = XCreateSimpleWindow( 
-        xdisplay, parentWindow,
-        pos2.x, pos2.y, size2.x, size2.y, 0, 
-        m_backgroundColour.GetPixel(),
-        m_backgroundColour.GetPixel() );
+    Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, 
+       0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
         
     m_mainWidget = (WXWindow) xwindow;
 
-    // Select event types wanted
-    XSelectInput( xdisplay, xwindow,
-        ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
-        ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
-        KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
-        PropertyChangeMask);
-
     wxAddWindowToTable( xwindow, (wxWindow*) this );
 
     // Is a subwindow, so map immediately
@@ -193,12 +199,7 @@ wxWindowX11::~wxWindowX11()
     m_isBeingDeleted = TRUE;
     
     // X11-specific actions first
-    Window main = (Window) m_mainWidget;
-    if ( main )
-    {
-        // Removes event handlers
-        //DetachWidget(main);
-    }
+    Window xwindow = (Window) m_mainWidget;
 
     if (m_parent)
         m_parent->RemoveChild( this );
@@ -206,11 +207,11 @@ wxWindowX11::~wxWindowX11()
     DestroyChildren();
 
     // Destroy the window
-    if (main)
+    if (xwindow)
     {
-        XSelectInput( wxGlobalDisplay(), main, NoEventMask);
-        wxDeleteWindowFromTable( main );
-        XDestroyWindow( wxGlobalDisplay(), main );
+        XSelectInput( wxGlobalDisplay(), xwindow, NoEventMask);
+        wxDeleteWindowFromTable( xwindow );
+        XDestroyWindow( wxGlobalDisplay(), xwindow );
         m_mainWidget = NULL;
     }
 }
@@ -253,7 +254,6 @@ wxWindow *wxWindowBase::FindFocus()
     return NULL;
 }
 
-#if 0
 wxWindow *wxWindowX11::GetFocusWidget()
 {
    wxWindow *win = (wxWindow*) this;
@@ -266,7 +266,6 @@ wxWindow *wxWindowX11::GetFocusWidget()
    
    return win;
 }
-#endif
 
 // Enabling/disabling handled by event loop, and not sending events
 // if disabled.
@@ -286,17 +285,13 @@ bool wxWindowX11::Show(bool show)
     Display *xdisp = (Display*) GetXDisplay();
     if (show)
     {
-        wxString msg;
-        msg.Printf("Mapping window of type %s", GetClassInfo()->GetClassName());
-        wxLogDebug(msg);
+        // wxLogDebug( "Mapping window of type %s", GetName().c_str() );
         XMapWindow(xdisp, xwin);
         XSync(xdisp, False);
     }
     else
     {
-        wxString msg;
-        msg.Printf("Unmapping window of type %s", GetClassInfo()->GetClassName());
-        wxLogDebug(msg);
+        // wxLogDebug( "Unmapping window of type %s", GetName().c_str() );
         XUnmapWindow(xdisp, xwin);
     }
 
@@ -362,7 +357,7 @@ void wxWindowX11::DoCaptureMouse()
             return;
         }
 
-        wxLogDebug("Grabbed pointer");
+        /// wxLogDebug("Grabbed pointer");
 
 #if 0
         res = XGrabButton(wxGlobalDisplay(), AnyButton, AnyModifier,
@@ -421,7 +416,8 @@ void wxWindowX11::DoReleaseMouse()
         XUngrabKeyboard( wxGlobalDisplay(), CurrentTime );
 #endif
     }
-    wxLogDebug("Ungrabbed pointer");
+    
+    // wxLogDebug("Ungrabbed pointer");
 
     m_winCaptured = FALSE;
 }
@@ -613,6 +609,7 @@ void wxWindowX11::DoGetSize(int *x, int *y) const
     wxCHECK_RET( xwindow, wxT("invalid window") );
     
     XSync(wxGlobalDisplay(), False);
+
     XWindowAttributes attr;
     Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
     wxASSERT(status);
@@ -944,8 +941,11 @@ void wxWindowX11::Update()
 {
     if (!m_updateRegion.IsEmpty())
     {
-        // Actually send erase and paint events.
-        X11SendPaintEvents();
+        // Actually send erase events.
+        SendEraseEvents();
+        
+        // Actually send paint events.
+        SendPaintEvents();
     }
 }
 
@@ -957,12 +957,12 @@ void wxWindowX11::Clear()
     dc.Clear();
 }
 
-void wxWindowX11::X11SendPaintEvents()
+void wxWindowX11::SendEraseEvents()
 {
-    m_clipPaintRegion = TRUE;
-
     if (!m_clearRegion.IsEmpty())
     {
+        m_clipPaintRegion = TRUE;
+
         wxWindowDC dc( (wxWindow*)this );
         dc.SetClippingRegion( m_clearRegion );
         
@@ -986,7 +986,15 @@ void wxWindowX11::X11SendPaintEvents()
             XFreeGC( xdisplay, xgc );
         }
         m_clearRegion.Clear();
+
+        m_clipPaintRegion = FALSE;
     }
+}
+
+
+void wxWindowX11::SendPaintEvents()
+{
+    m_clipPaintRegion = TRUE;
 
     wxNcPaintEvent nc_paint_event( GetId() );
     nc_paint_event.SetEventObject( this );