[gnome-settings-daemon] Fix various background drawing issues
Daniel Williams
dcbw at fedoraproject.org
Wed Dec 1 18:18:24 UTC 2010
commit d8cf27028460c473fc8aadb1ceaf822f31534ec7
Author: Dan Williams <dcbw at redhat.com>
Date: Wed Dec 1 12:17:17 2010 -0600
Fix various background drawing issues
background-convert-to-gdbus.patch | 167 ++++++++++++++++++++
...d-draw-the-background-on-startup-if-show-.patch | 41 +++++
gnome-settings-daemon.spec | 16 ++-
3 files changed, 220 insertions(+), 4 deletions(-)
---
diff --git a/background-convert-to-gdbus.patch b/background-convert-to-gdbus.patch
new file mode 100644
index 0000000..c966941
--- /dev/null
+++ b/background-convert-to-gdbus.patch
@@ -0,0 +1,167 @@
+commit 6cf4514d7813835040484065f93d55abdfc91087
+Author: Dan Williams <dcbw at redhat.com>
+Date: Wed Dec 1 11:32:17 2010 -0600
+
+ background: convert to GDBus (and fix delayed background drawing)
+
+ For some reason the signal filter with plain DBus wasn't working
+ correctly, leading to no background when nautilus was for whatever
+ reason not autolaunched, and show-desktop-icons was TRUE. In any
+ case it should be GDBus not libdbus, so port it. That also
+ happens to fix the signal listening issue.
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=636233
+
+diff --git a/plugins/background/gsd-background-manager.c b/plugins/background/gsd-background-manager.c
+index 30370fa..071eb85 100644
+--- a/plugins/background/gsd-background-manager.c
++++ b/plugins/background/gsd-background-manager.c
+@@ -32,10 +32,9 @@
+
+ #include <locale.h>
+
+-#include <dbus/dbus.h>
+-
+ #include <glib.h>
+ #include <glib/gi18n.h>
++#include <gio/gio.h>
+ #include <gdk/gdk.h>
+ #include <gdk/gdkx.h>
+
+@@ -54,7 +53,8 @@ struct GsdBackgroundManagerPrivate
+ GnomeBG *bg;
+ guint timeout_id;
+
+- DBusConnection *dbus_connection;
++ GDBusProxy *proxy;
++ guint proxy_signal_id;
+ };
+
+ static void gsd_background_manager_class_init (GsdBackgroundManagerClass *klass);
+@@ -287,53 +287,77 @@ queue_draw_background (GsdBackgroundManager *manager)
+ return FALSE;
+ }
+
+-static DBusHandlerResult
+-on_bus_message (DBusConnection *connection,
+- DBusMessage *message,
+- void *user_data)
++static void
++queue_timeout (GsdBackgroundManager *manager)
+ {
+- GsdBackgroundManager *manager = user_data;
+-
+- if (dbus_message_is_signal (message,
+- "org.gnome.SessionManager",
+- "SessionRunning")) {
+- /* If the session finishes then check if nautilus is
+- * running and if not, set the background.
+- *
+- * We wait a few seconds after the session is up
+- * because nautilus tells the session manager that its
+- * ready before it sets the background.
+- */
+- manager->priv->timeout_id = g_timeout_add_seconds (8,
+- (GSourceFunc)
+- queue_draw_background,
+- manager);
+- dbus_connection_remove_filter (connection,
+- on_bus_message,
+- manager);
+-
+- manager->priv->dbus_connection = NULL;
+- }
++ if (manager->priv->timeout_id > 0)
++ return;
+
+- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
++ /* If the session finishes then check if nautilus is
++ * running and if not, set the background.
++ *
++ * We wait a few seconds after the session is up
++ * because nautilus tells the session manager that its
++ * ready before it sets the background.
++ */
++ manager->priv->timeout_id = g_timeout_add_seconds (8,
++ (GSourceFunc)
++ queue_draw_background,
++ manager);
+ }
+
+ static void
+-draw_background_after_session_loads (GsdBackgroundManager *manager)
++disconnect_session_manager_listener (GsdBackgroundManager *manager)
+ {
+- DBusConnection *connection;
++ if (manager->priv->proxy && manager->priv->proxy_signal_id) {
++ g_signal_handler_disconnect (manager->priv->proxy,
++ manager->priv->proxy_signal_id);
++ manager->priv->proxy_signal_id = 0;
++ }
++}
+
+- connection = dbus_bus_get (DBUS_BUS_SESSION, NULL);
++static void
++on_session_manager_signal (GDBusProxy *proxy,
++ const gchar *sender_name,
++ const gchar *signal_name,
++ GVariant *parameters,
++ gpointer user_data)
++{
++ GsdBackgroundManager *manager = GSD_BACKGROUND_MANAGER (user_data);
+
+- if (connection == NULL) {
+- return;
++ if (g_strcmp0 (signal_name, "SessionRunning") == 0) {
++ queue_timeout (manager);
++ disconnect_session_manager_listener (manager);
+ }
++}
+
+- if (!dbus_connection_add_filter (connection, on_bus_message, manager, NULL)) {
++static void
++draw_background_after_session_loads (GsdBackgroundManager *manager)
++{
++ GError *error = NULL;
++ GDBusProxyFlags flags;
++
++ flags = G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
++ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
++ manager->priv->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
++ flags,
++ NULL, /* GDBusInterfaceInfo */
++ "org.gnome.SessionManager",
++ "/org/gnome/SessionManager",
++ "org.gnome.SessionManager",
++ NULL, /* GCancellable */
++ &error);
++ if (manager->priv->proxy == NULL) {
++ g_warning ("Could not listen to session manager: %s",
++ error->message);
++ g_error_free (error);
+ return;
+- };
++ }
+
+- manager->priv->dbus_connection = connection;
++ manager->priv->proxy_signal_id = g_signal_connect (manager->priv->proxy,
++ "g-signal",
++ G_CALLBACK (on_session_manager_signal),
++ manager);
+ }
+
+
+@@ -423,10 +447,9 @@ gsd_background_manager_stop (GsdBackgroundManager *manager)
+
+ disconnect_screen_signals (manager);
+
+- if (manager->priv->dbus_connection != NULL) {
+- dbus_connection_remove_filter (manager->priv->dbus_connection,
+- on_bus_message,
+- manager);
++ if (manager->priv->proxy) {
++ disconnect_session_manager_listener (manager);
++ g_object_unref (manager->priv->proxy);
+ }
+
+ g_signal_handlers_disconnect_by_func (manager->priv->settings,
diff --git a/background-draw-the-background-on-startup-if-show-.patch b/background-draw-the-background-on-startup-if-show-.patch
new file mode 100644
index 0000000..7b82ed9
--- /dev/null
+++ b/background-draw-the-background-on-startup-if-show-.patch
@@ -0,0 +1,41 @@
+From 5f4d6e23c0f1d37b36e3f4fcad2894af49a4dd33 Mon Sep 17 00:00:00 2001
+From: Owen W. Taylor <otaylor at fishsoup.net>
+Date: Tue, 30 Nov 2010 23:04:17 -0500
+Subject: [PATCH] background: draw the background on startup if show-desktop-icons unset
+
+When show-desktop-icons is not set, we need to call draw_bg() not just
+setup_bg(). Also remove a duplicate call to gnome_bg_load_from_preferences()
+which setup_bg already does.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=636191
+---
+ plugins/background/gsd-background-manager.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/plugins/background/gsd-background-manager.c b/plugins/background/gsd-background-manager.c
+index 30370fa..0e96f1e 100644
+--- a/plugins/background/gsd-background-manager.c
++++ b/plugins/background/gsd-background-manager.c
+@@ -225,9 +225,10 @@ background_changed (GsdBackgroundManager *manager,
+ if (!nautilus_is_running () || !show_desktop_icons) {
+ if (manager->priv->bg == NULL) {
+ setup_bg (manager);
++ } else {
++ gnome_bg_load_from_preferences (manager->priv->bg,
++ manager->priv->settings);
+ }
+- gnome_bg_load_from_preferences (manager->priv->bg,
+- manager->priv->settings);
+ draw_background (manager, use_crossfade);
+ }
+ }
+@@ -403,6 +404,7 @@ gsd_background_manager_start (GsdBackgroundManager *manager,
+
+ if (!show_desktop_icons) {
+ setup_bg (manager);
++ draw_background (manager, FALSE);
+ } else {
+ draw_background_after_session_loads (manager);
+ }
+--
+1.7.3.2
\ No newline at end of file
diff --git a/gnome-settings-daemon.spec b/gnome-settings-daemon.spec
index 4b6bff9..1f98502 100644
--- a/gnome-settings-daemon.spec
+++ b/gnome-settings-daemon.spec
@@ -1,6 +1,6 @@
Name: gnome-settings-daemon
Version: 2.91.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: The daemon sharing settings from GNOME to GTK+/KDE applications
Group: System Environment/Daemons
@@ -32,9 +32,14 @@ BuildRequires: autoconf automake libtool
BuildRequires: libxklavier-devel
BuildRequires: gsettings-desktop-schemas-devel >= 0.1.2
+# https://bugzilla.gnome.org/show_bug.cgi?id=636191
+Patch0: background-draw-the-background-on-startup-if-show-.patch
+
+# https://bugzilla.gnome.org/show_bug.cgi?id=636233
+Patch1: background-convert-to-gdbus.patch
+
# change font rendering
#Patch3: slight-hinting.patch
-Patch4: autorun-Handle-rename-of-org.gnome.media-handling.patch
%description
A daemon to share settings from GNOME to other applications. It also
@@ -52,9 +57,9 @@ developing applications that use %{name}.
%prep
%setup -q
+%patch0 -p1 -b .draw-background
+%patch1 -p1 -b .draw-no-nautilus
#%patch3 -p1 -b .slight-hinting
-# Upstream commit cb9a3a0e4144d
-%patch4 -p1 -b .media-handling
%build
# https://fedoraproject.org/wiki/Features/ChangeInImplicitDSOLinking
@@ -115,6 +120,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || :
%{_libdir}/pkgconfig/gnome-settings-daemon.pc
%changelog
+* Wed Dec 1 2010 Dan Williams <dcbw at redhat.com> - 2.91.5-3
+- Fix various cases of forgetting to draw the background
+
* Tue Nov 30 2010 Owen Taylor <otaylor at redhat.com> - 2.91.5-2
- Add a patch handling org.gnome.media-handling gsettings schema rename
More information about the scm-commits
mailing list