fix: explicitly add launcher buttons and power button to default group, declare stopScreensaverLocked, and disable idle screensaver timer on monochrome/RLCD screens
This commit is contained in:
@@ -32,17 +32,10 @@ static std::shared_ptr<hal::display::DisplayDevice> getDisplay() {
|
||||
|
||||
void DisplayIdleService::stopScreensaverCb(lv_event_t* e) {
|
||||
auto* self = static_cast<DisplayIdleService*>(lv_event_get_user_data(e));
|
||||
lv_event_stop_bubbling(e);
|
||||
self->stopScreensaverRequested.store(true, std::memory_order_release);
|
||||
lv_display_trigger_activity(nullptr);
|
||||
self->stopScreensaverLocked();
|
||||
}
|
||||
|
||||
void DisplayIdleService::stopScreensaver() {
|
||||
if (!lvgl::lock(100)) {
|
||||
// Lock failed - keep flag set to retry on next tick
|
||||
return;
|
||||
}
|
||||
|
||||
void DisplayIdleService::stopScreensaverLocked() {
|
||||
const auto restoreDuty = cachedDisplaySettings.backlightDuty;
|
||||
const bool wasDimmed = displayDimmed;
|
||||
|
||||
@@ -54,7 +47,6 @@ void DisplayIdleService::stopScreensaver() {
|
||||
lv_obj_delete(screensaverOverlay);
|
||||
screensaverOverlay = nullptr;
|
||||
}
|
||||
lvgl::unlock();
|
||||
stopScreensaverRequested.store(false, std::memory_order_relaxed);
|
||||
|
||||
// Reset auto-off state
|
||||
@@ -69,6 +61,15 @@ void DisplayIdleService::stopScreensaver() {
|
||||
displayDimmed = wasDimmed ? false : displayDimmed;
|
||||
}
|
||||
|
||||
void DisplayIdleService::stopScreensaver() {
|
||||
if (!lvgl::lock(100)) {
|
||||
// Lock failed - keep flag set to retry on next tick
|
||||
return;
|
||||
}
|
||||
stopScreensaverLocked();
|
||||
lvgl::unlock();
|
||||
}
|
||||
|
||||
void DisplayIdleService::activateScreensaver() {
|
||||
lv_obj_t* top = lv_layer_top();
|
||||
|
||||
@@ -203,6 +204,12 @@ void DisplayIdleService::tick() {
|
||||
}
|
||||
|
||||
bool DisplayIdleService::onStart(ServiceContext& service) {
|
||||
auto display = getDisplay();
|
||||
if (display != nullptr && !display->supportsBacklightDuty()) {
|
||||
LOGGER.info("Monochrome/RLCD display detected (no backlight control): disabling screensaver tick timer");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Seed random number generator for varied screensaver patterns
|
||||
srand(static_cast<unsigned int>(time(nullptr)));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user