From 238b2ee5e01f6ceecb9a992afa64e8e9ab71ee37 Mon Sep 17 00:00:00 2001 From: CHEN Xian-an Date: Sat, 30 Oct 2021 10:48:18 +0800 Subject: [PATCH] Remove shadow on macOS 12 --- src/bar.c | 13 ++++++++++++- src/bar.h | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/bar.c b/src/bar.c index 71f38a3..8de7546 100644 --- a/src/bar.c +++ b/src/bar.c @@ -342,7 +342,7 @@ void bar_set_blur_radius(struct bar* bar) { void bar_create_window(struct bar* bar) { uint64_t set_tags = kCGSStickyTagBit | kCGSDisableShadowTagBit | kCGSHighQualityResamplingTagBit; - if (__builtin_available(macOS 12.0, *)) set_tags = kCGSStickyTagBit; + if (__builtin_available(macOS 12.0, *)) set_tags = kCGSStickyTagBit | kCGSHighQualityResamplingTagBit; CFTypeRef frame_region; bar_create_frame(bar, &frame_region); @@ -356,6 +356,17 @@ void bar_create_window(struct bar* bar) { SLSSetWindowOpacity(g_connection, bar->id, 0); bar_set_blur_radius(bar); + if (__builtin_available(macOS 12.0, *)) { // workaround: disable shadow on macOS 12 + CFIndex shadow_density = 0; + CFNumberRef shadow_density_cf = CFNumberCreate(kCFAllocatorDefault, kCFNumberCFIndexType, &shadow_density); + const void *keys[1] = { CFSTR("com.apple.WindowShadowDensity") }; + const void *values[1] = { shadow_density_cf }; + CFDictionaryRef shadow_props_cf = CFDictionaryCreate(NULL, keys, values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + CGSWindowSetShadowProperties(bar->id, shadow_props_cf); + CFRelease(shadow_density_cf); + CFRelease(shadow_props_cf); + } + SLSSetWindowLevel(g_connection, bar->id, g_bar_manager.window_level); bar->context = SLWindowContextCreate(g_connection, bar->id, 0); CGContextSetInterpolationQuality(bar->context, kCGInterpolationNone); diff --git a/src/bar.h b/src/bar.h index 0a6ebbb..1f2a7b9 100644 --- a/src/bar.h +++ b/src/bar.h @@ -19,7 +19,7 @@ extern CGError SLSAddActivationRegion(uint32_t cid, uint32_t wid, CFTypeRef regi extern CGError SLSAddTrackingRect(uint32_t cid, uint32_t wid, CGRect rect); extern CGError SLSClearActivationRegion(uint32_t cid, uint32_t wid); extern CGError SLSRemoveAllTrackingAreas(uint32_t cid, uint32_t wid); - +extern CGError CGSWindowSetShadowProperties(int wid, CFDictionaryRef properties); #define kCGSDisableShadowTagBit (1 << 3) #define kCGSHighQualityResamplingTagBit (1 << 4)