Created
August 14, 2014 20:58
-
-
Save jessicah/ac706c16504db0e2ebe9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 3b6ab51c087d0d2aac9b2b59c85bd5bb50957945 Mon Sep 17 00:00:00 2001 | |
From: Jessica Hamilton <jessica.l.hamilton@gmail.com> | |
Date: Sat, 2 Aug 2014 22:28:52 +1200 | |
Subject: [PATCH] Only suspend the screensaver for non-GL screensavers. | |
When the password prompt is displayed, if the screensaver is | |
using a BGLView, then it won't draw on top of the password | |
dialog, so we don't need to stop the screensaver, which is | |
more visually pleasing. | |
--- | |
src/bin/screen_blanker/Jamfile | 3 +++ | |
src/bin/screen_blanker/ScreenBlanker.cpp | 20 ++++++++++++++++---- | |
src/bin/screen_blanker/ScreenBlanker.h | 2 ++ | |
3 files changed, 21 insertions(+), 4 deletions(-) | |
diff --git a/src/bin/screen_blanker/Jamfile b/src/bin/screen_blanker/Jamfile | |
index 89f5893..8672e85 100644 | |
--- a/src/bin/screen_blanker/Jamfile | |
+++ b/src/bin/screen_blanker/Jamfile | |
@@ -7,6 +7,8 @@ UseHeaders [ FDirName headers os add-ons screen_saver ] ; | |
UsePrivateHeaders interface screen_saver ; | |
+UseBuildFeatureHeaders mesa ; | |
+ | |
BinCommand screen_blanker : | |
ScreenBlanker.cpp | |
ScreenSaverWindow.cpp | |
@@ -17,6 +19,7 @@ BinCommand screen_blanker : | |
# link against libscreensaver.so | |
: be game localestub libscreensaver.so $(TARGET_LIBSUPC++) | |
+ [ BuildFeatureAttribute mesa : library ] | |
: screen_blanker.rdef | |
; | |
diff --git a/src/bin/screen_blanker/ScreenBlanker.cpp b/src/bin/screen_blanker/ScreenBlanker.cpp | |
index 83fdc6a..5b37283 100644 | |
--- a/src/bin/screen_blanker/ScreenBlanker.cpp | |
+++ b/src/bin/screen_blanker/ScreenBlanker.cpp | |
@@ -17,6 +17,7 @@ | |
#include <Debug.h> | |
#include <File.h> | |
#include <FindDirectory.h> | |
+#include <GLView.h> | |
#include <Path.h> | |
#include <Screen.h> | |
#include <StorageDefs.h> | |
@@ -42,6 +43,7 @@ ScreenBlanker::ScreenBlanker() | |
fWindow(NULL), | |
fSaverRunner(NULL), | |
fPasswordWindow(NULL), | |
+ fNeedsSuspend(true), | |
fResumeRunner(NULL), | |
fStandByScreenRunner(NULL), | |
fSuspendScreenRunner(NULL), | |
@@ -75,9 +77,17 @@ ScreenBlanker::ReadyToRun() | |
fWindow->SetSaverRunner(fSaverRunner); | |
BScreenSaver* saver = fSaverRunner->ScreenSaver(); | |
- if (saver != NULL && saver->StartSaver(view, false) == B_OK) | |
+ if (saver != NULL && saver->StartSaver(view, false) == B_OK) { | |
+ view = view->ChildAt(0); | |
+ while (view != NULL) { | |
+ if (dynamic_cast<BGLView*>(view) != NULL) { | |
+ fNeedsSuspend = false; | |
+ break; | |
+ } | |
+ view = view->NextSibling(); | |
+ } | |
fSaverRunner->Run(); | |
- else { | |
+ } else { | |
fprintf(stderr, "could not load the screensaver addon\n"); | |
view->SetViewColor(0, 0, 0); | |
// needed for Blackness saver | |
@@ -124,7 +134,8 @@ ScreenBlanker::_ShowPasswordWindow() | |
_TurnOnScreen(); | |
if (fWindow->Lock()) { | |
- fSaverRunner->Suspend(); | |
+ if (fNeedsSuspend) | |
+ fSaverRunner->Suspend(); | |
fWindow->Sync(); | |
// TODO: is that needed? | |
@@ -241,7 +252,8 @@ ScreenBlanker::MessageReceived(BMessage* message) | |
fPasswordWindow->SetPassword(""); | |
fPasswordWindow->Hide(); | |
- fSaverRunner->Resume(); | |
+ if (fNeedsSuspend) | |
+ fSaverRunner->Resume(); | |
fWindow->Unlock(); | |
} | |
diff --git a/src/bin/screen_blanker/ScreenBlanker.h b/src/bin/screen_blanker/ScreenBlanker.h | |
index b190e73..0010853 100644 | |
--- a/src/bin/screen_blanker/ScreenBlanker.h | |
+++ b/src/bin/screen_blanker/ScreenBlanker.h | |
@@ -49,6 +49,8 @@ private: | |
ScreenSaverRunner* fSaverRunner; | |
PasswordWindow* fPasswordWindow; | |
+ bool fNeedsSuspend; | |
+ | |
bigtime_t fBlankTime; | |
BMessageRunner* fResumeRunner; | |
-- | |
1.9.1 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment