config/patches/base/gnome-control-center/no-alert-chooser.patch

467 lines
16 KiB
Diff

diff --git a/panels/sound/cc-alert-chooser.c b/panels/sound/cc-alert-chooser.c
deleted file mode 100644
index 686d8c6..0000000
--- a/panels/sound/cc-alert-chooser.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2018 Canonical Ltd.
- *
- * 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
- * Lesser 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/>.
- */
-
-#include <glib/gi18n.h>
-#include <gsound.h>
-
-#include "config.h"
-#include "cc-alert-chooser.h"
-#include "cc-sound-resources.h"
-
-#define KEY_SOUNDS_SCHEMA "org.gnome.desktop.sound"
-
-struct _CcAlertChooser
-{
- GtkBox parent_instance;
-
- GtkToggleButton *click_button;
- GtkToggleButton *hum_button;
- GtkToggleButton *string_button;
- GtkToggleButton *swing_button;
-
- GSoundContext *context;
- GSettings *sound_settings;
-};
-
-static void clicked_cb (CcAlertChooser *self,
- GtkToggleButton *button);
-
-G_DEFINE_TYPE (CcAlertChooser, cc_alert_chooser, GTK_TYPE_BOX)
-
-#define CUSTOM_THEME_NAME "__custom"
-
-static gchar *
-get_theme_dir (void)
-{
- return g_build_filename (g_get_user_data_dir (), "sounds", CUSTOM_THEME_NAME, NULL);
-}
-
-static gchar *
-get_sound_path (const gchar *name)
-{
- g_autofree gchar *filename = NULL;
-
- filename = g_strdup_printf ("%s.ogg", name);
- return g_build_filename (SOUND_DATA_DIR, "gnome", "default", "alerts", filename, NULL);
-}
-
-static gchar *
-get_alert_name (void)
-{
- g_autofree gchar *dir = NULL;
- g_autofree gchar *path = NULL;
- g_autoptr(GFile) file = NULL;
- g_autoptr(GFileInfo) info = NULL;
- const gchar *target;
- g_autofree gchar *basename = NULL;
- g_autoptr(GError) error = NULL;
-
- dir = get_theme_dir ();
- path = g_build_filename (dir, "bell-terminal.ogg", NULL);
- file = g_file_new_for_path (path);
-
- info = g_file_query_info (file,
- G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET,
- G_FILE_QUERY_INFO_NONE,
- NULL,
- &error);
- if (info == NULL)
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
- g_warning ("Failed to get sound theme symlink %s: %s", path, error->message);
- return NULL;
- }
- target = g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET);
- if (target == NULL)
- return NULL;
-
- basename = g_path_get_basename (target);
- if (g_str_has_suffix (basename, ".ogg"))
- basename[strlen (basename) - 4] = '\0';
-
- return g_steal_pointer (&basename);
-}
-
-static void
-set_sound_symlink (const gchar *alert_name,
- const gchar *name)
-{
- g_autofree gchar *dir = NULL;
- g_autofree gchar *source_filename = NULL;
- g_autofree gchar *source_path = NULL;
- g_autofree gchar *target_path = NULL;
- g_autoptr(GFile) file = NULL;
- g_autoptr(GError) error = NULL;
-
- dir = get_theme_dir ();
- source_filename = g_strdup_printf ("%s.ogg", alert_name);
- source_path = g_build_filename (dir, source_filename, NULL);
- target_path = get_sound_path (name);
-
- file = g_file_new_for_path (source_path);
- if (!g_file_delete (file, NULL, &error))
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
- g_warning ("Failed to remove existing sound symbolic link %s: %s", source_path, error->message);
- }
- if (!g_file_make_symbolic_link (file, target_path, NULL, &error))
- g_warning ("Failed to make sound theme symbolic link %s->%s: %s", source_path, target_path, error->message);
-}
-
-static void
-set_custom_theme (CcAlertChooser *self,
- const gchar *name)
-{
- g_autofree gchar *dir_path = NULL;
- g_autofree gchar *theme_path = NULL;
- g_autoptr(GDateTime) now = NULL;
- g_autoptr(GFile) dir = NULL;
- g_autoptr(GKeyFile) theme_file = NULL;
- g_autoptr(GVariant) default_theme = NULL;
- g_autoptr(GError) load_error = NULL;
- g_autoptr(GError) save_error = NULL;
- g_autoptr(GError) mtime_error = NULL;
-
- dir_path = get_theme_dir ();
- g_mkdir_with_parents (dir_path, USER_DIR_MODE);
-
- theme_path = g_build_filename (dir_path, "index.theme", NULL);
-
- default_theme = g_settings_get_default_value (self->sound_settings, "theme-name");
-
- theme_file = g_key_file_new ();
- if (!g_key_file_load_from_file (theme_file, theme_path, G_KEY_FILE_KEEP_COMMENTS, &load_error))
- {
- if (!g_error_matches (load_error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
- g_printerr ("Failed to load theme file %s: %s", theme_path, load_error->message);
- }
- g_key_file_set_string (theme_file, "Sound Theme", "Name", _("Custom"));
- if (default_theme != NULL)
- g_key_file_set_string (theme_file, "Sound Theme", "Inherits", g_variant_get_string (default_theme, NULL));
- g_key_file_set_string (theme_file, "Sound Theme", "Directories", ".");
-
- if (!g_key_file_save_to_file (theme_file, theme_path, &save_error))
- {
- g_warning ("Failed to save theme file %s: %s", theme_path, save_error->message);
- }
-
- set_sound_symlink ("bell-terminal", name);
- set_sound_symlink ("bell-window-system", name);
-
- /* Ensure the g-s-d sound plugin which does non-recursive monitoring
- * notices the change even if the theme directory already existed.
- */
- now = g_date_time_new_now_utc ();
- dir = g_file_new_for_path (dir_path);
- if (!g_file_set_attribute_uint64 (dir,
- G_FILE_ATTRIBUTE_TIME_MODIFIED,
- g_date_time_to_unix (now),
- G_FILE_QUERY_INFO_NONE,
- NULL,
- &mtime_error))
- {
- g_warning ("Failed to update theme directory modification time for %s: %s",
- dir_path, mtime_error->message);
- }
-
- g_settings_set_boolean (self->sound_settings, "event-sounds", TRUE);
- g_settings_set_string (self->sound_settings, "theme-name", CUSTOM_THEME_NAME);
-}
-
-static void
-select_sound (CcAlertChooser *self,
- const gchar *name)
-{
- g_autofree gchar *path = NULL;
- g_autoptr(GError) error = NULL;
-
- path = get_sound_path (name);
- if (!gsound_context_play_simple (self->context, NULL, &error,
- GSOUND_ATTR_MEDIA_FILENAME, path,
- NULL))
- {
- g_warning ("Failed to play alert sound %s: %s", path, error->message);
- }
-
- set_custom_theme (self, name);
-}
-
-static void
-set_button (CcAlertChooser *self,
- GtkToggleButton *button,
- gboolean active)
-{
- g_signal_handlers_block_by_func (button, clicked_cb, self);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), active);
- g_signal_handlers_unblock_by_func (button, clicked_cb, self);
-}
-
-static void
-clicked_cb (CcAlertChooser *self,
- GtkToggleButton *button)
-{
- if (button == self->click_button)
- select_sound (self, "click");
- else if (button == self->hum_button)
- select_sound (self, "hum");
- else if (button == self->string_button)
- select_sound (self, "string");
- else if (button == self->swing_button)
- select_sound (self, "swing");
-
- set_button (self, button, TRUE);
- if (button != self->click_button)
- set_button (self, self->click_button, FALSE);
- if (button != self->hum_button)
- set_button (self, self->hum_button, FALSE);
- if (button != self->string_button)
- set_button (self, self->string_button, FALSE);
- if (button != self->swing_button)
- set_button (self, self->swing_button, FALSE);
-}
-
-static void
-cc_alert_chooser_dispose (GObject *object)
-{
- CcAlertChooser *self = CC_ALERT_CHOOSER (object);
-
- g_clear_object (&self->context);
- g_clear_object (&self->sound_settings);
-
- G_OBJECT_CLASS (cc_alert_chooser_parent_class)->dispose (object);
-}
-
-void
-cc_alert_chooser_class_init (CcAlertChooserClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->dispose = cc_alert_chooser_dispose;
-
- gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/sound/cc-alert-chooser.ui");
-
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, click_button);
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, hum_button);
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, string_button);
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, swing_button);
-
- gtk_widget_class_bind_template_callback (widget_class, clicked_cb);
-}
-
-void
-cc_alert_chooser_init (CcAlertChooser *self)
-{
- g_autofree gchar *alert_name = NULL;
- g_autoptr(GError) error = NULL;
-
- g_resources_register (cc_sound_get_resource ());
-
- gtk_widget_init_template (GTK_WIDGET (self));
-
- self->context = gsound_context_new (NULL, &error);
- if (self->context == NULL)
- g_error ("Failed to make sound context: %s", error->message);
-
- self->sound_settings = g_settings_new (KEY_SOUNDS_SCHEMA);
-
- alert_name = get_alert_name ();
-
- /* If user has selected an old sound alert, migrate them to click. */
- if (g_strcmp0 (alert_name, "click") != 0 &&
- g_strcmp0 (alert_name, "hum") != 0 &&
- g_strcmp0 (alert_name, "string") != 0 &&
- g_strcmp0 (alert_name, "swing") != 0)
- {
- set_custom_theme (self, "click");
- g_free (alert_name);
- alert_name = g_strdup ("click");
- }
-
- if (g_strcmp0 (alert_name, "click") == 0)
- set_button (self, self->click_button, TRUE);
- else if (g_strcmp0 (alert_name, "hum") == 0)
- set_button (self, self->hum_button, TRUE);
- else if (g_strcmp0 (alert_name, "string") == 0)
- set_button (self, self->string_button, TRUE);
- else if (g_strcmp0 (alert_name, "swing") == 0)
- set_button (self, self->swing_button, TRUE);
- else if (alert_name != NULL)
- g_warning ("Current alert sound has unknown name %s", alert_name);
-}
diff --git a/panels/sound/cc-alert-chooser.h b/panels/sound/cc-alert-chooser.h
deleted file mode 100644
index c6f4b87..0000000
--- a/panels/sound/cc-alert-chooser.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2018 Canonical Ltd.
- *
- * 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
- * Lesser 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/>.
- */
-
-#pragma once
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define CC_TYPE_ALERT_CHOOSER (cc_alert_chooser_get_type ())
-G_DECLARE_FINAL_TYPE (CcAlertChooser, cc_alert_chooser, CC, ALERT_CHOOSER, GtkBox)
-
-G_END_DECLS
diff --git a/panels/sound/cc-alert-chooser.ui b/panels/sound/cc-alert-chooser.ui
deleted file mode 100644
index 603aff9..0000000
--- a/panels/sound/cc-alert-chooser.ui
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <!-- interface-requires gtk+ 3.0 -->
- <template class="CcAlertChooser" parent="GtkBox">
- <property name="homogeneous">True</property>
- <style>
- <class name="linked"/>
- </style>
- <child>
- <object class="GtkToggleButton" id="click_button">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Click</property>
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
- </object>
- </child>
- <child>
- <object class="GtkToggleButton" id="string_button">
- <property name="visible">True</property>
- <property name="group">click_button</property>
- <property name="label" translatable="yes">String</property>
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
- </object>
- </child>
- <child>
- <object class="GtkToggleButton" id="swing_button">
- <property name="visible">True</property>
- <property name="group">click_button</property>
- <property name="label" translatable="yes">Swing</property>
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
- </object>
- </child>
- <child>
- <object class="GtkToggleButton" id="hum_button">
- <property name="visible">True</property>
- <property name="group">click_button</property>
- <property name="label" translatable="yes">Hum</property>
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
- </object>
- </child>
- </template>
-</interface>
diff --git a/panels/sound/cc-sound-panel.c b/panels/sound/cc-sound-panel.c
index 0de1ca9..9d9b9c7 100644
--- a/panels/sound/cc-sound-panel.c
+++ b/panels/sound/cc-sound-panel.c
@@ -30,7 +30,6 @@
#include <pulse/pulseaudio.h>
#include <gvc-mixer-control.h>
-#include "cc-alert-chooser.h"
#include "cc-balance-slider.h"
#include "cc-device-combo-box.h"
#include "cc-fade-slider.h"
@@ -270,7 +269,6 @@ cc_sound_panel_class_init (CcSoundPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, output_device_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, test_output_configuration_button_clicked_cb);
- g_type_ensure (CC_TYPE_ALERT_CHOOSER);
g_type_ensure (CC_TYPE_BALANCE_SLIDER);
g_type_ensure (CC_TYPE_DEVICE_COMBO_BOX);
g_type_ensure (CC_TYPE_FADE_SLIDER);
diff --git a/panels/sound/cc-sound-panel.ui b/panels/sound/cc-sound-panel.ui
index 33b6dbb..9fab184 100644
--- a/panels/sound/cc-sound-panel.ui
+++ b/panels/sound/cc-sound-panel.ui
@@ -322,16 +322,6 @@
</child>
</object>
</child>
- <child>
- <object class="AdwPreferencesGroup">
- <property name="title" translatable="yes">Alert Sound</property>
- <child>
- <object class="CcAlertChooser">
- <property name="hexpand">True</property>
- </object>
- </child>
- </object>
- </child>
</object>
</child>
</template>
diff --git a/panels/sound/meson.build b/panels/sound/meson.build
index 458377d..28149f6 100644
--- a/panels/sound/meson.build
+++ b/panels/sound/meson.build
@@ -30,7 +30,6 @@ cflags += [
]
sources = files(
- 'cc-alert-chooser.c',
'cc-balance-slider.c',
'cc-device-combo-box.c',
'cc-fade-slider.c',
@@ -65,7 +64,6 @@ resource_data = files(
'icons/audio-speaker-right.svg',
'icons/audio-speaker-right-testing.svg',
'icons/audio-speaker-testing.svg',
- 'cc-alert-chooser.ui',
'cc-balance-slider.ui',
'cc-device-combo-box.ui',
'cc-fade-slider.ui',
diff --git a/panels/sound/sound.gresource.xml b/panels/sound/sound.gresource.xml
index cdac713..7073d0a 100644
--- a/panels/sound/sound.gresource.xml
+++ b/panels/sound/sound.gresource.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/control-center/sound">
- <file preprocess="xml-stripblanks">cc-alert-chooser.ui</file>
<file preprocess="xml-stripblanks">cc-balance-slider.ui</file>
<file preprocess="xml-stripblanks">cc-device-combo-box.ui</file>
<file preprocess="xml-stripblanks">cc-fade-slider.ui</file>