feat: add XDG autostart support for automatic application launching
feat: implement demo mode for automated feature showcase feat: add XEmbed system tray protocol for external application icons feat: add window snapping to left and right halves feat: add minimize/restore toggle with Alt+F9 keybinding docs: update README with new features and configuration details build: update build system for new autostart and demo modules
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user