From 5bc3d89101f506075c78f3527f4a02d741481304 Mon Sep 17 00:00:00 2001 From: Nurlan Musayev Date: Sat, 6 Jan 2018 17:19:08 +0300 Subject: [PATCH 1/4] Allow set volume louder than 100% using keyboard --- panel-plugin/pulseaudio-button.c | 7 ++++++- panel-plugin/pulseaudio-config.c | 36 ++++++++++++++++++++++++++++++++++++ panel-plugin/pulseaudio-config.h | 1 + panel-plugin/pulseaudio-dialog.c | 8 ++++++++ panel-plugin/pulseaudio-dialog.glade | 16 ++++++++++++++++ panel-plugin/pulseaudio-plugin.c | 7 ++++++- 6 files changed, 73 insertions(+), 2 deletions(-) diff --git a/panel-plugin/pulseaudio-button.c b/panel-plugin/pulseaudio-button.c index 92d8f3a..d431fa4 100644 --- a/panel-plugin/pulseaudio-button.c +++ b/panel-plugin/pulseaudio-button.c @@ -235,7 +235,12 @@ pulseaudio_button_scroll_event (GtkWidget *widget, GdkEventScroll *event) if (event->direction == 1) // decrease volume new_volume = volume - volume_step; else if (event->direction == 0) // increase volume - new_volume = MIN (volume + volume_step, MAX (volume, 1.0)); + { + if (!pulseaudio_config_get_allow_louder_than_hundred (button->config)) + new_volume = MIN (volume + volume_step, MAX (volume, 1.0)); + else + new_volume = volume + volume_step; + } else new_volume = volume; diff --git a/panel-plugin/pulseaudio-config.c b/panel-plugin/pulseaudio-config.c index 5b54df5..c56549f 100644 --- a/panel-plugin/pulseaudio-config.c +++ b/panel-plugin/pulseaudio-config.c @@ -45,6 +45,7 @@ #define DEFAULT_ENABLE_KEYBOARD_SHORTCUTS TRUE #define DEFAULT_SHOW_NOTIFICATIONS TRUE +#define DEFAULT_ALLOW_LOUDER_THAN_HUNDRED FALSE #define DEFAULT_VOLUME_STEP 5 #define DEFAULT_VOLUME_MAX 150 @@ -85,6 +86,7 @@ struct _PulseaudioConfig gboolean enable_keyboard_shortcuts; gboolean enable_multimedia_keys; gboolean show_notifications; + gboolean allow_louder_than_hundred; guint volume_step; guint volume_max; gchar *mixer_command; @@ -101,6 +103,7 @@ enum PROP_ENABLE_KEYBOARD_SHORTCUTS, PROP_ENABLE_MULTIMEDIA_KEYS, PROP_SHOW_NOTIFICATIONS, + PROP_ALLOW_LOUDER_THAN_HUNDRED, PROP_VOLUME_STEP, PROP_VOLUME_MAX, PROP_MIXER_COMMAND, @@ -161,6 +164,15 @@ pulseaudio_config_class_init (PulseaudioConfigClass *klass) + g_object_class_install_property (gobject_class, + PROP_ALLOW_LOUDER_THAN_HUNDRED, + g_param_spec_boolean ("allow-louder-than-hundred", NULL, NULL, + DEFAULT_ALLOW_LOUDER_THAN_HUNDRED, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + + + g_object_class_install_property (gobject_class, PROP_VOLUME_STEP, g_param_spec_uint ("volume-step", NULL, NULL, @@ -234,6 +246,7 @@ pulseaudio_config_init (PulseaudioConfig *config) config->enable_keyboard_shortcuts = DEFAULT_ENABLE_KEYBOARD_SHORTCUTS; config->enable_multimedia_keys = DEFAULT_ENABLE_MULTIMEDIA_KEYS; config->show_notifications = DEFAULT_SHOW_NOTIFICATIONS; + config->allow_louder_than_hundred = DEFAULT_ALLOW_LOUDER_THAN_HUNDRED; config->volume_step = DEFAULT_VOLUME_STEP; config->volume_max = DEFAULT_VOLUME_MAX; config->mixer_command = g_strdup (DEFAULT_MIXER_COMMAND); @@ -279,6 +292,10 @@ pulseaudio_config_get_property (GObject *object, g_value_set_boolean (value, config->show_notifications); break; + case PROP_ALLOW_LOUDER_THAN_HUNDRED: + g_value_set_boolean (value, config->allow_louder_than_hundred); + break; + case PROP_VOLUME_STEP: g_value_set_uint (value, config->volume_step); break; @@ -353,6 +370,16 @@ pulseaudio_config_set_property (GObject *object, } break; + case PROP_ALLOW_LOUDER_THAN_HUNDRED: + val_bool = g_value_get_boolean (value); + if (config->allow_louder_than_hundred != val_bool) + { + config->allow_louder_than_hundred = val_bool; + g_object_notify (G_OBJECT (config), "allow-louder-than-hundred"); + g_signal_emit (G_OBJECT (config), pulseaudio_config_signals [CONFIGURATION_CHANGED], 0); + } + break; + case PROP_VOLUME_STEP: val_uint = g_value_get_uint (value); if (config->volume_step != val_uint) @@ -453,6 +480,15 @@ pulseaudio_config_get_show_notifications (PulseaudioConfig *config) +gboolean +pulseaudio_config_get_allow_louder_than_hundred (PulseaudioConfig *config) +{ + g_return_val_if_fail (IS_PULSEAUDIO_CONFIG (config), DEFAULT_ALLOW_LOUDER_THAN_HUNDRED); + + return config->allow_louder_than_hundred; +} + + guint pulseaudio_config_get_volume_step (PulseaudioConfig *config) { diff --git a/panel-plugin/pulseaudio-config.h b/panel-plugin/pulseaudio-config.h index 24715f9..ee4608a 100644 --- a/panel-plugin/pulseaudio-config.h +++ b/panel-plugin/pulseaudio-config.h @@ -41,6 +41,7 @@ PulseaudioConfig *pulseaudio_config_new (const gchar gboolean pulseaudio_config_get_enable_keyboard_shortcuts (PulseaudioConfig *config); gboolean pulseaudio_config_get_enable_multimedia_keys (PulseaudioConfig *config); gboolean pulseaudio_config_get_show_notifications (PulseaudioConfig *config); +gboolean pulseaudio_config_get_allow_louder_than_hundred (PulseaudioConfig *config); guint pulseaudio_config_get_volume_step (PulseaudioConfig *config); guint pulseaudio_config_get_volume_max (PulseaudioConfig *config); const gchar *pulseaudio_config_get_mixer_command (PulseaudioConfig *config); diff --git a/panel-plugin/pulseaudio-dialog.c b/panel-plugin/pulseaudio-dialog.c index a5bc5cc..81d49b2 100644 --- a/panel-plugin/pulseaudio-dialog.c +++ b/panel-plugin/pulseaudio-dialog.c @@ -180,8 +180,16 @@ pulseaudio_dialog_build (PulseaudioDialog *dialog) G_OBJECT (object), "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL); + object = gtk_builder_get_object (builder, "checkbutton-allow-louder-than-hundred"); + g_return_if_fail (GTK_IS_CHECK_BUTTON (object)); + g_object_bind_property (G_OBJECT (dialog->config), "allow-louder-than-hundred", + G_OBJECT (object), "active", + G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL); + object = gtk_builder_get_object (builder, "checkbutton-show-notifications"); g_return_if_fail (GTK_IS_CHECK_BUTTON (object)); + // object = gtk_builder_get_object (builder, "checkbutton-allow-louder-than-hundred"); + // g_return_if_fail (GTK_IS_CHECK_BUTTON (object)); #ifdef HAVE_LIBNOTIFY g_object_bind_property (G_OBJECT (dialog->config), "show-notifications", G_OBJECT (object), "active", diff --git a/panel-plugin/pulseaudio-dialog.glade b/panel-plugin/pulseaudio-dialog.glade index 4e50e28..231e955 100644 --- a/panel-plugin/pulseaudio-dialog.glade +++ b/panel-plugin/pulseaudio-dialog.glade @@ -123,6 +123,22 @@ 1 + + + Allow louder than 100% + True + True + False + start + True + True + + + True + True + 1 + + diff --git a/panel-plugin/pulseaudio-plugin.c b/panel-plugin/pulseaudio-plugin.c index 6879845..aa4cc7f 100644 --- a/panel-plugin/pulseaudio-plugin.c +++ b/panel-plugin/pulseaudio-plugin.c @@ -351,7 +351,12 @@ pulseaudio_plugin_volume_key_pressed (const char *keystring, pulseaudio_debug ("%s pressed", keystring); if (strcmp (keystring, PULSEAUDIO_PLUGIN_RAISE_VOLUME_KEY) == 0) - pulseaudio_volume_set_volume (pulseaudio_plugin->volume, MIN (volume + volume_step, MAX (volume, 1.0))); + { + if (!pulseaudio_config_get_allow_louder_than_hundred (pulseaudio_plugin->config)) + pulseaudio_volume_set_volume (pulseaudio_plugin->volume, MIN (volume + volume_step, MAX (volume, 1.0))); + else + pulseaudio_volume_set_volume (pulseaudio_plugin->volume, volume + volume_step); + } else if (strcmp (keystring, PULSEAUDIO_PLUGIN_LOWER_VOLUME_KEY) == 0) pulseaudio_volume_set_volume (pulseaudio_plugin->volume, volume - volume_step); } From ac724c6e757ff70822640e297e4d4cd592c3ffd5 Mon Sep 17 00:00:00 2001 From: Nurlan Musayev Date: Sat, 6 Jan 2018 18:02:13 +0300 Subject: [PATCH 2/4] Xfconf binding for property 'allow-louder-than-hundred' --- panel-plugin/pulseaudio-config.c | 4 ++++ panel-plugin/pulseaudio-dialog.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/panel-plugin/pulseaudio-config.c b/panel-plugin/pulseaudio-config.c index c56549f..e9f2916 100644 --- a/panel-plugin/pulseaudio-config.c +++ b/panel-plugin/pulseaudio-config.c @@ -670,6 +670,10 @@ pulseaudio_config_new (const gchar *property_base) xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, config, "show-notifications"); g_free (property); + property = g_strconcat (property_base, "/allow-louder-than-hundred", NULL); + xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, config, "allow-louder-than-hundred"); + g_free (property); + property = g_strconcat (property_base, "/volume-step", NULL); xfconf_g_property_bind (channel, property, G_TYPE_UINT, config, "volume-step"); g_free (property); diff --git a/panel-plugin/pulseaudio-dialog.c b/panel-plugin/pulseaudio-dialog.c index 81d49b2..ffab3db 100644 --- a/panel-plugin/pulseaudio-dialog.c +++ b/panel-plugin/pulseaudio-dialog.c @@ -188,8 +188,6 @@ pulseaudio_dialog_build (PulseaudioDialog *dialog) object = gtk_builder_get_object (builder, "checkbutton-show-notifications"); g_return_if_fail (GTK_IS_CHECK_BUTTON (object)); - // object = gtk_builder_get_object (builder, "checkbutton-allow-louder-than-hundred"); - // g_return_if_fail (GTK_IS_CHECK_BUTTON (object)); #ifdef HAVE_LIBNOTIFY g_object_bind_property (G_OBJECT (dialog->config), "show-notifications", G_OBJECT (object), "active", From 0ce8086a4f0d65b2dc02a4f831619cd6d70e2316 Mon Sep 17 00:00:00 2001 From: Nurlan Musayev Date: Sat, 6 Jan 2018 18:51:43 +0300 Subject: [PATCH 3/4] Added scaling to notifications --- panel-plugin/pulseaudio-config.c | 2 +- panel-plugin/pulseaudio-notify.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/panel-plugin/pulseaudio-config.c b/panel-plugin/pulseaudio-config.c index e9f2916..c735843 100644 --- a/panel-plugin/pulseaudio-config.c +++ b/panel-plugin/pulseaudio-config.c @@ -246,7 +246,7 @@ pulseaudio_config_init (PulseaudioConfig *config) config->enable_keyboard_shortcuts = DEFAULT_ENABLE_KEYBOARD_SHORTCUTS; config->enable_multimedia_keys = DEFAULT_ENABLE_MULTIMEDIA_KEYS; config->show_notifications = DEFAULT_SHOW_NOTIFICATIONS; - config->allow_louder_than_hundred = DEFAULT_ALLOW_LOUDER_THAN_HUNDRED; + config->allow_louder_than_hundred = DEFAULT_ALLOW_LOUDER_THAN_HUNDRED; config->volume_step = DEFAULT_VOLUME_STEP; config->volume_max = DEFAULT_VOLUME_MAX; config->mixer_command = g_strdup (DEFAULT_MIXER_COMMAND); diff --git a/panel-plugin/pulseaudio-notify.c b/panel-plugin/pulseaudio-notify.c index b508fc9..814cfb9 100644 --- a/panel-plugin/pulseaudio-notify.c +++ b/panel-plugin/pulseaudio-notify.c @@ -170,6 +170,7 @@ pulseaudio_notify_notify (PulseaudioNotify *notify, gboolean mic) GError *error = NULL; NotifyNotification *notification; gdouble volume; + gdouble volume_max; gint volume_i; gboolean muted; gboolean connected; @@ -190,7 +191,12 @@ pulseaudio_notify_notify (PulseaudioNotify *notify, gboolean mic) volume = (mic ? pulseaudio_volume_get_volume_mic : pulseaudio_volume_get_volume) (notify->volume); muted = (mic ? pulseaudio_volume_get_muted_mic : pulseaudio_volume_get_muted) (notify->volume); connected = pulseaudio_volume_get_connected (notify->volume); - volume_i = (gint) round (volume * 100); + volume_max = pulseaudio_config_get_volume_max(notify->config) / 100.0; + + if (!pulseaudio_config_get_allow_louder_than_hundred (notify->config)) + volume_i = (gint) round (volume * 100); + else + volume_i = (gint) round (volume * 100 / volume_max); if (!connected) volume_i = 0; From 0f8396b5bd81ecf6dcfd69e0679e7512117a9692 Mon Sep 17 00:00:00 2001 From: Nurlan Musayev Date: Sat, 6 Jan 2018 19:10:52 +0300 Subject: [PATCH 4/4] Fix spacing --- panel-plugin/pulseaudio-config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panel-plugin/pulseaudio-config.h b/panel-plugin/pulseaudio-config.h index ee4608a..4e6e6bc 100644 --- a/panel-plugin/pulseaudio-config.h +++ b/panel-plugin/pulseaudio-config.h @@ -41,7 +41,7 @@ PulseaudioConfig *pulseaudio_config_new (const gchar gboolean pulseaudio_config_get_enable_keyboard_shortcuts (PulseaudioConfig *config); gboolean pulseaudio_config_get_enable_multimedia_keys (PulseaudioConfig *config); gboolean pulseaudio_config_get_show_notifications (PulseaudioConfig *config); -gboolean pulseaudio_config_get_allow_louder_than_hundred (PulseaudioConfig *config); +gboolean pulseaudio_config_get_allow_louder_than_hundred (PulseaudioConfig *config); guint pulseaudio_config_get_volume_step (PulseaudioConfig *config); guint pulseaudio_config_get_volume_max (PulseaudioConfig *config); const gchar *pulseaudio_config_get_mixer_command (PulseaudioConfig *config);