-// For implementation purposes - sometimes decorations make the client area
-// smaller
-wxPoint wxTopLevelWindowX11::GetClientAreaOrigin() const
-{
- // wxFrame::GetClientAreaOrigin
- // does the required calculation already.
- return wxPoint(0, 0);
-}
-
-void wxTopLevelWindowX11::DoGetClientSize( int *width, int *height ) const
-{
- XSync(wxGlobalDisplay(), False);
- wxWindowX11::DoGetClientSize(width, height);
-}
-
-void wxTopLevelWindowX11::DoSetClientSize(int width, int height)
-{
- wxWindowX11::DoSetClientSize(width, height);
-
-#if !wxUSE_NANOX
- // Set the top-level window size
- XSizeHints size_hints;
- wxSize oldSize = GetSize();
- wxSize oldClientSize = GetClientSize();
-
- size_hints.flags = PSize;
- size_hints.width = width + (oldSize.x - oldClientSize.x);
- size_hints.height = height + (oldSize.y - oldClientSize.y);
- XSetWMNormalHints( (Display*) GetXDisplay(), (Window) GetMainWindow(),
- &size_hints);
-
- // This seems to be necessary or resizes don't get performed
- XSync(wxGlobalDisplay(), False);
- XSync(wxGlobalDisplay(), False);
-
-#if 0
- wxLogDebug("DoSetClientSize: Tried to set size to %d, %d", (int) size_hints.width, (int) size_hints.height);
-
- XSync(wxGlobalDisplay(), False);
- wxSize newSize = GetSize();
- wxLogDebug("New size is %d, %d", (int) newSize.x, (int) newSize.y);
-#endif
-#endif
-}
-
-void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
-{
- // wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height);
-
-#if 0
- wxWindowX11::DoSetSize(x, y, width, height, sizeFlags);
-#endif
- XSync(wxGlobalDisplay(), False);
- Window window = (Window) m_mainWidget;
- if (!window)
- return ;
-
- Display *display = (Display*) GetXDisplay();
- Window root = RootWindowOfScreen(DefaultScreenOfDisplay(display));
- Window parent_window = window,
- next_parent = window;
-
- // search for the parent that is child of ROOT, because the WM may
- // reparent twice and notify only the next parent (like FVWM)
- while (next_parent != root) {
- Window *theChildren;
-#if wxUSE_NANOX
- GR_COUNT n;
-#else
- unsigned int n;
-#endif
- parent_window = next_parent;
- XQueryTree(display, parent_window, &root,
- &next_parent, &theChildren, &n);
- XFree(theChildren); // not needed
- }
-
- XWindowChanges windowChanges;
- windowChanges.x = x;
- windowChanges.y = y;
- windowChanges.width = width;
- windowChanges.height = height;
- windowChanges.stack_mode = 0;
- int valueMask = CWX | CWY | CWWidth | CWHeight;
-
- if (x != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- {
- valueMask |= CWX;
- }
- if (y != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- {
- valueMask |= CWY;
- }
- if (width != -1)
- {
- windowChanges.width = wxMax(1, width);
- valueMask |= CWWidth;
- }
- if (height != -1)
- {
- windowChanges.height = wxMax(1, height);
- valueMask |= CWHeight;
- }
-
- XConfigureWindow( display, parent_window, valueMask, &windowChanges );
-
-#if !wxUSE_NANOX
- XSizeHints size_hints;
- size_hints.flags = 0;
- if (x > -1 && y > -1)
- size_hints.flags |= PPosition;
- if (width > -1 && height > -1)
- size_hints.flags |= PSize;
- size_hints.width = width;
- size_hints.height = height;
- size_hints.x = x;
- size_hints.y = y;
- XSetWMNormalHints( (Display*) GetXDisplay(), (Window) GetMainWindow(),
- &size_hints);
-
- // This seems to be necessary or resizes don't get performed.
- // Take them out (or even just one of them), and the About
- // box of the minimal sample probably won't be resized right.
- XSync(wxGlobalDisplay(), False);
- XSync(wxGlobalDisplay(), False);
-#endif
-#if 1
- wxSizeEvent event(wxSize(width, height), GetId());
- event.SetEventObject(this);
- GetEventHandler()->ProcessEvent(event);
-#endif
-}
-
-void wxTopLevelWindowX11::DoGetPosition(int *x, int *y) const
-{
- XSync(wxGlobalDisplay(), False);
- Window window = (Window) m_mainWidget;
- if (!window)
- return ;
-
- Display *display = (Display*) GetXDisplay();
- Window root = RootWindowOfScreen(DefaultScreenOfDisplay(display));
- Window parent_window = window,
- next_parent = window;