Phase 6: Theme & Polish
Added comprehensive theming and configuration support:
Core Changes:
- Created data/theme.edc with Edje theme groups for gadget states
(disconnected, connecting, connected, error) with color-coded icons
- Implemented signal-based theme updates (e,state,* signals)
- Created e_mod_config.c with full configuration dialog
- Added i18n support structure (po/ directory)
Configuration Dialog:
- Auto-connect to known networks toggle
- Show hidden networks toggle
- Signal refresh interval slider (1-60s)
- Adapter selection UI (for multi-adapter systems)
- Saves via e_config_save_queue()
Theme Integration:
- Gadget loads e-module-iwd.edj theme file
- Falls back to simple colored rectangles if theme missing
- State changes emit Edje signals to theme
- Signal strength indicator support
Build System:
- Updated data/meson.build to compile theme with edje_cc
- Added i18n framework with po/meson.build
- Created meson_options.txt with nls option
- Added po/POTFILES.in for translatable strings
Module Statistics:
- Module size: 232KB (includes config dialog + theme loading)
- Theme file: 11KB (e-module-iwd.edj)
- Total lines of code: ~3,500+
- New files: 5 (theme.edc, e_mod_config.c, 3 i18n files)
API Compatibility:
- Fixed E_Container deprecation (E 0.27+ uses NULL)
- Updated e_iwd_config_show() signature
- Proper edje_object_file_get() usage with output parameters
The gadget now has professional theme support with visual state
feedback. Configuration can be accessed through standard E module
settings. i18n framework ready for translations.
🎨 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
d570560d3b
commit
c94eb55284
22 changed files with 1728 additions and 37 deletions
333
CLAUDE.md
Normal file
333
CLAUDE.md
Normal file
|
|
@ -0,0 +1,333 @@
|
|||
PRD — Enlightenment Wi-Fi Module (iwd Backend)
|
||||
1. Overview
|
||||
1.1 Purpose
|
||||
|
||||
Create an Enlightenment module that manages Wi-Fi connections using iwd (Intel Wireless Daemon) as the backend, providing functionality similar to econnman, but without ConnMan.
|
||||
|
||||
The module should:
|
||||
|
||||
Integrate cleanly with Enlightenment (E17+)
|
||||
|
||||
Use iwd’s D-Bus API directly
|
||||
|
||||
Provide a simple, fast, and reliable Wi-Fi UI
|
||||
|
||||
Follow Enlightenment UX conventions (gadget + popup)
|
||||
|
||||
1.2 Motivation
|
||||
|
||||
ConnMan is increasingly deprecated or undesired on many systems
|
||||
|
||||
iwd is lightweight, fast, and widely adopted (Arch, Fedora, Debian)
|
||||
|
||||
Enlightenment currently lacks a first-class iwd-based Wi-Fi module
|
||||
|
||||
Users want a native, non-NM, non-ConnMan Wi-Fi solution
|
||||
|
||||
2. Goals & Non-Goals
|
||||
2.1 Goals
|
||||
|
||||
Feature parity with basic econnman Wi-Fi features
|
||||
|
||||
Zero dependency on NetworkManager or ConnMan
|
||||
|
||||
D-Bus only (no shelling out to iwctl)
|
||||
|
||||
Minimal background CPU/memory usage
|
||||
|
||||
Robust behavior across suspend/resume and network changes
|
||||
|
||||
2.2 Non-Goals
|
||||
|
||||
Ethernet management
|
||||
|
||||
VPN management
|
||||
|
||||
Cellular (WWAN) support
|
||||
|
||||
Advanced enterprise Wi-Fi UI (EAP tuning beyond basics)
|
||||
|
||||
3. Target Users
|
||||
|
||||
Enlightenment desktop users
|
||||
|
||||
Minimalist / embedded systems using iwd
|
||||
|
||||
Power users avoiding NetworkManager
|
||||
|
||||
Distributions shipping iwd by default
|
||||
|
||||
4. User Experience
|
||||
4.1 Gadget (Shelf Icon)
|
||||
|
||||
Status icon:
|
||||
|
||||
Disconnected
|
||||
|
||||
Connecting
|
||||
|
||||
Connected (signal strength tiers)
|
||||
|
||||
Error
|
||||
|
||||
Tooltip:
|
||||
|
||||
Current SSID
|
||||
|
||||
Signal strength
|
||||
|
||||
Security type
|
||||
|
||||
4.2 Popup UI
|
||||
|
||||
Triggered by clicking the gadget.
|
||||
Sections:
|
||||
|
||||
Current Connection
|
||||
|
||||
SSID
|
||||
|
||||
Signal strength
|
||||
|
||||
IP (optional)
|
||||
|
||||
Disconnect button
|
||||
|
||||
Available Networks
|
||||
|
||||
Sorted by:
|
||||
|
||||
Known networks
|
||||
|
||||
Signal strength
|
||||
|
||||
Icons for:
|
||||
|
||||
Open
|
||||
|
||||
WPA2/WPA3
|
||||
|
||||
Connect button per network
|
||||
|
||||
Actions
|
||||
|
||||
Rescan
|
||||
|
||||
Enable / Disable Wi-Fi
|
||||
|
||||
4.3 Authentication Flow
|
||||
|
||||
On selecting a secured network:
|
||||
|
||||
Prompt for passphrase
|
||||
|
||||
Optional “remember network”
|
||||
|
||||
Errors clearly reported (wrong password, auth failed, etc.)
|
||||
|
||||
5. Functional Requirements
|
||||
5.1 Wi-Fi Control
|
||||
|
||||
Enable / disable Wi-Fi (via iwd Powered)
|
||||
|
||||
Trigger scan
|
||||
|
||||
List available networks
|
||||
|
||||
Connect to a network
|
||||
|
||||
Disconnect from current network
|
||||
|
||||
5.2 Network State Monitoring
|
||||
|
||||
React to:
|
||||
|
||||
Connection changes
|
||||
|
||||
Signal strength changes
|
||||
|
||||
Device availability
|
||||
|
||||
iwd daemon restart
|
||||
|
||||
5.3 Known Networks
|
||||
|
||||
List known (previously connected) networks
|
||||
|
||||
Auto-connect indication
|
||||
|
||||
Forget network
|
||||
|
||||
5.4 Error Handling
|
||||
|
||||
iwd not running
|
||||
|
||||
No wireless device
|
||||
|
||||
Permission denied (polkit)
|
||||
|
||||
Authentication failure
|
||||
|
||||
6. Technical Requirements
|
||||
6.1 Backend
|
||||
|
||||
iwd via D-Bus
|
||||
|
||||
Service: net.connman.iwd
|
||||
|
||||
No external command execution
|
||||
|
||||
6.2 D-Bus Interfaces Used (Non-Exhaustive)
|
||||
|
||||
net.connman.iwd.Adapter
|
||||
|
||||
net.connman.iwd.Device
|
||||
|
||||
net.connman.iwd.Network
|
||||
|
||||
net.connman.iwd.Station
|
||||
|
||||
net.connman.iwd.KnownNetwork
|
||||
|
||||
6.3 Permissions
|
||||
|
||||
Requires polkit rules for:
|
||||
|
||||
Scanning
|
||||
|
||||
Connecting
|
||||
|
||||
Forgetting networks
|
||||
|
||||
Module must gracefully degrade without permissions
|
||||
|
||||
7. Architecture
|
||||
7.1 Module Structure
|
||||
|
||||
e_iwd/
|
||||
├── e_mod_main.c
|
||||
├── e_mod_config.c
|
||||
├── e_mod_gadget.c
|
||||
├── e_mod_popup.c
|
||||
├── iwd/
|
||||
│ ├── iwd_manager.c
|
||||
│ ├── iwd_device.c
|
||||
│ ├── iwd_network.c
|
||||
│ └── iwd_dbus.c
|
||||
└── ui/
|
||||
├── wifi_list.c
|
||||
├── wifi_auth.c
|
||||
└── wifi_status.c
|
||||
|
||||
7.2 Data Flow
|
||||
|
||||
iwd (D-Bus)
|
||||
↓
|
||||
iwd_dbus.c
|
||||
↓
|
||||
iwd_manager / device / network
|
||||
↓
|
||||
UI layer (EFL widgets)
|
||||
↓
|
||||
Gadget / Popup
|
||||
|
||||
7.3 Threading Model
|
||||
|
||||
Single main loop
|
||||
|
||||
Async D-Bus calls via EFL
|
||||
|
||||
No blocking calls on UI thread
|
||||
|
||||
8. State Model
|
||||
8.1 Connection States
|
||||
|
||||
OFF
|
||||
|
||||
IDLE
|
||||
|
||||
SCANNING
|
||||
|
||||
CONNECTING
|
||||
|
||||
CONNECTED
|
||||
|
||||
ERROR
|
||||
|
||||
8.2 Transitions
|
||||
|
||||
Triggered by:
|
||||
|
||||
User actions
|
||||
|
||||
iwd signals
|
||||
|
||||
System suspend/resume
|
||||
|
||||
9. Configuration
|
||||
9.1 Module Settings
|
||||
|
||||
Auto-connect enabled / disabled
|
||||
|
||||
Show hidden networks
|
||||
|
||||
Signal strength refresh interval
|
||||
|
||||
Preferred adapter (if multiple)
|
||||
|
||||
Stored using Enlightenment module config system.
|
||||
10. Performance & Reliability
|
||||
10.1 Performance
|
||||
|
||||
Startup time < 100 ms
|
||||
|
||||
No periodic polling; signal-driven updates
|
||||
|
||||
Minimal memory footprint (< 5 MB)
|
||||
|
||||
10.2 Reliability
|
||||
|
||||
Handle iwd restart gracefully
|
||||
|
||||
Auto-rebind D-Bus objects
|
||||
|
||||
Avoid crashes on device hot-plug
|
||||
|
||||
11. Security Considerations
|
||||
|
||||
Never log passphrases
|
||||
|
||||
Passphrases only sent over D-Bus to iwd
|
||||
|
||||
Respect system polkit policies
|
||||
|
||||
No plaintext storage in module config
|
||||
|
||||
|
||||
13. Success Metrics
|
||||
|
||||
Successful connect/disconnect in ≥ 99% cases
|
||||
|
||||
No UI freezes during scan/connect
|
||||
|
||||
Parity with econnman Wi-Fi UX
|
||||
|
||||
Adoption by at least one major distro Enlightenment spin
|
||||
|
||||
14. Future Extensions (Out of Scope)
|
||||
|
||||
Ethernet support
|
||||
|
||||
VPN integration
|
||||
|
||||
QR-based Wi-Fi sharing
|
||||
|
||||
Per-network advanced EAP UI
|
||||
|
||||
15. Open Questions / Risks
|
||||
|
||||
Polkit UX integration (password prompts)
|
||||
|
||||
Multiple adapter handling UX
|
||||
|
||||
iwd API changes across versions
|
||||
Loading…
Add table
Add a link
Reference in a new issue