Browse Source

programmatic control of minimize/restore state

David Rose 15 years ago
parent
commit
03a030532f

+ 37 - 6
panda/src/osxdisplay/osxGraphicsWindow.mm

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

+ 37 - 5
panda/src/tinydisplay/tinyOsxGraphicsWindow.mm

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