Add 6 desktop features: workspace shortcuts, Exposé, deskbar icons, notifications, screen lock, move-to-desktop
- Super+1-4: switch virtual desktop; Super+Shift+1-4: move focused window to desktop N - Super+Space: Exposé window overview (tiled grid), click to select, Escape to cancel - wm/src/expose.c: expose_show/expose_hide using ceil(sqrt) grid layout with saved/restored geometry - client_move_to_desktop(): moves window between desktops, fires _NET_WM_DESKTOP update - on_client_message: handles _NET_WM_DESKTOP to move windows from external requests - deskbar: optional imlib2 app icon rendering (Papirus-Dark → Papirus → hicolor → pixmaps fallback) - deskbar: XGetClassHint populates cls field for better icon lookup - deskbar: context menu extended with separator + "→ Desktop 1-4" items via _NET_WM_DESKTOP - orionnotify/: freedesktop.org notification daemon (libdbus-1), stacks up to 5 popups top-right - orionlock/: PAM-authenticated fullscreen screen lock with clock, date, password dots - Lock Screen menu item wired to orionlock - Root Makefile includes orionnotify and orionlock targets Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GHiBQKPfUoaJgCKuA9op1H
This commit is contained in:
14 files changed
+977
-31
No files matched your search
@@ -82,6 +82,9 @@ typedef struct Client {
|
||||
int min_w, min_h; /* PMinSize */
|
||||
int inc_w, inc_h; /* PResizeInc — 0 means no constraint */
|
||||
int base_w, base_h; /* PBaseSize — baseline for increment calc */
|
||||
/* Exposé saved geometry */
|
||||
int exp_x, exp_y;
|
||||
unsigned exp_w, exp_h;
|
||||
struct Client *next;
|
||||
} Client;
|
||||
|
||||
@@ -141,6 +144,11 @@ typedef struct WM {
|
||||
Window swl_wins[64];
|
||||
char swl_titles[64][128];
|
||||
int swl_mini[64]; /* 1 if corresponding entry is minimized */
|
||||
|
||||
/* Exposé window overview */
|
||||
int expose_active;
|
||||
int expose_count;
|
||||
Window expose_wins[64]; /* frames shown in overview */
|
||||
} WM;
|
||||
|
||||
/* core */
|
||||
@@ -163,6 +171,7 @@ void client_toggle_maximize(WM *wm, Client *c);
|
||||
void client_snap_left(WM *wm, Client *c);
|
||||
void client_snap_right(WM *wm, Client *c);
|
||||
void client_set_wm_state(WM *wm, Client *c, long state);
|
||||
void client_move_to_desktop(WM *wm, Client *c, int new_desk);
|
||||
|
||||
/* drawing */
|
||||
void frame_draw(WM *wm, Client *c);
|
||||
@@ -190,6 +199,10 @@ void switcher_prev(WM *wm);
|
||||
void switcher_hide(WM *wm, int commit);
|
||||
void switcher_draw(WM *wm);
|
||||
|
||||
/* exposé */
|
||||
void expose_show(WM *wm);
|
||||
void expose_hide(WM *wm, Window selected_frame);
|
||||
|
||||
/* events */
|
||||
void on_map_request(WM *wm, XMapRequestEvent *e);
|
||||
void on_unmap_notify(WM *wm, XUnmapEvent *e);
|
||||
|
||||
Reference in new issue
Block a user