/* * DWN - Desktop Window Manager * retoor * System tray widgets (WiFi, Audio, etc.) */ #ifndef DWN_SYSTRAY_H #define DWN_SYSTRAY_H #include "dwn.h" #include #define MAX_WIFI_NETWORKS 20 typedef struct { char ssid[64]; int signal; char security[32]; bool connected; } WifiNetwork; typedef struct { bool enabled; bool connected; char current_ssid[64]; int signal_strength; WifiNetwork networks[MAX_WIFI_NETWORKS]; int network_count; long last_scan; } WifiState; typedef struct { int volume; bool muted; } AudioState; typedef struct { bool present; bool charging; int percentage; int time_remaining; } BatteryState; typedef struct { Window window; int x, y; int width, height; bool visible; bool dragging; } VolumeSlider; typedef struct { Window window; int x, y; int width, height; int item_count; int hovered_item; bool visible; void (*on_select)(int index); } DropdownMenu; extern WifiState wifi_state; extern AudioState audio_state; extern BatteryState battery_state; extern DropdownMenu *wifi_menu; extern VolumeSlider *volume_slider; void systray_init(void); void systray_cleanup(void); void wifi_update_state(void); void wifi_scan_networks(void); void wifi_connect(const char *ssid); void wifi_disconnect(void); const char *wifi_get_icon(void); void audio_update_state(void); void audio_set_volume(int volume); void audio_toggle_mute(void); const char *audio_get_icon(void); void battery_update_state(void); const char *battery_get_icon(void); VolumeSlider *volume_slider_create(int x, int y); void volume_slider_destroy(VolumeSlider *slider); void volume_slider_show(VolumeSlider *slider); void volume_slider_hide(VolumeSlider *slider); void volume_slider_render(VolumeSlider *slider); void volume_slider_handle_click(VolumeSlider *slider, int x, int y); void volume_slider_handle_motion(VolumeSlider *slider, int x, int y); void volume_slider_handle_release(VolumeSlider *slider); DropdownMenu *dropdown_create(int x, int y, int width); void dropdown_destroy(DropdownMenu *menu); void dropdown_show(DropdownMenu *menu); void dropdown_hide(DropdownMenu *menu); void dropdown_add_item(DropdownMenu *menu, const char *label); void dropdown_render(DropdownMenu *menu); int dropdown_hit_test(DropdownMenu *menu, int x, int y); void dropdown_handle_click(DropdownMenu *menu, int x, int y); void dropdown_handle_motion(DropdownMenu *menu, int x, int y); void systray_render(Panel *panel, int x, int *width); int systray_get_width(void); void systray_handle_click(int x, int y, int button); int systray_hit_test(int x); void systray_update(void); void systray_lock(void); void systray_unlock(void); BatteryState systray_get_battery_snapshot(void); AudioState systray_get_audio_snapshot(void); #endif