]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/popupwin.cpp
add support for alpha in color dialog on OSX, see #14127
[wxWidgets.git] / src / x11 / popupwin.cpp
index 2fbf352a72de1265a437ebc200d4c645ddab1d70..754367abf23551aed2c4a793f5767abfc62cf87f 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        popupwin.cpp
+// Name:        srx/x11/popupwin.cpp
 // Purpose:
 // Author:      Robert Roebling
 // Id:          $Id$
 // Purpose:
 // Author:      Robert Roebling
 // Id:          $Id$
@@ -7,16 +7,18 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "popupwin.h"
-#endif
-
-#include "wx/defs.h"
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
 
 #if wxUSE_POPUPWIN
 
 #include "wx/popupwin.h"
 
 #if wxUSE_POPUPWIN
 
 #include "wx/popupwin.h"
-#include "wx/app.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/log.h"
+    #include "wx/app.h"
+    #include "wx/settings.h"
+#endif
 
 #include "wx/x11/private.h"
 #include "X11/Xatom.h"
 
 #include "wx/x11/private.h"
 #include "X11/Xatom.h"
 BEGIN_EVENT_TABLE(wxPopupWindow,wxPopupWindowBase)
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(wxPopupWindow,wxPopupWindowBase)
 END_EVENT_TABLE()
 
-IMPLEMENT_DYNAMIC_CLASS(wxPopupWindow, wxWindow)
+wxPopupWindow::~wxPopupWindow()
+{
+}
 
 bool wxPopupWindow::Create( wxWindow *parent, int style )
 {
 
 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") );
     {
         wxFAIL_MSG( wxT("wxPopupWindow creation failed") );
-        return FALSE;
+        return false;
     }
 
     // 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 );
     wxPoint pos2 = pos;
     wxPoint pos( 20,20 );
     wxSize size( 20,20 );
     wxPoint pos2 = pos;
@@ -55,68 +59,75 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     int xscreen = DefaultScreen( xdisplay );
     Visual *xvisual = DefaultVisual( xdisplay, xscreen );
     Window xparent = RootWindow( xdisplay, xscreen );
     int xscreen = DefaultScreen( xdisplay );
     Visual *xvisual = DefaultVisual( xdisplay, xscreen );
     Window xparent = RootWindow( xdisplay, xscreen );
-    
+    Colormap cm = DefaultColormap( xdisplay, xscreen);
+
 #if wxUSE_TWO_WINDOWS
 #if wxUSE_TWO_WINDOWS
-    bool need_two_windows = 
+    bool need_two_windows =
         ((( wxSUNKEN_BORDER | wxRAISED_BORDER | wxSIMPLE_BORDER | wxHSCROLL | wxVSCROLL ) & m_windowStyle) != 0);
 #else
         ((( wxSUNKEN_BORDER | wxRAISED_BORDER | wxSIMPLE_BORDER | wxHSCROLL | wxVSCROLL ) & m_windowStyle) != 0);
 #else
-    bool need_two_windows = FALSE;
+    bool need_two_windows = false;
 #endif
 
 #if wxUSE_NANOX
     long xattributes_mask = 0;
 #else
 #endif
 
 #if wxUSE_NANOX
     long xattributes_mask = 0;
 #else
-    
+
     XSetWindowAttributes xattributes;
     long xattributes_mask = 0;
     XSetWindowAttributes xattributes;
     long xattributes_mask = 0;
-    
+
+    m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
+    m_backgroundColour.CalcPixel( (WXColormap) cm);
+
+    m_foregroundColour = *wxBLACK;
+    m_foregroundColour.CalcPixel( (WXColormap) cm);
+
     xattributes_mask |= CWBackPixel;
     xattributes.background_pixel = m_backgroundColour.GetPixel();
     xattributes_mask |= CWBackPixel;
     xattributes.background_pixel = m_backgroundColour.GetPixel();
-    
+
     xattributes_mask |= CWBorderPixel;
     xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
     xattributes_mask |= CWBorderPixel;
     xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
-    
+
     xattributes_mask |= CWOverrideRedirect | CWSaveUnder;
     xattributes.override_redirect = True;
     xattributes.save_under = True;
     xattributes_mask |= CWOverrideRedirect | CWSaveUnder;
     xattributes.override_redirect = True;
     xattributes.save_under = True;
-    
+
     xattributes_mask |= CWEventMask;
 #endif
     xattributes_mask |= CWEventMask;
 #endif
-    
+
     if (need_two_windows)
     {
 #if !wxUSE_NANOX
     if (need_two_windows)
     {
 #if !wxUSE_NANOX
-        xattributes.event_mask = 
+        xattributes.event_mask =
             ExposureMask | StructureNotifyMask | ColormapChangeMask;
 #endif
             ExposureMask | StructureNotifyMask | ColormapChangeMask;
 #endif
-        
-        Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y, 
+
+        Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y,
             0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
 
             0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
 
-#if wxUSE_NANOX    
+#if wxUSE_NANOX
         XSelectInput( xdisplay, xwindow,
           ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
           ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
           KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
           PropertyChangeMask );
 #endif
         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 );
         // 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 );
         m_mainWindow = (WXWindow) xwindow;
         wxAddWindowToTable( xwindow, (wxWindow*) this );
-        
+
         // XMapWindow( xdisplay, xwindow );
         // XMapWindow( xdisplay, xwindow );
-#if !wxUSE_NANOX    
-        xattributes.event_mask = 
+#if !wxUSE_NANOX
+        xattributes.event_mask =
             ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
             ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
             KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
             PropertyChangeMask | VisibilityChangeMask ;
 #endif
             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;
         if (HasFlag( wxSUNKEN_BORDER) || HasFlag( wxRAISED_BORDER))
         {
             pos2.x = 2;
@@ -135,40 +146,40 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
             pos2.x = 0;
             pos2.y = 0;
         }
             pos2.x = 0;
             pos2.y = 0;
         }
-        
-        xwindow = XCreateWindow( xdisplay, xwindow, pos2.x, pos2.y, size2.x, size2.y, 
+
+        xwindow = XCreateWindow( xdisplay, xwindow, pos2.x, pos2.y, size2.x, size2.y,
             0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
             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 );
         // Set background to None which will prevent X11 from clearing the
         // background comletely.
         XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
-    
-#if wxUSE_NANOX    
+
+#if wxUSE_NANOX
         XSelectInput( xdisplay, xwindow,
             ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
             ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
             KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
             PropertyChangeMask );
 #endif
         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_clientWindow = (WXWindow) xwindow;
         wxAddClientWindowToTable( xwindow, (wxWindow*) this );
-        
-        m_isShown = FALSE;
+
+        m_isShown = false;
         XMapWindow( xdisplay, xwindow );
     }
     else
     {
         // One window
 #if !wxUSE_NANOX
         XMapWindow( xdisplay, xwindow );
     }
     else
     {
         // One window
 #if !wxUSE_NANOX
-        xattributes.event_mask = 
+        xattributes.event_mask =
             ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
             ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
             KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
             PropertyChangeMask | VisibilityChangeMask ;
 #endif
             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, 
+
+        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
             0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
 
 #if wxUSE_NANOX
@@ -178,16 +189,16 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
           KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
           PropertyChangeMask );
 #endif
           KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
           PropertyChangeMask );
 #endif
-        
+
         // Set background to None which will prevent X11 from clearing the
         // background comletely.
         XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
         // 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 );
         m_mainWindow = (WXWindow) xwindow;
         m_clientWindow = (WXWindow) xwindow;
         wxAddWindowToTable( xwindow, (wxWindow*) this );
-        
-        m_isShown = FALSE;
+
+        m_isShown = false;
         // XMapWindow( xdisplay, xwindow );
     }
 
         // XMapWindow( xdisplay, xwindow );
     }
 
@@ -203,8 +214,8 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     wm_hints.initial_state = NormalState;
     XSetWMHints( xdisplay, (Window) m_mainWindow, &wm_hints);
 #endif
     wm_hints.initial_state = NormalState;
     XSetWMHints( xdisplay, (Window) m_mainWindow, &wm_hints);
 #endif
-    
-    return TRUE;
+
+    return true;
 }
 
 void wxPopupWindow::DoMoveWindow(int x, int y, int width, int height )
 }
 
 void wxPopupWindow::DoMoveWindow(int x, int y, int width, int height )
@@ -222,7 +233,7 @@ bool wxPopupWindow::Show( bool show )
     bool ret = wxWindowX11::Show( show );
 
     Raise();
     bool ret = wxWindowX11::Show( show );
 
     Raise();
-    
+
     return ret;
 }
 
     return ret;
 }