Simplify screensaver inhibit API and fix OSX compatibility
authorRobin Gareus <robin@gareus.org>
Sun, 11 Aug 2019 17:04:02 +0000 (19:04 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 11 Aug 2019 18:39:39 +0000 (20:39 +0200)
gtk2_ardour/screensaver.cc
gtk2_ardour/utils.h

index a549a5710a545a991b09c00e74110e9bf1dfcf57..e4aab918f42bc3f309844cd8c0b9d87101c4512c 100644 (file)
 #include <windows.h>
 
 void
-ARDOUR_UI_UTILS::enable_screensaver ()
+ARDOUR_UI_UTILS::inhibit_screensaver (bool inhibit)
 {
-       SetThreadExecutionState (ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
-}
-
-void
-ARDOUR_UI_UTILS::disable_screensaver ()
-{
-       SetThreadExecutionState (ES_CONTINUOUS);
+       if (inhibit) {
+               SetThreadExecutionState (ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
+       } else {
+               SetThreadExecutionState (ES_CONTINUOUS);
+       }
 }
 
 #elif defined __APPLE__
@@ -42,23 +40,26 @@ static IOReturn success = kIOReturnError;
 static IOPMAssertionID assertion_id;
 
 void
-ARDOUR_UI_UTILS::enable_screensaver ()
-{
-       static const CFStringRef name = CFSTR("Ardour DAW");
-       /* kIOPMAssertionTypeNoDisplaySleep prevents display sleep,
-        * kIOPMAssertionTypeNoIdleSleep prevents idle sleep
-        */
-       success = IOPMAssertionCreateWithName (kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, name, &assertion_id);
-}
-
-void
-ARDOUR_UI_UTILS::disable_screensaver ()
+ARDOUR_UI_UTILS::inhibit_screensaver (bool inhibit)
 {
-       if (success != kIOReturnSuccess) {
+       if (inhibit == (success == kIOReturnSuccess)) {
                return;
        }
-       if (kIOReturnSuccess == IOPMAssertionRelease (assertion_id)) {
-               success = kIOReturnError;
+
+       if (inhibit) {
+               /* kIOPMAssertionTypeNoDisplaySleep prevents display sleep,
+                * kIOPMAssertionTypeNoIdleSleep prevents idle sleep
+                */
+#ifdef __ppc__ /* OS X 10.5 compat API */
+               success = IOPMAssertionCreate (kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, &assertion_id);
+#else
+               static const CFStringRef name = CFSTR("Ardour DAW");
+               success = IOPMAssertionCreateWithName (kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, name, &assertion_id);
+#endif
+       } else {
+               if (kIOReturnSuccess == IOPMAssertionRelease (assertion_id)) {
+                       success = kIOReturnError; // mark as inactive
+               }
        }
 }
 
@@ -88,15 +89,13 @@ xdg_screensaver_reset ()
 }
 
 void
-ARDOUR_UI_UTILS::enable_screensaver ()
-{
-       glib_timer = Glib::signal_timeout().connect_seconds (sigc::ptr_fun (&xdg_screensaver_reset), 45, Glib::PRIORITY_DEFAULT_IDLE);
-}
-
-void
-ARDOUR_UI_UTILS::disable_screensaver ()
+ARDOUR_UI_UTILS::inhibit_screensaver (bool inhibit)
 {
        glib_timer.disconnect ();
+       if (inhibit) {
+               xdg_screensaver_reset ();
+               glib_timer = Glib::signal_timeout().connect_seconds (sigc::ptr_fun (&xdg_screensaver_reset), 45, Glib::PRIORITY_DEFAULT_IDLE);
+       }
 }
 
 #endif
index d3e8e11fdc55a8b71656bec2dea510d8dd7ca0d0..dc7b975cc1f7cc48998be4f907944b72d4f2f7c1 100644 (file)
@@ -107,8 +107,7 @@ bool windows_overlap (Gtk::Window *a, Gtk::Window *b);
 bool overwrite_file_dialog (Gtk::Window& parent, std::string title, std::string text);
 bool running_from_source_tree ();
 
-void enable_screensaver ();
-void disable_screensaver ();
+void inhibit_screensaver (bool);
 
 } // namespace
 #endif /* __ardour_gtk_utils_h__ */