rearrange GUI Application top-level
| Reported by: |
Ichthyostega |
Owned by: |
Ichthyostega |
|
Priority:
|
grave
|
Milestone:
|
0integration
|
|
Component:
|
lumieraGui
|
Keywords:
|
integration gui architecture sanity
|
|
Sub Tickets:
|
#1032, #1064, #1069, #1085, #1126, #1127
|
Parent Tickets:
|
#1014, #1031, #1048, #1068, #1078, #1080, #1083, #1135, #1144
|
The current setup of the top level classes within the GTK UI works fine, but highlights some tension and mismatches in the overall design
- we support multiple windows, yet from reading the code, you'd rather get the impression we aren't really aware we have multiple top-level windows
- the
WindowManager is the core UI manager, which feels like a mix-up in concerns
- the
WorkspaceWindow::createUI() does the global UI initialisation. Again, we have multiple workspace windows.
GtkLumiera::main() creates a Model and a Controller in local function scope, but stores the WindowManager in an object field.
- it seems, for that very reason,
GtlLumiera needed to be a singleton, to allow by-name access to "the" WindowManager
- needless to say, this causes a host of problems when shutting down the UI.
Refactoring Plan
Create a new WorkspaceManager class to act as main hub for all central management aspects pertaining to the UI toolkit internals. Pass this as ctor parameter to anyone in need of its services. Strictly use RAII on all top-level UI entities. Get rid of any "initialised" / "not yet ready" state. Then inherit GtkLumiera from Gtk::Application. Which means, GtkLumiera is the Application. It lives solely in the call stack of the GuiRunner and no one else has to talk to GtkLumiera anymore. We have public facades for that
Change history
(19)
| blocking: |
1014, 1048 → 1014, 1048, 1068
|
| blockedby: |
1032, 1064 → 1032, 1064, 1069
|
| blockedby: |
1032, 1064, 1069 → 1032, 1064, 1069, 1070
|
| blocking: |
1014, 1048, 1068 → 1014, 1048, 1068, 1078
|
| blocking: |
1014, 1048, 1068, 1078 → 1014, 1048, 1068, 1078, 1080
|
| blocking: |
1014, 1048, 1068, 1078, 1080 → 1014, 1048, 1068, 1078, 1080, 1083
|
| blockedby: |
1032, 1064, 1069, 1070 → 1032, 1064, 1069, 1070, 1085
|
| blockedby: |
1032, 1064, 1069, 1070, 1085 → 1032, 1064, 1069, 1085
|
| blockedby: |
1032, 1064, 1069, 1085 → 1032, 1064, 1069, 1085, 1090
|
| blockedby: |
1032, 1064, 1069, 1085, 1090 → 1032, 1064, 1069, 1085, 1090, 1104
|
| blockedby: |
1032, 1064, 1069, 1085, 1090, 1104 → 1032, 1064, 1069, 1085, 1090, 1104, 1126
|
| blockedby: |
1032, 1064, 1069, 1085, 1090, 1104, 1126 → 1032, 1064, 1069, 1085, 1090, 1104, 1126, 1127
|
| blocking: |
1014, 1048, 1068, 1078, 1080, 1083 → 1014, 1048, 1068, 1078, 1080, 1083, 1135
|
| blockedby: |
1032, 1064, 1069, 1085, 1090, 1104, 1126, 1127 → 1032, 1064, 1069, 1085, 1090, 1104, 1126, 1127, 1144
|
| blockedby: |
1032, 1064, 1069, 1085, 1090, 1104, 1126, 1127, 1144 → 1032, 1064, 1069, 1085, 1126, 1127
|
| blocking: |
1014, 1048, 1068, 1078, 1080, 1083, 1135 → 1014, 1031, 1048, 1068, 1078, 1080, 1083, 1135, 1144
|
| Description: |
modified (diff)
|
| Resolution: |
→ done
|
| Status: |
accepted → closed
|
| blockedby: |
1032, 1064, 1069, 1085, 1126, 1127
|
| blocking: |
1014, 1031, 1048, 1068, 1078, 1080, 1083, 1135, 1144
|
| Parent Tickets: |
→ 1014, 1031, 1048, 1068, 1078, 1080, 1083, 1135, 1144
|
| Sub Tickets: |
→ 1032, 1064, 1069, 1085, 1126, 1127
|
created
gui::workspace::UiManagerand factored out part of theWindowManagers existing code....