Make Krita's session/workspace system support multiple windows
Open, Needs TriagePublic

Description

Currently, only the configuration of the last closed window is stored. That is a limitation in a multi-monitor environment. Our sessions system should be updated as follows.

Terminology:
Workspace: the layout of dockers, etc. for a single window (no change)
Window layout: a set of windows and the geometry, positions, screen and used workspace for each
Session: open documents & views, and the window layout in use

We should be able to:

  • on startup...
    • restore windows (ie. the window layout)
    • restore the workspace per window
    • restore open files (session)
  • windows should remember which display they were on, even if their logical numbering changes
  • save a named window layout
  • restore a window layout
  • have window layout react to changes in monitor orientation, either automatically or by saving a per-orientation version of the layout.
  • save and restore named sessions
  • make a window to automatically show the active document (when it changes in another window)
  • easily page through multiple documents (e.g. comic book pages)
  • make a workspace follow focus, ie. swap to any newly actived window
  • automatically show a newly opened image in all windows

Open questions

  1. How should windows behave when a (secondary) display is unplugged and later reconnected?
  2. How should windows behave when screen orientation changes?
  3. Do users need a per-window option to automatically show the active document?
rempt created this task.Oct 18 2017, 9:52 AM
jounip updated the task description. (Show Details)Nov 23 2017, 4:12 PM
jounip updated the task description. (Show Details)Nov 23 2017, 4:26 PM
jounip claimed this task.Nov 23 2017, 6:10 PM
rempt added a comment.Nov 24 2017, 1:35 PM

KisSession

  • Name
  • KisWindowLayout
  • KisDocument 1... KisDocument N
  • Map documents to Windows

KisWindowLayout

  • Name
  • Window 1... Window N
  • Enable WorkspaceFollowsFocus:
    • only one non-canvas-only workspace, which will be applied whenever a window get focus;
    • on restoring the layout on a single-window system, only one window is opened, with the non-canvas-only workspace
    • The non-canvas-only workspace is called the "primary workspace"
    • optionally: on adding a new monitor, create a new canvas-only workspace window with the open images
  • Disable WorkspaceFollowsFocus:
    • all windows are independent: if a monitor is removed, the windows on that monitor will move to the remaining monitor
    • all windows have their own workspace, on changing focus, the workspace will not change in the window that gets focus
    • on restoring the layout on a single-monitor system, all windows are opened on that monitor
  • Enable LoadImageInAllWindows: a new view is created for a newly opened image or a restored image in all windows
  • Disable LoadImageInAllWindows: the image is only shown in a view in the window from which the image was opened

KisWorkSpace:

  • As it is