shell: Make singletons owned by ShellGlobal
This means also means they will be cleaned up when disposing ShellGlobal, which will then mean signals tied to the GObject lifetime will be disconnected. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6536 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2722>
This commit is contained in:
parent
517482b562
commit
ff705fa902
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include "shell-app-cache-private.h"
|
#include "shell-app-cache-private.h"
|
||||||
|
|
||||||
|
#include "shell-global-private.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION:shell-app-cache
|
* SECTION:shell-app-cache
|
||||||
* @title: ShellAppCache
|
* @title: ShellAppCache
|
||||||
@ -82,15 +84,7 @@ cache_state_new (void)
|
|||||||
ShellAppCache *
|
ShellAppCache *
|
||||||
shell_app_cache_get_default (void)
|
shell_app_cache_get_default (void)
|
||||||
{
|
{
|
||||||
static ShellAppCache *instance;
|
return shell_global_get_app_cache (shell_global_get ());
|
||||||
|
|
||||||
if (instance == NULL)
|
|
||||||
{
|
|
||||||
instance = g_object_new (SHELL_TYPE_APP_CACHE, NULL);
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (instance), (gpointer *)&instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -308,12 +308,7 @@ shell_app_system_finalize (GObject *object)
|
|||||||
ShellAppSystem *
|
ShellAppSystem *
|
||||||
shell_app_system_get_default (void)
|
shell_app_system_get_default (void)
|
||||||
{
|
{
|
||||||
static ShellAppSystem *instance = NULL;
|
return shell_global_get_app_system (shell_global_get ());
|
||||||
|
|
||||||
if (instance == NULL)
|
|
||||||
instance = g_object_new (SHELL_TYPE_APP_SYSTEM, NULL);
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -763,10 +763,5 @@ on_enable_monitoring_key_changed (GSettings *settings,
|
|||||||
ShellAppUsage *
|
ShellAppUsage *
|
||||||
shell_app_usage_get_default (void)
|
shell_app_usage_get_default (void)
|
||||||
{
|
{
|
||||||
static ShellAppUsage *instance;
|
return shell_global_get_app_usage (shell_global_get ());
|
||||||
|
|
||||||
if (instance == NULL)
|
|
||||||
instance = g_object_new (SHELL_TYPE_APP_USAGE, NULL);
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include <gjs/gjs.h>
|
#include <gjs/gjs.h>
|
||||||
|
|
||||||
|
#include "shell-app-cache-private.h"
|
||||||
|
|
||||||
void _shell_global_init (const char *first_property_name,
|
void _shell_global_init (const char *first_property_name,
|
||||||
...);
|
...);
|
||||||
void _shell_global_set_plugin (ShellGlobal *global,
|
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);
|
GjsContext *_shell_global_get_gjs_context (ShellGlobal *global);
|
||||||
|
|
||||||
|
ShellAppCache * shell_global_get_app_cache (ShellGlobal *global);
|
||||||
|
|
||||||
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
||||||
XEvent *xev);
|
XEvent *xev);
|
||||||
|
|
||||||
|
@ -39,6 +39,8 @@
|
|||||||
#include "shell-global-private.h"
|
#include "shell-global-private.h"
|
||||||
#include "shell-perf-log.h"
|
#include "shell-perf-log.h"
|
||||||
#include "shell-window-tracker.h"
|
#include "shell-window-tracker.h"
|
||||||
|
#include "shell-app-usage.h"
|
||||||
|
#include "shell-app-cache-private.h"
|
||||||
#include "shell-wm.h"
|
#include "shell-wm.h"
|
||||||
#include "shell-util.h"
|
#include "shell-util.h"
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
@ -72,6 +74,11 @@ struct _ShellGlobal {
|
|||||||
GFile *userdatadir_path;
|
GFile *userdatadir_path;
|
||||||
GFile *runtime_state_path;
|
GFile *runtime_state_path;
|
||||||
|
|
||||||
|
ShellWindowTracker *window_tracker;
|
||||||
|
ShellAppSystem *app_system;
|
||||||
|
ShellAppCache *app_cache;
|
||||||
|
ShellAppUsage *app_usage;
|
||||||
|
|
||||||
StFocusManager *focus_manager;
|
StFocusManager *focus_manager;
|
||||||
|
|
||||||
guint work_count;
|
guint work_count;
|
||||||
@ -479,6 +486,11 @@ shell_global_finalize (GObject *object)
|
|||||||
g_clear_object (&global->js_context);
|
g_clear_object (&global->js_context);
|
||||||
g_object_unref (global->settings);
|
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;
|
the_object = NULL;
|
||||||
|
|
||||||
g_cancellable_cancel (global->switcheroo_cancellable);
|
g_cancellable_cancel (global->switcheroo_cancellable);
|
||||||
@ -720,6 +732,7 @@ _shell_global_init (const char *first_property_name,
|
|||||||
ShellGlobal *
|
ShellGlobal *
|
||||||
shell_global_get (void)
|
shell_global_get (void)
|
||||||
{
|
{
|
||||||
|
g_return_val_if_fail (the_object, NULL);
|
||||||
return the_object;
|
return the_object;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1915,3 +1928,63 @@ _shell_global_notify_shutdown (ShellGlobal *global)
|
|||||||
{
|
{
|
||||||
g_signal_emit (global, shell_global_signals[SHUTDOWN], 0);
|
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;
|
||||||
|
}
|
||||||
|
@ -9,6 +9,10 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
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 ())
|
#define SHELL_TYPE_GLOBAL (shell_global_get_type ())
|
||||||
G_DECLARE_FINAL_TYPE (ShellGlobal, shell_global, SHELL, GLOBAL, GObject)
|
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_type,
|
||||||
const char *property_name);
|
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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_GLOBAL_H__ */
|
#endif /* __SHELL_GLOBAL_H__ */
|
||||||
|
@ -824,10 +824,5 @@ shell_startup_sequence_get_app (MetaStartupSequence *sequence)
|
|||||||
ShellWindowTracker *
|
ShellWindowTracker *
|
||||||
shell_window_tracker_get_default (void)
|
shell_window_tracker_get_default (void)
|
||||||
{
|
{
|
||||||
static ShellWindowTracker *instance;
|
return shell_global_get_window_tracker (shell_global_get ());
|
||||||
|
|
||||||
if (instance == NULL)
|
|
||||||
instance = g_object_new (SHELL_TYPE_WINDOW_TRACKER, NULL);
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user