docs: update README with autostart, demo mode, XEmbed tray, window snapping, and Alt+F9 minimize keybinding

This commit is contained in:
2025-12-28 08:26:53 +00:00
parent c927e23f23
commit 3364464b43
53 changed files with 2921 additions and 56 deletions
+4
View File
@@ -76,6 +76,8 @@ typedef struct {
Atom NET_SYSTEM_TRAY_OPCODE;
Atom NET_SYSTEM_TRAY_S0;
Atom NET_SYSTEM_TRAY_ORIENTATION;
Atom NET_SYSTEM_TRAY_VISUAL;
Atom MANAGER;
Atom XEMBED;
Atom XEMBED_INFO;
@@ -130,4 +132,6 @@ void atoms_send_protocol(Window window, Atom protocol, Time timestamp);
void atoms_send_client_message(Window window, Atom message_type,
long data0, long data1, long data2, long data3, long data4);
bool atoms_update_wm_state(Window window, Atom state, bool add);
#endif
+14
View File
@@ -0,0 +1,14 @@
/*
* DWN - Desktop Window Manager
* retoor <retoor@molodetz.nl>
* XDG Autostart support
*/
#ifndef DWN_AUTOSTART_H
#define DWN_AUTOSTART_H
void autostart_init(void);
void autostart_run(void);
void autostart_cleanup(void);
#endif
+4
View File
@@ -54,6 +54,10 @@ struct Config {
char config_path[512];
char log_path[512];
bool autostart_enabled;
bool autostart_xdg;
char autostart_path[512];
};
Config *config_create(void);
+36
View File
@@ -0,0 +1,36 @@
/*
* DWN - Desktop Window Manager
* retoor <retoor@molodetz.nl>
* Demo mode - automated feature showcase
*/
#ifndef DWN_DEMO_H
#define DWN_DEMO_H
#include <stdbool.h>
typedef enum {
DEMO_IDLE,
DEMO_INTRO,
DEMO_WINDOW_MGMT,
DEMO_WORKSPACES,
DEMO_LAYOUTS,
DEMO_SNAPPING,
DEMO_PANELS,
DEMO_AI,
DEMO_NEWS,
DEMO_SHORTCUTS,
DEMO_COMPLETE
} DemoPhase;
void demo_init(void);
void demo_cleanup(void);
void demo_start(void);
void demo_stop(void);
void demo_update(void);
bool demo_is_active(void);
DemoPhase demo_get_phase(void);
int demo_get_step(void);
const char *demo_get_phase_name(DemoPhase phase);
#endif
+4
View File
@@ -50,6 +50,7 @@ void key_cycle_layout(void);
void key_toggle_floating(void);
void key_toggle_fullscreen(void);
void key_toggle_maximize(void);
void key_toggle_minimize(void);
void key_focus_next(void);
void key_focus_prev(void);
void key_workspace_next(void);
@@ -80,6 +81,9 @@ void key_toggle_ai(void);
void key_ai_command(void);
void key_show_shortcuts(void);
void key_start_tutorial(void);
void key_snap_left(void);
void key_snap_right(void);
void key_start_demo(void);
void tutorial_start(void);
void tutorial_stop(void);
+1
View File
@@ -45,6 +45,7 @@ Client *panel_hit_test_taskbar(Panel *panel, int x, int y);
void panel_show(Panel *panel);
void panel_hide(Panel *panel);
void panel_toggle(Panel *panel);
void panel_raise_all(void);
void panel_update_clock(void);
+42 -1
View File
@@ -1,7 +1,7 @@
/*
* DWN - Desktop Window Manager
* retoor <retoor@molodetz.nl>
* System tray widgets (WiFi, Audio, etc.)
* System tray widgets (WiFi, Audio, etc.) and XEmbed protocol
*/
#ifndef DWN_SYSTRAY_H
@@ -11,6 +11,35 @@
#include <stdbool.h>
#define MAX_WIFI_NETWORKS 20
#define MAX_TRAY_ICONS 32
#define TRAY_ICON_SIZE 22
#define TRAY_ICON_SPACING 4
#define SYSTEM_TRAY_REQUEST_DOCK 0
#define SYSTEM_TRAY_BEGIN_MESSAGE 1
#define SYSTEM_TRAY_CANCEL_MESSAGE 2
#define XEMBED_EMBEDDED_NOTIFY 0
#define XEMBED_WINDOW_ACTIVATE 1
#define XEMBED_WINDOW_DEACTIVATE 2
#define XEMBED_REQUEST_FOCUS 3
#define XEMBED_FOCUS_IN 4
#define XEMBED_FOCUS_OUT 5
#define XEMBED_MAPPED (1 << 0)
#define XEMBED_PROTOCOL_VERSION 0
typedef struct {
Window window;
int x;
int width;
int height;
bool mapped;
} TrayIcon;
extern TrayIcon tray_icons[MAX_TRAY_ICONS];
extern int tray_icon_count;
extern Window tray_selection_owner;
typedef struct {
char ssid[64];
@@ -114,4 +143,16 @@ void systray_unlock(void);
BatteryState systray_get_battery_snapshot(void);
AudioState systray_get_audio_snapshot(void);
void xembed_init(void);
void xembed_cleanup(void);
bool xembed_dock_icon(Window icon_win);
void xembed_remove_icon(Window icon_win);
TrayIcon *xembed_find_icon(Window icon_win);
void xembed_send_message(Window icon, long message, long detail, long data1, long data2);
int xembed_get_icons_width(void);
void xembed_render_icons(Panel *panel, int x);
void xembed_handle_click(int x, int y, int button);
int xembed_hit_test(int x);
void xembed_update_icon_state(Window icon_win);
#endif