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
This commit is contained in:
Mattia Barbon 2003-11-16 11:28:37 +00:00
parent 795c00bdcc
commit dad6a47e6d
4 changed files with 24 additions and 23 deletions

View File

@ -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);

View File

@ -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,

View File

@ -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)

View File

@ -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();