]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/popupwin.cpp
Put some life into GTK 2.0 drawing.
[wxWidgets.git] / src / x11 / popupwin.cpp
index 6f9c4b7e500957d798d5982f494d0d7783fb6903..9161a1e64198b646ce4692fb4251ae371a968877 100644 (file)
@@ -19,6 +19,8 @@
 #include "wx/app.h"
 
 #include "wx/x11/private.h"
 #include "wx/app.h"
 
 #include "wx/x11/private.h"
+#include "X11/Xatom.h"
+#include "X11/Xutil.h"
 
 //-----------------------------------------------------------------------------
 // wxPopupWindow
 
 //-----------------------------------------------------------------------------
 // wxPopupWindow
@@ -40,27 +42,32 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     // All dialogs should really have this style
     m_windowStyle = style;
     m_windowStyle |= wxTAB_TRAVERSAL;
     // All dialogs should really have this style
     m_windowStyle = style;
     m_windowStyle |= wxTAB_TRAVERSAL;
+    
+    wxPoint pos( 20,20 );
+    wxSize size( 20,20 );
 
     m_parent = parent;
     if (m_parent) m_parent->AddChild( this );
 
 
     m_parent = parent;
     if (m_parent) m_parent->AddChild( this );
 
-    wxTopLevelWindows.Append(this);
-    
     Display *xdisplay = wxGlobalDisplay();
     int xscreen = DefaultScreen( xdisplay );
     Visual *xvisual = DefaultVisual( xdisplay, xscreen );
     Window xparent = RootWindow( xdisplay, xscreen );
     
     Display *xdisplay = wxGlobalDisplay();
     int xscreen = DefaultScreen( xdisplay );
     Visual *xvisual = DefaultVisual( xdisplay, xscreen );
     Window xparent = RootWindow( xdisplay, xscreen );
     
+#if wxUSE_NANOX
+    long xattributes_mask = 0;
+#else
     XSetWindowAttributes xattributes;
     XSetWindowAttributes xattributes;
-    XSizeHints size_hints;
-    XWMHints wm_hints;
     
     long xattributes_mask =
     
     long xattributes_mask =
-        CWEventMask |
+        CWOverrideRedirect |
+        CWSaveUnder |
         CWBorderPixel | CWBackPixel;
     xattributes.background_pixel = BlackPixel( xdisplay, xscreen );
     xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
         CWBorderPixel | CWBackPixel;
     xattributes.background_pixel = BlackPixel( xdisplay, xscreen );
     xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
-    xattributes.override_redirect = False;
+    xattributes.override_redirect = True;
+    xattributes.save_under = True;
+#endif
     
     Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y, 
        0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
     
     Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y, 
        0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
@@ -72,31 +79,32 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
         PropertyChangeMask );
 
     m_mainWindow = (WXWindow) xwindow;
         PropertyChangeMask );
 
     m_mainWindow = (WXWindow) xwindow;
+    m_clientWindow = (WXWindow) xwindow;
     wxAddWindowToTable( xwindow, (wxWindow*) this );
     wxAddWindowToTable( xwindow, (wxWindow*) this );
-    
+
+    // Set background to None which will prevent X11 from clearing the
+    // background comletely.
+    XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
+
     XSetTransientForHint( xdisplay, xwindow, xparent );
     XSetTransientForHint( xdisplay, xwindow, xparent );
-    
-    size_hints.flags = PSize;
-    size_hints.width = size.x;
-    size_hints.height = size.y;
-    XSetWMNormalHints( xdisplay, xwindow, &size_hints);
-    
+
+#if wxUSE_NANOX
+    // Switch off WM
+    wxSetWMDecorations(xwindow, 0);
+#else
+    XWMHints wm_hints;
     wm_hints.flags = InputHint | StateHint /* | WindowGroupHint */;
     wm_hints.input = True;
     wm_hints.initial_state = NormalState;
     XSetWMHints( xdisplay, xwindow, &wm_hints);
     wm_hints.flags = InputHint | StateHint /* | WindowGroupHint */;
     wm_hints.input = True;
     wm_hints.initial_state = NormalState;
     XSetWMHints( xdisplay, xwindow, &wm_hints);
+#endif
     
     
-    Atom wm_delete_window = XInternAtom( xdisplay, "WM_DELETE_WINDOW", False);
-    XSetWMProtocols( xdisplay, xwindow, &wm_delete_window, 1);
-    
-    wxSetWMDecorations((Window) GetMainWindow(), style);
-
     return TRUE;
 }
 
     return TRUE;
 }
 
-void wxPopupWindow::DoMoveWindow(int WXUNUSED(x), int WXUNUSED(y), int WXUNUSED(width), int WXUNUSED(height) )
+void wxPopupWindow::DoMoveWindow(int x, int y, int width, int height )
 {
 {
-    wxFAIL_MSG( wxT("DoMoveWindow called for wxPopupWindow") );
+    wxWindowX11::DoMoveWindow( x, y, width, height );
 }
 
 void wxPopupWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
 }
 
 void wxPopupWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
@@ -106,7 +114,11 @@ void wxPopupWindow::DoSetSize( int x, int y, int width, int height, int sizeFlag
 
 bool wxPopupWindow::Show( bool show )
 {
 
 bool wxPopupWindow::Show( bool show )
 {
-    return wxWindow11::Show( show );
+    bool ret = wxWindowX11::Show( show );
+
+    Raise();
+    
+    return ret;
 }
 
 #endif // wxUSE_POPUPWIN
 }
 
 #endif // wxUSE_POPUPWIN