programmatic control of minimize/restore state

This commit is contained in:
David Rose 2011-02-26 19:44:53 +00:00
parent d906bb1959
commit 03a030532f
2 changed files with 74 additions and 11 deletions

View File

@ -1115,8 +1115,14 @@ os_open_window(WindowProperties &req_properties) {
}
SetFrontProcess(&psn);
}
if (req_properties.has_fullscreen() && req_properties.get_fullscreen()) {
bool wants_fullscreen = req_properties.has_fullscreen() && req_properties.get_fullscreen();
if (req_properties.get_minimized()) {
// A minimized window can't be fullscreen.
wants_fullscreen = false;
}
if (wants_fullscreen) {
if (osxdisplay_cat.is_debug()) {
osxdisplay_cat.debug()
<< "Creating full screen\n";
@ -1157,7 +1163,10 @@ os_open_window(WindowProperties &req_properties) {
}
_properties.set_fullscreen(true);
_is_fullscreen =true;
_properties.set_minimized(false);
_properties.set_foreground(true);
_is_fullscreen = true;
full_screen_window = this;
req_properties.clear_fullscreen();
@ -1280,7 +1289,7 @@ os_open_window(WindowProperties &req_properties) {
SetWRefCon(_osx_window, (long) this);
gWinEvtHandler = NewEventHandlerUPP(window_event_handler);
InstallWindowEventHandler(_osx_window, gWinEvtHandler, GetEventTypeCount(list), list, (void*)this, NULL); // add event handler
ShowWindow (_osx_window);
if (osxdisplay_cat.is_debug()) {
@ -1320,6 +1329,16 @@ os_open_window(WindowProperties &req_properties) {
_properties.set_undecorated(req_properties.get_undecorated());
req_properties.clear_undecorated();
}
_properties.set_minimized(false);
_properties.set_foreground(true);
if (req_properties.has_minimized()) {
CollapseWindow(_osx_window, req_properties.get_minimized());
_properties.set_minimized(req_properties.get_minimized());
_properties.set_foreground(!req_properties.get_minimized());
req_properties.clear_minimized();
}
}
// Now measure the size and placement of the window we
@ -1335,8 +1354,6 @@ os_open_window(WindowProperties &req_properties) {
set_icon_filename(req_properties.get_icon_filename());
}
_properties.set_foreground(true);
_properties.set_minimized(false);
_properties.set_open(true);
if (_properties.has_size()) {
@ -1950,6 +1967,13 @@ set_properties_now(WindowProperties &properties) {
properties.get_y_size() != _properties.get_y_size()))) {
need_full_rebuild = true;
}
// If we are fullscreen and requesting a minimize change
if (_properties.get_fullscreen() &&
(properties.has_minimized() &&
(properties.get_minimized() != _properties.get_minimized()))) {
need_full_rebuild = true;
}
if (need_full_rebuild) {
// Logic here is .. take a union of the properties .. with the
@ -2010,6 +2034,13 @@ set_properties_now(WindowProperties &properties) {
properties.clear_cursor_hidden();
}
if (properties.has_minimized()) {
if (_properties.get_minimized() != properties.get_minimized()) {
CollapseWindow(_osx_window, properties.get_minimized());
}
properties.clear_minimized();
}
if (osxdisplay_cat.is_debug()) {
osxdisplay_cat.debug()
<< "set_properties_now Out....." << _properties << "\n";

View File

@ -889,8 +889,15 @@ bool TinyOsxGraphicsWindow::OSOpenWindow(WindowProperties &req_properties) {
SetFrontProcess(&psn);
}
if (req_properties.has_fullscreen() && req_properties.get_fullscreen()) {
tinydisplay_cat.info() << "Creating full screen\n";
bool wants_fullscreen = req_properties.has_fullscreen() && req_properties.get_fullscreen();
if (req_properties.get_minimized()) {
// A minimized window can't be fullscreen.
wants_fullscreen = false;
}
if (wants_fullscreen) {
tinydisplay_cat.info() << "Creating full screen\n";
// capture the main display
CGDisplayCapture(kCGDirectMainDisplay);
@ -916,7 +923,10 @@ bool TinyOsxGraphicsWindow::OSOpenWindow(WindowProperties &req_properties) {
}
_properties.set_fullscreen(true);
_is_fullscreen = true;
_properties.set_minimized(false);
_properties.set_foreground(true);
_is_fullscreen = true;
FullScreenWindow = this;
req_properties.clear_fullscreen();
} else {
@ -1068,6 +1078,16 @@ bool TinyOsxGraphicsWindow::OSOpenWindow(WindowProperties &req_properties) {
_properties.set_undecorated(req_properties.get_undecorated());
req_properties.clear_undecorated();
}
_properties.set_minimized(false);
_properties.set_foreground(true);
if (req_properties.has_minimized()) {
CollapseWindow(_osx_window, req_properties.get_minimized());
_properties.set_minimized(req_properties.get_minimized());
_properties.set_foreground(!req_properties.get_minimized());
req_properties.clear_minimized();
}
}
// Now measure the size and placement of the window we
@ -1084,8 +1104,6 @@ bool TinyOsxGraphicsWindow::OSOpenWindow(WindowProperties &req_properties) {
set_icon_filename(req_properties.get_icon_filename());
}
_properties.set_foreground(true);
_properties.set_minimized(false);
_properties.set_open(true);
if (_properties.has_size())
@ -1680,6 +1698,13 @@ void TinyOsxGraphicsWindow::set_properties_now(WindowProperties &properties) {
properties.get_y_size() != _properties.get_y_size()))) {
need_full_rebuild = true;
}
// If we are fullscreen and requesting a minimize change
if (_properties.get_fullscreen() &&
(properties.has_minimized() &&
(properties.get_minimized() != _properties.get_minimized()))) {
need_full_rebuild = true;
}
if (need_full_rebuild) {
// Logic here is .. take a union of the properties .. with the
@ -1739,6 +1764,13 @@ void TinyOsxGraphicsWindow::set_properties_now(WindowProperties &properties) {
properties.clear_cursor_hidden();
}
if (properties.has_minimized()) {
if (_properties.get_minimized() != properties.get_minimized()) {
CollapseWindow(_osx_window, properties.get_minimized());
}
properties.clear_minimized();
}
if (tinydisplay_cat.is_debug()) {
tinydisplay_cat.debug()
<< "set_properties_now Out....." << _properties << "\n";