From 5dd912f617ae8d5e2f2a27a84201ae6b4b5dc7b7 Mon Sep 17 00:00:00 2001 From: koekeishiya Date: Tue, 10 Oct 2023 22:12:45 +0200 Subject: [PATCH] #1889 remove window borders because of various issues on Ventura and Sonoma --- CHANGELOG.md | 1 + doc/yabai.1 | 46 +------- doc/yabai.asciidoc | 29 +---- examples/yabairc | 7 -- src/border.c | 249 ------------------------------------------- src/border.h | 30 ------ src/event_loop.c | 134 ----------------------- src/event_loop.h | 5 - src/manifest.m | 2 - src/message.c | 91 ---------------- src/rule.c | 2 - src/rule.h | 1 - src/space_manager.c | 5 +- src/view.c | 56 +++++----- src/window.c | 3 - src/window.h | 2 - src/window_manager.c | 189 -------------------------------- src/window_manager.h | 15 --- src/yabai.c | 16 --- 19 files changed, 30 insertions(+), 853 deletions(-) delete mode 100644 src/border.c delete mode 100644 src/border.h diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b479109..c61adb7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Window command `--toggle` option `topmost` has been removed [#1887](https://github.com/koekeishiya/yabai/issues/1887) - Window query property `is-topmost` has been removed [#1887](https://github.com/koekeishiya/yabai/issues/1887) - Signal `application_activated` and `application_deactivated` has been removed; use `application_front_switched` instead [#1887](https://github.com/koekeishiya/yabai/issues/1887) +- Window borders (and all related options/properties) have been removed [#1889](https://github.com/koekeishiya/yabai/issues/1889) ## [5.0.9] - 2023-10-01 ### Changed diff --git a/doc/yabai.1 b/doc/yabai.1 index 2f5d1aea..7bce53fd 100644 --- a/doc/yabai.1 +++ b/doc/yabai.1 @@ -258,43 +258,6 @@ Opacity of an unfocused window. System Integrity Protection must be partially disabled. .RE .sp -\fBwindow_border\fP [\fI\fP] -.RS 4 -Draw border for windows. -.RE -.sp -\fBwindow_border_hidpi\fP [\fI\fP] -.RS 4 -Draw border in high resolution mode; for High Dots Per Inch ("Retina") displays. -.br -HiDPI uses significantly more memory. -.RE -.sp -\fBwindow_border_blur\fP [\fI\fP] -.RS 4 -Blur border allowing it to act as a backdrop for transparent windows. -.RE -.sp -\fBwindow_border_width\fP [\fI\fP] -.RS 4 -Width of window border. If the given width is an odd number, it will be incremented by 1. -.RE -.sp -\fBwindow_border_radius\fP [\fI\fP] -.RS 4 -Radius of window border. -.RE -.sp -\fBactive_window_border_color\fP [\fI0xAARRGGBB\fP] -.RS 4 -Color of the border of the focused window. -.RE -.sp -\fBnormal_window_border_color\fP [\fI0xAARRGGBB\fP] -.RS 4 -Color of the border of an unfocused window. -.RE -.sp \fBinsert_feedback_color\fP [\fI0xAARRGGBB\fP] .RS 4 Color of the \fBwindow \-\-insert\fP message selection. @@ -529,7 +492,7 @@ Resize the selected window by moving the given handle \fIdx\fP pixels horizontal If type is \fIrel\fP the split ratio of the selected window is changed by \fIdr\fP, otherwise \fIdr\fP will become the new split ratio. A positive/negative delta will increase/decrease the size of the left\-child. .RE .sp -\fB\-\-toggle\fP \fIfloat|sticky|pip|shadow|border|split|zoom\-parent|zoom\-fullscreen|native\-fullscreen|expose\fP +\fB\-\-toggle\fP \fIfloat|sticky|pip|shadow|split|zoom\-parent|zoom\-fullscreen|native\-fullscreen|expose\fP .RS 4 Toggle the given property of the selected window. .br @@ -690,7 +653,6 @@ WINDOW "can\-resize": bool, "has\-focus": bool, "has\-shadow": bool, - "has\-border": bool, "has\-parent\-zoom": bool, "has\-fullscreen\-zoom": bool, "is\-native\-fullscreen": bool, @@ -796,11 +758,6 @@ Window is ordered within the given stacking layer. Set window opacity. The window will no longer be eligible for automatic change in opacity upon focus change. .RE .sp -\fBborder=\fI\fP\fP -.RS 4 -Window should draw border. -.RE -.sp \fBnative\-fullscreen=\fI\fP\fP .RS 4 Window should enter native macOS fullscreen mode. @@ -830,7 +787,6 @@ Set window frame based on a self\-defined grid. "sticky": bool (optional), "mouse_follows_focus": bool (optional), "layer": string, - "border": bool (optional), "native\-fullscreen": bool (optional), "grid": string } diff --git a/doc/yabai.asciidoc b/doc/yabai.asciidoc index e64c558f..70509170 100644 --- a/doc/yabai.asciidoc +++ b/doc/yabai.asciidoc @@ -181,28 +181,6 @@ Global Settings Opacity of an unfocused window. + System Integrity Protection must be partially disabled. -*window_border* ['']:: - Draw border for windows. - -*window_border_hidpi* ['']:: - Draw border in high resolution mode; for High Dots Per Inch ("Retina") displays. + - HiDPI uses significantly more memory. - -*window_border_blur* ['']:: - Blur border allowing it to act as a backdrop for transparent windows. - -*window_border_width* ['']:: - Width of window border. If the given width is an odd number, it will be incremented by 1. - -*window_border_radius* ['']:: - Radius of window border. - -*active_window_border_color* ['0xAARRGGBB']:: - Color of the border of the focused window. - -*normal_window_border_color* ['0xAARRGGBB']:: - Color of the border of an unfocused window. - *insert_feedback_color* ['0xAARRGGBB']:: Color of the *window --insert* message selection. @@ -367,7 +345,7 @@ COMMAND *--ratio* 'rel|abs:':: If type is 'rel' the split ratio of the selected window is changed by 'dr', otherwise 'dr' will become the new split ratio. A positive/negative delta will increase/decrease the size of the left-child. -*--toggle* 'float|sticky|pip|shadow|border|split|zoom-parent|zoom-fullscreen|native-fullscreen|expose':: +*--toggle* 'float|sticky|pip|shadow|split|zoom-parent|zoom-fullscreen|native-fullscreen|expose':: Toggle the given property of the selected window. + The following properties require System Integrity Protection to be partially disabled: sticky, pip, shadow. @@ -495,7 +473,6 @@ WINDOW "can-resize": bool, "has-focus": bool, "has-shadow": bool, - "has-border": bool, "has-parent-zoom": bool, "has-fullscreen-zoom": bool, "is-native-fullscreen": bool, @@ -572,9 +549,6 @@ ARGUMENT *opacity=''*:: Set window opacity. The window will no longer be eligible for automatic change in opacity upon focus change. -*border=''*:: - Window should draw border. - *native-fullscreen=''*:: Window should enter native macOS fullscreen mode. @@ -601,7 +575,6 @@ DATAFORMAT "sticky": bool (optional), "mouse_follows_focus": bool (optional), "layer": string, - "border": bool (optional), "native-fullscreen": bool (optional), "grid": string } diff --git a/examples/yabairc b/examples/yabairc index af25d656..01fe67d1 100755 --- a/examples/yabairc +++ b/examples/yabairc @@ -26,13 +26,6 @@ yabai -m config \ normal_window_opacity 0.90 \ window_opacity off \ insert_feedback_color 0xffd75f5f \ - active_window_border_color 0xff775759 \ - normal_window_border_color 0xff555555 \ - window_border_width 4 \ - window_border_radius 12 \ - window_border_blur off \ - window_border_hidpi on \ - window_border off \ split_ratio 0.50 \ split_type auto \ auto_balance off \ diff --git a/src/border.c b/src/border.c deleted file mode 100644 index f31a6a06..00000000 --- a/src/border.c +++ /dev/null @@ -1,249 +0,0 @@ -extern int g_connection; -extern struct window_manager g_window_manager; - -static void border_update_window_notifications(uint32_t wid) -{ - int window_count = 0; - uint32_t window_list[1024] = {}; - - if (wid) window_list[window_count++] = wid; - - for (int window_index = 0; window_index < g_window_manager.window.capacity; ++window_index) { - struct bucket *bucket = g_window_manager.window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->border.id) { - window_list[window_count++] = window->id; - } - } - - bucket = bucket->next; - } - } - - SLSRequestNotificationsForWindows(g_connection, window_list, window_count); -} - -bool border_should_order_in(struct window *window) -{ - return !window->application->is_hidden && !window_check_flag(window, WINDOW_MINIMIZE) && !window_check_flag(window, WINDOW_FULLSCREEN); -} - -void border_show_all(void) -{ - for (int window_index = 0; window_index < g_window_manager.window.capacity; ++window_index) { - struct bucket *bucket = g_window_manager.window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->border.id && border_should_order_in(window)) { - SLSOrderWindow(g_connection, window->border.id, -1, window->id); - } - } - - bucket = bucket->next; - } - } -} - -void border_hide_all(void) -{ - for (int window_index = 0; window_index < g_window_manager.window.capacity; ++window_index) { - struct bucket *bucket = g_window_manager.window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->border.id) { - SLSOrderWindow(g_connection, window->border.id, 0, 0); - } - } - - bucket = bucket->next; - } - } -} - -void border_redraw(struct window *window) -{ - uint8_t is_ordered_in = false; - SLSWindowIsOrderedIn(g_connection, window->border.id, &is_ordered_in); - - if (is_ordered_in) { - SLSDisableUpdate(g_connection); - SLSOrderWindow(g_connection, window->border.id, 0, 0); - } - - CGContextClearRect(window->border.context, window->border.frame); - CGContextAddPath(window->border.context, window->border.path_ref); - - if (g_window_manager.border_blur) { - CGContextDrawPath(window->border.context, kCGPathFillStroke); - } else { - CGContextStrokePath(window->border.context); - } - - CGContextFlush(window->border.context); - - if (is_ordered_in) { - SLSOrderWindow(g_connection, window->border.id, -1, window->id); - SLSReenableUpdate(g_connection); - } -} - -void border_resize(struct window *window, CGRect frame) -{ - if (window->border.region) CFRelease(window->border.region); - if (window->border.path_ref) CGPathRelease(window->border.path_ref); - - frame = CGRectInset(frame, -g_window_manager.border_width, -g_window_manager.border_width); - CGSNewRegionWithRect(&frame, &window->border.region); - window->border.frame.size = frame.size; - - window->border.path = (CGRect) {{ 0.5f*g_window_manager.border_width, 0.5f*g_window_manager.border_width }, { frame.size.width - g_window_manager.border_width, frame.size.height - g_window_manager.border_width }}; - window->border.path_ref = CGPathCreateWithRoundedRect(window->border.path, cgrect_clamp_x_radius(window->border.path, g_window_manager.border_radius), cgrect_clamp_y_radius(window->border.path, g_window_manager.border_radius), NULL); - - uint8_t is_ordered_in = false; - SLSWindowIsOrderedIn(g_connection, window->border.id, &is_ordered_in); - - if (is_ordered_in) { - SLSDisableUpdate(g_connection); - SLSOrderWindow(g_connection, window->border.id, 0, 0); - } - - SLSSetWindowShape(g_connection, window->border.id, 0.0f, 0.0f, window->border.region); - CGContextClearRect(window->border.context, window->border.frame); - CGContextAddPath(window->border.context, window->border.path_ref); - - if (g_window_manager.border_blur) { - CGContextDrawPath(window->border.context, kCGPathFillStroke); - } else { - CGContextStrokePath(window->border.context); - } - - CGContextFlush(window->border.context); - - if (is_ordered_in) { - SLSOrderWindow(g_connection, window->border.id, -1, window->id); - SLSReenableUpdate(g_connection); - } -} - -void border_move(struct window *window, CGRect frame) -{ - frame = CGRectInset(frame, -g_window_manager.border_width, -g_window_manager.border_width); - SLSMoveWindow(g_connection, window->border.id, &frame.origin); -} - -void border_activate(struct window *window) -{ - if (!window->border.id) return; - - CGContextSetRGBStrokeColor(window->border.context, - g_window_manager.active_border_color.r, - g_window_manager.active_border_color.g, - g_window_manager.active_border_color.b, - g_window_manager.active_border_color.a); - border_redraw(window); -} - -void border_deactivate(struct window *window) -{ - if (!window->border.id) return; - - CGContextSetRGBStrokeColor(window->border.context, - g_window_manager.normal_border_color.r, - g_window_manager.normal_border_color.g, - g_window_manager.normal_border_color.b, - g_window_manager.normal_border_color.a); - border_redraw(window); -} - -void border_ensure_same_space(struct window *window) -{ - int space_count; - uint64_t *space_list = window_space_list(window, &space_count); - if (!space_list) return; - - if (space_count > 1) { - uint64_t tag = 1ULL << 11; - SLSSetWindowTags(g_connection, window->border.id, &tag, 64); - } else { - uint64_t tag = 1ULL << 11; - SLSClearWindowTags(g_connection, window->border.id, &tag, 64); - SLSMoveWindowsToManagedSpace(g_connection, window->border.id_ref, space_list[0]); - } -} - -void border_hide(struct window *window) -{ - if (!window->border.id) return; - - SLSOrderWindow(g_connection, window->border.id, 0, 0); -} - -void border_show(struct window *window) -{ - if (!window->border.id) return; - - SLSOrderWindow(g_connection, window->border.id, -1, window->id); -} - -void border_create(struct window *window) -{ - if (window->border.id) return; - - if ((!window_rule_check_flag(window, WINDOW_RULE_MANAGED)) && - (!window_is_standard(window)) && - (!window_is_dialog(window))) { - return; - } - - CGRect frame = CGRectNull; - CGSNewRegionWithRect(&frame, &window->border.region); - - uint64_t tag = 1ULL << 46; - SLSNewWindow(g_connection, 2, 0, 0, window->border.region, &window->border.id); - SLSSetWindowTags(g_connection, window->border.id, &tag, 64); - sls_window_disable_shadow(window->border.id); - SLSSetWindowResolution(g_connection, window->border.id, g_window_manager.border_resolution); - SLSSetWindowOpacity(g_connection, window->border.id, 0); - SLSSetWindowLevel(g_connection, window->border.id, window_level(window->id)); - - if (g_window_manager.border_blur) { - SLSSetWindowBackgroundBlurRadiusStyle(g_connection, window->border.id, 24, 1); - } - - window->border.id_ref = cfarray_of_cfnumbers(&window->border.id, sizeof(uint32_t), 1, kCFNumberSInt32Type); - window->border.context = SLWindowContextCreate(g_connection, window->border.id, 0); - CGContextSetLineWidth(window->border.context, g_window_manager.border_width); - CGContextSetRGBStrokeColor(window->border.context, - g_window_manager.normal_border_color.r, - g_window_manager.normal_border_color.g, - g_window_manager.normal_border_color.b, - g_window_manager.normal_border_color.a); - CGContextSetRGBFillColor(window->border.context, 0.96f, 0.96f, 0.96f, 0.075f); - border_resize(window, window->frame); - - if (border_should_order_in(window)) { - border_ensure_same_space(window); - SLSOrderWindow(g_connection, window->border.id, -1, window->id); - } - - border_update_window_notifications(window->id); -} - -void border_destroy(struct window *window) -{ - if (!window->border.id) return; - - if (window->border.id_ref) CFRelease(window->border.id_ref); - if (window->border.region) CFRelease(window->border.region); - if (window->border.path_ref) CGPathRelease(window->border.path_ref); - - CGContextRelease(window->border.context); - SLSReleaseWindow(g_connection, window->border.id); - memset(&window->border, 0, sizeof(struct border)); - - border_update_window_notifications(0); -} diff --git a/src/border.h b/src/border.h deleted file mode 100644 index 561d0824..00000000 --- a/src/border.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef BORDER_H -#define BORDER_H - -struct border -{ - uint32_t id; - CFArrayRef id_ref; - CGContextRef context; - CFTypeRef region; - CGRect frame; - CGRect path; - CGPathRef path_ref; -}; - -struct window; -bool border_should_order_in(struct window *window); -void border_show_all(void); -void border_hide_all(void); -void border_hide(struct window *window); -void border_show(struct window *window); -void border_ensure_same_space(struct window *window); -void border_redraw(struct window *window); -void border_resize(struct window *window, CGRect frame); -void border_move(struct window *window, CGRect frame); -void border_activate(struct window *window); -void border_deactivate(struct window *window); -void border_create(struct window *window); -void border_destroy(struct window *window); - -#endif diff --git a/src/event_loop.c b/src/event_loop.c index 1b2c2064..2be8d8bd 100644 --- a/src/event_loop.c +++ b/src/event_loop.c @@ -14,11 +14,9 @@ static void window_did_receive_focus(struct window_manager *wm, struct mouse_sta struct window *focused_window = window_manager_find_window(wm, wm->focused_window_id); if (focused_window && focused_window != window && window_space(focused_window) == window_space(window)) { window_manager_set_window_opacity(wm, focused_window, g_window_manager.normal_window_opacity); - border_deactivate(focused_window); } window_manager_set_window_opacity(wm, window, wm->active_window_opacity); - border_activate(window); if (wm->focused_window_id != window->id) { if (ms->ffm_window_id != window->id) { @@ -189,7 +187,6 @@ static EVENT_HANDLER(APPLICATION_TERMINATED) for (int i = 0; i < window_count; ++i) { struct window *window = window_list[i]; - border_destroy(window); struct view *view = window_manager_find_managed_window(&g_window_manager, window); if (view) { @@ -266,7 +263,6 @@ static EVENT_HANDLER(APPLICATION_FRONT_SWITCHED) struct window *focused_window = window_manager_find_window(&g_window_manager, g_window_manager.focused_window_id); if (focused_window) { window_manager_set_window_opacity(&g_window_manager, focused_window, g_window_manager.normal_window_opacity); - border_deactivate(focused_window); } g_window_manager.last_window_id = g_window_manager.focused_window_id; @@ -281,7 +277,6 @@ static EVENT_HANDLER(APPLICATION_FRONT_SWITCHED) struct window *focused_window = window_manager_find_window(&g_window_manager, g_window_manager.focused_window_id); if (focused_window) { window_manager_set_window_opacity(&g_window_manager, focused_window, g_window_manager.normal_window_opacity); - border_deactivate(focused_window); } window_manager_add_lost_focused_event(&g_window_manager, application_focused_window_id); @@ -310,7 +305,6 @@ static EVENT_HANDLER(APPLICATION_VISIBLE) for (int i = 0; i < window_count; ++i) { struct window *window = window_list[i]; - border_show(window); if (window_manager_should_manage_window(window) && !window_manager_find_managed_window(&g_window_manager, window)) { struct view *view = space_manager_find_view(&g_space_manager, window_space(window)); @@ -373,7 +367,6 @@ static EVENT_HANDLER(APPLICATION_HIDDEN) for (int i = 0; i < window_count; ++i) { struct window *window = window_list[i]; - border_hide(window); struct view *view = window_manager_find_managed_window(&g_window_manager, window); if (view) { @@ -458,7 +451,6 @@ static EVENT_HANDLER(WINDOW_DESTROYED) struct window *window = context; debug("%s: %s %d\n", __FUNCTION__, window->application->name, window->id); assert(!__atomic_load_n(&window->id_ptr, __ATOMIC_RELAXED)); - border_destroy(window); struct view *view = window_manager_find_managed_window(&g_window_manager, window); if (view) { @@ -566,8 +558,6 @@ static EVENT_HANDLER(WINDOW_RESIZED) window->frame = new_frame; if (!was_fullscreen && is_fullscreen) { - border_hide(window); - struct view *view = window_manager_find_managed_window(&g_window_manager, window); if (view) { space_manager_untile_window(&g_space_manager, view, window); @@ -581,8 +571,6 @@ static EVENT_HANDLER(WINDOW_RESIZED) struct view *view = space_manager_tile_window_on_space(&g_space_manager, window, window_space(window)); window_manager_add_managed_window(&g_window_manager, window, view); } - - border_show(window); } else if (!was_fullscreen == !is_fullscreen) { if (g_mouse_state.current_action == MOUSE_MODE_MOVE && g_mouse_state.window == window) { g_mouse_state.window_frame.size = g_mouse_state.window->frame.size; @@ -601,7 +589,6 @@ static EVENT_HANDLER(WINDOW_MINIMIZED) debug("%s: %s %d\n", __FUNCTION__, window->application->name, window->id); window_set_flag(window, WINDOW_MINIMIZE); - border_hide(window); if (window->id == g_window_manager.last_window_id) { g_window_manager.last_window_id = g_window_manager.focused_window_id; @@ -632,10 +619,6 @@ static EVENT_HANDLER(WINDOW_DEMINIMIZED) uint64_t sid = space_manager_active_space(); if (space_manager_is_window_on_space(sid, window)) { debug("%s: window %s %d is deminimized on active space\n", __FUNCTION__, window->application->name, window->id); - if (window->border.id && border_should_order_in(window)) { - border_ensure_same_space(window); - SLSOrderWindow(g_connection, window->border.id, -1, window->id); - } if (window_manager_should_manage_window(window) && !window_manager_find_managed_window(&g_window_manager, window)) { struct window *last_window = window_manager_find_window(&g_window_manager, g_window_manager.last_window_id); uint32_t insertion_point = last_window && last_window->application->pid != window->application->pid ? last_window->id : 0; @@ -669,112 +652,6 @@ static EVENT_HANDLER(WINDOW_TITLE_CHANGED) event_signal_push(SIGNAL_WINDOW_TITLE_CHANGED, window); } -static EVENT_HANDLER(SLS_WINDOW_MOVED) -{ - uint32_t window_id = (uint32_t)(intptr_t) context; - struct window *window = window_manager_find_window(&g_window_manager, window_id); - if (!window) return; - - if (!__sync_bool_compare_and_swap(&window->id_ptr, &window->id, &window->id)) { - debug("%s: %d has been marked invalid by the system, ignoring event..\n", __FUNCTION__, window_id); - return; - } - - debug("%s: %s %d\n", __FUNCTION__, window->application->name, window->id); - - struct border *border = &window->border; - if (border->id && border_should_order_in(window)) { - CGRect frame = {}; - SLSGetWindowBounds(g_connection, window_id, &frame); - border_move(window, frame); - } -} - -static EVENT_HANDLER(SLS_WINDOW_RESIZED) -{ - uint32_t window_id = (uint32_t)(intptr_t) context; - struct window *window = window_manager_find_window(&g_window_manager, window_id); - if (!window) return; - - if (!__sync_bool_compare_and_swap(&window->id_ptr, &window->id, &window->id)) { - debug("%s: %d has been marked invalid by the system, ignoring event..\n", __FUNCTION__, window_id); - return; - } - - debug("%s: %s %d\n", __FUNCTION__, window->application->name, window->id); - - struct border *border = &window->border; - if (border->id && border_should_order_in(window)) { - CGRect frame = {}; - SLSGetWindowBounds(g_connection, window_id, &frame); - border_resize(window, frame); - } -} - -static EVENT_HANDLER(SLS_WINDOW_ORDER_CHANGED) -{ - if (g_mission_control_active) return; - - uint32_t window_id = (uint32_t)(intptr_t) context; - struct window *window = window_manager_find_window(&g_window_manager, window_id); - if (!window) return; - - if (!__sync_bool_compare_and_swap(&window->id_ptr, &window->id, &window->id)) { - debug("%s: %d has been marked invalid by the system, ignoring event..\n", __FUNCTION__, window_id); - return; - } - - debug("%s: %s %d\n", __FUNCTION__, window->application->name, window->id); - - struct border *border = &window->border; - if (border->id && border_should_order_in(window)) { - SLSSetWindowLevel(g_connection, border->id, window_level(window_id)); - SLSOrderWindow(g_connection, border->id, -1, window_id); - } -} - -static EVENT_HANDLER(SLS_WINDOW_IS_VISIBLE) -{ - if (g_mission_control_active) return; - - uint32_t window_id = (uint32_t)(intptr_t) context; - struct window *window = window_manager_find_window(&g_window_manager, window_id); - if (!window) return; - - if (!__sync_bool_compare_and_swap(&window->id_ptr, &window->id, &window->id)) { - debug("%s: %d has been marked invalid by the system, ignoring event..\n", __FUNCTION__, window_id); - return; - } - - debug("%s: %s %d\n", __FUNCTION__, window->application->name, window->id); - - struct border *border = &window->border; - if (border->id && border_should_order_in(window)) { - border_ensure_same_space(window); - SLSOrderWindow(g_connection, border->id, -1, window_id); - } -} - -static EVENT_HANDLER(SLS_WINDOW_IS_INVISIBLE) -{ - uint32_t window_id = (uint32_t)(intptr_t) context; - struct window *window = window_manager_find_window(&g_window_manager, window_id); - if (!window) return; - - if (!__sync_bool_compare_and_swap(&window->id_ptr, &window->id, &window->id)) { - debug("%s: %d has been marked invalid by the system, ignoring event..\n", __FUNCTION__, window_id); - return; - } - - debug("%s: %s %d\n", __FUNCTION__, window->application->name, window->id); - - struct border *border = &window->border; - if (border->id && border_should_order_in(window)) { - SLSOrderWindow(g_connection, border->id, 0, 0); - border_ensure_same_space(window); - } -} - static EVENT_HANDLER(SLS_SPACE_ADD_WINDOW) { uint32_t window_id = (uint32_t) param1; @@ -1222,8 +1099,6 @@ static EVENT_HANDLER(MISSION_CONTROL_SHOW_ALL_WINDOWS) debug("%s:\n", __FUNCTION__); g_mission_control_active = 2; - border_hide_all(); - for (int i = 0; i < buf_len(g_window_manager.insert_feedback_windows); ++i) { uint32_t feedback_wid = g_window_manager.insert_feedback_windows[i]; SLSOrderWindow(g_connection, feedback_wid, 0, 0); @@ -1237,8 +1112,6 @@ static EVENT_HANDLER(MISSION_CONTROL_SHOW_FRONT_WINDOWS) debug("%s:\n", __FUNCTION__); g_mission_control_active = 3; - border_hide_all(); - for (int i = 0; i < buf_len(g_window_manager.insert_feedback_windows); ++i) { uint32_t feedback_wid = g_window_manager.insert_feedback_windows[i]; SLSOrderWindow(g_connection, feedback_wid, 0, 0); @@ -1252,8 +1125,6 @@ static EVENT_HANDLER(MISSION_CONTROL_SHOW_DESKTOP) debug("%s:\n", __FUNCTION__); g_mission_control_active = 4; - border_hide_all(); - for (int i = 0; i < buf_len(g_window_manager.insert_feedback_windows); ++i) { uint32_t feedback_wid = g_window_manager.insert_feedback_windows[i]; SLSOrderWindow(g_connection, feedback_wid, 0, 0); @@ -1267,8 +1138,6 @@ static EVENT_HANDLER(MISSION_CONTROL_ENTER) debug("%s:\n", __FUNCTION__); g_mission_control_active = 1; - border_hide_all(); - for (int i = 0; i < buf_len(g_window_manager.insert_feedback_windows); ++i) { uint32_t feedback_wid = g_window_manager.insert_feedback_windows[i]; SLSOrderWindow(g_connection, feedback_wid, 0, 0); @@ -1328,8 +1197,6 @@ static EVENT_HANDLER(MISSION_CONTROL_EXIT) { debug("%s:\n", __FUNCTION__); - border_show_all(); - for (int i = 0; i < buf_len(g_window_manager.insert_feedback_windows); ++i) { uint32_t feedback_wid = g_window_manager.insert_feedback_windows[i]; SLSOrderWindow(g_connection, feedback_wid, 1, 0); @@ -1401,7 +1268,6 @@ static EVENT_HANDLER(SYSTEM_WOKE) struct window *focused_window = window_manager_find_window(&g_window_manager, g_window_manager.focused_window_id); if (focused_window) { window_manager_set_window_opacity(&g_window_manager, focused_window, g_window_manager.active_window_opacity); - border_activate(focused_window); window_manager_center_mouse(&g_window_manager, focused_window); } } diff --git a/src/event_loop.h b/src/event_loop.h index aa5dd0eb..e7f971e6 100644 --- a/src/event_loop.h +++ b/src/event_loop.h @@ -17,11 +17,6 @@ EVENT_TYPE_ENTRY(WINDOW_MINIMIZED) \ EVENT_TYPE_ENTRY(WINDOW_DEMINIMIZED) \ EVENT_TYPE_ENTRY(WINDOW_TITLE_CHANGED) \ - EVENT_TYPE_ENTRY(SLS_WINDOW_MOVED) \ - EVENT_TYPE_ENTRY(SLS_WINDOW_RESIZED) \ - EVENT_TYPE_ENTRY(SLS_WINDOW_ORDER_CHANGED) \ - EVENT_TYPE_ENTRY(SLS_WINDOW_IS_VISIBLE) \ - EVENT_TYPE_ENTRY(SLS_WINDOW_IS_INVISIBLE) \ EVENT_TYPE_ENTRY(SLS_SPACE_ADD_WINDOW) \ EVENT_TYPE_ENTRY(SLS_SPACE_REMOVE_WINDOW) \ EVENT_TYPE_ENTRY(SLS_SPACE_CREATED) \ diff --git a/src/manifest.m b/src/manifest.m index 76fd3863..71adc1d4 100644 --- a/src/manifest.m +++ b/src/manifest.m @@ -56,7 +56,6 @@ #include "display.h" #include "space.h" #include "view.h" -#include "border.h" #include "window.h" #include "process_manager.h" #include "application.h" @@ -75,7 +74,6 @@ #include "display.c" #include "space.c" #include "view.c" -#include "border.c" #include "window.c" #include "process_manager.c" #include "application.c" diff --git a/src/message.c b/src/message.c index 0d5c987a..c9078fe2 100644 --- a/src/message.c +++ b/src/message.c @@ -30,13 +30,6 @@ extern bool g_verbose; #define COMMAND_CONFIG_OPACITY_DURATION "window_opacity_duration" #define COMMAND_CONFIG_ANIMATION_DURATION "window_animation_duration" #define COMMAND_CONFIG_ANIMATION_FRAME_RATE "window_animation_frame_rate" -#define COMMAND_CONFIG_BORDER "window_border" -#define COMMAND_CONFIG_BORDER_HIDPI "window_border_hidpi" -#define COMMAND_CONFIG_BORDER_BLUR "window_border_blur" -#define COMMAND_CONFIG_BORDER_WIDTH "window_border_width" -#define COMMAND_CONFIG_BORDER_RADIUS "window_border_radius" -#define COMMAND_CONFIG_BORDER_ACTIVE_COLOR "active_window_border_color" -#define COMMAND_CONFIG_BORDER_NORMAL_COLOR "normal_window_border_color" #define COMMAND_CONFIG_SHADOW "window_shadow" #define COMMAND_CONFIG_ACTIVE_WINDOW_OPACITY "active_window_opacity" #define COMMAND_CONFIG_NORMAL_WINDOW_OPACITY "normal_window_opacity" @@ -165,7 +158,6 @@ extern bool g_verbose; #define ARGUMENT_WINDOW_TOGGLE_NATIVE "native-fullscreen" #define ARGUMENT_WINDOW_TOGGLE_EXPOSE "expose" #define ARGUMENT_WINDOW_TOGGLE_PIP "pip" -#define ARGUMENT_WINDOW_TOGGLE_BORDER "border" /* ----------------------------------------------------------------------------- */ /* --------------------------------DOMAIN QUERY--------------------------------- */ @@ -194,7 +186,6 @@ extern bool g_verbose; #define ARGUMENT_RULE_KEY_STICKY "sticky" #define ARGUMENT_RULE_KEY_MFF "mouse_follows_focus" #define ARGUMENT_RULE_KEY_LAYER "layer" -#define ARGUMENT_RULE_KEY_BORDER "border" #define ARGUMENT_RULE_KEY_FULLSCR "native-fullscreen" #define ARGUMENT_RULE_KEY_GRID "grid" #define ARGUMENT_RULE_KEY_LABEL "label" @@ -1155,75 +1146,6 @@ static void handle_domain_config(FILE *rsp, struct token domain, char *message) } else { daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.token.length, value.token.text, command.length, command.text, domain.length, domain.text); } - } else if (token_equals(command, COMMAND_CONFIG_BORDER)) { - struct token value = get_token(&message); - if (!token_is_valid(value)) { - fprintf(rsp, "%s\n", bool_str[g_window_manager.enable_window_border]); - } else if (token_equals(value, ARGUMENT_COMMON_VAL_OFF)) { - window_manager_set_window_border_enabled(&g_window_manager, false); - } else if (token_equals(value, ARGUMENT_COMMON_VAL_ON)) { - window_manager_set_window_border_enabled(&g_window_manager, true); - } else { - daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.length, value.text, command.length, command.text, domain.length, domain.text); - } - } else if (token_equals(command, COMMAND_CONFIG_BORDER_HIDPI)) { - struct token value = get_token(&message); - if (!token_is_valid(value)) { - fprintf(rsp, "%s\n", bool_str[g_window_manager.enable_window_border]); - } else if (token_equals(value, ARGUMENT_COMMON_VAL_OFF)) { - window_manager_set_window_border_resolution(&g_window_manager, 1.0f); - } else if (token_equals(value, ARGUMENT_COMMON_VAL_ON)) { - window_manager_set_window_border_resolution(&g_window_manager, 2.0f); - } else { - daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.length, value.text, command.length, command.text, domain.length, domain.text); - } - } else if (token_equals(command, COMMAND_CONFIG_BORDER_BLUR)) { - struct token value = get_token(&message); - if (!token_is_valid(value)) { - fprintf(rsp, "%s\n", bool_str[g_window_manager.enable_window_border]); - } else if (token_equals(value, ARGUMENT_COMMON_VAL_OFF)) { - window_manager_set_window_border_blur(&g_window_manager, false); - } else if (token_equals(value, ARGUMENT_COMMON_VAL_ON)) { - window_manager_set_window_border_blur(&g_window_manager, true); - } else { - daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.length, value.text, command.length, command.text, domain.length, domain.text); - } - } else if (token_equals(command, COMMAND_CONFIG_BORDER_WIDTH)) { - struct token_value value = token_to_value(get_token(&message)); - if (value.type == TOKEN_TYPE_INVALID) { - fprintf(rsp, "%d\n", g_window_manager.border_width); - } else if (value.type == TOKEN_TYPE_INT && value.int_value) { - window_manager_set_window_border_width(&g_window_manager, value.int_value + ((value.int_value&0x1) ? 1 : 0)); - } else { - daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.token.length, value.token.text, command.length, command.text, domain.length, domain.text); - } - } else if (token_equals(command, COMMAND_CONFIG_BORDER_RADIUS)) { - struct token_value value = token_to_value(get_token(&message)); - if (value.type == TOKEN_TYPE_INVALID) { - fprintf(rsp, "%.4f\n", g_window_manager.border_radius); - } else if (value.type == TOKEN_TYPE_INT) { - window_manager_set_window_border_radius(&g_window_manager, value.int_value); - } else { - daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.token.length, value.token.text, command.length, command.text, domain.length, domain.text); - } - } else if (token_equals(command, COMMAND_CONFIG_BORDER_ACTIVE_COLOR)) { - struct token_value value = token_to_value(get_token(&message)); - if (value.type == TOKEN_TYPE_INVALID) { - fprintf(rsp, "0x%x\n", g_window_manager.active_border_color.p); - } else if (value.type == TOKEN_TYPE_U32 && value.u32_value) { - window_manager_set_active_window_border_color(&g_window_manager, value.u32_value); - } else { - daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.token.length, value.token.text, command.length, command.text, domain.length, domain.text); - } - } else if (token_equals(command, COMMAND_CONFIG_BORDER_NORMAL_COLOR)) { - struct token_value value = token_to_value(get_token(&message)); - if (value.type == TOKEN_TYPE_INVALID) { - fprintf(rsp, "0x%x\n", g_window_manager.normal_border_color.p); - } else if (value.type == TOKEN_TYPE_U32 && value.u32_value) { - window_manager_set_normal_window_border_color(&g_window_manager, value.u32_value); - } else { - daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.token.length, value.token.text, command.length, command.text, domain.length, domain.text); - } } else if (token_equals(command, COMMAND_CONFIG_SHADOW)) { struct token value = get_token(&message); if (!token_is_valid(value)) { @@ -2068,8 +1990,6 @@ static void handle_domain_window(FILE *rsp, struct token domain, char *message) window_manager_toggle_window_expose(&g_window_manager, acting_window); } else if (token_equals(value, ARGUMENT_WINDOW_TOGGLE_PIP)) { window_manager_toggle_window_pip(&g_space_manager, &g_window_manager, acting_window); - } else if (token_equals(value, ARGUMENT_WINDOW_TOGGLE_BORDER)) { - window_manager_toggle_window_border(&g_window_manager, acting_window); } else { daemon_fail(rsp, "unknown value '%.*s' given to command '%.*s' for domain '%.*s'\n", value.length, value.text, command.length, command.text, domain.length, domain.text); } @@ -2418,17 +2338,6 @@ static void handle_domain_rule(FILE *rsp, struct token domain, char *message) daemon_fail(rsp, "invalid value '%s' for key '%s'\n", value, key); did_parse = false; } - } else if (string_equals(key, ARGUMENT_RULE_KEY_BORDER)) { - if (exclusion) unsupported_exclusion = key; - - if (string_equals(value, ARGUMENT_COMMON_VAL_ON)) { - rule.border = RULE_PROP_ON; - } else if (string_equals(value, ARGUMENT_COMMON_VAL_OFF)) { - rule.border = RULE_PROP_OFF; - } else { - daemon_fail(rsp, "invalid value '%s' for key '%s'\n", value, key); - did_parse = false; - } } else if (string_equals(key, ARGUMENT_RULE_KEY_FULLSCR)) { if (exclusion) unsupported_exclusion = key; diff --git a/src/rule.c b/src/rule.c index a8b06a3a..d7c2b8a3 100644 --- a/src/rule.c +++ b/src/rule.c @@ -19,7 +19,6 @@ void rule_serialize(FILE *rsp, struct rule *rule, int index) "\t\"sticky\":%s,\n" "\t\"mouse_follows_focus\":%s,\n" "\t\"layer\":\"%s\",\n" - "\t\"border\":%s,\n" "\t\"native-fullscreen\":%s,\n" "\t\"grid\":\"%d:%d:%d:%d:%d:%d\"\n" "}", @@ -37,7 +36,6 @@ void rule_serialize(FILE *rsp, struct rule *rule, int index) json_optional_bool(rule->sticky), json_optional_bool(rule->mff), layer_str[rule->layer], - json_optional_bool(rule->border), json_optional_bool(rule->fullscreen), rule->grid[0], rule->grid[1], rule->grid[2], rule->grid[3], diff --git a/src/rule.h b/src/rule.h index 3710e157..34a733a3 100644 --- a/src/rule.h +++ b/src/rule.h @@ -32,7 +32,6 @@ struct rule int sticky; int mff; int layer; - int border; int fullscreen; unsigned grid[6]; }; diff --git a/src/space_manager.c b/src/space_manager.c index c2b1bf44..b1e7e997 100644 --- a/src/space_manager.c +++ b/src/space_manager.c @@ -593,10 +593,7 @@ uint64_t space_manager_active_space(void) void space_manager_move_window_to_space(uint64_t sid, struct window *window) { - int window_count = window->border.id ? 2 : 1; - uint32_t window_list[2] = { window->id, window->border.id }; - - CFArrayRef window_list_ref = cfarray_of_cfnumbers(window_list, sizeof(uint32_t), window_count, kCFNumberSInt32Type); + CFArrayRef window_list_ref = cfarray_of_cfnumbers(&window->id, sizeof(uint32_t), 1, kCFNumberSInt32Type); SLSMoveWindowsToManagedSpace(g_connection, window_list_ref, sid); CFRelease(window_list_ref); } diff --git a/src/view.c b/src/view.c index 1f0bd83e..10456942 100644 --- a/src/view.c +++ b/src/view.c @@ -5,6 +5,8 @@ extern struct display_manager g_display_manager; extern struct space_manager g_space_manager; extern struct window_manager g_window_manager; +#define INSERT_FEEDBACK_WIDTH 4 +#define INSERT_FEEDBACK_RADIUS 9 void insert_feedback_show(struct window_node *node) { CFTypeRef frame_region; @@ -21,7 +23,7 @@ void insert_feedback_show(struct window_node *node) SLSSetWindowLevel(g_connection, node->feedback_window.id, g_layer_normal_window_level); SLSSetWindowSubLevel(g_connection, node->feedback_window.id, g_layer_below_window_level); node->feedback_window.context = SLWindowContextCreate(g_connection, node->feedback_window.id, 0); - CGContextSetLineWidth(node->feedback_window.context, g_window_manager.border_width); + CGContextSetLineWidth(node->feedback_window.context, INSERT_FEEDBACK_WIDTH); CGContextSetRGBFillColor(node->feedback_window.context, g_window_manager.insert_feedback_color.r, g_window_manager.insert_feedback_color.g, @@ -42,41 +44,41 @@ void insert_feedback_show(struct window_node *node) switch (node->insert_dir) { case DIR_NORTH: { - clip_x = -0.5f * g_window_manager.border_width; - clip_y = midy - 0.5f * g_window_manager.border_width; - clip_w = g_window_manager.border_width; - clip_h = g_window_manager.border_width; + clip_x = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_y = midy - 0.5f * INSERT_FEEDBACK_WIDTH; + clip_w = INSERT_FEEDBACK_WIDTH; + clip_h = INSERT_FEEDBACK_WIDTH; } break; case DIR_EAST: { - clip_x = midx - 0.5f * g_window_manager.border_width; - clip_y = -0.5f * g_window_manager.border_width; - clip_w = g_window_manager.border_width; - clip_h = g_window_manager.border_width; + clip_x = midx - 0.5f * INSERT_FEEDBACK_WIDTH; + clip_y = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_w = INSERT_FEEDBACK_WIDTH; + clip_h = INSERT_FEEDBACK_WIDTH; } break; case DIR_SOUTH: { - clip_x = -0.5f * g_window_manager.border_width; - clip_y = -0.5f * g_window_manager.border_width; - clip_w = g_window_manager.border_width; - clip_h = -midy + g_window_manager.border_width; + clip_x = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_y = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_w = INSERT_FEEDBACK_WIDTH; + clip_h = -midy + INSERT_FEEDBACK_WIDTH; } break; case DIR_WEST: { - clip_x = -0.5f * g_window_manager.border_width; - clip_y = -0.5f * g_window_manager.border_width; - clip_w = -midx + g_window_manager.border_width; - clip_h = g_window_manager.border_width; + clip_x = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_y = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_w = -midx + INSERT_FEEDBACK_WIDTH; + clip_h = INSERT_FEEDBACK_WIDTH; } break; case STACK: { - clip_x = -0.5f * g_window_manager.border_width; - clip_y = -0.5f * g_window_manager.border_width; - clip_w = g_window_manager.border_width; - clip_h = g_window_manager.border_width; + clip_x = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_y = -0.5f * INSERT_FEEDBACK_WIDTH; + clip_w = INSERT_FEEDBACK_WIDTH; + clip_h = INSERT_FEEDBACK_WIDTH; } break; } - CGRect rect = (CGRect) {{ 0.5f*g_window_manager.border_width, 0.5f*g_window_manager.border_width }, { frame.size.width - g_window_manager.border_width, frame.size.height - g_window_manager.border_width }}; - CGRect fill = CGRectInset(rect, 0.5f*g_window_manager.border_width, 0.5f*g_window_manager.border_width); + CGRect rect = (CGRect) {{ 0.5f*INSERT_FEEDBACK_WIDTH, 0.5f*INSERT_FEEDBACK_WIDTH }, { frame.size.width - INSERT_FEEDBACK_WIDTH, frame.size.height - INSERT_FEEDBACK_WIDTH }}; + CGRect fill = CGRectInset(rect, 0.5f*INSERT_FEEDBACK_WIDTH, 0.5f*INSERT_FEEDBACK_WIDTH); CGRect clip = { { rect.origin.x + clip_x, rect.origin.y + clip_y }, { rect.size.width + clip_w, rect.size.height + clip_h } }; - CGPathRef path = CGPathCreateWithRoundedRect(rect, cgrect_clamp_x_radius(rect, g_window_manager.border_radius), cgrect_clamp_y_radius(rect, g_window_manager.border_radius), NULL); + CGPathRef path = CGPathCreateWithRoundedRect(rect, cgrect_clamp_x_radius(rect, INSERT_FEEDBACK_RADIUS), cgrect_clamp_y_radius(rect, INSERT_FEEDBACK_RADIUS), NULL); SLSDisableUpdate(g_connection); SLSOrderWindow(g_connection, node->feedback_window.id, 0, node->window_order[0]); @@ -339,12 +341,6 @@ void window_node_capture_windows(struct window_node *node, struct window_capture struct window *window = window_manager_find_window(&g_window_manager, node->window_list[i]); if (window) { struct area area = node->zoom ? node->zoom->area : node->area; - if (window->border.id) { - area.x += g_window_manager.border_width; - area.y += g_window_manager.border_width; - area.w -= g_window_manager.border_width * 2.0f; - area.h -= g_window_manager.border_width * 2.0f; - } ts_buf_push(*window_list, ((struct window_capture) { .window = window, .x = area.x, .y = area.y, .w = area.w, .h = area.h })); } } diff --git a/src/window.c b/src/window.c index 4e7a0b68..d0b8a4fc 100644 --- a/src/window.c +++ b/src/window.c @@ -131,7 +131,6 @@ void window_serialize(FILE *rsp, struct window *window) const char *layer = window_layer(level); bool is_minimized = window_is_minimized(window); bool visible = !is_minimized && !window->application->is_hidden && (window_check_flag(window, WINDOW_STICKY) || space_is_visible(sid)); - bool border = window->border.id ? 1 : 0; float opacity = window_opacity(window); bool grabbed = window == g_mouse_state.window; @@ -169,7 +168,6 @@ void window_serialize(FILE *rsp, struct window *window) "\t\"can-resize\":%s,\n" "\t\"has-focus\":%s,\n" "\t\"has-shadow\":%s,\n" - "\t\"has-border\":%s,\n" "\t\"has-parent-zoom\":%s,\n" "\t\"has-fullscreen-zoom\":%s,\n" "\t\"is-native-fullscreen\":%s,\n" @@ -199,7 +197,6 @@ void window_serialize(FILE *rsp, struct window *window) json_bool(window_can_resize(window)), json_bool(window->id == g_window_manager.focused_window_id), json_bool(window_check_flag(window, WINDOW_SHADOW)), - json_bool(border), json_bool(zoom_parent), json_bool(zoom_fullscreen), json_bool(window_is_fullscreen(window)), diff --git a/src/window.h b/src/window.h index 73f791fe..cf0b64ba 100644 --- a/src/window.h +++ b/src/window.h @@ -39,7 +39,6 @@ struct window uint8_t rule_flags; uint8_t flags; float opacity; - struct border border; }; enum window_flag @@ -61,7 +60,6 @@ enum window_rule_flag WINDOW_RULE_FULLSCREEN = 1 << 1, WINDOW_RULE_MFF = 1 << 2, WINDOW_RULE_MFF_VALUE = 1 << 3, - WINDOW_RULE_BORDER = 1 << 4, }; #define window_rule_check_flag(w, x) ((w)->rule_flags & (x)) diff --git a/src/window_manager.c b/src/window_manager.c index 67a4cde8..c609ff0b 100644 --- a/src/window_manager.c +++ b/src/window_manager.c @@ -150,14 +150,6 @@ void window_manager_apply_rule_to_window(struct space_manager *sm, struct window window_manager_set_window_layer(window, rule->layer); } - if (rule->border == RULE_PROP_ON) { - window_rule_set_flag(window, WINDOW_RULE_BORDER); - border_create(window); - } else if (rule->border == RULE_PROP_OFF) { - window_rule_set_flag(window, WINDOW_RULE_BORDER); - border_destroy(window); - } - if (in_range_ei(rule->alpha, 0.0f, 1.0f)) { window->opacity = rule->alpha; window_manager_set_opacity(wm, window, rule->alpha); @@ -193,139 +185,6 @@ void window_manager_set_focus_follows_mouse(struct window_manager *wm, enum ffm_ wm->ffm_mode = mode; } -void window_manager_set_window_border_enabled(struct window_manager *wm, bool enabled) -{ - wm->enable_window_border = enabled; - - for (int window_index = 0; window_index < wm->window.capacity; ++window_index) { - struct bucket *bucket = wm->window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (!window_rule_check_flag(window, WINDOW_RULE_BORDER)) { - if (enabled) { - border_create(window); - } else { - border_destroy(window); - } - } - } - - bucket = bucket->next; - } - } - - struct window *window = window_manager_focused_window(wm); - if (window) border_activate(window); -} - -void window_manager_set_window_border_resolution(struct window_manager *wm, float resolution) -{ - wm->border_resolution = resolution; - for (int window_index = 0; window_index < wm->window.capacity; ++window_index) { - struct bucket *bucket = wm->window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->border.id) { - SLSSetWindowResolution(g_connection, window->border.id, resolution); - border_redraw(window); - } - } - - bucket = bucket->next; - } - } -} - -void window_manager_set_window_border_blur(struct window_manager *wm, bool enabled) -{ - wm->border_blur = enabled; - for (int window_index = 0; window_index < wm->window.capacity; ++window_index) { - struct bucket *bucket = wm->window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->border.id) { - if (enabled) { - SLSSetWindowBackgroundBlurRadiusStyle(g_connection, window->border.id, 24, 1); - border_redraw(window); - } else { - SLSSetWindowBackgroundBlurRadiusStyle(g_connection, window->border.id, 0, 0); - border_redraw(window); - } - } - } - - bucket = bucket->next; - } - } -} - -void window_manager_set_window_border_width(struct window_manager *wm, int width) -{ - wm->border_width = width; - for (int window_index = 0; window_index < wm->window.capacity; ++window_index) { - struct bucket *bucket = wm->window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->border.id) { - CGContextSetLineWidth(window->border.context, width); - border_redraw(window); - } - } - - bucket = bucket->next; - } - } -} - -void window_manager_set_window_border_radius(struct window_manager *wm, int radius) -{ - wm->border_radius = radius; - for (int window_index = 0; window_index < wm->window.capacity; ++window_index) { - struct bucket *bucket = wm->window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->border.id) { - if (window->border.path_ref) CGPathRelease(window->border.path_ref); - window->border.path_ref = CGPathCreateWithRoundedRect(window->border.path, cgrect_clamp_x_radius(window->border.path, wm->border_radius), cgrect_clamp_y_radius(window->border.path, wm->border_radius), NULL); - border_redraw(window); - } - } - - bucket = bucket->next; - } - } -} - -void window_manager_set_active_window_border_color(struct window_manager *wm, uint32_t color) -{ - wm->active_border_color = rgba_color_from_hex(color); - struct window *window = window_manager_focused_window(wm); - if (window) border_activate(window); -} - -void window_manager_set_normal_window_border_color(struct window_manager *wm, uint32_t color) -{ - wm->normal_border_color = rgba_color_from_hex(color); - for (int window_index = 0; window_index < wm->window.capacity; ++window_index) { - struct bucket *bucket = wm->window.buckets[window_index]; - while (bucket) { - if (bucket->value) { - struct window *window = bucket->value; - if (window->id != wm->focused_window_id) { - border_deactivate(window); - } - } - - bucket = bucket->next; - } - } -} - void window_manager_set_window_opacity_enabled(struct window_manager *wm, bool enabled) { wm->enable_window_opacity = enabled; @@ -620,18 +479,6 @@ void window_manager_animate_window_list_async(struct window_capture *window_list for (int i = 0; i < window_count; ++i) { struct window_capture *capture = &window_list[i]; - if (capture->window->border.id) { - buf_push(context->animation_list, ((struct window_animation) { - .wid = capture->window->border.id, - .x = capture->x - g_window_manager.border_width, - .y = capture->y - g_window_manager.border_width, - .w = capture->w + g_window_manager.border_width * 2.0f, - .h = capture->h + g_window_manager.border_width * 2.0f, - .proxy = {0}, - .skip = false - })); - } - buf_push(context->animation_list, ((struct window_animation) { .wid = capture->window->id, .x = capture->x, @@ -690,7 +537,6 @@ void window_manager_animate_window_list_async(struct window_capture *window_list for (int i = 0; i < window_count; ++i) { window_manager_set_window_frame(window_list[i].window, window_list[i].x, window_list[i].y, window_list[i].w, window_list[i].h); - border_resize(window_list[i].window, window_ax_frame(window_list[i].window)); } pthread_t thread; @@ -1387,7 +1233,6 @@ struct window *window_manager_create_and_add_window(struct space_manager *sm, st if (window_is_unknown(window)) { debug("%s: ignoring AXUnknown window %s %d\n", __FUNCTION__, window->application->name, window->id); window_manager_remove_lost_focused_event(wm, window->id); - border_destroy(window); window_destroy(window); return NULL; } @@ -1395,7 +1240,6 @@ struct window *window_manager_create_and_add_window(struct space_manager *sm, st if (window_is_popover(window)) { debug("%s: ignoring AXPopover window %s %d\n", __FUNCTION__, window->application->name, window->id); window_manager_remove_lost_focused_event(wm, window->id); - border_destroy(window); window_destroy(window); return NULL; } @@ -1407,7 +1251,6 @@ struct window *window_manager_create_and_add_window(struct space_manager *sm, st debug("%s: could not observe %s %d\n", __FUNCTION__, window->application->name, window->id); window_manager_remove_lost_focused_event(wm, window->id); window_unobserve(window); - border_destroy(window); window_destroy(window); return NULL; } @@ -1421,11 +1264,6 @@ struct window *window_manager_create_and_add_window(struct space_manager *sm, st window_manager_add_window(wm, window); window_manager_apply_rules_to_window(sm, wm, window); - if ((wm->enable_window_border) && - (!window_rule_check_flag(window, WINDOW_RULE_BORDER))) { - border_create(window); - } - if ((!application->is_hidden) && (!window_check_flag(window, WINDOW_MINIMIZE)) && (!window_check_flag(window, WINDOW_FULLSCREEN)) && @@ -1630,13 +1468,6 @@ enum window_op_error window_manager_stack_window(struct space_manager *sm, struc scripting_addition_order_window(b->id, 1, a_node->window_order[1]); struct area area = a_node->zoom ? a_node->zoom->area : a_node->area; - if (b->border.id) { - area.x += wm->border_width; - area.y += wm->border_width; - area.w -= wm->border_width * 2.0f; - area.h -= wm->border_width * 2.0f; - } - window_manager_animate_window((struct window_capture) { b, area.x, area.y, area.w, area.h }); return WINDOW_OP_ERROR_SUCCESS; } @@ -1988,12 +1819,10 @@ void window_manager_make_window_sticky(struct space_manager *sm, struct window_m window_manager_remove_managed_window(wm, window->id); window_manager_purify_window(wm, window); } - if (window->border.id) border_ensure_same_space(window); window_set_flag(window, WINDOW_STICKY); } } else { if (scripting_addition_set_sticky(window->id, false)) { - if (window->border.id) border_ensure_same_space(window); window_clear_flag(window, WINDOW_STICKY); if (!window_check_flag(window, WINDOW_FLOAT)) { @@ -2133,16 +1962,6 @@ void window_manager_toggle_window_pip(struct space_manager *sm, struct window_ma scripting_addition_scale_window(window->id, bounds.origin.x, bounds.origin.y, bounds.size.width, bounds.size.height); } -void window_manager_toggle_window_border(struct window_manager *wm, struct window *window) -{ - if (window->border.id) { - border_destroy(window); - } else { - border_create(window); - if (window->id == wm->focused_window_id) border_activate(window); - } -} - static void window_manager_validate_windows_on_space(struct space_manager *sm, struct window_manager *wm, struct view *view, uint32_t *window_list, int window_count) { int view_window_count; @@ -2318,7 +2137,6 @@ void window_manager_init(struct window_manager *wm) wm->purify_mode = PURIFY_DISABLED; wm->window_origin_mode = WINDOW_ORIGIN_DEFAULT; wm->enable_mff = false; - wm->enable_window_border = false; wm->enable_window_opacity = false; wm->active_window_opacity = 1.0f; wm->normal_window_opacity = 1.0f; @@ -2327,12 +2145,6 @@ void window_manager_init(struct window_manager *wm) wm->window_animation_frame_rate = 120; wm->insert_feedback_windows = NULL; wm->insert_feedback_color = rgba_color_from_hex(0xffd75f5f); - wm->active_border_color = rgba_color_from_hex(0xff775759); - wm->normal_border_color = rgba_color_from_hex(0xff555555); - wm->border_resolution = 2.0f; - wm->border_blur = true; - wm->border_width = 4; - wm->border_radius = 12; table_init(&wm->application, 150, hash_wm, compare_wm); table_init(&wm->window, 150, hash_wm, compare_wm); @@ -2373,6 +2185,5 @@ void window_manager_begin(struct space_manager *sm, struct window_manager *wm) wm->focused_window_id = window->id; wm->focused_window_psn = window->application->psn; window_manager_set_window_opacity(wm, window, wm->active_window_opacity); - border_activate(window); } } diff --git a/src/window_manager.h b/src/window_manager.h index 27a875b0..3704aa34 100644 --- a/src/window_manager.h +++ b/src/window_manager.h @@ -84,7 +84,6 @@ struct window_manager enum ffm_mode ffm_mode; enum purify_mode purify_mode; enum window_origin_mode window_origin_mode; - bool enable_window_border; bool enable_window_opacity; float active_window_opacity; float normal_window_opacity; @@ -92,13 +91,7 @@ struct window_manager float window_animation_duration; int window_animation_frame_rate; uint32_t *insert_feedback_windows; - float border_resolution; - bool border_blur; - int border_width; - float border_radius; struct rgba_color insert_feedback_color; - struct rgba_color active_border_color; - struct rgba_color normal_border_color; }; void window_manager_query_window_rules(FILE *rsp); @@ -170,13 +163,6 @@ void window_manager_set_window_opacity_enabled(struct window_manager *wm, bool e bool window_manager_set_opacity(struct window_manager *wm, struct window *window, float opacity); void window_manager_set_window_opacity(struct window_manager *wm, struct window *window, float opacity); void window_manager_set_focus_follows_mouse(struct window_manager *wm, enum ffm_mode mode); -void window_manager_set_window_border_enabled(struct window_manager *wm, bool enabled); -void window_manager_set_window_border_resolution(struct window_manager *wm, float resolution); -void window_manager_set_window_border_blur(struct window_manager *wm, bool enabled); -void window_manager_set_window_border_width(struct window_manager *wm, int width); -void window_manager_set_window_border_radius(struct window_manager *wm, int radius); -void window_manager_set_active_window_border_color(struct window_manager *wm, uint32_t color); -void window_manager_set_normal_window_border_color(struct window_manager *wm, uint32_t color); enum window_op_error window_manager_set_window_insertion(struct space_manager *sm, struct window_manager *wm, struct window *window, int direction); enum window_op_error window_manager_stack_window(struct space_manager *sm, struct window_manager *wm, struct window *a, struct window *b); enum window_op_error window_manager_warp_window(struct space_manager *sm, struct window_manager *wm, struct window *a, struct window *b); @@ -199,7 +185,6 @@ void window_manager_toggle_window_fullscreen(struct space_manager *sm, struct wi void window_manager_toggle_window_native_fullscreen(struct space_manager *sm, struct window_manager *wm, struct window *window); void window_manager_toggle_window_expose(struct window_manager *wm, struct window *window); void window_manager_toggle_window_pip(struct space_manager *sm, struct window_manager *wm, struct window *window); -void window_manager_toggle_window_border(struct window_manager *wm, struct window *window); void window_manager_wait_for_native_fullscreen_transition(struct window *window); void window_manager_validate_and_check_for_windows_on_space(struct space_manager *sm, struct window_manager *wm, uint64_t sid); void window_manager_correct_for_mission_control_changes(struct space_manager *sm, struct window_manager *wm); diff --git a/src/yabai.c b/src/yabai.c index b6ae0307..e379ed12 100644 --- a/src/yabai.c +++ b/src/yabai.c @@ -223,16 +223,6 @@ static CONNECTION_CALLBACK(connection_handler) if (type == 1204) { event_loop_post(&g_event_loop, MISSION_CONTROL_ENTER, NULL, 0); - } else if (type == 806) { - event_loop_post(&g_event_loop, SLS_WINDOW_MOVED, (void *) (intptr_t) (*(uint32_t *) data), 0); - } else if (type == 807) { - event_loop_post(&g_event_loop, SLS_WINDOW_RESIZED, (void *) (intptr_t) (* (uint32_t *) data), 0); - } else if (type == 808) { - event_loop_post(&g_event_loop, SLS_WINDOW_ORDER_CHANGED, (void *) (intptr_t) (* (uint32_t *) data), 0); - } else if (type == 815) { - event_loop_post(&g_event_loop, SLS_WINDOW_IS_VISIBLE, (void *) (intptr_t) (* (uint32_t *) data), 0); - } else if (type == 816) { - event_loop_post(&g_event_loop, SLS_WINDOW_IS_INVISIBLE, (void *) (intptr_t) (* (uint32_t *) data), 0); } else if (type == 1325) { event_loop_post(&g_event_loop, SLS_SPACE_ADD_WINDOW, (void *) (intptr_t) (* (uint64_t *) data), (int) (* (uint32_t *) (data + 8))); } else if (type == 1326) { @@ -379,12 +369,6 @@ int main(int argc, char **argv) SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 1204, NULL); } - SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 806, NULL); - SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 807, NULL); - SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 808, NULL); - SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 815, NULL); - SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 816, NULL); - if (workspace_is_macos_ventura() || workspace_is_macos_sonoma()) { SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 1325, NULL); SLSRegisterConnectionNotifyProc(g_connection, connection_handler, 1326, NULL);