diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 7a4589ef1..c5e6d4f4d 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -882,10 +882,12 @@ void Screen::setFrames(FrameFocus focus) } #if defined(DISPLAY_CLOCK_FRAME) - fsi.positions.clock = numframes; - normalFrames[numframes++] = uiconfig.is_clockface_analog ? graphics::ClockRenderer::drawAnalogClockFrame - : graphics::ClockRenderer::drawDigitalClockFrame; - indicatorIcons.push_back(digital_icon_clock); + if (!dismissedFrames.clock) { + fsi.positions.clock = numframes; + normalFrames[numframes++] = uiconfig.is_clockface_analog ? graphics::ClockRenderer::drawAnalogClockFrame + : graphics::ClockRenderer::drawDigitalClockFrame; + indicatorIcons.push_back(digital_icon_clock); + } #endif // Declare this early so it’s available in FOCUS_PRESERVE block @@ -950,10 +952,12 @@ void Screen::setFrames(FrameFocus focus) indicatorIcons.push_back(icon_system); } #if !defined(DISPLAY_CLOCK_FRAME) - fsi.positions.clock = numframes; - normalFrames[numframes++] = uiconfig.is_clockface_analog ? graphics::ClockRenderer::drawAnalogClockFrame - : graphics::ClockRenderer::drawDigitalClockFrame; - indicatorIcons.push_back(digital_icon_clock); + if (!dismissedFrames.clock) { + fsi.positions.clock = numframes; + normalFrames[numframes++] = uiconfig.is_clockface_analog ? graphics::ClockRenderer::drawAnalogClockFrame + : graphics::ClockRenderer::drawDigitalClockFrame; + indicatorIcons.push_back(digital_icon_clock); + } #endif #if HAS_WIFI && !defined(ARCH_PORTDUINO) @@ -1115,6 +1119,10 @@ void Screen::dismissCurrentFrame() LOG_INFO("Dismiss Memory"); dismissedFrames.system = true; dismissed = true; + } else if (currentFrame == framesetInfo.positions.clock) { + LOG_INFO("Dismiss Clock"); + dismissedFrames.clock = true; + dismissed = true; #if HAS_GPS } else if (currentFrame == framesetInfo.positions.nodelist_bearings) { LOG_INFO("Dismiss Bearings"); diff --git a/src/graphics/Screen.h b/src/graphics/Screen.h index 3f4c03812..a3a7fd446 100644 --- a/src/graphics/Screen.h +++ b/src/graphics/Screen.h @@ -677,6 +677,7 @@ class Screen : public concurrency::OSThread bool wifi = false; bool system = false; bool home = false; + bool clock = false; #ifndef USE_EINK bool nodelist = false; #endif diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index b16e12ab1..fa012bdb1 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -234,12 +234,12 @@ void menuHandler::TZPicker() void menuHandler::clockMenu() { - static const char *optionsArray[] = {"Back", "Clock Face", "Time Format", "Timezone"}; - enum optionsNumbers { Back = 0, Clock = 1, Time = 2, Timezone = 3 }; + static const char *optionsArray[] = {"Back", "Clock Face", "Time Format", "Timezone", "Dismiss Frame"}; + enum optionsNumbers { Back = 0, Clock = 1, Time = 2, Timezone = 3, DismissCurrentFrame = 4 }; BannerOverlayOptions bannerOptions; bannerOptions.message = "Clock Action"; bannerOptions.optionsArrayPtr = optionsArray; - bannerOptions.optionsCount = 4; + bannerOptions.optionsCount = 5; bannerOptions.bannerCallback = [](int selected) -> void { if (selected == Clock) { menuHandler::menuQueue = menuHandler::clock_face_picker; @@ -250,6 +250,8 @@ void menuHandler::clockMenu() } else if (selected == Timezone) { menuHandler::menuQueue = menuHandler::TZ_picker; screen->runNow(); + } else if (selected == DismissCurrentFrame) { + menuHandler::menuQueue = menuHandler::DismissCurrentFrame; } }; screen->showOverlayBanner(bannerOptions);