From dad6a47e6d425673510b53e9a01114cdea2a5f2c Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Sun, 16 Nov 2003 11:28:37 +0000 Subject: [PATCH] Changes corresponding to patch #841324 from Ian Brown: "GetPosition() returns wrong result for dialog". Moved implementation from wxFrame to wxTopLevelWindow thus sharing it between wxFrame and wxDialog. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24575 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/motif/frame.h | 1 - include/wx/motif/toplevel.h | 1 + src/motif/frame.cpp | 22 ---------------------- src/motif/toplevel.cpp | 23 +++++++++++++++++++++++ 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/include/wx/motif/frame.h b/include/wx/motif/frame.h index 7f555c1f65..4cb7f953c8 100644 --- a/include/wx/motif/frame.h +++ b/include/wx/motif/frame.h @@ -111,7 +111,6 @@ private: bool m_iconized; virtual void DoGetSize(int *width, int *height) const; - virtual void DoGetPosition(int *x, int *y) const; virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); diff --git a/include/wx/motif/toplevel.h b/include/wx/motif/toplevel.h index 827b853690..35bef8c484 100644 --- a/include/wx/motif/toplevel.h +++ b/include/wx/motif/toplevel.h @@ -69,6 +69,7 @@ protected: // common part of wxDialog/wxFrame destructors void PreDestroy(); + virtual void DoGetPosition(int* x, int* y) const; private: // both these functions should be pure virtual virtual bool DoCreate( wxWindow* parent, wxWindowID id, diff --git a/src/motif/frame.cpp b/src/motif/frame.cpp index 6213bc498c..22ec6184a3 100644 --- a/src/motif/frame.cpp +++ b/src/motif/frame.cpp @@ -404,28 +404,6 @@ void wxFrame::DoGetSize(int *width, int *height) const *width = xx; *height = yy; } -void wxFrame::DoGetPosition(int *x, int *y) const -{ - Window parent_window = XtWindow((Widget) m_frameShell), - next_parent = XtWindow((Widget) m_frameShell), - root = RootWindowOfScreen(XtScreen((Widget) m_frameShell)); - - // 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; unsigned int n; - parent_window = next_parent; - XQueryTree(XtDisplay((Widget) m_frameShell), parent_window, &root, - &next_parent, &theChildren, &n); - XFree(theChildren); // not needed - } - int xx, yy; unsigned int dummy; - XGetGeometry(XtDisplay((Widget) m_frameShell), parent_window, &root, - &xx, &yy, &dummy, &dummy, &dummy, &dummy); - if (x) *x = xx; - if (y) *y = yy; -} - void wxFrame::DoSetSize(int x, int y, int width, int height, int WXUNUSED(sizeFlags)) { if (x > -1) diff --git a/src/motif/toplevel.cpp b/src/motif/toplevel.cpp index 5f2891a4e5..d99fa360b0 100644 --- a/src/motif/toplevel.cpp +++ b/src/motif/toplevel.cpp @@ -185,6 +185,29 @@ bool wxTopLevelWindowMotif::Create( wxWindow *parent, wxWindowID id, return retval; } +void wxTopLevelWindowMotif::DoGetPosition(int *x, int *y) const +{ + Widget top = (Widget) GetTopWidget(); + Window parent_window = XtWindow((Widget) top), + next_parent = XtWindow((Widget) top), + root = RootWindowOfScreen(XtScreen((Widget) top)); + + // 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; unsigned int n; + parent_window = next_parent; + XQueryTree(XtDisplay((Widget) top), parent_window, &root, + &next_parent, &theChildren, &n); + XFree(theChildren); // not needed + } + int xx, yy; unsigned int dummy; + XGetGeometry(XtDisplay((Widget) top), parent_window, &root, + &xx, &yy, &dummy, &dummy, &dummy, &dummy); + if (x) *x = xx; + if (y) *y = yy; +} + void wxTopLevelWindowMotif::Raise() { Widget top = (Widget) GetTopWidget(); -- 2.45.2