1#ifndef YAZE_APP_EDITOR_SYSTEM_WORKSPACE_WINDOW_MANAGER_H_
2#define YAZE_APP_EDITOR_SYSTEM_WORKSPACE_WINDOW_MANAGER_H_
10#include <unordered_map>
11#include <unordered_set>
19#ifndef YAZE_ENABLE_CARD_SHIM_DEPRECATION
20#define YAZE_ENABLE_CARD_SHIM_DEPRECATION 1
23#if YAZE_ENABLE_CARD_SHIM_DEPRECATION && defined(__has_cpp_attribute)
24#if __has_cpp_attribute(deprecated)
25#define YAZE_CARD_SHIM_DEPRECATED(msg) [[deprecated(msg)]]
27#define YAZE_CARD_SHIM_DEPRECATED(msg)
30#define YAZE_CARD_SHIM_DEPRECATED(msg)
44class ResourceWindowContent;
110 const std::string label =
182 const std::string& canonical_base_id);
184 const std::string& canonical_base_id) {
197 void RegisterPanel(
size_t session_id,
const std::string& card_id,
198 const std::string& display_name,
const std::string& icon,
199 const std::string& category,
200 const std::string& shortcut_hint =
"",
int priority = 50,
201 std::function<
void()> on_show =
nullptr,
202 std::function<
void()> on_hide =
nullptr,
203 bool visible_by_default =
false);
206 const std::string& display_name,
const std::string& icon,
207 const std::string& category,
208 const std::string& shortcut_hint =
"",
int priority = 50,
209 std::function<
void()> on_show =
nullptr,
210 std::function<
void()> on_hide =
nullptr,
211 bool visible_by_default =
false) {
212 RegisterPanel(session_id, window_id, display_name, icon, category,
213 shortcut_hint, priority, std::move(on_show),
214 std::move(on_hide), visible_by_default);
217 void UnregisterPanel(
size_t session_id,
const std::string& base_card_id);
287 const std::string& window_id);
310 const std::string& to_category);
316 bool OpenWindow(
size_t session_id,
const std::string& base_window_id) {
320 bool CloseWindow(
size_t session_id,
const std::string& base_window_id) {
323 bool ToggleWindow(
size_t session_id,
const std::string& base_window_id) {
327 const std::string& base_window_id)
const {
331 const std::string& base_window_id) {
343 void ShowOnlyWindow(
size_t session_id,
const std::string& base_window_id);
353 size_t session_id,
const std::string& category)
const {
361 size_t session_id,
const std::string& base_window_id)
const {
369 const std::unordered_map<std::string, WindowDescriptor>&
398 const std::vector<std::string>& window_ids) {
408 size_t session_id)
const;
416 size_t session_id,
const std::unordered_map<std::string, bool>& state,
417 bool publish_events =
false);
436 const std::string& base_window_id)
const {
451 if (viewport_width <= 0.0f) {
457 if (viewport_width < 900.0f) {
458 const float preferred = viewport_width * 0.50f;
459 const float min_width = std::max(220.0f, viewport_width * 0.40f);
460 const float max_width =
461 std::max(min_width, std::min(380.0f, viewport_width * 0.58f));
462 return std::clamp(preferred, min_width, max_width);
465 if (viewport_width < 1200.0f) {
466 const float preferred = viewport_width * 0.34f;
467 const float min_width = 300.0f;
468 const float max_width = std::min(420.0f, viewport_width * 0.42f);
469 return std::clamp(preferred, min_width, max_width);
474 if (viewport_width < 1400.0f) {
475 const float preferred = viewport_width * 0.25f;
476 const float min_width = 300.0f;
477 const float max_width = 380.0f;
478 return std::clamp(preferred, min_width, max_width);
482 const float max_width = viewport_width * 0.30f;
483 if (max_width > 0.0f && width > max_width) {
509 std::function<
void(
float)> cb) {
513 std::function<
void(
float)> cb) {
517 "Use GetDefaultWindowBrowserCategoryWidth() instead.")
518 static constexpr
float GetDefaultPanelBrowserCategoryWidth() {
544 const std::vector<WindowDescriptor>& cards);
722 void SavePreset(
const std::string& name,
const std::string& description =
"");
725 std::vector<WorkspacePreset>
GetPresets()
const;
745 void ShowAll(
size_t session_id);
746 void HideAll(
size_t session_id);
762 std::string
MakeWindowId(
size_t session_id,
const std::string& base_id)
const;
763 std::string
MakeWindowId(
size_t session_id,
const std::string& base_id,
818 std::function<
void(
const std::string&)> callback) {
822 std::function<
void(
const std::string&)> callback) {
837 const std::string& root_path =
"");
842 std::function<
void(
const std::string& category,
const std::string& path)>
864 size_t session_id,
const std::string& category)
const {
881 const std::string& base_window_id)
const {
921 const std::string& base_panel_id);
923 const std::string& prefixed_panel_id,
924 const std::string& base_panel_id)
const;
929 return static_cast<size_t>(scope);
934 const std::string& old_key,
935 const std::string& new_key);
938 const std::string& prefixed_id)
const;
944 size_t session_id)
const;
947 const std::unordered_map<std::string, std::string>*
950 const std::string& prefixed_window_id,
951 const std::string& base_window_id,
952 const std::string& category,
954 bool OpenWindowImpl(
size_t session_id,
const std::string& base_card_id);
955 bool CloseWindowImpl(
size_t session_id,
const std::string& base_card_id);
958 const std::string& base_card_id)
const;
962 size_t session_id,
const std::string& category)
const;
965 const std::vector<std::string>& panel_ids);
967 size_t session_id,
const std::string& base_card_id)
const;
969 const std::string& base_card_id)
const;
973 size_t session_id,
const std::string& category)
const;
981 const std::string& base_card_id)
const;
984 const std::string& base_card_id,
985 const std::string& prefixed_id);
994 const std::list<std::string>& panel_ids)
const;
997 const std::string& prefixed_id)
const;
1015 std::unordered_map<std::string, std::unique_ptr<WindowContent>>
instances;
1019 std::unordered_map<std::string, std::string>
aliases;
1035 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>
1037 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>
1039 std::unordered_map<size_t,
1050 std::unordered_map<std::string, WindowDescriptor>&
cards_ =
1052 std::unordered_map<std::string, std::unique_ptr<WindowContent>>&
1076 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>&
1078 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>&
1086 std::unordered_map<std::string, WorkspacePreset>
presets_;
1105 std::unordered_map<std::string, std::unique_ptr<FileBrowser>>
1121 const std::string& base_id)
const;
1125 const std::string& panel_id);
1134#undef YAZE_CARD_SHIM_DEPRECATED
void Publish(const T &event)
Interface for editor classes.
File system browser for the sidebar.
Base class for windows that edit specific ROM resources.
Base interface for all logical window content components.
Central registry for all editor cards with session awareness and dependency injection.
void ResetSidePanelWidth(bool notify=true)
void EnableFileBrowser(const std::string &category, const std::string &root_path="")
size_t GetSessionCount() const
std::unordered_set< std::string > & pending_float_window_ids_
void RegisterPanel(size_t session_id, const WindowDescriptor &base_info)
bool IsWindowPinnedImpl(size_t session_id, const std::string &base_card_id) const
void TriggerShowWindowBrowser()
void SavePreset(const std::string &name, const std::string &description="")
std::vector< std::string > GetWindowsInSessionImpl(size_t session_id) const
void SetVisibleWindows(size_t session_id, const std::vector< std::string > &window_ids)
Set which panels should be visible for a session.
bool IsWindowOpen(const std::string &base_window_id) const
int GetFocusedWindowIndex() const
void SetActiveSidePanelWidth(float width, float viewport_width=0.0f, bool notify=true)
void HideAllWindowsInCategory(size_t session_id, const std::string &category)
int GetFocusedPanelIndex() const
bool CloseWindowImpl(size_t session_id, const std::string &base_card_id)
std::string GetContextKey(size_t session_id, WindowContextScope scope) const
size_t GetResourceWindowLimit(const std::string &resource_type) const
void SetEventBus(EventBus *event_bus)
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > & session_reverse_card_mapping_
std::string GetWorkspaceWindowName(size_t session_id, const std::string &base_window_id) const
Resolve the exact ImGui window name for a panel by base ID.
static SidePanelWidthBounds GetSidePanelWidthBounds(float viewport_width)
size_t GetActiveSessionId() const
void SetSidebarVisible(bool visible, bool notify=true)
void DeletePreset(const std::string &name)
std::vector< WindowDescriptor > GetWindowsInCategory(size_t session_id, const std::string &category) const
void TriggerShowShortcuts()
std::vector< WorkspacePreset > GetPresets() const
void ResetToDefaults(size_t session_id)
void UnregisterWindowContent(const std::string &window_id)
Unregister and destroy a WindowContent instance.
std::unordered_map< std::string, std::string > * FindSessionWindowMapping(size_t session_id)
std::string SelectResourceWindowForEviction(const std::list< std::string > &panel_ids) const
void RegisterRegistryWindowsForSession(size_t session_id)
bool * GetVisibilityFlag(size_t session_id, const std::string &base_card_id)
void UntrackResourceWindow(const std::string &panel_id)
std::string ResolveBaseWindowId(const std::string &panel_id) const
void RegisterWindow(const WindowDescriptor &descriptor)
void SetEditorResolver(std::function< Editor *(const std::string &)> resolver)
std::unordered_map< std::string, WindowDescriptor > & cards_
WindowBrowserState browser_state_
std::string GetPrefixedWindowId(size_t session_id, const std::string &base_id) const
std::string ResolveWindowAlias(const std::string &window_id) const
bool SidebarHasFocus() const
void RestoreVisibilityState(size_t session_id, const std::unordered_map< std::string, bool > &state, bool publish_events=false)
Restore panel visibility state from persistence.
bool LoadPreset(const std::string &name)
bool OpenWindowFloating(size_t session_id, const std::string &base_window_id)
static float GetSidePanelWidthForViewport(float viewport_width)
void SetPanelBrowserCategoryWidthChangedCallback(std::function< void(float)> cb)
std::vector< std::string > * FindSessionWindowIds(size_t session_id)
const WindowDescriptor * GetWindowDescriptor(size_t session_id, const std::string &base_window_id) const
void ToggleSidebarExpanded()
void ApplyContextPolicy(size_t session_id, WindowContextScope scope, const std::string &old_key, const std::string &new_key)
const WindowDescriptor * GetWindowDescriptorImpl(size_t session_id, const std::string &base_card_id) const
WorkspaceWindowManager(WorkspaceWindowManager &&)=delete
std::vector< std::string > GetWindowsInSession(size_t session_id) const
bool CloseWindow(const std::string &base_window_id)
void RememberPinnedStateForRemovedWindow(size_t session_id, const std::string &base_card_id, const std::string &prefixed_id)
void ToggleSidebarVisibility()
std::string GetBaseIdForPrefixedId(size_t session_id, const std::string &prefixed_id) const
static CategoryTheme GetCategoryTheme(const std::string &category)
void RegisterWindowAlias(const std::string &legacy_base_id, const std::string &canonical_base_id)
WorkspaceWindowManager & operator=(const WorkspaceWindowManager &)=delete
FileBrowser * GetFileBrowser(const std::string &category)
std::unordered_map< std::string, std::string > & panel_resource_types_
std::vector< WindowDescriptor > GetWindowsInCategoryImpl(size_t session_id, const std::string &category) const
const std::unordered_map< std::string, WindowDescriptor > & GetAllWindowDescriptors() const
Get all panel descriptors (for layout designer, panel browser, etc.)
bool IsSidebarExpanded() const
std::unordered_map< std::string, bool > & centralized_visibility_
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > & session_card_mapping_
std::unordered_map< std::string, bool > & pending_pinned_base_ids_
void SetPanelExpanded(bool expanded, bool notify=true)
void MarkPanelUsed(const std::string &panel_id)
Mark a panel as recently used (for LRU)
bool IsWindowPinned(const std::string &base_window_id) const
void DisableFileBrowser(const std::string &category)
std::function< void(const std::string &, const std::string &) on_file_clicked_)
void TriggerShowAgentChatSidebar()
void TrackPanelForSession(size_t session_id, const std::string &base_id, const std::string &panel_id)
void SetWindowPinned(size_t session_id, const std::string &base_window_id, bool pinned)
bool CloseWindow(size_t session_id, const std::string &base_window_id)
std::unordered_map< std::string, std::list< std::string > > & resource_panels_
void TriggerShowPanelBrowser()
WindowSessionState session_state_
std::vector< std::string > GetAllWindowCategories() const
void TrackResourceWindow(const std::string &panel_id, ResourceWindowContent *resource_panel)
std::vector< std::string > GetAllWindowCategories(size_t session_id) const
std::vector< std::string > GetAllCategories() const
void SetActiveCategory(const std::string &category, bool notify=true)
float GetWindowBrowserCategoryWidth() const
void SetSidebarStateChangedCallback(std::function< void(bool, bool)> cb)
std::string GetWorkspaceWindowName(const WindowDescriptor &descriptor) const
void TriggerShowCommandPalette()
std::vector< std::string > GetPinnedWindowsImpl() const
void RegisterRegistryWindowContent(std::unique_ptr< WindowContent > window)
Register a ContentRegistry-managed WindowContent instance.
static std::string GetCategoryIcon(const std::string &category)
void UnregisterPanel(size_t session_id, const std::string &base_card_id)
WorkspaceWindowManager()=default
void TriggerWindowClicked(const std::string &category)
void ShowOnlyWindow(size_t session_id, const std::string &base_window_id)
std::string GetActiveCategory() const
bool IsFavorite(const std::string &card_id) const
bool OpenWindowFloating(const std::string &base_window_id)
void RegisterWindowContent(std::unique_ptr< WindowContent > window)
Register a WindowContent instance for central drawing.
std::function< Editor *(const std::string &) editor_resolver_)
static constexpr float GetCollapsedSidebarWidth()
static constexpr const char * kDashboardCategory
std::unordered_map< std::string, WorkspacePreset > presets_
void EnforceResourceLimits(const std::string &resource_type)
Enforce limits on resource panels (LRU eviction)
bool HasFileBrowser(const std::string &category) const
YAZE_CARD_SHIM_DEPRECATED("Use GetDefaultWindowBrowserCategoryWidth() instead.") static const expr float GetDefaultPanelBrowserCategoryWidth()
WindowDescriptor * FindDescriptorByPrefixedId(const std::string &prefixed_id)
std::vector< std::string > GetVisibleWindowIds(size_t session_id) const
Get list of currently visible panel IDs for a session.
void SetPanelBrowserCategoryWidth(float width, bool notify=true)
void RegisterWindow(size_t session_id, const WindowDescriptor &descriptor)
bool IsWindowVisibleImpl(size_t session_id, const std::string &base_card_id) const
void SetStoredSidePanelWidth(float width, bool notify=false)
void DrawAllVisiblePanels()
Draw all visible WindowContent instances (central drawing)
std::unordered_map< std::string, std::unique_ptr< WindowContent > > & panel_instances_
static constexpr float GetSidePanelWidth()
void SetVisibleWindowsImpl(size_t session_id, const std::vector< std::string > &panel_ids)
void RegisterRegistryWindow(std::unique_ptr< WindowContent > window)
std::unordered_set< std::string > & registry_panel_ids_
size_t GetWindowCount() const
bool IsPanelExpanded() const
std::vector< std::string > GetVisibleWindowIdsImpl(size_t session_id) const
void SetWindowPinnedImpl(size_t session_id, const std::string &base_card_id, bool pinned)
void MarkWindowRecentlyUsedImpl(const std::string &card_id)
bool ToggleWindowImpl(size_t session_id, const std::string &base_card_id)
std::unordered_map< size_t, std::vector< std::string > > & session_cards_
std::vector< std::string > GetPinnedWindows(size_t session_id) const
void HideAllWindowsInCategory(const std::string &category)
uint64_t GetWindowMRUTime(const std::string &window_id) const
size_t GetVisibleWindowCount(size_t session_id) const
bool IsWindowOpen(size_t session_id, const std::string &base_window_id) const
void EnforceResourceWindowLimits(const std::string &resource_type)
void TriggerShowEmulator()
std::string ResolvePanelAlias(const std::string &panel_id) const
Resolve a panel ID through the alias table.
void TriggerShowAgentProposalsSidebar()
std::unordered_map< std::string, std::string > * FindSessionReverseWindowMapping(size_t session_id)
void SetActiveSession(size_t session_id)
bool OpenWindow(const std::string &base_window_id)
std::string GetWindowNameImpl(size_t session_id, const std::string &base_card_id) const
void SetCategoryChangedCallback(std::function< void(const std::string &)> cb)
void SetFileBrowserPath(const std::string &category, const std::string &path)
std::unordered_map< std::string, uint64_t > & last_used_at_
void SetWindowBrowserCategoryWidthChangedCallback(std::function< void(float)> cb)
float GetActiveSidePanelWidth(float viewport_width) const
std::string MakeWindowId(size_t session_id, const std::string &base_id) const
static constexpr float GetSidebarWidth()
std::vector< WindowDescriptor > GetWindowsSortedByMRUImpl(size_t session_id, const std::string &category) const
bool * GetWindowVisibilityFlag(const std::string &base_window_id)
void SetOnWindowCategorySelectedCallback(std::function< void(const std::string &)> callback)
void TriggerCategorySelected(const std::string &category)
std::unordered_map< std::string, bool > SerializeVisibilityState(size_t session_id) const
Serialize panel visibility state for persistence.
void SetOnWindowClickedCallback(std::function< void(const std::string &)> callback)
~WorkspaceWindowManager()=default
ResourceWindowState resource_state_
void HandleSidebarKeyboardNav(size_t session_id, const std::vector< WindowDescriptor > &cards)
Handle keyboard navigation in sidebar (click-to-focus modal)
bool ShouldPrefixPanels() const
void OnEditorSwitch(const std::string &from_category, const std::string &to_category)
Handle editor/category switching for panel visibility.
bool OpenWindow(size_t session_id, const std::string &base_window_id)
void UnregisterSession(size_t session_id)
void HideAllWindowsInSession(size_t session_id)
uint64_t GetWindowMRUTimeImpl(const std::string &card_id) const
void ToggleFavorite(const std::string &card_id)
void DrawVisibleWindows()
std::vector< WindowValidationResult > ValidateWindows() const
void UpdateSessionCount()
static constexpr float GetDefaultWindowBrowserCategoryWidth()
std::vector< std::string > GetPinnedWindows() const
std::vector< WindowDescriptor > GetWindowsSortedByMRU(size_t session_id, const std::string &category) const
void RegisterWindow(size_t session_id, const std::string &window_id, const std::string &display_name, const std::string &icon, const std::string &category, const std::string &shortcut_hint="", int priority=50, std::function< void()> on_show=nullptr, std::function< void()> on_hide=nullptr, bool visible_by_default=false)
void ShowAllWindowsInCategory(const std::string &category)
std::unordered_map< std::string, std::string > & panel_id_aliases_
void TriggerShowSettings()
std::unordered_map< std::string, bool > & pinned_panels_
bool IsWindowPinned(size_t session_id, const std::string &base_window_id) const
void SetSidePanelWidthChangedCallback(std::function< void(float)> cb)
void RegisterSession(size_t session_id)
void ShowAllWindowsInSession(size_t session_id)
WorkspaceWindowManager(const WorkspaceWindowManager &)=delete
void TriggerWindowCategorySelected(const std::string &category)
WindowContent * GetWindowContent(const std::string &window_id)
Get a WindowContent instance by ID.
bool ToggleWindow(size_t session_id, const std::string &base_window_id)
void SetWindowBrowserCategoryWidth(float width, bool notify=true)
void RegisterRegistryWindowContentsForSession(size_t session_id)
Register descriptors for all registry window contents in a session.
void SetFileClickedCallback(std::function< void(const std::string &category, const std::string &path)> callback)
void LoadPresetsFromFile()
size_t GetRegistryWindowCount() const
size_t GetRegistryWindowContentCount() const
Returns the number of window contents registered via ContentRegistry.
void UnregisterPanel(const std::string &base_card_id)
std::unordered_map< std::string, bool > SerializePinnedState() const
Serialize pinned panel state for persistence.
bool IsSidebarVisible() const
void SetSidebarExpanded(bool expanded, bool notify=true)
WorkspaceWindowManager & operator=(WorkspaceWindowManager &&)=delete
std::unordered_map< size_t, std::unordered_map< WindowContextScope, std::string, WindowContextScopeHash > > & session_context_keys_
void UnregisterWindow(const std::string &base_window_id)
WindowContent * FindPanelInstance(const std::string &prefixed_panel_id, const std::string &base_panel_id)
WindowRegistryState registry_state_
void RegisterPanel(const WindowDescriptor &base_info)
void UnregisterSessionPanels(size_t session_id)
void UnregisterPanelsWithPrefix(const std::string &prefix)
bool * GetWindowVisibilityFlag(size_t session_id, const std::string &base_window_id)
void TriggerResetLayout()
void SetContextKey(size_t session_id, WindowContextScope scope, std::string key)
Set a string key for a given context scope (room/selection/etc)
float GetStoredSidePanelWidth() const
WindowValidationResult ValidateWindow(const std::string &card_id) const
void PublishWindowVisibilityChanged(size_t session_id, const std::string &prefixed_window_id, const std::string &base_window_id, const std::string &category, bool visible) const
void RegisterPanelDescriptorForSession(size_t session_id, const WindowContent &panel)
bool OpenWindowImpl(size_t session_id, const std::string &base_card_id)
void ShowAllWindowsInCategory(size_t session_id, const std::string &category)
void UnregisterWindow(size_t session_id, const std::string &base_window_id)
void RestorePinnedState(const std::unordered_map< std::string, bool > &state)
Restore pinned panel state from persistence.
void RegisterPanelAlias(const std::string &legacy_base_id, const std::string &canonical_base_id)
Register a legacy panel ID alias that resolves to a canonical ID.
void MarkWindowRecentlyUsed(const std::string &window_id)
void SetWindowPinned(const std::string &base_window_id, bool pinned)
std::unordered_set< std::string > & global_panel_ids_
WindowContextScope
Optional context binding for a window's behavior within an editor.
WindowLifecycle
Defines lifecycle behavior for editor windows.
@ EditorBound
Hidden when switching editors (default)
WindowScope
Defines whether a window is session-scoped or global.
static UIActionRequestEvent Redo(size_t session=0)
static UIActionRequestEvent ShowCommandPalette(size_t session=0)
static UIActionRequestEvent SaveRom(size_t session=0)
static UIActionRequestEvent Create(Action act, size_t session=0)
static UIActionRequestEvent Undo(size_t session=0)
static UIActionRequestEvent ShowSettings(size_t session=0)
static UIActionRequestEvent ShowAgentProposalsSidebar(size_t session=0)
static UIActionRequestEvent ShowAgentChatSidebar(size_t session=0)
static UIActionRequestEvent OpenRom(size_t session=0)
static UIActionRequestEvent ShowEmulator(size_t session=0)
Metadata for a dockable editor window (formerly PanelInfo)
std::function< void()> on_show
ShortcutScope shortcut_scope
std::string shortcut_hint
std::string workflow_group
std::function< void()> on_hide
WindowContextScope context_scope
std::string disabled_tooltip
std::string workflow_description
WindowPresentationPolicy presentation
bool IsListedInWindowBrowser() const
std::string workflow_label
std::string GetWindowTitle() const
Get the effective window title for DockBuilder.
std::string GetImGuiWindowName() const
Build the exact ImGui window name used by PanelWindow::Begin.
std::function< bool()> enabled_condition
WindowLifecycle window_lifecycle
bool list_in_window_browser
Get the expressive theme color for a category.
std::unordered_map< std::string, std::string > window_type_by_id
std::unordered_map< std::string, std::list< std::string > > window_ids_by_type
std::function< void(bool visible, bool expanded)> on_sidebar_state_changed
std::function< void(float width)> on_window_browser_width_changed
std::function< void(const std::string &) on_window_clicked)
std::string active_category
float window_browser_category_width
static constexpr size_t kMaxRecentCategories
std::vector< std::string > recent_categories
std::function< void(float width)> on_sidebar_width_changed
std::function< void(const std::string &) on_category_selected)
std::unordered_map< std::string, std::unique_ptr< FileBrowser > > category_file_browsers
std::function< void(const std::string &) on_category_changed)
size_t operator()(WindowContextScope scope) const noexcept
std::unordered_map< std::string, std::string > aliases
std::unordered_map< std::string, std::unique_ptr< WindowContent > > instances
std::unordered_map< std::string, bool > centralized_visibility
std::unordered_set< std::string > registry_ids
std::unordered_set< std::string > global_ids
std::unordered_map< std::string, WindowDescriptor > descriptors
std::unordered_map< size_t, std::unordered_map< WindowContextScope, std::string, WindowContextScopeHash > > session_context_keys
std::unordered_map< std::string, bool > pinned_windows
std::unordered_map< size_t, std::vector< std::string > > session_windows
std::unordered_set< std::string > pending_float_window_ids
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > session_reverse_window_mapping
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > session_window_mapping
std::unordered_map< std::string, bool > pending_pinned_base_ids
std::unordered_map< std::string, uint64_t > last_used_at
std::string expected_title
std::vector< std::string > visible_cards
#define YAZE_CARD_SHIM_DEPRECATED(msg)