[arch-commits] Commit in gnome-settings-daemon/trunk (2 files)

Jan Steffens heftig at archlinux.org
Wed Aug 9 10:34:46 UTC 2017


    Date: Wednesday, August 9, 2017 @ 10:34:46
  Author: heftig
Revision: 301804

Patch was upstreamed

Modified:
  gnome-settings-daemon/trunk/PKGBUILD
Deleted:
  gnome-settings-daemon/trunk/0001-xsettings-Delay-fontconfig-update-until-changes-have.patch

-----------------------------------------------------------------+
 0001-xsettings-Delay-fontconfig-update-until-changes-have.patch |  717 ----------
 PKGBUILD                                                        |    8 
 2 files changed, 3 insertions(+), 722 deletions(-)

Deleted: 0001-xsettings-Delay-fontconfig-update-until-changes-have.patch
===================================================================
--- 0001-xsettings-Delay-fontconfig-update-until-changes-have.patch	2017-08-09 10:26:27 UTC (rev 301803)
+++ 0001-xsettings-Delay-fontconfig-update-until-changes-have.patch	2017-08-09 10:34:46 UTC (rev 301804)
@@ -1,717 +0,0 @@
-From 219a320b6c0f30ad8a7385c330496a9716f3d360 Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <jan.steffens at gmail.com>
-Date: Wed, 2 Aug 2017 23:56:06 +0200
-Subject: [PATCH] xsettings: Delay fontconfig update until changes have settled
-
-Wait for the changes to the font directories to settle before starting
-the fontconfig update. In addition, make the update asynchronous and
-restart it if more changes arrive while the update runs, delaying the
-notify further.
-
-Try to avoid sending out a premature signal to Gtk and Clutter, which
-would then detect the additional changes and proceed with blocking
-updates themselves. This would even freeze the Shell.
-
-Revert commits f1b8257a and 578524da, which were added in the mistaken
-belief that GLocalFileMonitor already delays and coalesces change
-events.
-
-Use a GObject for the monitor handle in order to fix a leak
-(fontconfig_monitor_stop did not free the slice) and use refcounting to
-keep the handle alive over the async operation.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=777255
----
- plugins/xsettings/Makefile.am                      |   8 +-
- plugins/xsettings/fc-monitor.c                     | 317 +++++++++++++++++++++
- .../{fontconfig-monitor.h => fc-monitor.h}         |  23 +-
- plugins/xsettings/fontconfig-monitor.c             | 172 -----------
- plugins/xsettings/gsd-xsettings-manager.c          |  29 +-
- 5 files changed, 344 insertions(+), 205 deletions(-)
- create mode 100644 plugins/xsettings/fc-monitor.c
- rename plugins/xsettings/{fontconfig-monitor.h => fc-monitor.h} (58%)
- delete mode 100644 plugins/xsettings/fontconfig-monitor.c
-
-diff --git a/plugins/xsettings/Makefile.am b/plugins/xsettings/Makefile.am
-index 74204290ddc43813..bc62c8a3f4bfed4d 100644
---- a/plugins/xsettings/Makefile.am
-+++ b/plugins/xsettings/Makefile.am
-@@ -25,8 +25,8 @@ test_gtk_modules_CPPFLAGS =				\
- noinst_PROGRAMS += test-fontconfig-monitor
- 
- test_fontconfig_monitor_SOURCES =	\
--	fontconfig-monitor.c		\
--	fontconfig-monitor.h
-+	fc-monitor.c			\
-+	fc-monitor.h
- 
- test_fontconfig_monitor_CFLAGS = $(PLUGIN_CFLAGS) $(XSETTINGS_CFLAGS)
- 
-@@ -61,8 +61,8 @@ gsd_xsettings_SOURCES =		\
- 	xsettings-common.h	\
- 	xsettings-manager.c	\
- 	xsettings-manager.h	\
--	fontconfig-monitor.c	\
--	fontconfig-monitor.h	\
-+	fc-monitor.c	\
-+	fc-monitor.h	\
- 	gsd-remote-display-manager.c \
- 	gsd-remote-display-manager.h \
- 	wm-button-layout-translation.c	\
-diff --git a/plugins/xsettings/fc-monitor.c b/plugins/xsettings/fc-monitor.c
-new file mode 100644
-index 0000000000000000..63e87125622c48f4
---- /dev/null
-+++ b/plugins/xsettings/fc-monitor.c
-@@ -0,0 +1,317 @@
-+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
-+ *
-+ * Copyright (C) 2008 Red Hat, Inc.
-+ * Copyright (C) 2017 Jan Alexander Steffens (heftig) <jan.steffens at gmail.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ *
-+ * Author:  Behdad Esfahbod, Red Hat, Inc.
-+ */
-+
-+#include "fc-monitor.h"
-+
-+#include <gio/gio.h>
-+#include <fontconfig/fontconfig.h>
-+
-+#define TIMEOUT_MILLISECONDS 1000
-+
-+static void
-+fontconfig_cache_update_thread (GTask *task,
-+                                gpointer source_object G_GNUC_UNUSED,
-+                                gpointer task_data G_GNUC_UNUSED,
-+                                GCancellable *cancellable G_GNUC_UNUSED)
-+{
-+        if (FcConfigUptoDate (NULL)) {
-+                g_task_return_boolean (task, FALSE);
-+                return;
-+        }
-+
-+        if (!FcInitReinitialize ()) {
-+                g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
-+                                         "FcInitReinitialize failed");
-+                return;
-+        }
-+
-+        g_task_return_boolean (task, TRUE);
-+}
-+
-+static void
-+fontconfig_cache_update_async (GAsyncReadyCallback callback,
-+                               gpointer user_data)
-+{
-+        GTask *task = g_task_new (NULL, NULL, callback, user_data);
-+        g_task_run_in_thread (task, fontconfig_cache_update_thread);
-+        g_object_unref (task);
-+}
-+
-+static gboolean
-+fontconfig_cache_update_finish (GAsyncResult *result,
-+                                GError **error)
-+{
-+        return g_task_propagate_boolean (G_TASK (result), error);
-+}
-+
-+typedef enum {
-+        UPDATE_IDLE,
-+        UPDATE_PENDING,
-+        UPDATE_RUNNING,
-+        UPDATE_RESTART,
-+} UpdateState;
-+
-+struct _FcMonitor {
-+        GObject parent_instance;
-+
-+        GPtrArray *monitors;
-+
-+        guint timeout;
-+        UpdateState state;
-+        gboolean notify;
-+};
-+
-+enum {
-+        SIGNAL_UPDATED,
-+
-+        N_SIGNALS
-+};
-+
-+static guint signals[N_SIGNALS] = { 0, };
-+
-+static void fc_monitor_finalize (GObject *object);
-+static void monitor_files (FcMonitor *self, FcStrList *list);
-+static void stuff_changed (GFileMonitor *monitor, GFile *file, GFile *other_file,
-+                           GFileMonitorEvent event_type, gpointer data);
-+static void start_timeout (FcMonitor *self);
-+static gboolean start_update (gpointer data);
-+static void update_done (GObject *source_object, GAsyncResult *result, gpointer user_data);
-+
-+G_DEFINE_TYPE (FcMonitor, fc_monitor, G_TYPE_OBJECT);
-+
-+static void
-+fc_monitor_class_init (FcMonitorClass *klass)
-+{
-+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+
-+        object_class->finalize = fc_monitor_finalize;
-+
-+        signals[SIGNAL_UPDATED] = g_signal_new ("updated",
-+                                                G_TYPE_FROM_CLASS (klass),
-+                                                G_SIGNAL_RUN_LAST,
-+                                                0,
-+                                                NULL,
-+                                                NULL,
-+                                                NULL,
-+                                                G_TYPE_NONE,
-+                                                0);
-+}
-+
-+FcMonitor *
-+fc_monitor_new (void)
-+{
-+        return g_object_new (FC_TYPE_MONITOR, NULL);
-+}
-+
-+static void
-+fc_monitor_init (FcMonitor *self G_GNUC_UNUSED)
-+{
-+        FcInit ();
-+}
-+
-+static void
-+fc_monitor_finalize (GObject *object)
-+{
-+        FcMonitor *self = FC_MONITOR (object);
-+
-+        if (self->timeout)
-+                g_source_remove (self->timeout);
-+        self->timeout = 0;
-+
-+        g_clear_pointer (&self->monitors, g_ptr_array_unref);
-+
-+        G_OBJECT_CLASS (fc_monitor_parent_class)->finalize (object);
-+}
-+
-+void
-+fc_monitor_start (FcMonitor *self)
-+{
-+        g_return_if_fail (FC_IS_MONITOR (self));
-+        g_return_if_fail (self->monitors == NULL);
-+
-+        self->monitors = g_ptr_array_new_with_free_func (g_object_unref);
-+
-+        monitor_files (self, FcConfigGetConfigFiles (NULL));
-+        monitor_files (self, FcConfigGetFontDirs (NULL));
-+}
-+
-+void
-+fc_monitor_stop (FcMonitor *self)
-+{
-+        g_return_if_fail (FC_IS_MONITOR (self));
-+        g_clear_pointer (&self->monitors, g_ptr_array_unref);
-+}
-+
-+static void
-+monitor_files (FcMonitor *self,
-+               FcStrList *list)
-+{
-+        const char *str;
-+
-+        while ((str = (const char *) FcStrListNext (list))) {
-+                GFile *file;
-+                GFileMonitor *monitor;
-+
-+                file = g_file_new_for_path (str);
-+
-+                monitor = g_file_monitor (file, G_FILE_MONITOR_NONE, NULL, NULL);
-+
-+                g_object_unref (file);
-+
-+                if (!monitor)
-+                        continue;
-+
-+                g_signal_connect (monitor, "changed", G_CALLBACK (stuff_changed), self);
-+
-+                g_ptr_array_add (self->monitors, monitor);
-+        }
-+
-+        FcStrListDone (list);
-+}
-+
-+static const gchar *
-+get_name (GType enum_type,
-+          gint enum_value)
-+{
-+        GEnumClass *klass = g_type_class_ref (enum_type);
-+        GEnumValue *value = g_enum_get_value (klass, enum_value);
-+        const gchar *name = value ? value->value_name : "(unknown)";
-+        g_type_class_unref (klass);
-+        return name;
-+}
-+
-+static void
-+stuff_changed (GFileMonitor *monitor G_GNUC_UNUSED,
-+               GFile *file G_GNUC_UNUSED,
-+               GFile *other_file G_GNUC_UNUSED,
-+               GFileMonitorEvent event_type,
-+               gpointer data)
-+{
-+        FcMonitor *self = FC_MONITOR (data);
-+        const gchar *event_name = get_name (G_TYPE_FILE_MONITOR_EVENT, event_type);
-+
-+        switch (self->state) {
-+        case UPDATE_IDLE:
-+                g_debug ("Got %-38s: starting fontconfig update timeout", event_name);
-+                start_timeout (self);
-+                break;
-+
-+        case UPDATE_PENDING:
-+                /* wait for quiescence */
-+                g_debug ("Got %-38s: restarting fontconfig update timeout", event_name);
-+                g_source_remove (self->timeout);
-+                start_timeout (self);
-+                break;
-+
-+        case UPDATE_RUNNING:
-+                g_debug ("Got %-38s: restarting fontconfig update", event_name);
-+                self->state = UPDATE_RESTART;
-+                break;
-+
-+        case UPDATE_RESTART:
-+                g_debug ("Got %-38s: waiting on fontconfig update", event_name);
-+                break;
-+        }
-+}
-+
-+static void
-+start_timeout (FcMonitor *self)
-+{
-+        self->state = UPDATE_PENDING;
-+        self->timeout = g_timeout_add (TIMEOUT_MILLISECONDS, start_update, self);
-+        g_source_set_name_by_id (self->timeout, "[gnome-settings-daemon] update");
-+}
-+
-+static gboolean
-+start_update (gpointer data)
-+{
-+        FcMonitor *self = FC_MONITOR (data);
-+
-+        self->state = UPDATE_RUNNING;
-+        self->timeout = 0;
-+
-+        g_debug ("Timeout completed: starting fontconfig update");
-+        fontconfig_cache_update_async (update_done, g_object_ref (self));
-+
-+        return G_SOURCE_REMOVE;
-+}
-+
-+static void
-+update_done (GObject *source_object G_GNUC_UNUSED,
-+             GAsyncResult *result,
-+             gpointer data)
-+{
-+        FcMonitor *self = FC_MONITOR (data);
-+        gboolean restart = self->state == UPDATE_RESTART;
-+        GError *error = NULL;
-+
-+        self->state = UPDATE_IDLE;
-+
-+        if (fontconfig_cache_update_finish (result, &error)) {
-+                g_debug ("Fontconfig update successful");
-+                /* Remember we had a successful update even if we have to restart it */
-+                self->notify = TRUE;
-+        } else if (error) {
-+                g_warning ("Fontconfig update failed: %s", error->message);
-+                g_error_free (error);
-+        } else
-+                g_debug ("Fontconfig update was unnecessary");
-+
-+        if (restart) {
-+                g_debug ("Concurrent change: restarting fontconfig update timeout");
-+                start_timeout (self);
-+        } else if (self->notify) {
-+                self->notify = FALSE;
-+
-+                if (self->monitors) {
-+                        fc_monitor_stop (self);
-+                        fc_monitor_start (self);
-+                }
-+
-+                /* we finish modifying self before emitting the signal,
-+                 * allowing the callback to stop us if it decides to. */
-+                g_signal_emit (self, signals[SIGNAL_UPDATED], 0);
-+        }
-+
-+        /* release ref taken in start_update */
-+        g_object_unref (self);
-+}
-+
-+#ifdef FONTCONFIG_MONITOR_TEST
-+static void
-+yay (void)
-+{
-+        g_message ("yay");
-+}
-+
-+int
-+main (void)
-+{
-+        GMainLoop *loop = g_main_loop_new (NULL, TRUE);
-+        FcMonitor *monitor = fc_monitor_new ();
-+
-+        fc_monitor_start (monitor);
-+        g_signal_connect (monitor, "updated", G_CALLBACK (yay), NULL);
-+
-+        g_main_loop_run (loop);
-+        return 0;
-+}
-+#endif
-diff --git a/plugins/xsettings/fontconfig-monitor.h b/plugins/xsettings/fc-monitor.h
-similarity index 58%
-rename from plugins/xsettings/fontconfig-monitor.h
-rename to plugins/xsettings/fc-monitor.h
-index f3a92bbaf31c8b3a..4b564f87dede2f53 100644
---- a/plugins/xsettings/fontconfig-monitor.h
-+++ b/plugins/xsettings/fc-monitor.h
-@@ -1,39 +1,36 @@
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
-  *
-- * Copyright (C) 2008 Red Hat, Inc.
-+ * Copyright (C) 2017 Jan Alexander Steffens (heftig) <jan.steffens at gmail.com>
-  *
-  * This program is free software; you can redistribute it and/or modify
-  * it under the terms of the GNU General Public License as published by
-  * the Free Software Foundation; either version 2 of the License, or
-  * (at your option) any later version.
-  *
-  * This program is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  * GNU General Public License for more details.
-  *
-  * You should have received a copy of the GNU General Public License
-  * along with this program; if not, see <http://www.gnu.org/licenses/>.
-  *
-- * Author:  Behdad Esfahbod, Red Hat, Inc.
-  */
--#ifndef __FONTCONFIG_MONITOR_H
--#define __FONTCONFIG_MONITOR_H
-+#ifndef FC_MONITOR_H
-+#define FC_MONITOR_H
- 
--#include <glib.h>
-+#include <glib-object.h>
- 
- G_BEGIN_DECLS
- 
--void fontconfig_cache_init (void);
--gboolean fontconfig_cache_update (void);
-+#define FC_TYPE_MONITOR (fc_monitor_get_type ())
-+G_DECLARE_FINAL_TYPE (FcMonitor, fc_monitor, FC, MONITOR, GObject)
- 
--typedef struct _fontconfig_monitor_handle fontconfig_monitor_handle_t;
-+FcMonitor *fc_monitor_new (void);
- 
--fontconfig_monitor_handle_t *
--fontconfig_monitor_start (GFunc    notify_callback,
--                          gpointer notify_data);
--void fontconfig_monitor_stop  (fontconfig_monitor_handle_t *handle);
-+void fc_monitor_start (FcMonitor *monitor);
-+void fc_monitor_stop  (FcMonitor *monitor);
- 
- G_END_DECLS
- 
--#endif /* __FONTCONFIG_MONITOR_H */
-+#endif /* FC_MONITOR_H */
-diff --git a/plugins/xsettings/fontconfig-monitor.c b/plugins/xsettings/fontconfig-monitor.c
-deleted file mode 100644
-index e3548beb1f52ce42..0000000000000000
---- a/plugins/xsettings/fontconfig-monitor.c
-+++ /dev/null
-@@ -1,172 +0,0 @@
--/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
-- *
-- * Copyright (C) 2008 Red Hat, Inc.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, see <http://www.gnu.org/licenses/>.
-- *
-- * Author:  Behdad Esfahbod, Red Hat, Inc.
-- */
--
--#include "fontconfig-monitor.h"
--
--#include <gio/gio.h>
--#include <fontconfig/fontconfig.h>
--
--static void
--stuff_changed (GFileMonitor *monitor,
--               GFile *file,
--               GFile *other_file,
--               GFileMonitorEvent event_type,
--               gpointer handle);
--
--void
--fontconfig_cache_init (void)
--{
--        FcInit ();
--}
--
--gboolean
--fontconfig_cache_update (void)
--{
--        return !FcConfigUptoDate (NULL) && FcInitReinitialize ();
--}
--
--static void
--monitor_files (GPtrArray *monitors,
--               FcStrList *list,
--               gpointer   data)
--{
--        const char *str;
--
--        while ((str = (const char *) FcStrListNext (list))) {
--                GFile *file;
--                GFileMonitor *monitor;
--
--                file = g_file_new_for_path (str);
--
--                monitor = g_file_monitor (file, G_FILE_MONITOR_NONE, NULL, NULL);
--
--                g_object_unref (file);
--
--                if (!monitor)
--                        continue;
--
--                g_signal_connect (monitor, "changed", G_CALLBACK (stuff_changed), data);
--
--                g_ptr_array_add (monitors, monitor);
--        }
--
--        FcStrListDone (list);
--}
--
--
--struct _fontconfig_monitor_handle {
--        GPtrArray *monitors;
--
--        GFunc    notify_callback;
--        gpointer notify_data;
--};
--
--static GPtrArray *
--monitors_create (gpointer data)
--{
--        GPtrArray *monitors = g_ptr_array_new ();
--
--        monitor_files (monitors, FcConfigGetConfigFiles (NULL), data);
--        monitor_files (monitors, FcConfigGetFontDirs (NULL)   , data);
--
--        return monitors;
--}
--
--static void
--monitors_free (GPtrArray *monitors)
--{
--        if (!monitors)
--                return;
--
--        g_ptr_array_foreach (monitors, (GFunc) g_object_unref, NULL);
--        g_ptr_array_free (monitors, TRUE);
--}
--
--static void
--stuff_changed (GFileMonitor *monitor G_GNUC_UNUSED,
--               GFile *file G_GNUC_UNUSED,
--               GFile *other_file G_GNUC_UNUSED,
--               GFileMonitorEvent event_type,
--               gpointer data)
--{
--        fontconfig_monitor_handle_t *handle = data;
--
--        /* Wait for G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT before notifying
--         * fontconfig.
--         */
--        if (event_type == G_FILE_MONITOR_EVENT_CHANGED ||
--            event_type == G_FILE_MONITOR_EVENT_CREATED)
--                return;
--
--        gboolean notify = FALSE;
--
--        if (fontconfig_cache_update ()) {
--                notify = TRUE;
--                monitors_free (handle->monitors);
--                handle->monitors = monitors_create (data);
--        }
--
--        /* we finish modifying handle before calling the notify callback,
--         * allowing the callback to free the monitor if it decides to. */
--
--        if (notify && handle->notify_callback)
--                handle->notify_callback (data, handle->notify_data);
--}
--
--fontconfig_monitor_handle_t *
--fontconfig_monitor_start (GFunc    notify_callback,
--                          gpointer notify_data)
--{
--        fontconfig_monitor_handle_t *handle = g_slice_new0 (fontconfig_monitor_handle_t);
--
--        handle->notify_callback = notify_callback;
--        handle->notify_data = notify_data;
--        handle->monitors = monitors_create (handle);
--
--        return handle;
--}
--
--void
--fontconfig_monitor_stop  (fontconfig_monitor_handle_t *handle)
--{
--        monitors_free (handle->monitors);
--        handle->monitors = NULL;
--}
--
--#ifdef FONTCONFIG_MONITOR_TEST
--static void
--yay (void)
--{
--        g_message ("yay");
--}
--
--int
--main (void)
--{
--        GMainLoop *loop;
--
--        fontconfig_monitor_start ((GFunc) yay, NULL);
--
--        loop = g_main_loop_new (NULL, TRUE);
--        g_main_loop_run (loop);
--
--        return 0;
--}
--#endif
-diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
-index bba612f52e8aa9cc..ddbbe74603486737 100644
---- a/plugins/xsettings/gsd-xsettings-manager.c
-+++ b/plugins/xsettings/gsd-xsettings-manager.c
-@@ -48,7 +48,7 @@
- #include "gsd-xsettings-manager.h"
- #include "gsd-xsettings-gtk.h"
- #include "xsettings-manager.h"
--#include "fontconfig-monitor.h"
-+#include "fc-monitor.h"
- #include "gsd-remote-display-manager.h"
- #include "wm-button-layout-translation.h"
- 
-@@ -276,7 +276,7 @@ struct GnomeXSettingsManagerPrivate
-         GHashTable        *settings;
- 
-         GSettings         *plugin_settings;
--        fontconfig_monitor_handle_t *fontconfig_handle;
-+        FcMonitor         *fontconfig_monitor;
- 
-         GsdXSettingsGtk   *gtk;
- 
-@@ -1085,55 +1085,47 @@ gtk_modules_callback (GsdXSettingsGtk       *gtk,
- }
- 
- static void
--fontconfig_callback (fontconfig_monitor_handle_t *handle,
--                     GnomeXSettingsManager       *manager)
-+fontconfig_callback (FcMonitor              *monitor,
-+                     GnomeXSettingsManager  *manager)
- {
-         int timestamp = time (NULL);
- 
-         gnome_settings_profile_start (NULL);
- 
-         xsettings_manager_set_int (manager->priv->manager, "Fontconfig/Timestamp", timestamp);
-         queue_notify (manager);
-         gnome_settings_profile_end (NULL);
- }
- 
- static gboolean
- start_fontconfig_monitor_idle_cb (GnomeXSettingsManager *manager)
- {
-         gnome_settings_profile_start (NULL);
- 
--        manager->priv->fontconfig_handle = fontconfig_monitor_start ((GFunc) fontconfig_callback, manager);
-+        fc_monitor_start (manager->priv->fontconfig_monitor);
- 
-         gnome_settings_profile_end (NULL);
- 
-         manager->priv->start_idle_id = 0;
- 
-         return FALSE;
- }
- 
- static void
- start_fontconfig_monitor (GnomeXSettingsManager  *manager)
- {
-         gnome_settings_profile_start (NULL);
- 
--        fontconfig_cache_init ();
-+        manager->priv->fontconfig_monitor = fc_monitor_new ();
-+        g_signal_connect (manager->priv->fontconfig_monitor, "updated", G_CALLBACK (fontconfig_callback), manager);
- 
-         manager->priv->start_idle_id = g_idle_add ((GSourceFunc) start_fontconfig_monitor_idle_cb, manager);
-         g_source_set_name_by_id (manager->priv->start_idle_id, "[gnome-settings-daemon] start_fontconfig_monitor_idle_cb");
- 
-         gnome_settings_profile_end (NULL);
- }
- 
- static void
--stop_fontconfig_monitor (GnomeXSettingsManager  *manager)
--{
--        if (manager->priv->fontconfig_handle) {
--                fontconfig_monitor_stop (manager->priv->fontconfig_handle);
--                manager->priv->fontconfig_handle = NULL;
--        }
--}
--
--static void
- notify_have_shell (GnomeXSettingsManager   *manager,
-                    gboolean                 have_shell)
- {
-@@ -1501,7 +1493,12 @@ gnome_xsettings_manager_stop (GnomeXSettingsManager *manager)
-                 p->plugin_settings = NULL;
-         }
- 
--        stop_fontconfig_monitor (manager);
-+        if (p->fontconfig_monitor != NULL) {
-+                g_signal_handlers_disconnect_by_data (p->fontconfig_monitor, manager);
-+                fc_monitor_stop (p->fontconfig_monitor);
-+                g_object_unref (p->fontconfig_monitor);
-+                p->fontconfig_monitor = NULL;
-+        }
- 
-         if (p->settings != NULL) {
-                 g_hash_table_destroy (p->settings);
--- 
-2.13.4
\ No newline at end of file

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2017-08-09 10:26:27 UTC (rev 301803)
+++ PKGBUILD	2017-08-09 10:34:46 UTC (rev 301804)
@@ -15,11 +15,9 @@
 groups=(gnome)
 _commit=a2a7a1b3859df635bf97d62f7307306526ec6334  # tags/GNOME_SETTINGS_DAEMON_3_24_3^0
 source=("git+https://git.gnome.org/browse/gnome-settings-daemon#commit=$_commit"
-        "git+https://git.gnome.org/browse/libgnome-volume-control"
-        0001-xsettings-Delay-fontconfig-update-until-changes-have.patch)
+        "git+https://git.gnome.org/browse/libgnome-volume-control")
 sha256sums=('SKIP'
-            'SKIP'
-            '4a27197ae6d6e5fb911c6929c8359058c6f796ab5a99fd83518e8169d127fcca')
+            'SKIP')
 
 pkgver() {
   cd $pkgname
@@ -30,7 +28,7 @@
   cd $pkgname
 
   # https://bugzilla.gnome.org/show_bug.cgi?id=777255
-  patch -Np1 -i ../0001-xsettings-Delay-fontconfig-update-until-changes-have.patch
+  git cherry-pick -n 45e5185dcaf1d26fa84ce367f89b7f720c80bd01
 
   git submodule init
   git config --local submodule."panels/media-keys/gvc".url "$srcdir/libgnome-volume-control"



More information about the arch-commits mailing list