3s timer starts when dropdown opens or mouse leaves. Hovering
the dropdown stops the timer. Leaves instantly on mouse exit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove grabFocus from BarDropdown. Centralized toggleDropdown()
closes the active dropdown before opening a new one, so clicking
between network/battery/calendar/tray is instant — no double-click.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Click battery to see charge %, wattage draw, and switch between
power-saver/balanced/performance profiles via power-profiles-daemon.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reset state before each poll so disconnected state is detected.
Immediately update icon on disconnect, and trigger a delayed
re-poll (2s) after connect/disconnect actions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Track actual wifi device name instead of hardcoded wlan0
- Use writeShellScript for wifi-connect with zenity password fallback
- Fix wifiNetworks array mutation for proper QML reactivity
- Add zenity to system packages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Click network icon to see available wifi networks with signal
strength. Click to connect, disconnect button for active network.
Uses BarDropdown component for consistent styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Inline QML component encapsulating PopupWindow + concave
corners + morphing animation + dismiss guard. Calendar and
tray context menu both use it now.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Same morphing animation, concave corners, and dismiss behavior
as the calendar popup. Menu drops down from bar at icon position.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Clicking clock while popup open triggered grabFocus dismiss
then immediately reopened. Add justDismissed guard so the
click handler ignores the click that caused the dismiss.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wayland popup protocol prevents re-showing dismissed popups.
Remove grabFocus and toggle open/close via clock click only,
allowing the slide-up animation to play on close.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Intercept grabFocus hide via onVisibleChanged — re-show popup
briefly and animate height to 0 before truly hiding it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Handle onActiveChanged to set open=false and start close timer
instead of letting grabFocus hide the popup instantly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Canvas at fixed 8x8 inside a clip Item that grows with
calContent.height — corners reveal progressively with the
slide animation instead of breaking on dynamic resize.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Corners now track calContent.height (clamped to 8px) instead of
fading opacity, so they reveal with the same slide-down morph.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Popup was only fullWidth+4, leaving 2px per side — the 8px
corners were clipped. Now fullWidth+16 gives 8px per side.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Filled area was at the bottom of each corner instead of the top.
Flipped arcs so fill connects to bar above and calendar beside.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace broken destination-out compositing with direct Canvas
path fill — draws only the concave shape without alpha tricks.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>