Center the OpenWindow. The problem is that we cannot get the real size of the window before it's actually shown on screen.. the trick I did was to show it offscreen, get the real size and move the window.

Fixes ticket #4236


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32410 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Saint-Pierre 2009-08-15 03:20:07 +00:00
parent 6c85c7eec8
commit 3a613432c9
2 changed files with 18 additions and 5 deletions

View File

@ -57,12 +57,22 @@ OpenWindow::OpenWindow()
.Add(probeDeviceButton, 2, 1)
.SetInsets(8, 8, 8, 8)
);
// TODO: This does not center the window, since with layout management,
// the window will still have an invalid size at this point.
BScreen screen(this);
MoveTo(screen.Frame().left + (screen.Frame().Width() - Frame().Width()) / 2,
screen.Frame().top + (screen.Frame().Height() - Frame().Height()) / 2);
// move the window offscreen..
MoveTo(screen.Frame().right+20, screen.Frame().top);
fCentered = true;
}
void
OpenWindow::FrameResized(float width, float height)
{
if (fCentered) {
BScreen screen(this);
MoveTo(screen.Frame().left + (screen.Frame().Width() - width) / 2,
screen.Frame().top + (screen.Frame().Height() - height) / 2);
}
fCentered = false;
}

View File

@ -20,11 +20,14 @@ public:
virtual void MessageReceived(BMessage* message);
virtual bool QuitRequested();
virtual void FrameResized(float width, float height);
static void CollectDevices(BMenu* menu,
BEntry* startEntry = NULL);
private:
BMenu* fDevicesMenu;
bool fCentered;
};
#endif /* OPEN_WINDOW_H */