]> git.mdlowis.com Git - proto/labwc.git/commitdiff
ssd: add optional omnipresent button
authorAndrew J. Hesford <ajh@sideband.org>
Fri, 23 Aug 2024 16:45:14 +0000 (12:45 -0400)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Sat, 24 Aug 2024 03:42:38 +0000 (05:42 +0200)
12 files changed:
docs/labwc-config.5.scd
docs/rc.xml.all
include/config/default-bindings.h
include/ssd-internal.h
include/ssd.h
include/theme.h
src/config/mousebind.c
src/config/rcxml.c
src/ssd/ssd-titlebar.c
src/ssd/ssd.c
src/theme.c
src/view.c

index ed063aed968fb8696818a3ffc0947e51550e407d..a5864974716e5ff5668a794aad0f018b475b403d 100644 (file)
@@ -438,10 +438,11 @@ extending outward from the snapped edge.
        - L: window label (aka. title)
        - |: empty space (can be used instead of a title)
        - W: window menu
-       - S: shade
        - I: iconify
        - M: maximize
        - C: close
+       - S: shade
+       - D: omnipresent
 
        Example: WLIMC
 
@@ -613,11 +614,12 @@ extending outward from the snapped edge.
          buttons and the window title are shown.
        - Title: The area of the titlebar (including blank space) between
          the window buttons, where the window title is displayed.
-       - WindowMenu: The button on the left.
-       - Iconify: The button that looks like an underline.
-       - Maximize: The button that looks like a box.
-       - Shade: A button that looks like an overline.
-       - Close: The button that looks like an X.
+       - WindowMenu: A button that, by default, displays a window menu.
+       - Iconify: A button that, by default, iconifies a window.
+       - Maximize: A button that, by default, toggles maximization of a window.
+       - Shade: A button that, by default, toggles window shading.
+       - Omnipresent: A button that, by default, toggles omnipresence of a window.
+       - Close: A button that, by default, closses a window.
        - Top: The top edge of the window's border.
        - Bottom: The bottom edge of the window's border.
        - Left: The left edge of the window's border.
index f2de0f29327a7f3d85d4f7501603b8228c811363..77f412ccb501e300749a7f16e88cac47fb4cbe81 100644 (file)
       </mousebind>
     </context>
 
+    <context name="Ominpresent">
+      <mousebind button="Left" action="Click">
+        <action name="ToggleOmnipresent" />
+      </mousebind>
+    </context>
+
     <context name="Iconify">
       <mousebind button="Left" action="Click">
         <action name="Iconify" />
index f3de19b2fd238e481914d248c9e47d282c1c41ec..1be873ff2c9eff02f9a298f9b02351b28e5a0019 100644 (file)
@@ -327,6 +327,11 @@ static struct mouse_combos {
                .button = "Left",
                .event = "Click",
                .action = "ToggleShade",
+       }, {
+               .context = "Omnipresent",
+               .button = "Left",
+               .event = "Click",
+               .action = "ToggleOmnipresent",
        }, {
                .context = "Maximize",
                .button = "Right",
index c8f4ab7bc99077a324ae5e354ea8a435ee75d2e1..3d9733552efe120206afc49e9471978e7718277c 100644 (file)
@@ -48,9 +48,18 @@ struct ssd {
         * don't update things we don't have to.
         */
        struct {
-               bool was_shaded;   /* To toggle icon on shade */
-               bool was_maximized;   /* To un-round corner buttons and toggle icon on maximize */
-               bool was_tiled_not_maximized;   /* To un-round corner buttons */
+               /* Button icons need to be swapped on shade or omnipresent toggles */
+               bool was_shaded;
+               bool was_omnipresent;
+
+               /*
+                * Corners need to be (un)rounded when toggling tiling or
+                * maximization, and the button needs to be swapped on
+                * maximization toggles.
+                */
+               bool was_maximized;
+               bool was_tiled_not_maximized;
+
                struct wlr_box geometry;
                struct ssd_state_title {
                        char *text;
index 8b8f77d3f9465f0a9dcc81a8a9d911fd6d4350fa..2afd008739edcef8b1273e299203e0371b89e574 100644 (file)
@@ -26,6 +26,7 @@ enum ssd_part_type {
        LAB_SSD_BUTTON_ICONIFY,
        LAB_SSD_BUTTON_WINDOW_MENU,
        LAB_SSD_BUTTON_SHADE,
+       LAB_SSD_BUTTON_OMNIPRESENT,
        LAB_SSD_PART_TITLEBAR,
        LAB_SSD_PART_TITLEBAR_CORNER_RIGHT,
        LAB_SSD_PART_TITLEBAR_CORNER_LEFT,
index 2a40b589c2c319c5e6368ba44af4ba0520199546..1b15af6b6b7f4c6a8afb953e01c07f12db75e7fd 100644 (file)
@@ -55,11 +55,13 @@ struct theme {
        float window_active_button_max_unpressed_image_color[4];
        float window_active_button_close_unpressed_image_color[4];
        float window_active_button_shade_unpressed_image_color[4];
+       float window_active_button_omnipresent_unpressed_image_color[4];
        float window_inactive_button_menu_unpressed_image_color[4];
        float window_inactive_button_iconify_unpressed_image_color[4];
        float window_inactive_button_max_unpressed_image_color[4];
        float window_inactive_button_close_unpressed_image_color[4];
        float window_inactive_button_shade_unpressed_image_color[4];
+       float window_inactive_button_omnipresent_unpressed_image_color[4];
        /* TODO: add pressed and hover colors for buttons */
 
        int menu_item_padding_x;
@@ -118,6 +120,8 @@ struct theme {
        struct lab_data_buffer *button_menu_active_unpressed;
        struct lab_data_buffer *button_shade_active_unpressed;
        struct lab_data_buffer *button_unshade_active_unpressed;
+       struct lab_data_buffer *button_omnipresent_active_unpressed;
+       struct lab_data_buffer *button_exclusive_active_unpressed;
 
        struct lab_data_buffer *button_close_inactive_unpressed;
        struct lab_data_buffer *button_maximize_inactive_unpressed;
@@ -126,6 +130,8 @@ struct theme {
        struct lab_data_buffer *button_menu_inactive_unpressed;
        struct lab_data_buffer *button_shade_inactive_unpressed;
        struct lab_data_buffer *button_unshade_inactive_unpressed;
+       struct lab_data_buffer *button_omnipresent_inactive_unpressed;
+       struct lab_data_buffer *button_exclusive_inactive_unpressed;
 
        /* hover variants are optional and may be NULL */
        struct lab_data_buffer *button_close_active_hover;
@@ -135,6 +141,8 @@ struct theme {
        struct lab_data_buffer *button_menu_active_hover;
        struct lab_data_buffer *button_shade_active_hover;
        struct lab_data_buffer *button_unshade_active_hover;
+       struct lab_data_buffer *button_omnipresent_active_hover;
+       struct lab_data_buffer *button_exclusive_active_hover;
 
        struct lab_data_buffer *button_close_inactive_hover;
        struct lab_data_buffer *button_maximize_inactive_hover;
@@ -143,6 +151,8 @@ struct theme {
        struct lab_data_buffer *button_menu_inactive_hover;
        struct lab_data_buffer *button_shade_inactive_hover;
        struct lab_data_buffer *button_unshade_inactive_hover;
+       struct lab_data_buffer *button_omnipresent_inactive_hover;
+       struct lab_data_buffer *button_exclusive_inactive_hover;
 
        struct lab_data_buffer *corner_top_left_active_normal;
        struct lab_data_buffer *corner_top_right_active_normal;
index f7b0b44e4985f702a51f4c099bed43ddfd97cc84..82f4c6d6b249cb373fdb7f77348dc2fc6afaf15f 100644 (file)
@@ -116,6 +116,8 @@ context_from_str(const char *str)
                return LAB_SSD_BUTTON_WINDOW_MENU;
        } else if (!strcasecmp(str, "Shade")) {
                return LAB_SSD_BUTTON_SHADE;
+       } else if (!strcasecmp(str, "Omnipresent")) {
+               return LAB_SSD_BUTTON_OMNIPRESENT;
        } else if (!strcasecmp(str, "Titlebar")) {
                return LAB_SSD_PART_TITLEBAR;
        } else if (!strcasecmp(str, "Title")) {
index 71b2276804640a8539b2e0518e592cc45ca70005..d6ce92b6493eb72ac265df9ae297a8c6ff0c5fc8 100644 (file)
@@ -161,7 +161,9 @@ fill_title_layout(char *nodename, char *content)
                case 'S':
                        type = LAB_SSD_BUTTON_SHADE;
                        break;
-               /* case 'D': omnipresent */
+               case 'D':
+                       type = LAB_SSD_BUTTON_OMNIPRESENT;
+                       break;
                default:
                        continue;
                }
index 834d8831bf0d0cde78b690b620ad6c8ac7114054..407753bb7e1dc8f166de7caaaa7949c42fb29c9e 100644 (file)
@@ -79,6 +79,21 @@ add_button(struct ssd *ssd, struct ssd_sub_tree *subtree, enum ssd_part_type typ
                        active ? &theme->button_unshade_active_hover->base
                                : &theme->button_unshade_inactive_hover->base);
                break;
+       case LAB_SSD_BUTTON_OMNIPRESENT:
+               /* Omnipresent button has an alternate state when enabled */
+               btn_root = add_scene_button(&subtree->parts, type, parent,
+                       active ? &theme->button_omnipresent_active_unpressed->base
+                               : &theme->button_omnipresent_inactive_unpressed->base,
+                       active ? &theme->button_omnipresent_active_hover->base
+                               : &theme->button_omnipresent_inactive_hover->base,
+                       x, view);
+               btn = node_ssd_button_from_node(btn_root->node);
+               add_toggled_icon(btn, &subtree->parts, LAB_SSD_BUTTON_OMNIPRESENT,
+                       active ? &theme->button_exclusive_active_unpressed->base
+                               : &theme->button_exclusive_inactive_unpressed->base,
+                       active ? &theme->button_exclusive_active_hover->base
+                               : &theme->button_exclusive_inactive_hover->base);
+               break;
        case LAB_SSD_BUTTON_CLOSE:
                add_scene_button(&subtree->parts, type, parent,
                        active ? &theme->button_close_active_unpressed->base
@@ -164,6 +179,10 @@ ssd_titlebar_create(struct ssd *ssd)
                set_alt_button_icon(ssd, LAB_SSD_BUTTON_SHADE, true);
        }
 
+       if (view->visible_on_all_workspaces) {
+               set_alt_button_icon(ssd, LAB_SSD_BUTTON_OMNIPRESENT, true);
+       }
+
        if (view_is_tiled_and_notify_tiled(view) && !maximized) {
                set_squared_corners(ssd, true);
                ssd->state.was_tiled_not_maximized = true;
@@ -230,24 +249,30 @@ ssd_titlebar_update(struct ssd *ssd)
        struct theme *theme = view->server->theme;
 
        bool maximized = view->maximized == VIEW_AXIS_BOTH;
-       bool tiled_not_maximized = view_is_tiled_and_notify_tiled(ssd->view)
-               && !maximized;
+       bool tiled_not_maximized =
+               view_is_tiled_and_notify_tiled(ssd->view) && !maximized;
 
        if (ssd->state.was_maximized != maximized
-                       || ssd->state.was_shaded != view->shaded
                        || ssd->state.was_tiled_not_maximized != tiled_not_maximized) {
                set_squared_corners(ssd, maximized || tiled_not_maximized);
                if (ssd->state.was_maximized != maximized) {
                        set_alt_button_icon(ssd, LAB_SSD_BUTTON_MAXIMIZE, maximized);
                }
-               if (ssd->state.was_shaded != view->shaded) {
-                       set_alt_button_icon(ssd, LAB_SSD_BUTTON_SHADE, view->shaded);
-               }
                ssd->state.was_maximized = maximized;
-               ssd->state.was_shaded = view->shaded;
                ssd->state.was_tiled_not_maximized = tiled_not_maximized;
        }
 
+       if (ssd->state.was_shaded != view->shaded) {
+               set_alt_button_icon(ssd, LAB_SSD_BUTTON_SHADE, view->shaded);
+               ssd->state.was_shaded = view->shaded;
+       }
+
+       if (ssd->state.was_omnipresent != view->visible_on_all_workspaces) {
+               set_alt_button_icon(ssd, LAB_SSD_BUTTON_OMNIPRESENT,
+                       view->visible_on_all_workspaces);
+               ssd->state.was_omnipresent = view->visible_on_all_workspaces;
+       }
+
        if (width == ssd->state.geometry.width) {
                return;
        }
index 3d14750016301e0e033772c7d030357f7cca7a24..98d40d4f66e69f975202c726572696faa70fc5d8 100644 (file)
@@ -221,13 +221,16 @@ ssd_update_geometry(struct ssd *ssd)
                return;
        }
 
+       struct view *view = ssd->view;
+       assert(view);
+
        struct wlr_box cached = ssd->state.geometry;
-       struct wlr_box current = ssd->view->current;
+       struct wlr_box current = view->current;
 
        int min_view_width = rc.theme->window_button_width * (
                wl_list_length(&rc.title_buttons_left) + wl_list_length(&rc.title_buttons_right));
        int eff_width = current.width;
-       int eff_height = view_effective_height(ssd->view, /* use_pending */ false);
+       int eff_height = view_effective_height(view, /* use_pending */ false);
 
        if (eff_width > 0 && eff_width < min_view_width) {
                /*
@@ -241,39 +244,31 @@ ssd_update_geometry(struct ssd *ssd)
                return;
        }
 
-       if (eff_width == cached.width && eff_height == cached.height) {
-               if (current.x != cached.x || current.y != cached.y) {
-                       /* Dynamically resize extents based on position and usable_area */
-                       ssd_extents_update(ssd);
-                       ssd->state.geometry = current;
-               }
-               bool maximized = ssd->view->maximized == VIEW_AXIS_BOTH;
-               if (ssd->state.was_maximized != maximized
-                               || ssd->state.was_shaded != ssd->view->shaded) {
-                       ssd_titlebar_update(ssd);
-                       ssd_border_update(ssd);
-                       ssd_shadow_update(ssd);
-                       /*
-                        * Not strictly necessary as ssd_titlebar_update()
-                        * already sets these values, but set here to be safe.
-                        */
-                       ssd->state.was_maximized = maximized;
-                       ssd->state.was_shaded = ssd->view->shaded;
-               }
-               bool tiled_and_not_maximized = view_is_tiled(ssd->view) && !maximized;
-               if (ssd->state.was_tiled_not_maximized != tiled_and_not_maximized) {
-                       ssd_titlebar_update(ssd);
-                       ssd_border_update(ssd);
-                       /* see above about being future proof */
-                       ssd->state.was_tiled_not_maximized = tiled_and_not_maximized;
-               }
-               return;
+       bool update_area = eff_width != cached.width || eff_height != cached.height;
+       bool update_extents = update_area
+               || current.x != cached.x || current.y != cached.y;
+
+       bool maximized = view->maximized == VIEW_AXIS_BOTH;
+       bool tiled_not_maximized = view_is_tiled(view) && !maximized;
+
+       bool state_changed = ssd->state.was_maximized != maximized
+               || ssd->state.was_shaded != view->shaded
+               || ssd->state.was_tiled_not_maximized != tiled_not_maximized
+               || ssd->state.was_omnipresent != view->visible_on_all_workspaces;
+
+       if (update_extents) {
+               ssd_extents_update(ssd);
+       }
+
+       if (update_area || state_changed) {
+               ssd_titlebar_update(ssd);
+               ssd_border_update(ssd);
+               ssd_shadow_update(ssd);
+       }
+
+       if (update_extents) {
+               ssd->state.geometry = current;
        }
-       ssd_extents_update(ssd);
-       ssd_titlebar_update(ssd);
-       ssd_border_update(ssd);
-       ssd_shadow_update(ssd);
-       ssd->state.geometry = current;
 }
 
 void
index c4f576af4e0bf4d5c0847f6be0e079e688c18f5c..94ba0a0bb7b14879625c099fb823e8bbc4ebd757 100644 (file)
@@ -89,7 +89,9 @@ match_button_by_name(struct title_button *b, const char *icon_name)
                || (b->type == LAB_SSD_BUTTON_ICONIFY && !strcmp(icon_name, "iconify"))
                || (b->type == LAB_SSD_BUTTON_CLOSE && !strcmp(icon_name, "close"))
                || (b->type == LAB_SSD_BUTTON_SHADE && !strcmp(icon_name, "shade"))
-               || (b->type == LAB_SSD_BUTTON_SHADE && !strcmp(icon_name, "shade_toggled"));
+               || (b->type == LAB_SSD_BUTTON_SHADE && !strcmp(icon_name, "shade_toggled"))
+               || (b->type == LAB_SSD_BUTTON_OMNIPRESENT && !strcmp(icon_name, "desk"))
+               || (b->type == LAB_SSD_BUTTON_OMNIPRESENT && !strcmp(icon_name, "desk_toggled"));
 }
 
 static enum corner
@@ -263,6 +265,20 @@ load_buttons(struct theme *theme)
                .active.rgba = theme->window_active_button_shade_unpressed_image_color,
                .inactive.buffer = &theme->button_unshade_inactive_unpressed,
                .inactive.rgba = theme->window_inactive_button_shade_unpressed_image_color,
+       }, {
+               .name = "desk",
+               .fallback_button = (const char[]){ 0x33, 0x33, 0x00, 0x00, 0x33, 0x33 },
+               .active.buffer = &theme->button_omnipresent_active_unpressed,
+               .active.rgba = theme->window_active_button_omnipresent_unpressed_image_color,
+               .inactive.buffer = &theme->button_omnipresent_inactive_unpressed,
+               .inactive.rgba = theme->window_inactive_button_omnipresent_unpressed_image_color,
+       }, {
+               .name = "desk_toggled",
+               .fallback_button = (const char[]){ 0x00, 0x1e, 0x1a, 0x16, 0x1e, 0x00 },
+               .active.buffer = &theme->button_exclusive_active_unpressed,
+               .active.rgba = theme->window_active_button_omnipresent_unpressed_image_color,
+               .inactive.buffer = &theme->button_exclusive_inactive_unpressed,
+               .inactive.rgba = theme->window_inactive_button_omnipresent_unpressed_image_color,
        }, {
                .name = "close",
                .fallback_button = (const char[]){ 0x33, 0x3f, 0x1e, 0x1e, 0x3f, 0x33 },
@@ -314,6 +330,21 @@ load_buttons(struct theme *theme)
                .active.rgba = theme->window_active_button_shade_unpressed_image_color,
                .inactive.buffer = &theme->button_unshade_inactive_hover,
                .inactive.rgba = theme->window_inactive_button_shade_unpressed_image_color,
+       }, {
+               .name = "desk_hover",
+               /* no fallback (non-hover variant is used instead) */
+               .active.buffer = &theme->button_omnipresent_active_hover,
+               .active.rgba = theme->window_active_button_omnipresent_unpressed_image_color,
+               .inactive.buffer = &theme->button_omnipresent_inactive_hover,
+               .inactive.rgba = theme->window_inactive_button_omnipresent_unpressed_image_color,
+       }, {
+               .name = "desk_toggled_hover",
+               .alt_name = "desk_hover_toggled",
+               /* no fallback (non-hover variant is used instead) */
+               .active.buffer = &theme->button_exclusive_active_hover,
+               .active.rgba = theme->window_active_button_omnipresent_unpressed_image_color,
+               .inactive.buffer = &theme->button_exclusive_inactive_hover,
+               .inactive.rgba = theme->window_inactive_button_omnipresent_unpressed_image_color,
        }, {
                .name = "close_hover",
                /* no fallback (non-hover variant is used instead) */
@@ -545,6 +576,8 @@ theme_builtin(struct theme *theme, struct server *server)
                theme->window_active_button_max_unpressed_image_color);
        parse_hexstr("#000000",
                theme->window_active_button_shade_unpressed_image_color);
+       parse_hexstr("#000000",
+               theme->window_active_button_omnipresent_unpressed_image_color);
        parse_hexstr("#000000",
                theme->window_active_button_close_unpressed_image_color);
        parse_hexstr("#000000",
@@ -555,6 +588,8 @@ theme_builtin(struct theme *theme, struct server *server)
                theme->window_inactive_button_max_unpressed_image_color);
        parse_hexstr("#000000",
                theme->window_inactive_button_shade_unpressed_image_color);
+       parse_hexstr("#000000",
+               theme->window_inactive_button_omnipresent_unpressed_image_color);
        parse_hexstr("#000000",
                theme->window_inactive_button_close_unpressed_image_color);
 
@@ -721,6 +756,8 @@ entry(struct theme *theme, const char *key, const char *value)
                        theme->window_active_button_max_unpressed_image_color);
                parse_hexstr(value,
                        theme->window_active_button_shade_unpressed_image_color);
+               parse_hexstr(value,
+                       theme->window_active_button_omnipresent_unpressed_image_color);
                parse_hexstr(value,
                        theme->window_active_button_close_unpressed_image_color);
        }
@@ -733,6 +770,8 @@ entry(struct theme *theme, const char *key, const char *value)
                        theme->window_inactive_button_max_unpressed_image_color);
                parse_hexstr(value,
                        theme->window_inactive_button_shade_unpressed_image_color);
+               parse_hexstr(value,
+                       theme->window_inactive_button_omnipresent_unpressed_image_color);
                parse_hexstr(value,
                        theme->window_inactive_button_close_unpressed_image_color);
        }
@@ -754,6 +793,10 @@ entry(struct theme *theme, const char *key, const char *value)
                parse_hexstr(value,
                        theme->window_active_button_shade_unpressed_image_color);
        }
+       if (match_glob(key, "window.active.button.omnipresent.unpressed.image.color")) {
+               parse_hexstr(value,
+                       theme->window_active_button_omnipresent_unpressed_image_color);
+       }
        if (match_glob(key, "window.active.button.close.unpressed.image.color")) {
                parse_hexstr(value,
                        theme->window_active_button_close_unpressed_image_color);
@@ -774,6 +817,10 @@ entry(struct theme *theme, const char *key, const char *value)
                parse_hexstr(value,
                        theme->window_inactive_button_shade_unpressed_image_color);
        }
+       if (match_glob(key, "window.inactive.button.omnipresent.unpressed.image.color")) {
+               parse_hexstr(value,
+                       theme->window_inactive_button_omnipresent_unpressed_image_color);
+       }
        if (match_glob(key, "window.inactive.button.close.unpressed.image.color")) {
                parse_hexstr(value,
                        theme->window_inactive_button_close_unpressed_image_color);
@@ -1494,6 +1541,8 @@ theme_finish(struct theme *theme)
        zdrop(&theme->button_restore_active_unpressed);
        zdrop(&theme->button_shade_active_unpressed);
        zdrop(&theme->button_unshade_active_unpressed);
+       zdrop(&theme->button_omnipresent_active_unpressed);
+       zdrop(&theme->button_exclusive_active_unpressed);
        zdrop(&theme->button_iconify_active_unpressed);
        zdrop(&theme->button_menu_active_unpressed);
 
@@ -1502,6 +1551,8 @@ theme_finish(struct theme *theme)
        zdrop(&theme->button_restore_inactive_unpressed);
        zdrop(&theme->button_shade_inactive_unpressed);
        zdrop(&theme->button_unshade_inactive_unpressed);
+       zdrop(&theme->button_omnipresent_inactive_unpressed);
+       zdrop(&theme->button_exclusive_inactive_unpressed);
        zdrop(&theme->button_iconify_inactive_unpressed);
        zdrop(&theme->button_menu_inactive_unpressed);
 
@@ -1510,6 +1561,8 @@ theme_finish(struct theme *theme)
        zdrop(&theme->button_restore_active_hover);
        zdrop(&theme->button_shade_active_hover);
        zdrop(&theme->button_unshade_active_hover);
+       zdrop(&theme->button_omnipresent_active_hover);
+       zdrop(&theme->button_exclusive_active_hover);
        zdrop(&theme->button_iconify_active_hover);
        zdrop(&theme->button_menu_active_hover);
 
@@ -1518,6 +1571,8 @@ theme_finish(struct theme *theme)
        zdrop(&theme->button_restore_inactive_hover);
        zdrop(&theme->button_shade_inactive_hover);
        zdrop(&theme->button_unshade_inactive_hover);
+       zdrop(&theme->button_omnipresent_inactive_hover);
+       zdrop(&theme->button_exclusive_inactive_hover);
        zdrop(&theme->button_iconify_inactive_hover);
        zdrop(&theme->button_menu_inactive_hover);
 
index 9ac24022f482358c0de06fd906228aaa9cc790b6..4d8586b834eaa308e195746f701ac2eb6078b949 100644 (file)
@@ -1494,6 +1494,7 @@ view_toggle_visible_on_all_workspaces(struct view *view)
 {
        assert(view);
        view->visible_on_all_workspaces = !view->visible_on_all_workspaces;
+       ssd_update_geometry(view->ssd);
 }
 
 void