From a9ed7df7ff3615b1fcda27d2d598484fb879e5ed Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sun, 24 Nov 2024 21:36:28 +0100 Subject: [PATCH] Set main display power for virtual display Change the display power of the main display when mirroring a virtual display, to make it possible to turn off the screen. Fixes #5522 --- server/src/main/java/com/genymobile/scrcpy/CleanUp.java | 8 +++++--- .../java/com/genymobile/scrcpy/control/Controller.java | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/CleanUp.java b/server/src/main/java/com/genymobile/scrcpy/CleanUp.java index 352f7c6b..911cb5ba 100644 --- a/server/src/main/java/com/genymobile/scrcpy/CleanUp.java +++ b/server/src/main/java/com/genymobile/scrcpy/CleanUp.java @@ -207,13 +207,15 @@ public final class CleanUp { } } - if (displayId != Device.DISPLAY_ID_NONE && Device.isScreenOn(displayId)) { + // Change the display power of the main display when mirroring a virtual display + int targetDisplayId = displayId != Device.DISPLAY_ID_NONE ? displayId : 0; + if (Device.isScreenOn(targetDisplayId)) { if (powerOffScreen) { Ln.i("Power off screen"); - Device.powerOffScreen(displayId); + Device.powerOffScreen(targetDisplayId); } else if (restoreDisplayPower) { Ln.i("Restoring display power"); - Device.setDisplayPower(displayId, true); + Device.setDisplayPower(targetDisplayId, true); } } diff --git a/server/src/main/java/com/genymobile/scrcpy/control/Controller.java b/server/src/main/java/com/genymobile/scrcpy/control/Controller.java index f0e4c037..fb9eba10 100644 --- a/server/src/main/java/com/genymobile/scrcpy/control/Controller.java +++ b/server/src/main/java/com/genymobile/scrcpy/control/Controller.java @@ -281,7 +281,7 @@ public class Controller implements AsyncProcessor, VirtualDisplayListener { setClipboard(msg.getText(), msg.getPaste(), msg.getSequence()); break; case ControlMessage.TYPE_SET_DISPLAY_POWER: - if (supportsInputEvents && displayId != Device.DISPLAY_ID_NONE) { + if (supportsInputEvents) { setDisplayPower(msg.getOn()); } break; @@ -691,7 +691,9 @@ public class Controller implements AsyncProcessor, VirtualDisplayListener { } private void setDisplayPower(boolean on) { - boolean setDisplayPowerOk = Device.setDisplayPower(displayId, on); + // Change the display power of the main display when mirroring a virtual display + int targetDisplayId = displayId != Device.DISPLAY_ID_NONE ? displayId : 0; + boolean setDisplayPowerOk = Device.setDisplayPower(targetDisplayId, on); if (setDisplayPowerOk) { keepDisplayPowerOff = !on; Ln.i("Device display turned " + (on ? "on" : "off"));