Reuse and store the X11 Display pointer (as void*) so createSurface
doesn't repeatedly open displays. Close the display during cleanup and
before device recreation.
Add a short 200ms delay in recreateDevice to let the GPU driver
stabilize, and explicitly recheck surface support and query surface
capabilities before recreating the swapchain.
Detect VK_ERROR_DEVICE_LOST (-4) in vkAcquireNextImageKHR, vkQueueSubmit
and vkQueuePresentKHR and mark m_deviceLost.
Add handleDeviceLost() and recreateDevice() to stop the render timer,
cleanup and rebuild surface, logical device, swapchain, command objects,
sync objects and VulkanRenderer, then restart rendering on success.
Add DEVICE_LOST_RECOVERY.md with recovery docs and remove the obsolete
REFACTORING_SUMMARY.md
Introduce ScreenLockDetectorBase and move platform logic into
ScreenLockDetectorLinux and ScreenLockDetectorMacOS. Rename mac files to
*_macos, add new base/linux source files, and update CMakeLists to
include them. Convert ScreenLockDetector into a factory/facade that
creates and forwards signals to the platform detector. Add refactoring
docs and a migration guide.
Add m_isClosing flag and closeEvent to stop rendering, stop the render
timer and wait for device idle. Guard swapchain creation and recreation
to abort when closing. Check Vulkan return values and detect invalid
surface capabilities to avoid crashes during window teardown.
Add RenderWidgetBase and update CustomWidget and VulkanWidget to
implement its interface. Refactor MainWindow to use a single
RenderWidgetBase pointer, unify controls and status UI, and remove the
dual-tab setup. Add design and quickstart docs and register the new
header in CMakeLists.txt.
Remove text caching logic and m_lastRenderedText. Switch to direct
memory-mapped updates of dynamic vertex and index buffers each frame,
eliminating staging/caching paths and simplifying debug/update logic.
Move geometry and text to single host-visible vertex/index buffers
created once and updated via vkMapMemory (no staging). Add
createDynamic*/updateDynamicBuffer helpers. Reduce vkWaitForFences
timeout from 5s to 100ms and skip/log on timeout to avoid blocking.
Update geometry only periodically (every 5 frames) and reduce logging
frequency. Destroy and null out old buffers before recreating them to
avoid double frees and leaks.
Cache lastRenderedText and only rebuild text vertex/index buffers when
the content or size changes; reuse buffers across frames and clean them
up on rebuild or shutdown.
Replace vkDeviceWaitIdle in copyBuffer with fence-based wait (longer
timeout) and remove noisy debug prints. Added members and cleanup for
text buffers and index count
Increase MAX_FRAMES_IN_FLIGHT to 3 and cap swapchain images accordingly
Replace vkDeviceWaitIdle with per-copy fence, extend wait timeout and
add diagnostic logging and counters Add stronger error logging and
cleanup on vertex/index buffer creation and copy failures; reset handles
to VK_NULL_HANDLE on failure
Create a VkFence for the copy command, submit with that fence, wait with
vkWaitForFences instead of vkQueueWaitIdle, and destroy the fence after
completion. Ensure fence is destroyed and the command buffer is freed on
error paths.
Change uniform buffer to std140 with explicit fields: time, resX, resY,
rotation, wavePhase plus padding for proper std140 alignment. Regenerate
SPIR-V and embedded .inc files to match.
Add optional VulkanWidget tab
Replace m_loginInterface/m_loginConnected with
m_ukuiInterface/m_ukuiConnected, update connection/teardown logic and
log messages, and query lock state via UKUI's GetLockState method
instead of the previous login manager property call.
Replace QDBusConnection::systemBus() with QDBusConnection::sessionBus()
when creating the org.ukui.ScreenSaver interface and connecting
Lock/Unlock signals so notifications are tied to the user session
Add m_lastLockFrameCount and m_lockPaintFrameCount, compute frames
painted while the screen was locked and log the values. Show frame
counts in the lock info overlay, record frame count at lock, and reduce
the lock info font size for better layout.
Record lock time, duration and count in CustomWidget and show a
lock-info overlay. setPaintingEnabled now logs lock/unlock times and
increments lock count. Emit screenLocked/screenUnlocked signals in
ScreenLockDetector. Minor UI and whitespace cleanup.