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)" <[email protected]> -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) <[email protected]> -+ * -+ * 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) <[email protected]> - * - * 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"
