shell: Prime the GPUs property cache for switcheroo-control
See: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/781
This commit is contained in:
parent
c7dec4130d
commit
33c10e9180
@ -125,6 +125,29 @@ G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT);
|
|||||||
|
|
||||||
static guint shell_global_signals [LAST_SIGNAL] = { 0 };
|
static guint shell_global_signals [LAST_SIGNAL] = { 0 };
|
||||||
|
|
||||||
|
static void
|
||||||
|
got_switcheroo_control_gpus_property_cb (GObject *source_object,
|
||||||
|
GAsyncResult *res,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
ShellGlobal *global;
|
||||||
|
GError *error = NULL;
|
||||||
|
GVariant *gpus;
|
||||||
|
|
||||||
|
gpus = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
|
||||||
|
res, &error);
|
||||||
|
if (!gpus)
|
||||||
|
{
|
||||||
|
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||||
|
g_debug ("Could not get GPUs property from switcheroo-control: %s", error->message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
global = user_data;
|
||||||
|
g_dbus_proxy_set_cached_property (global->switcheroo_control, "GPUs", gpus);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
switcheroo_control_ready_cb (GObject *source_object,
|
switcheroo_control_ready_cb (GObject *source_object,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@ -133,6 +156,7 @@ switcheroo_control_ready_cb (GObject *source_object,
|
|||||||
ShellGlobal *global;
|
ShellGlobal *global;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
ShellNetHadessSwitcherooControl *control;
|
ShellNetHadessSwitcherooControl *control;
|
||||||
|
g_auto(GStrv) cached_props = NULL;
|
||||||
|
|
||||||
control = shell_net_hadess_switcheroo_control_proxy_new_for_bus_finish (res, &error);
|
control = shell_net_hadess_switcheroo_control_proxy_new_for_bus_finish (res, &error);
|
||||||
if (!control)
|
if (!control)
|
||||||
@ -146,6 +170,25 @@ switcheroo_control_ready_cb (GObject *source_object,
|
|||||||
global = user_data;
|
global = user_data;
|
||||||
global->switcheroo_control = G_DBUS_PROXY (control);
|
global->switcheroo_control = G_DBUS_PROXY (control);
|
||||||
g_debug ("Got switcheroo-control proxy successfully");
|
g_debug ("Got switcheroo-control proxy successfully");
|
||||||
|
|
||||||
|
cached_props = g_dbus_proxy_get_cached_property_names (global->switcheroo_control);
|
||||||
|
if (cached_props != NULL && g_strv_contains ((const gchar * const *) cached_props, "GPUs"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_dbus_connection_call (g_dbus_proxy_get_connection (global->switcheroo_control),
|
||||||
|
g_dbus_proxy_get_name (global->switcheroo_control),
|
||||||
|
g_dbus_proxy_get_object_path (global->switcheroo_control),
|
||||||
|
"org.freedesktop.DBus.Properties",
|
||||||
|
"Get",
|
||||||
|
g_variant_new ("(ss)",
|
||||||
|
g_dbus_proxy_get_interface_name (global->switcheroo_control),
|
||||||
|
"GPUs"),
|
||||||
|
NULL,
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1,
|
||||||
|
global->switcheroo_cancellable,
|
||||||
|
got_switcheroo_control_gpus_property_cb,
|
||||||
|
user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user