Codebase list cinnamon-settings-daemon / 9fdea16
Update upstream source from tag 'upstream/4.8.3' Update to upstream version '4.8.3' with Debian dir 80ba414d2b959d4d4243db986862ad63dbf9f10d Norbert Preining 3 years ago
3 changed file(s) with 61 addition(s) and 32 deletion(s). Raw diff Collapse all Expand all
0 project('cinnamon-settings-daemon', 'c', version: '4.8.2', meson_version: '>= 0.47')
0 project('cinnamon-settings-daemon', 'c', version: '4.8.3', meson_version: '>= 0.47')
11
22 gnome = import('gnome')
33 i18n = import('i18n')
2121 pkglibdir = join_paths(libdir, pkgname)
2222 apilibdir = join_paths(libdir, '@0@-@1@'.format(pkgname, api_version))
2323 pkgdatadir = join_paths(datadir, pkgname)
24 gtkbuilderdir = join_paths(prefix, datadir, pkgname)
2425 pkgincludedir = join_paths(includedir, pkgname)
25 localedir = join_paths(meson.source_root(), 'po')
26 localedir = join_paths(prefix, datadir, 'locale')
2627 polkitdir = join_paths(datadir, 'polkit-1', 'actions')
2728 sysconfdir = get_option('sysconfdir')
2829 autostartdir = join_paths(sysconfdir, 'xdg', 'autostart')
109110 dbus_binding_tool = find_program('dbus-binding-tool')
110111
111112 csd_conf = configuration_data()
112 csd_conf.set_quoted('GTKBUILDERDIR', pkgdatadir)
113 csd_conf.set_quoted('GTKBUILDERDIR', gtkbuilderdir)
113114 csd_conf.set_quoted('CINNAMON_SETTINGS_LOCALEDIR', localedir)
114115 csd_conf.set_quoted('PACKAGE', meson.project_name())
115116 csd_conf.set_quoted('PACKAGE_NAME', meson.project_name())
168168 gint inhibit_keys_fd;
169169 GSettings *desktop_session_settings;
170170 GSettings *cinnamon_session_settings;
171 GSettings *sound_settings;
171172
172173 /* Multihead stuff */
173174 GdkScreen *current_screen;
836837 gboolean quiet)
837838 {
838839 const char *icon;
839 vol = CLAMP (vol, 0, max_vol);
840
840841 icon = get_icon_name_for_volume (muted, vol, is_mic);
842
841843 show_osd (manager, icon, vol, OSD_ALL_OUTPUTS);
844
842845 if (quiet == FALSE && sound_changed != FALSE && muted == FALSE) {
843 GSettings *settings = g_settings_new ("org.cinnamon.desktop.sound");
844 gboolean enabled = g_settings_get_boolean (settings, "volume-sound-enabled");
845 char *sound = g_settings_get_string (settings, "volume-sound-file");
846 gboolean enabled = g_settings_get_boolean (manager->priv->sound_settings, "volume-sound-enabled");
847 char *sound = g_settings_get_string (manager->priv->sound_settings, "volume-sound-file");
846848 if (enabled) {
847849 ca_context_change_device (manager->priv->ca, gvc_mixer_stream_get_name (stream));
848850 ca_context_play (manager->priv->ca, 1, CA_PROP_MEDIA_FILENAME, sound, NULL);
849851 }
850852 g_free(sound);
851 g_object_unref (settings);
852853 }
853854 }
854855
968969 {
969970 GvcMixerStream *stream;
970971 gboolean old_muted, new_muted;
971 guint old_vol, new_vol, norm_vol_step, osd_vol, osd_max_vol;
972 guint old_vol_pa, new_vol_pa, max_vol_pa;
973 gint vol_step_pa;
974 gdouble max_vol_setting_multiplier;
975 gint osd_vol, osd_max_vol;
972976 gboolean sound_changed;
973 GSettings *settings;
974977
975978 /* Find the stream that corresponds to the device, if any */
976979 gboolean is_source_stream =
989992 if (stream == NULL)
990993 return;
991994
992 norm_vol_step = PA_VOLUME_NORM * VOLUME_STEP / 100;
993
994 settings = g_settings_new ("org.cinnamon.desktop.sound");
995 osd_max_vol = PA_VOLUME_NORM * g_settings_get_int (settings, "maximum-volume") / 100;
996 g_object_unref (settings);
995 osd_max_vol = g_settings_get_int (manager->priv->sound_settings, "maximum-volume");
996 max_vol_setting_multiplier = (gdouble) osd_max_vol / 100;
997
998 max_vol_pa = MIN ((guint) PA_VOLUME_NORM * max_vol_setting_multiplier, PA_VOLUME_MAX);
999 vol_step_pa = (max_vol_pa * ((double) VOLUME_STEP) / 100);
1000
1001 // Make the max volume divisible by our 5% step.
1002 max_vol_pa = (max_vol_pa / vol_step_pa) * vol_step_pa;
1003
1004
1005 // The volume snaps to PA_VALUE_NORM when adjusting - this is done outside our control here,
1006 // And this messes up the 5% step: Below we try to always end up with a percent divisible by
1007 // VOLUME_STEP. We round up or down to the next closest, but have to give it an extra bump at the PA_VOLUME_NORM
1008 // threshold or else it gets stuck.
1009 #define CROSSING_PA_NORM(val,step)(val >= PA_VOLUME_NORM && val - step < PA_VOLUME_NORM || \
1010 val <= PA_VOLUME_NORM && val + step > PA_VOLUME_NORM)
9971011
9981012 /* FIXME: this is racy */
999 new_vol = old_vol = gvc_mixer_stream_get_volume (stream);
1013 new_vol_pa = old_vol_pa = gvc_mixer_stream_get_volume (stream);
10001014 new_muted = old_muted = gvc_mixer_stream_get_is_muted (stream);
10011015 sound_changed = FALSE;
10021016
10061020 new_muted = !old_muted;
10071021 break;
10081022 case C_DESKTOP_MEDIA_KEY_VOLUME_DOWN:
1009 if (old_vol <= norm_vol_step) {
1010 new_vol = 0;
1023 if (old_vol_pa <= vol_step_pa) {
1024 new_vol_pa = 0;
10111025 new_muted = TRUE;
10121026 } else {
1013 new_vol = old_vol - norm_vol_step;
1027 if (old_vol_pa % vol_step_pa > 0 && !CROSSING_PA_NORM (old_vol_pa, vol_step_pa)) {
1028 new_vol_pa = (old_vol_pa / vol_step_pa * vol_step_pa);
1029 } else {
1030
1031 new_vol_pa = (old_vol_pa / vol_step_pa * vol_step_pa) - vol_step_pa;
1032 }
10141033 }
10151034 break;
10161035 case C_DESKTOP_MEDIA_KEY_VOLUME_UP:
10171036 new_muted = FALSE;
10181037 /* When coming out of mute only increase the volume if it was 0 */
1019 if (!old_muted || old_vol == 0)
1020 new_vol = MIN (old_vol + norm_vol_step, osd_max_vol);
1038 if (!old_muted || old_vol_pa == 0)
1039 if (old_vol_pa % vol_step_pa > 0 && !CROSSING_PA_NORM (old_vol_pa, vol_step_pa)) {
1040 new_vol_pa = MIN (old_vol_pa / vol_step_pa * vol_step_pa, max_vol_pa);
1041 } else {
1042 new_vol_pa = MIN (old_vol_pa / vol_step_pa * vol_step_pa + vol_step_pa, max_vol_pa);
1043 }
10211044 break;
10221045 }
10231046
10261049 sound_changed = TRUE;
10271050 }
10281051
1029 if (old_vol != new_vol) {
1030 if (gvc_mixer_stream_set_volume (stream, new_vol) != FALSE) {
1052 if (old_vol_pa != new_vol_pa) {
1053 if (gvc_mixer_stream_set_volume (stream, new_vol_pa) != FALSE) {
10311054 gvc_mixer_stream_push_volume (stream);
10321055 sound_changed = TRUE;
10331056 }
10341057 }
10351058
1036 if (type == C_DESKTOP_MEDIA_KEY_VOLUME_DOWN && old_vol == 0 && old_muted)
1037 osd_vol = -1;
1038 else if (type == C_DESKTOP_MEDIA_KEY_VOLUME_UP && old_vol == osd_max_vol && !old_muted)
1039 osd_vol = 101;
1059 if (type == C_DESKTOP_MEDIA_KEY_VOLUME_DOWN && old_vol_pa == 0 && old_muted)
1060 // This should bottom out at 0. At -1 (old value), the OSD doesn't show a bar.
1061 osd_vol = 0;
1062 else if (type == C_DESKTOP_MEDIA_KEY_VOLUME_UP && (old_vol_pa == max_vol_pa) && !old_muted)
1063 osd_vol = 100;
10401064 else if (!new_muted)
1041 osd_vol = (int) (100 * (double) new_vol / osd_max_vol);
1065 osd_vol = CLAMP ((int) (100 * ((double) new_vol_pa / max_vol_pa)), 0, 100);
10421066 else
10431067 osd_vol = 0;
10441068 show_sound_osd (manager, stream, is_source_stream, osd_vol, osd_max_vol, new_muted, sound_changed, quiet);
18251849 do_url_action (manager, "ghelp", timestamp);
18261850 break;
18271851 case C_DESKTOP_MEDIA_KEY_SCREENSHOT:
1828 execute (manager, "gnome-screenshot", FALSE, TRUE);
1852 execute (manager, "gnome-screenshot", FALSE, FALSE);
18291853 break;
18301854 case C_DESKTOP_MEDIA_KEY_WINDOW_SCREENSHOT:
18311855 execute (manager, "gnome-screenshot --window", FALSE, TRUE);
18341858 execute (manager, "gnome-screenshot --area", FALSE, TRUE);
18351859 break;
18361860 case C_DESKTOP_MEDIA_KEY_SCREENSHOT_CLIP:
1837 execute (manager, "gnome-screenshot --clipboard", FALSE, TRUE);
1861 execute (manager, "gnome-screenshot --clipboard", FALSE, FALSE);
18381862 break;
18391863 case C_DESKTOP_MEDIA_KEY_WINDOW_SCREENSHOT_CLIP:
18401864 execute (manager, "gnome-screenshot --window --clipboard", FALSE, TRUE);
19651989 manager->priv->power_settings = g_settings_new (SETTINGS_POWER_DIR);
19661990 manager->priv->media_key_settings = g_settings_new ("org.cinnamon.settings-daemon.plugins.media-keys");
19671991
1992 manager->priv->sound_settings = g_settings_new ("org.cinnamon.desktop.sound");
1993
19681994 /* Logic from http://git.gnome.org/browse/gnome-shell/tree/js/ui/status/accessibility.js#n163 */
19691995 manager->priv->interface_settings = g_settings_new (SETTINGS_INTERFACE_DIR);
19701996 g_signal_connect (G_OBJECT (manager->priv->interface_settings), "changed::gtk-theme",
21012127 priv->media_key_settings = NULL;
21022128 }
21032129
2130 g_clear_object (&priv->sound_settings);
2131
21042132 if (priv->power_screen_proxy) {
21052133 g_object_unref (priv->power_screen_proxy);
21062134 priv->power_screen_proxy = NULL;
3232 dependencies: xsettings_deps,
3333 c_args: [
3434 '-DPLUGIN_NAME="@0@"'.format(plugin_name),
35 '-DGTK_MODULES_DIRECTORY="@0@/cinnamon-settings-daemon-@1@/gtk-modules/"'.format(libdir, meson.project_version()),
35 '-DGTK_MODULES_DIRECTORY="@0@/@1@/cinnamon-settings-daemon-@2@/gtk-modules/"'.format(prefix, libdir, api_version),
3636 ],
3737 install: true,
3838 install_dir: libexecdir,
4747 include_directories: [include_dirs, common_inc],
4848 dependencies: xsettings_deps,
4949 c_args: [
50 '-DGTK_MODULES_DIRECTORY="@0@/cinnamon-settings-daemon-@1@/gtk-modules/"'.format(libdir, meson.project_version()),
50 '-DGTK_MODULES_DIRECTORY="@0@/@1@/cinnamon-settings-daemon-@2@/gtk-modules/"'.format(prefix, libdir, api_version),
5151 ],
5252 )
5353