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
@@ -29,6 +29,7 @@
|
||||
#define COLOR_SNAP_OVERLAY 0x4A90D9 /* macOS blue snap highlight */
|
||||
|
||||
/* ── geometry ────────────────────────────────────────────────────────── */
|
||||
#define DESKBAR_W 200 /* must match DB_W in deskbar/include/deskbar.h */
|
||||
#define TITLE_HEIGHT 28 /* macOS-style height */
|
||||
#define TITLE_TAB_W 200
|
||||
#define BORDER_W 1 /* thin 1px macOS-style border */
|
||||
@@ -130,6 +131,7 @@ typedef struct WM {
|
||||
int swl_count;
|
||||
Window swl_wins[64];
|
||||
char swl_titles[64][128];
|
||||
int swl_mini[64]; /* 1 if corresponding entry is minimized */
|
||||
} WM;
|
||||
|
||||
/* core */
|
||||
@@ -175,6 +177,7 @@ int menu_item_at(int py);
|
||||
/* switcher */
|
||||
void switcher_show(WM *wm);
|
||||
void switcher_next(WM *wm);
|
||||
void switcher_prev(WM *wm);
|
||||
void switcher_hide(WM *wm, int commit);
|
||||
void switcher_draw(WM *wm);
|
||||
|
||||
|
||||
Reference in new issue
Block a user