70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
#include <gio/gio.h>
|
|
|
|
static void
|
|
call_dbus_cb (GDBusProxy *proxy,
|
|
GAsyncResult *res,
|
|
gpointer user_data)
|
|
{
|
|
g_autoptr (GError) err = NULL;
|
|
g_autoptr (GVariant) output = NULL;
|
|
|
|
output = g_dbus_proxy_call_finish (proxy, res, &err);
|
|
if (err) {
|
|
g_warning ("Can't open panel %s", err->message);
|
|
}
|
|
g_object_unref (proxy);
|
|
}
|
|
|
|
static void
|
|
create_dbus_proxy_cb (GObject *source_object, GAsyncResult *res, char *panel)
|
|
{
|
|
GDBusProxy *proxy;
|
|
g_autoptr (GError) err = NULL;
|
|
GVariantBuilder builder;
|
|
GVariant *params[3];
|
|
GVariant *array[1];
|
|
|
|
proxy = g_dbus_proxy_new_for_bus_finish (res, &err);
|
|
|
|
if (err != NULL) {
|
|
g_warning ("Can't open panel %s: %s", panel, err->message);
|
|
g_free (panel);
|
|
return;
|
|
}
|
|
|
|
g_variant_builder_init (&builder, G_VARIANT_TYPE ("av"));
|
|
g_variant_builder_add (&builder, "v", g_variant_new_string (""));
|
|
|
|
array[0] = g_variant_new ("v", g_variant_new ("(sav)", panel, &builder));
|
|
|
|
params[0] = g_variant_new_string ("launch-panel");
|
|
params[1] = g_variant_new_array (G_VARIANT_TYPE ("v"), array, 1);
|
|
params[2] = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0);
|
|
|
|
g_dbus_proxy_call (proxy,
|
|
"Activate",
|
|
g_variant_new_tuple (params, 3),
|
|
G_DBUS_CALL_FLAGS_NONE,
|
|
-1,
|
|
NULL,
|
|
(GAsyncReadyCallback) call_dbus_cb,
|
|
NULL);
|
|
|
|
g_free (panel);
|
|
}
|
|
|
|
void
|
|
popover_open_settings_panel (char *panel)
|
|
{
|
|
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
|
|
G_DBUS_PROXY_FLAGS_NONE,
|
|
NULL,
|
|
"org.gnome.Settings",
|
|
"/org/gnome/Settings",
|
|
"org.gtk.Actions",
|
|
NULL,
|
|
(GAsyncReadyCallback) create_dbus_proxy_cb,
|
|
g_strdup (panel));
|
|
|
|
}
|