X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6a44bffd1ac68163e4c1cfe8aa8fe4f7f98a02e7..5a750e5a171692168485d44e168a870904e06659:/src/x11/toplevel.cpp diff --git a/src/x11/toplevel.cpp b/src/x11/toplevel.cpp index 59b2ee7479..648bb6ac3a 100644 --- a/src/x11/toplevel.cpp +++ b/src/x11/toplevel.cpp @@ -35,14 +35,15 @@ #include "wx/log.h" #include "wx/intl.h" #include "wx/frame.h" + #include "wx/menu.h" + #include "wx/statusbr.h" #endif //WX_PRECOMP +#include "wx/settings.h" #include "wx/x11/private.h" -#include "X11/Xatom.h" #include "X11/Xutil.h" -// list of all frames and modeless dialogs -// wxWindowList wxModelessWindows; +bool wxMWMIsRunning(Window w); // ---------------------------------------------------------------------------- // wxTopLevelWindowX11 creation @@ -89,15 +90,21 @@ bool wxTopLevelWindowX11::Create(wxWindow *parent, int xscreen = DefaultScreen( xdisplay ); Visual *xvisual = DefaultVisual( xdisplay, xscreen ); Window xparent = RootWindow( xdisplay, xscreen ); + Colormap cm = DefaultColormap( xdisplay, xscreen ); + // TODO: For dialogs, this should be wxSYS_COLOUR_3DFACE + m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); + m_backgroundColour.CalcPixel( (WXColormap) cm ); + m_hasBgCol = TRUE; + XSetWindowAttributes xattributes; XSizeHints size_hints; XWMHints wm_hints; long xattributes_mask = - CWEventMask | + CWOverrideRedirect | CWBorderPixel | CWBackPixel; - xattributes.background_pixel = BlackPixel( xdisplay, xscreen ); + xattributes.background_pixel = m_backgroundColour.GetPixel(); xattributes.border_pixel = BlackPixel( xdisplay, xscreen ); xattributes.override_redirect = False; @@ -158,9 +165,6 @@ wxTopLevelWindowX11::~wxTopLevelWindowX11() bool wxTopLevelWindowX11::Show(bool show) { - if ( !wxWindowBase::Show(show) ) - return FALSE; - return wxWindowX11::Show(show); } @@ -256,8 +260,7 @@ void wxTopLevelWindowX11::SetIcon(const wxIcon& icon) wmHints->icon_mask = (Pixmap) icon.GetMask()->GetPixmap(); } - XSetWMHints(wxGlobalDisplay(), (Window) GetMainWindow(), - wmHints); + XSetWMHints(wxGlobalDisplay(), (Window) GetMainWindow(), wmHints); XFree(wmHints); } } @@ -402,3 +405,60 @@ bool wxMWMIsRunning(Window w) return (ret == Success); } +// For implementation purposes - sometimes decorations make the client area +// smaller +wxPoint wxTopLevelWindowX11::GetClientAreaOrigin() const +{ + // In fact wxFrame::GetClientAreaOrigin + // does the required calculation already. +#if 0 + if (this->IsKindOf(CLASSINFO(wxFrame))) + { + wxFrame* frame = (wxFrame*) this; + if (frame->GetMenuBar()) + return wxPoint(0, frame->GetMenuBar()->GetSize().y); + } +#endif + return wxPoint(0, 0); +} + +void wxTopLevelWindowX11::DoGetClientSize( int *width, int *height ) const +{ + wxWindowX11::DoGetClientSize(width, height); + // Done by wxTopLevelWindow +#if 0 + if (this->IsKindOf(CLASSINFO(wxFrame))) + { + wxFrame* frame = (wxFrame*) this; + if (frame->GetMenuBar()) + (*height) -= frame->GetMenuBar()->GetSize().y; + if (frame->GetStatusBar()) + (*height) -= frame->GetStatusBar()->GetSize().y; + } +#endif +} + +void wxTopLevelWindowX11::DoSetClientSize(int width, int height) +{ + wxWindowX11::DoSetClientSize(width, height); +#if 0 + if (!GetMainWindow()) + return; + + XWindowChanges windowChanges; + int valueMask = 0; + + if (width != -1) + { + windowChanges.width = width ; + valueMask |= CWWidth; + } + if (height != -1) + { + windowChanges.height = height ; + valueMask |= CWHeight; + } + XConfigureWindow(wxGlobalDisplay(), (Window) GetMainWindow(), + valueMask, & windowChanges); +#endif +}