[gnome-settings-daemon] Move over the install root setting from gnome-packagekit to the updates plugin
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] Move over the install root setting from gnome-packagekit to the updates plugin
- Date: Wed, 16 Feb 2011 18:40:42 +0000 (UTC)
commit 7199ee1d068f2b211cb868413f24adebf39d9f8d
Author: Richard Hughes <richard hughsie com>
Date: Wed Feb 16 10:24:52 2011 +0000
Move over the install root setting from gnome-packagekit to the updates plugin
This is used by LTSP to allow the user to install and remove packages
to a prefix, and is per-user specific.
...ttings-daemon.plugins.updates.gschema.xml.in.in | 5 ++
plugins/updates/gsd-updates-manager.c | 55 ++++++++++++++++++++
2 files changed, 60 insertions(+), 0 deletions(-)
---
diff --git a/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in b/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in
index 44c694f..3220b98 100644
--- a/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in
+++ b/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in
@@ -5,5 +5,10 @@
<_summary>Activation of this plugin</_summary>
<_description>Whether this plugin would be activated by gnome-settings-daemon or not</_description>
</key>
+ <key name="install-root" type="s">
+ <default>'/'</default>
+ <_summary>The install root to use when adding and removing packages</_summary>
+ <_description>The install root to use when processing packages, which is changed when using LTSP or when testing.</_description>
+ </key>
</schema>
</schemalist>
diff --git a/plugins/updates/gsd-updates-manager.c b/plugins/updates/gsd-updates-manager.c
index 3c69a31..63b1918 100644
--- a/plugins/updates/gsd-updates-manager.c
+++ b/plugins/updates/gsd-updates-manager.c
@@ -39,6 +39,7 @@ struct GsdUpdatesManagerPrivate
{
GSettings *settings_http;
GSettings *settings_ftp;
+ GSettings *settings_gsd;
PkControl *control;
guint timeout;
};
@@ -171,6 +172,42 @@ reload_proxy_settings (GsdUpdatesManager *manager)
}
static void
+set_install_root_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+ gboolean ret;
+ GError *error = NULL;
+ PkControl *control = PK_CONTROL (object);
+
+ /* get the result */
+ ret = pk_control_set_root_finish (control, res, &error);
+ if (!ret) {
+ g_warning ("failed to set install root: %s", error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+set_install_root (GsdUpdatesManager *manager)
+{
+ gchar *root;
+
+ /* get install root */
+ root = g_settings_get_string (manager->priv->settings_gsd,
+ "install-root");
+ if (root == NULL) {
+ g_warning ("could not read install root");
+ goto out;
+ }
+
+ pk_control_set_root_async (manager->priv->control,
+ root,
+ NULL,
+ set_install_root_cb, manager);
+out:
+ g_free (root);
+}
+
+static void
settings_changed_cb (GSettings *settings,
const char *key,
GsdUpdatesManager *manager)
@@ -178,6 +215,14 @@ settings_changed_cb (GSettings *settings,
reload_proxy_settings (manager);
}
+static void
+settings_gsd_changed_cb (GSettings *settings,
+ const char *key,
+ GsdUpdatesManager *manager)
+{
+ set_install_root (manager);
+}
+
gboolean
gsd_updates_manager_start (GsdUpdatesManager *manager,
GError **error)
@@ -196,8 +241,14 @@ gsd_updates_manager_start (GsdUpdatesManager *manager,
g_signal_connect (manager->priv->settings_ftp, "changed",
G_CALLBACK (settings_changed_cb), manager);
+ /* get ftp settings */
+ manager->priv->settings_gsd = g_settings_new ("org.gnome.settings-daemon.plugins.updates");
+ g_signal_connect (manager->priv->settings_gsd, "changed",
+ G_CALLBACK (settings_gsd_changed_cb), manager);
+
/* coldplug */
reload_proxy_settings (manager);
+ set_install_root (manager);
g_debug ("Starting updates manager");
@@ -217,6 +268,10 @@ gsd_updates_manager_stop (GsdUpdatesManager *manager)
g_object_unref (manager->priv->settings_ftp);
manager->priv->settings_ftp = NULL;
}
+ if (manager->priv->settings_gsd != NULL) {
+ g_object_unref (manager->priv->settings_gsd);
+ manager->priv->settings_gsd = NULL;
+ }
if (manager->priv->control != NULL) {
g_object_unref (manager->priv->control);
manager->priv->control = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]