diff --git a/src/shell-app-cache.c b/src/shell-app-cache.c index 44fc8b0d7..ef1075451 100644 --- a/src/shell-app-cache.c +++ b/src/shell-app-cache.c @@ -4,6 +4,8 @@ #include "shell-app-cache-private.h" +#include "shell-global-private.h" + /** * SECTION:shell-app-cache * @title: ShellAppCache @@ -82,15 +84,7 @@ cache_state_new (void) ShellAppCache * shell_app_cache_get_default (void) { - static ShellAppCache *instance; - - if (instance == NULL) - { - instance = g_object_new (SHELL_TYPE_APP_CACHE, NULL); - g_object_add_weak_pointer (G_OBJECT (instance), (gpointer *)&instance); - } - - return instance; + return shell_global_get_app_cache (shell_global_get ()); } static void diff --git a/src/shell-app-system.c b/src/shell-app-system.c index a5b76362d..f9d74ed5c 100644 --- a/src/shell-app-system.c +++ b/src/shell-app-system.c @@ -308,12 +308,7 @@ shell_app_system_finalize (GObject *object) ShellAppSystem * shell_app_system_get_default (void) { - static ShellAppSystem *instance = NULL; - - if (instance == NULL) - instance = g_object_new (SHELL_TYPE_APP_SYSTEM, NULL); - - return instance; + return shell_global_get_app_system (shell_global_get ()); } /** diff --git a/src/shell-app-usage.c b/src/shell-app-usage.c index 8cbebed88..aaaabd989 100644 --- a/src/shell-app-usage.c +++ b/src/shell-app-usage.c @@ -763,10 +763,5 @@ on_enable_monitoring_key_changed (GSettings *settings, ShellAppUsage * shell_app_usage_get_default (void) { - static ShellAppUsage *instance; - - if (instance == NULL) - instance = g_object_new (SHELL_TYPE_APP_USAGE, NULL); - - return instance; + return shell_global_get_app_usage (shell_global_get ()); } diff --git a/src/shell-global-private.h b/src/shell-global-private.h index a0834af8e..613250060 100644 --- a/src/shell-global-private.h +++ b/src/shell-global-private.h @@ -6,6 +6,8 @@ #include +#include "shell-app-cache-private.h" + void _shell_global_init (const char *first_property_name, ...); void _shell_global_set_plugin (ShellGlobal *global, @@ -15,6 +17,8 @@ void _shell_global_destroy_gjs_context (ShellGlobal *global); GjsContext *_shell_global_get_gjs_context (ShellGlobal *global); +ShellAppCache * shell_global_get_app_cache (ShellGlobal *global); + gboolean _shell_global_check_xdnd_event (ShellGlobal *global, XEvent *xev); diff --git a/src/shell-global.c b/src/shell-global.c index 0f0589e27..aae9469ab 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -39,6 +39,8 @@ #include "shell-global-private.h" #include "shell-perf-log.h" #include "shell-window-tracker.h" +#include "shell-app-usage.h" +#include "shell-app-cache-private.h" #include "shell-wm.h" #include "shell-util.h" #include "st.h" @@ -72,6 +74,11 @@ struct _ShellGlobal { GFile *userdatadir_path; GFile *runtime_state_path; + ShellWindowTracker *window_tracker; + ShellAppSystem *app_system; + ShellAppCache *app_cache; + ShellAppUsage *app_usage; + StFocusManager *focus_manager; guint work_count; @@ -479,6 +486,11 @@ shell_global_finalize (GObject *object) g_clear_object (&global->js_context); g_object_unref (global->settings); + g_clear_object (&global->window_tracker); + g_clear_object (&global->app_system); + g_clear_object (&global->app_cache); + g_clear_object (&global->app_usage); + the_object = NULL; g_cancellable_cancel (global->switcheroo_cancellable); @@ -720,6 +732,7 @@ _shell_global_init (const char *first_property_name, ShellGlobal * shell_global_get (void) { + g_return_val_if_fail (the_object, NULL); return the_object; } @@ -1915,3 +1928,63 @@ _shell_global_notify_shutdown (ShellGlobal *global) { g_signal_emit (global, shell_global_signals[SHUTDOWN], 0); } + +/** + * shell_global_get_window_tracker: + * + * Gets window tracker. + * + * Return value: (transfer none): the window tracker + */ +ShellWindowTracker * +shell_global_get_window_tracker (ShellGlobal *global) +{ + if (!global->window_tracker) + global->window_tracker = g_object_new (SHELL_TYPE_WINDOW_TRACKER, NULL); + return global->window_tracker; +} + +/** + * shell_global_get_app_system: + * + * Gets app system. + * + * Return value: (transfer none): the app system + */ +ShellAppSystem * +shell_global_get_app_system (ShellGlobal *global) +{ + if (!global->app_system) + global->app_system = g_object_new (SHELL_TYPE_APP_SYSTEM, NULL); + return global->app_system; +} + +/** + * shell_global_get_app_cache: + * + * Gets app cache. + * + * Return value: (transfer none): the app cache + */ +ShellAppCache * +shell_global_get_app_cache (ShellGlobal *global) +{ + if (!global->app_cache) + global->app_cache = g_object_new (SHELL_TYPE_APP_CACHE, NULL); + return global->app_cache; +} + +/** + * shell_global_get_app_usage: + * + * Gets app usage. + * + * Return value: (transfer none): the app usage + */ +ShellAppUsage * +shell_global_get_app_usage (ShellGlobal *global) +{ + if (!global->app_usage) + global->app_usage = g_object_new (SHELL_TYPE_APP_USAGE, NULL); + return global->app_usage; +} diff --git a/src/shell-global.h b/src/shell-global.h index beeabdeff..839933023 100644 --- a/src/shell-global.h +++ b/src/shell-global.h @@ -9,6 +9,10 @@ G_BEGIN_DECLS +#include "shell-window-tracker.h" +#include "shell-app-system.h" +#include "shell-app-usage.h" + #define SHELL_TYPE_GLOBAL (shell_global_get_type ()) G_DECLARE_FINAL_TYPE (ShellGlobal, shell_global, SHELL, GLOBAL, GObject) @@ -89,6 +93,12 @@ GVariant * shell_global_get_persistent_state (ShellGlobal *global, const char *property_type, const char *property_name); +ShellWindowTracker * shell_global_get_window_tracker (ShellGlobal *global); + +ShellAppSystem * shell_global_get_app_system (ShellGlobal *global); + +ShellAppUsage * shell_global_get_app_usage (ShellGlobal *global); + G_END_DECLS #endif /* __SHELL_GLOBAL_H__ */ diff --git a/src/shell-window-tracker.c b/src/shell-window-tracker.c index 50ab8f1da..6a7240e47 100644 --- a/src/shell-window-tracker.c +++ b/src/shell-window-tracker.c @@ -824,10 +824,5 @@ shell_startup_sequence_get_app (MetaStartupSequence *sequence) ShellWindowTracker * shell_window_tracker_get_default (void) { - static ShellWindowTracker *instance; - - if (instance == NULL) - instance = g_object_new (SHELL_TYPE_WINDOW_TRACKER, NULL); - - return instance; + return shell_global_get_window_tracker (shell_global_get ()); }