]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/popupwin.cpp
do take the toolbar into account for Windows CE, otherwise the menus overlap with...
[wxWidgets.git] / src / x11 / popupwin.cpp
index a1546f56302c407aff0312a681dee7d92cd943b7..35bbf8c99f2e9e14e2b3684c9c9ba0c628915a87 100644 (file)
@@ -7,7 +7,7 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "popupwin.h"
 #endif
 
@@ -17,6 +17,7 @@
 
 #include "wx/popupwin.h"
 #include "wx/app.h"
+#include "wx/settings.h"
 
 #include "wx/x11/private.h"
 #include "X11/Xatom.h"
@@ -33,7 +34,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxPopupWindow, wxWindow)
 
 bool wxPopupWindow::Create( wxWindow *parent, int style )
 {
-    if (!CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, "popup" ))
+    if (!CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("popup") ))
     {
         wxFAIL_MSG( wxT("wxPopupWindow creation failed") );
         return FALSE;
@@ -56,8 +57,6 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     Visual *xvisual = DefaultVisual( xdisplay, xscreen );
     Window xparent = RootWindow( xdisplay, xscreen );
     
-#if !wxUSE_NANOX
-
 #if wxUSE_TWO_WINDOWS
     bool need_two_windows = 
         ((( wxSUNKEN_BORDER | wxRAISED_BORDER | wxSIMPLE_BORDER | wxHSCROLL | wxVSCROLL ) & m_windowStyle) != 0);
@@ -65,6 +64,10 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     bool need_two_windows = FALSE;
 #endif
 
+#if wxUSE_NANOX
+    long xattributes_mask = 0;
+#else
+    
     XSetWindowAttributes xattributes;
     long xattributes_mask = 0;
     
@@ -79,28 +82,42 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     xattributes.save_under = True;
     
     xattributes_mask |= CWEventMask;
+#endif
     
     if (need_two_windows)
     {
+#if !wxUSE_NANOX
         xattributes.event_mask = 
             ExposureMask | StructureNotifyMask | ColormapChangeMask;
-            
+#endif
+        
         Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y, 
             0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
+
+#if wxUSE_NANOX    
+        XSelectInput( xdisplay, xwindow,
+          ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
+          ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
+          KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
+          PropertyChangeMask );
+#endif
     
+        // Set background to None which will prevent X11 from clearing the
+        // background comletely.
         XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
     
         m_mainWindow = (WXWindow) xwindow;
         wxAddWindowToTable( xwindow, (wxWindow*) this );
         
-        XMapWindow( xdisplay, xwindow );
-    
+        // XMapWindow( xdisplay, xwindow );
+#if !wxUSE_NANOX    
         xattributes.event_mask = 
             ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
             ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
             KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
             PropertyChangeMask | VisibilityChangeMask ;
-
+#endif
+        
         if (HasFlag( wxSUNKEN_BORDER) || HasFlag( wxRAISED_BORDER))
         {
             pos2.x = 2;
@@ -123,35 +140,57 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
         xwindow = XCreateWindow( xdisplay, xwindow, pos2.x, pos2.y, size2.x, size2.y, 
             0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
     
+        // Set background to None which will prevent X11 from clearing the
+        // background comletely.
         XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
     
+#if wxUSE_NANOX    
+        XSelectInput( xdisplay, xwindow,
+            ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
+            ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
+            KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
+            PropertyChangeMask );
+#endif
+    
         m_clientWindow = (WXWindow) xwindow;
         wxAddClientWindowToTable( xwindow, (wxWindow*) this );
         
+        m_isShown = FALSE;
         XMapWindow( xdisplay, xwindow );
     }
     else
     {
+        // One window
+#if !wxUSE_NANOX
         xattributes.event_mask = 
             ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
             ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
             KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
             PropertyChangeMask | VisibilityChangeMask ;
-            
+#endif
+        
         Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y, 
             0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
-    
+
+#if wxUSE_NANOX
+        XSelectInput( xdisplay, xwindow,
+          ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
+          ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
+          KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
+          PropertyChangeMask );
+#endif
+        
+        // Set background to None which will prevent X11 from clearing the
+        // background comletely.
         XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
     
         m_mainWindow = (WXWindow) xwindow;
         m_clientWindow = (WXWindow) xwindow;
         wxAddWindowToTable( xwindow, (wxWindow*) this );
         
-        XMapWindow( xdisplay, xwindow );
+        m_isShown = FALSE;
+        // XMapWindow( xdisplay, xwindow );
     }
-#else
-    fixme
-#endif
 
     XSetTransientForHint( xdisplay, (Window) m_mainWindow, xparent );