Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GlazeWM crashes upon connecting multiple monitors via dock with 5 external monitors. "At least 1 workspace is required per monitor" #587

Open
cdahmedeh opened this issue Apr 17, 2024 · 1 comment

Comments

@cdahmedeh
Copy link

When connecting my laptop to the docking station, which is connected to 5 displays, GlazeWM crashes with a popup error message "At least 1 workspace is required per monitor". Starting GlazeWM again works but of course, I lose all window positions and workspace placements.

This error even happens if there are indeed 5 workspaces that are active. Running GlazeWM as administrator doesn't help either.

Displays layout and setup

image

These are all external screens. During the switch when connecting the dock, display "6", which is the internal laptop screen, is disabled.

3 : BenQ EL2870U (3840x2160@60Hz) (Set as primary monitor)
2 : BenQ EL2870U (3840x2160@60Hz)
1 : ASUS VG289Q1A (3840x2160@60Hz)
4 : ASUS VG289Q1A (3840x2160@60Hz) (Connected via DisplayLink adapter)
5 : LG IPS QHD (1440x2560@60Hz) (Connected via DisplayLink adapter)
6 : Internal Display (3000x2000@60Hz) (Disabled)

Hardware and Software

HP Spectre x360 13.5 (13th Gen Intel(R) Core(TM) i7-1355U, Intel Iris Xe Graphics, 32 GB RAM)
HP Thunderbolt Dock 120W G4

Windows 11 Pro 23H2 22635.3495 (Insider Build)

GlazeWM v2.1.1 (from Releases page, x64)

Log error message from errors.log

2024-04-17 10:59:36
GlazeWM.Infrastructure.Exceptions.FatalUserException: At least 1 workspace is required per monitor.
   at GlazeWM.Domain.Monitors.CommandHandlers.AddMonitorHandler.ActivateWorkspaceOnMonitor(Monitor monitor) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\CommandHandlers\AddMonitorHandler.cs:line 58
   at GlazeWM.Domain.Monitors.CommandHandlers.AddMonitorHandler.Handle(AddMonitorCommand command) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\CommandHandlers\AddMonitorHandler.cs:line 45
   at GlazeWM.Infrastructure.Bussing.Bus.Invoke[T](T command) in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 48
   at GlazeWM.Domain.Monitors.CommandHandlers.RefreshMonitorStateHandler.Handle(RefreshMonitorStateCommand command) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\CommandHandlers\RefreshMonitorStateHandler.cs:line 41
   at GlazeWM.Infrastructure.Bussing.Bus.Invoke[T](T command) in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 48
   at GlazeWM.Domain.Monitors.EventHandlers.DisplaySettingsChangedHandler.Handle(DisplaySettingsChangedEvent event) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\EventHandlers\DisplaySettingsChangedHandler.cs:line 18
   at GlazeWM.Infrastructure.Bussing.Bus.Emit[T](T event) in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 87
   at GlazeWM.Infrastructure.Bussing.Bus.<>c__DisplayClass8_0`1.<EmitAsync>b__0() in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 101
Command history: HandleFatalExceptionCommand, AttachContainerCommand, AddMonitorCommand, AttachContainerCommand, ActivateWorkspaceCommand, AttachContainerCommand, AddMonitorCommand, AttachContainerCommand, ActivateWorkspaceCommand, AttachContainerCommand, AddMonitorCommand, AttachContainerCommand, ActivateWorkspaceCommand, AttachContainerCommand, AddMonitorCommand 
State dump: {"id":"4075a302-7e91-4181-849b-b3107fa2fe28","x":0,"y":0,"width":0,"height":0,"type":"root","focus_index":0,"children":[{"device_name":"\\\\.\\DISPLAY1","id":"727c2c3f-7d14-4d3a-8af6-f8e8dbdbfccb","x":0,"y":0,"width":3000,"height":1892,"type":"monitor","focus_index":0,"children":[{"tiling_direction":"horizontal","size_percentage":1,"name":"1","id":"4b7de9ef-f784-4401-ab68-506123aa6598","x":20,"y":20,"width":2960,"height":1807,"type":"workspace","focus_index":0,"children":[{"floating_placement":{"left":758,"top":-2,"right":2242,"bottom":1848,"x":758,"y":-2,"width":1484,"height":1850},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":199276,"size_percentage":0.571911703456893,"id":"21f9f30b-798f-4a61-80e6-23296466a852","x":20,"y":20,"width":1681,"height":1807,"type":"window","focus_index":1,"children":[]},{"floating_placement":{"left":905,"top":-2,"right":2095,"bottom":1848,"x":905,"y":-2,"width":1190,"height":1850},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":264954,"size_percentage":0.428088296543107,"id":"a87de9c7-6c0f-4a3a-917a-cfa7185565d5","x":1721,"y":20,"width":1258,"height":1807,"type":"window","focus_index":0,"children":[]}]},{"tiling_direction":"horizontal","size_percentage":0,"name":"5","id":"c9f9fa9c-d8aa-4514-a8fc-864f09ee1f22","x":20,"y":20,"width":2960,"height":1807,"type":"workspace","focus_index":3,"children":[{"floating_placement":{"left":758,"top":-2,"right":2242,"bottom":1848,"x":758,"y":-2,"width":1484,"height":1850},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":266020,"size_percentage":0.5,"id":"e99b0d63-bd63-4e0b-9ce8-de35a8883e83","x":20,"y":20,"width":1470,"height":1807,"type":"window","focus_index":1,"children":[]},{"floating_placement":{"left":765,"top":2,"right":2235,"bottom":1845,"x":765,"y":2,"width":1470,"height":1843},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":3150344,"size_percentage":0.5,"id":"c8184f4d-f7c3-4035-80d2-7f5618a6bada","x":1510,"y":20,"width":1470,"height":1807,"type":"window","focus_index":0,"children":[]}]},{"tiling_direction":"horizontal","size_percentage":0,"name":"3","id":"da29c5cb-1bfc-4813-807f-4f05c1fc6e8c","x":20,"y":20,"width":2960,"height":1807,"type":"workspace","focus_index":2,"children":[{"floating_placement":{"left":765,"top":2,"right":2235,"bottom":1845,"x":765,"y":2,"width":1470,"height":1843},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":265214,"size_percentage":0.5,"id":"c1d8b47f-2202-4ed8-bbce-2623afb3581e","x":20,"y":20,"width":1470,"height":1807,"type":"window","focus_index":1,"children":[]},{"tiling_direction":"vertical","size_percentage":0.5,"id":"69b72800-0dcc-435a-b004-d863707050f0","x":1510,"y":20,"width":1470,"height":1807,"type":"split","focus_index":0,"children":[{"floating_placement":{"left":758,"top":464,"right":2242,"bottom":1382,"x":758,"y":464,"width":1484,"height":918},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":1707042,"size_percentage":0.5,"id":"e668a366-4ce1-401c-9ff5-d6af3fe027bd","x":1510,"y":20,"width":1470,"height":893,"type":"window","focus_index":1,"children":[]},{"floating_placement":{"left":765,"top":468,"right":2235,"bottom":1379,"x":765,"y":468,"width":1470,"height":911},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":67530,"size_percentage":0.5,"id":"fb6c23e8-45e5-4cdc-908e-d8307b9f24dd","x":1510,"y":933,"width":1470,"height":893,"type":"window","focus_index":0,"children":[]}]}]},{"tiling_direction":"horizontal","size_percentage":0,"name":"6","id":"fb31493e-3e8d-4db3-9781-89ac5e532363","x":20,"y":20,"width":2960,"height":1807,"type":"workspace","focus_index":5,"children":[{"floating_placement":{"left":765,"top":2,"right":2235,"bottom":1845,"x":765,"y":2,"width":1470,"height":1843},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":1052918,"size_percentage":1,"id":"e4ca3249-c8d5-47c9-8465-7db9c886a169","x":20,"y":20,"width":2960,"height":1807,"type":"window","focus_index":0,"children":[]}]},{"tiling_direction":"horizontal","size_percentage":0,"name":"4","id":"b3e302fe-18ef-4fb0-8a6d-6c8f27f6d802","x":20,"y":20,"width":2960,"height":1807,"type":"workspace","focus_index":4,"children":[{"floating_placement":{"left":13,"top":-2,"right":2987,"bottom":1848,"x":13,"y":-2,"width":2974,"height":1850},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":1773744,"size_percentage":1,"id":"0445bd5e-b9d3-4a21-97c8-f9161fa64ef5","x":20,"y":20,"width":2960,"height":1807,"type":"window","focus_index":0,"children":[]}]},{"tiling_direction":"horizontal","size_percentage":0,"name":"2","id":"1a208f90-22b6-4532-9113-fed47e7363a9","x":20,"y":20,"width":2960,"height":1807,"type":"workspace","focus_index":1,"children":[{"floating_placement":{"left":765,"top":2,"right":2235,"bottom":1845,"x":765,"y":2,"width":1470,"height":1843},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":4656056,"size_percentage":0.43999999999999995,"id":"e0dfe87c-b6de-4ad7-b5bf-4dd9c8578553","x":20,"y":20,"width":1293,"height":1807,"type":"window","focus_index":1,"children":[]},{"floating_placement":{"left":765,"top":2,"right":2235,"bottom":1845,"x":765,"y":2,"width":1470,"height":1843},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":657084,"size_percentage":0.56,"id":"aed89c92-babb-45b9-9f3f-9bba46a0f317","x":1333,"y":20,"width":1646,"height":1807,"type":"window","focus_index":0,"children":[]}]}]},{"device_name":"\\\\.\\DISPLAY2","id":"66841893-c973-4b4e-a6c2-c401e582647b","x":-5,"y":-3242,"width":5760,"height":3132,"type":"monitor","focus_index":1,"children":[{"tiling_direction":"horizontal","size_percentage":1,"name":"7","id":"7ebc9e92-b5fa-4d62-9b3e-c4a62a7545ad","x":15,"y":-3222,"width":5720,"height":3047,"type":"workspace","focus_index":0,"children":[]}]},{"device_name":"\\\\.\\DISPLAY3","id":"2aa6a987-b16c-48dc-b201-ffb7aee3d66c","x":-5760,"y":-2,"width":5760,"height":3132,"type":"monitor","focus_index":2,"children":[{"tiling_direction":"horizontal","size_percentage":1,"name":"8","id":"efdc5d23-bb70-407c-b98c-d56b6928e1a7","x":-5740,"y":18,"width":5720,"height":3047,"type":"workspace","focus_index":0,"children":[]}]},{"device_name":"\\\\.\\DISPLAY4","id":"d6bd6cb7-8cba-454a-a5b2-b5c15cdad3b5","x":0,"y":0,"width":5760,"height":3132,"type":"monitor","focus_index":3,"children":[{"tiling_direction":"horizontal","size_percentage":1,"name":"9","id":"ad443d3d-be39-4a9b-878d-bb05c207c240","x":20,"y":20,"width":5720,"height":3047,"type":"workspace","focus_index":0,"children":[]}]},{"device_name":"\\\\.\\DISPLAY7","id":"7b026279-11ff-48f0-b6f2-171eafb6b669","x":-5765,"y":-3257,"width":5760,"height":3132,"type":"monitor","focus_index":4,"children":[{"tiling_direction":"horizontal","size_percentage":1,"name":"10","id":"a0ccd5df-7559-4c82-8976-22688fc88c29","x":-5745,"y":-3237,"width":5720,"height":3047,"type":"workspace","focus_index":0,"children":[]}]},{"device_name":"\\\\.\\DISPLAY8","id":"72f85cea-7f01-40e9-927e-505922ab167d","x":5760,"y":-3263,"width":2160,"height":3840,"type":"monitor","focus_index":5,"children":[]}]}

Configuration file config.yaml

general:
  # Whether to automatically focus windows underneath the cursor.
  focus_follows_cursor: true

  # Whether to jump the cursor between windows focused by the WM.
  cursor_follows_focus: true

  # Whether to switch back and forth between the previously focused workspace
  # when focusing the current workspace.
  toggle_workspace_on_refocus: true

  # Whether to show floating windows as always on top.
  show_floating_on_top: true

  # Amount to move floating windows by (eg. when using `alt+<hjkl>` on a floating window)
  floating_window_move_amount: "5%"

  # Whether to center new floating windows.
  center_new_floating_windows: false

  # *Strongly* recommended to set to 'false'. Whether to globally enable/disable
  # window transition animations (on minimize, close, etc). Set to 'unchanged'
  # to make no setting changes.
  window_animations: "unchanged"

gaps:
  # Gap between adjacent windows.
  inner_gap: "20px"

  # Gap between windows and the screen edge.
  outer_gap: "20px"

# Highlight active/inactive windows with a colored border.
# ** Exclusive to Windows 11 due to API limitations.
focus_borders:
  active:
    enabled: true
    color: "#ff0000"

  inactive:
    enabled: false
    color: "#ff0000"

bar:
  height: "30px"
  position: "bottom"
  opacity: 1.0
  background: "#20242cc4"
  foreground: "#ffffff"
  font_family: "Segoe UI"
  font_size: "13px"
  padding: "4px 6px"
  offset_x: "0"
  offset_y: "0"
  border_radius: "0"
  components_left:
    - type: "workspaces"
      focused_workspace_background: "#ffffff33"
      displayed_workspace_background: "#00000033"
      default_workspace_background: "transparent"
  components_center:
    - type: "window title"
  components_right:
#   - type: "system tray"
    - type: "tiling direction"
      label_horizontal: "⮂"
      label_vertical: "⮁"
      background: "#ffffff33"
      margin: "0 4px"
      padding: "0 8px"
    - type: "binding mode"
      background: "#ffffff33"
      margin: "0 4px 0 0"
      padding: "0 8px"
#   - type: "clock"
#     # Documentation on formatting date/time string:
#     # https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
#     time_formatting: "hh:mm tt  ddd MMM d"

workspaces:
  - name: "1"
    display_name: "1 : sandbox"
  - name: "2"
    display_name: "2 : organization"
  - name: "3"
    display_name: "3 : communication"
  - name: "4"
    display_name: "4 : entertainment"
  - name: "5"
    display_name: "5 : work"
  - name: "6"
    display_name: "6: project a"
  - name: "7"
    display_name: "7: project b"
  - name: "8"
    display_name: "8: project c"
  - name: "9"
  - name: "10"
      

window_rules:
  # Task Manager requires admin privileges to manage and should be ignored unless running
  # the WM as admin.
  - command: "ignore"
    match_process_name: "/Taskmgr|ScreenClippingHost/"

  # Launches system dialogs as floating by default (eg. File Explorer save/open dialog).
  - command: "set floating"
    match_class_name: "#32770"

  # Do not manage picture-in-picture windows for browsers. Note that the default is for
  # English; change `match_title` to the window's title if you use another language.
  - command: "ignore"
    match_title: "[Pp]icture.in.[Pp]icture"
    match_class_name: "Chrome_WidgetWin_1|MozillaDialogClass"

  # Some applications (eg. Steam) have borders that extend past the normal border size.
  - command: "resize borders 0px -7px -7px -7px"
    match_process_name: "steam"

binding_modes:
  - name: "resize"
    keybindings:
      # Resize focused window by a percentage or pixel amount.
      - command: "resize width -2%"
        bindings: ["H", "Left"]
      - command: "resize width +2%"
        bindings: ["L", "Right"]
      - command: "resize height +2%"
        bindings: ["K", "Up"]
      - command: "resize height -2%"
        bindings: ["J", "Down"]
      # Press enter/escape to return to default keybindings.
      - command: "binding mode none"
        bindings: ["Escape", "Enter"]

keybindings:
  # Shift focus in a given direction.
  - command: "focus left"
    bindings: ["Alt+H", "Alt+Left"]
  - command: "focus right"
    bindings: ["Alt+L", "Alt+Right"]
  - command: "focus up"
    bindings: ["Alt+K", "Alt+Up"]
  - command: "focus down"
    bindings: ["Alt+J", "Alt+Down"]

  # Move focused window in a given direction.
  - command: "move left"
    bindings: ["Alt+Shift+H", "Alt+Shift+Left"]
  - command: "move right"
    bindings: ["Alt+Shift+L", "Alt+Shift+Right"]
  - command: "move up"
    bindings: ["Alt+Shift+K", "Alt+Shift+Up"]
  - command: "move down"
    bindings: ["Alt+Shift+J", "Alt+Shift+Down"]

  # Resize focused window by a percentage or pixel amount.
  - command: "resize width -2%"
    binding: "Alt+U"
  - command: "resize width +2%"
    binding: "Alt+P"
  - command: "resize height +2%"
    binding: "Alt+O"
  - command: "resize height -2%"
    binding: "Alt+I"

  # As an alternative to the resize keybindings above, resize mode enables resizing via
  # HJKL or arrow keys. The binding mode is defined above with the name "resize".
  - command: "binding mode resize"
    binding: "Alt+R"

  # Change tiling direction. This determines where new tiling windows will be inserted.
  - command: "tiling direction toggle"
    binding: "Alt+V"

  # Change focus between floating / tiling windows.
  - command: "focus mode toggle"
    binding: "Alt+Space"

  # Change the focused window to be floating / tiling.
  - command: "toggle floating"
    binding: "Alt+Shift+Space"

  # Change the focused window to be maximized / unmaximized.
  - command: "toggle maximized"
    binding: "Alt+X"

  # Minimize focused window.
  - command: "set minimized"
    binding: "Alt+M"

  # Close focused window.
  - command: "close"
    binding: "Alt+Shift+Q"

  # Kill GlazeWM process safely.
  - command: "exit wm"
    binding: "Alt+Shift+E"

  # Re-evaluate configuration file.
  - command: "reload config"
    binding: "Alt+Shift+R"

  # Launch CMD terminal (alternatively `exec wt` or `exec %ProgramFiles%/Git/git-bash.exe`
  # to start Windows Terminal and Git Bash respectively.
  # - command: "exec cmd"
  - command: "exec %ProgramFiles%/ConEmu/ConEmu64.exe"
    binding: "Alt+Enter"
    
  # Launch other programs
  - command: "exec firefox.exe"
    binding: "Alt+W"
  - command: "exec explorer.exe"
    binding: "Alt+E"

  # Focus the workspace that last had focus.
  - command: "focus workspace recent"
    binding: "Alt+Y"

  # Focus the next/previous workspace defined in `workspaces` config.
  - command: "focus workspace next"
    binding: "Alt+Ctrl+Right"
  - command: "focus workspace prev"
    binding: "Alt+Ctrl+Left"

  # Change focus to a workspace defined in `workspaces` config.
  - command: "focus workspace 1"
    binding: "Alt+1"
  - command: "focus workspace 2"
    binding: "Alt+2"
  - command: "focus workspace 3"
    binding: "Alt+3"
  - command: "focus workspace 4"
    binding: "Alt+4"
  - command: "focus workspace 5"
    binding: "Alt+5"
  - command: "focus workspace 6"
    binding: "Alt+6"
  - command: "focus workspace 7"
    binding: "Alt+7"
  - command: "focus workspace 8"
    binding: "Alt+8"
  - command: "focus workspace 9"
    binding: "Alt+9"
  - command: "focus workspace 10"
    binding: "Alt+0"

  # Move focused workspace to a monitor in a given direction.
  - command: "move workspace left"
    binding: "Alt+Shift+Ctrl+Left"
  - command: "move workspace right"
    binding: "Alt+Shift+Ctrl+Right"
  - command: "move workspace up"
    binding: "Alt+Shift+Ctrl+Up"
  - command: "move workspace down"
    binding: "Alt+Shift+Ctrl+Down"

  # Move focused window to a workspace defined in `workspaces` config.
  - commands: ["move to workspace 1"]
    binding: "Alt+Shift+1"
  - commands: ["move to workspace 2"]
    binding: "Alt+Shift+2"
  - commands: ["move to workspace 3"]
    binding: "Alt+Shift+3"
  - commands: ["move to workspace 4"]
    binding: "Alt+Shift+4"
  - commands: ["move to workspace 5"]
    binding: "Alt+Shift+5"
  - commands: ["move to workspace 6"]
    binding: "Alt+Shift+6"
  - commands: ["move to workspace 7"]
    binding: "Alt+Shift+7"
  - commands: ["move to workspace 8"]
    binding: "Alt+Shift+8"
  - commands: ["move to workspace 9"]
    bindings: ["Alt+Shift+9"]
  - commands: ["move to workspace 10" ]
    bindings: ["Alt+Shift+0"]
@HeathAndrew
Copy link

I have also seen this issue on a 3 monitor setup where the dock is connected to 2 monitors.
here is my error log:

13/05/2024 11:35:20 AM
GlazeWM.Infrastructure.Exceptions.FatalUserException: At least 1 workspace is required per monitor.
   at GlazeWM.Domain.Monitors.CommandHandlers.AddMonitorHandler.ActivateWorkspaceOnMonitor(Monitor monitor) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\CommandHandlers\AddMonitorHandler.cs:line 58
   at GlazeWM.Domain.Monitors.CommandHandlers.AddMonitorHandler.Handle(AddMonitorCommand command) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\CommandHandlers\AddMonitorHandler.cs:line 45
   at GlazeWM.Infrastructure.Bussing.Bus.Invoke[T](T command) in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 48
   at GlazeWM.Domain.Monitors.CommandHandlers.RefreshMonitorStateHandler.Handle(RefreshMonitorStateCommand command) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\CommandHandlers\RefreshMonitorStateHandler.cs:line 41
   at GlazeWM.Infrastructure.Bussing.Bus.Invoke[T](T command) in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 48
   at GlazeWM.Domain.Monitors.EventHandlers.DisplaySettingsChangedHandler.Handle(DisplaySettingsChangedEvent event) in D:\a\glazewm\glazewm\GlazeWM.Domain\Monitors\EventHandlers\DisplaySettingsChangedHandler.cs:line 18
   at GlazeWM.Infrastructure.Bussing.Bus.Emit[T](T event) in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 87
   at GlazeWM.Infrastructure.Bussing.Bus.<>c__DisplayClass8_0`1.<EmitAsync>b__0() in D:\a\glazewm\glazewm\GlazeWM.Infrastructure\Bussing\Bus.cs:line 101
Command history: HandleFatalExceptionCommand, AttachContainerCommand, AddMonitorCommand, RefreshMonitorStateCommand, SyncNativeFocusCommand, RedrawContainersCommand, ReplaceContainerCommand, ResizeContainerCommand, AttachContainerCommand, DetachContainerCommand, MoveContainerWithinTreeCommand, DetachContainerCommand, SetFocusedDescendantCommand, ResizeContainerCommand, AttachContainerCommand 
State dump: {"id":"e012951b-fc53-483c-90cb-5df843a40635","x":0,"y":0,"width":0,"height":0,"type":"root","focus_index":0,"children":[{"device_name":"\\\\.\\DISPLAY1","id":"02b7790d-4a40-4b9d-b0d5-1609fb220559","x":0,"y":0,"width":1920,"height":1080,"type":"monitor","focus_index":0,"children":[{"tiling_direction":"horizontal","size_percentage":1,"name":"1","id":"bdfaab0d-e324-448a-a8e5-b9890c940123","x":10,"y":40,"width":1900,"height":1030,"type":"workspace","focus_index":2,"children":[{"floating_placement":{"left":481,"top":37,"right":1440,"bottom":1074,"x":481,"y":37,"width":959,"height":1037},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":460556,"size_percentage":0.5,"id":"5f8ccbaa-706d-416c-a858-c1bc10435d76","x":10,"y":40,"width":945,"height":1030,"type":"window","focus_index":1,"children":[]},{"floating_placement":{"left":481,"top":37,"right":1440,"bottom":1074,"x":481,"y":37,"width":959,"height":1037},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":1444308,"size_percentage":0.5,"id":"a4263af9-3cf0-4303-aef9-0c5e26b650a0","x":965,"y":40,"width":945,"height":1030,"type":"window","focus_index":0,"children":[]}]},{"tiling_direction":"horizontal","size_percentage":0,"name":"3","id":"e4ee5dc5-8ba9-41ff-94cb-279b17742f1d","x":10,"y":40,"width":1900,"height":1030,"type":"workspace","focus_index":1,"children":[{"floating_placement":{"left":10,"top":40,"right":1910,"bottom":1070,"x":10,"y":40,"width":1900,"height":1030},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":1051466,"size_percentage":1,"id":"83fc21af-4036-4e62-96ef-2cf575e3c0d6","x":10,"y":40,"width":1900,"height":1030,"type":"window","focus_index":1,"children":[]},{"floating_placement":{"left":488,"top":40,"right":1433,"bottom":1070,"x":488,"y":40,"width":945,"height":1030},"border_delta":{"left":0,"top":0,"right":0,"bottom":0},"handle":396242,"previous_state":"tiling","id":"5aa7fb19-9e32-43ef-9402-af227d644805","x":0,"y":0,"width":0,"height":0,"type":"window","focus_index":0,"children":[]}]},{"tiling_direction":"horizontal","size_percentage":0,"name":"2","id":"faa3989f-d3ca-402d-867e-8dd0782c63b7","x":10,"y":40,"width":1900,"height":1030,"type":"workspace","focus_index":0,"children":[{"floating_placement":{"left":481,"top":37,"right":1440,"bottom":1074,"x":481,"y":37,"width":959,"height":1037},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":527048,"size_percentage":0.5,"id":"e845857f-b1f5-411d-970a-5973990e27d8","x":10,"y":40,"width":945,"height":1030,"type":"window","focus_index":1,"children":[]},{"floating_placement":{"left":238,"top":124,"right":1682,"bottom":987,"x":238,"y":124,"width":1444,"height":863},"border_delta":{"left":7,"top":0,"right":7,"bottom":7},"handle":592464,"size_percentage":0.5,"id":"8a6117e0-b7fd-4b48-b031-042d96059c88","x":965,"y":40,"width":945,"height":1030,"type":"window","focus_index":0,"children":[]}]}]},{"device_name":"\\\\.\\DISPLAY2","id":"0e8ffc9c-3852-4922-9338-d358a4a36c18","x":3840,"y":0,"width":1920,"height":1080,"type":"monitor","focus_index":1,"children":[]}]}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants