macOS-style polish: fix seam, bidirectional Alt+Tab, minimized windows in switcher, rounded corners, deskbar context menu
Fix #1: Replace hardcoded 185px deskbar-offset in client.c and events.c with DESKBAR_W constant (200) to eliminate the 15px gap between the WM frame and deskbar edge. Fix #2: Add Shift+Alt+Tab reverse-direction support — grab Mod1+Shift+XK_Tab in wm.c, detect ShiftMask in events.c, and implement switcher_prev() in switcher.c. Fix #3: Include minimized windows in the Alt+Tab switcher. swl_populate() no longer skips minimized clients; swl_mini[] tracks state so switcher_draw() can dim them with bracketed titles and darker card backgrounds. Fix #4: Rewrite themes/picom.conf with macOS-inspired settings — 10px corner radius on normal windows, 8px on menus, soft downward shadow (radius 18, offset-y 8, opacity 0.35), smooth fading (step 0.08), no dock/tray rounding. Fix #5: Add per-app right-click context menu to the deskbar. Right-clicking an app row opens a popup with Raise / Minimize / Close actions (Close shown in red). Actions are sent as EWMH client messages (_NET_ACTIVE_WINDOW, WM_CHANGE_STATE+IconicState, _NET_CLOSE_WINDOW) with matching handlers added to the WM's on_client_message. Pointer grab closes the menu on any outside click.
This commit is contained in:
8 files changed
+311
-42
No files matched your search
@@ -44,6 +44,12 @@
|
||||
#define DB_TRAY_MAX 16 /* maximum simultaneous tray icons */
|
||||
#define DB_MAX_APPS 32
|
||||
|
||||
/* ── per-app context menu ────────────────────────────────────────────── */
|
||||
#define DB_CTX_W 140 /* context menu width */
|
||||
#define DB_CTX_ITEM_H 26 /* item row height */
|
||||
#define DB_CTX_PAD 4 /* top/bottom padding */
|
||||
#define DB_CTX_N 3 /* number of items: Raise, Minimize, Close */
|
||||
|
||||
/* ── fly-out menu ────────────────────────────────────────────────────── */
|
||||
#define DB_FLYOUT_W 196 /* fly-out menu panel width */
|
||||
#define DB_FLYOUT_IH 28 /* item row height */
|
||||
@@ -139,6 +145,11 @@ typedef struct Deskbar {
|
||||
int sub_hov; /* hovered item in sub-menu */
|
||||
int sw_cache; /* cached screen width for menu positioning */
|
||||
|
||||
/* per-app right-click context menu */
|
||||
Window ctx_win; /* None when closed */
|
||||
int ctx_app_idx; /* which app row the ctx menu is for */
|
||||
int ctx_hov; /* hovered item index, -1 = none */
|
||||
|
||||
/* system tray (freedesktop.org XEmbed tray protocol) */
|
||||
Window tray_icons[DB_TRAY_MAX];
|
||||
int n_tray_icons;
|
||||
|
||||
Reference in new issue
Block a user