diff --git a/gui-apps/swaync/Manifest b/gui-apps/swaync/Manifest index 97719be519..476a9a4962 100644 --- a/gui-apps/swaync/Manifest +++ b/gui-apps/swaync/Manifest @@ -1,2 +1,2 @@ -DIST swaync-0.8.0.tar.gz 3170861 BLAKE2B a43fd4d095b3bb1b39ff914cf3f09f9d97807d95365839a30c46c607c601c8e557e4365e3c23cbf650dca7b5a51523e4fbc8ecf49d7863b717b04e0c90e04f46 SHA512 c1ee542fff2b6b06cd0def99c96bede5cb3dc576ab4e0498bd110f1b6e3df2786526d5ec58dbfc7f5c488afc2c1c85541e878c76118486530b8937a5e13a0799 +DIST swaync-0.10.0.tar.gz 1709477 BLAKE2B 179e27632a95d1bab687011479db4d534eebe9f104f388c51782a6f2bc7dc02acc8b4ca5c3aa80c00418da72c7e51f9f9c12f58c181eec0a4a17cb3333141480 SHA512 5c91f369a6ec24e8d52135b731fe396ca11f0bc44a5d42534a7a92656d68f8e4654c3d37b8817a7f4f707e83ae76db68535004f5aa3b527b13ce5a6165863bc5 DIST swaync-0.9.0.tar.gz 3178186 BLAKE2B 09c92e094da8c97384c78ac0afffc8caa968c78cad298056a99377da6a06e4cc496e0fbf469f0096d0378a7f78e0717e816dd8f43ef6a45270bd7b13f8f90d42 SHA512 1c9bb7908d74752cdb03b11d15794a18ca6360aec1a0d00897e252954544179885841905d0ba7464da8e29d0cdc8dc6b33b65296a7e61478ed160980b6f26b32 diff --git a/gui-apps/swaync/files/swaync-0.8.0-pulsefree.patch b/gui-apps/swaync/files/swaync-0.8.0-pulsefree.patch deleted file mode 100644 index 5ef56ca477..0000000000 --- a/gui-apps/swaync/files/swaync-0.8.0-pulsefree.patch +++ /dev/null @@ -1,942 +0,0 @@ -diff --git a/.github/workflows/arch-build.yml b/.github/workflows/arch-build.yml -index aa7ac12..395339a 100644 ---- a/.github/workflows/arch-build.yml -+++ b/.github/workflows/arch-build.yml -@@ -18,7 +18,7 @@ jobs: - container: archlinux:latest - runs-on: ubuntu-latest - env: -- PACKAGES: meson gtk3 gobject-introspection vala json-glib libhandy gtk-layer-shell scdoc libpulse libgee -+ PACKAGES: meson gtk3 gobject-introspection vala json-glib libhandy gtk-layer-shell scdoc - steps: - - name: Install packages - run: | -diff --git a/.github/workflows/ubuntu-build.yml b/.github/workflows/ubuntu-build.yml -index e29f197..61d119d 100644 ---- a/.github/workflows/ubuntu-build.yml -+++ b/.github/workflows/ubuntu-build.yml -@@ -19,7 +19,7 @@ jobs: - runs-on: ubuntu-latest - env: - DEBIAN_FRONTEND: noninteractive -- PACKAGES: meson libwayland-dev libgtk-3-dev gobject-introspection libgirepository1.0-dev valac libjson-glib-dev libhandy-1-dev libgtk-layer-shell-dev scdoc libgee-0.8-dev libpulse-dev -+ PACKAGES: meson libwayland-dev libgtk-3-dev gobject-introspection libgirepository1.0-dev valac libjson-glib-dev libhandy-1-dev libgtk-layer-shell-dev scdoc - steps: - - name: Install packages - run: | -diff --git a/README.md b/README.md -index 5de6365..2bd742d 100644 ---- a/README.md -+++ b/README.md -@@ -53,7 +53,6 @@ These widgets can be customized, added, removed and even reordered - - Mpris (Media player controls for Spotify, Firefox, Chrome, etc...) - - Menubar with dropdown and buttons - - Button grid --- Volume slider using PulseAudio - - Backlight slider - - ## Planned Features -diff --git a/build-scripts/PKGBUILD b/build-scripts/PKGBUILD -index bdcbdaf..5df0d85 100644 ---- a/build-scripts/PKGBUILD -+++ b/build-scripts/PKGBUILD -@@ -11,7 +11,7 @@ arch=( - 'armv7h' # ARM v7 hardfloat - ) - license=(GPL3) --depends=("gtk3" "gtk-layer-shell" "dbus" "glib2" "gobject-introspection" "libgee" "json-glib" "libhandy" "libpulse") -+depends=("gtk3" "gtk-layer-shell" "dbus" "glib2" "gobject-introspection" "libgee" "json-glib" "libhandy") - conflicts=("swaync" "swaync-client") - provides=("swaync" "swaync-client") - makedepends=(vala meson git scdoc) -diff --git a/build-scripts/PKGBUILD-git b/build-scripts/PKGBUILD-git -index 6effc15..53de290 100644 ---- a/build-scripts/PKGBUILD-git -+++ b/build-scripts/PKGBUILD-git -@@ -11,7 +11,7 @@ arch=( - 'armv7h' # ARM v7 hardfloat - ) - license=('GPL3') --depends=("gtk3" "gtk-layer-shell" "dbus" "glib2" "gobject-introspection" "libgee" "json-glib" "libhandy" "libpulse" ) -+depends=("gtk3" "gtk-layer-shell" "dbus" "glib2" "gobject-introspection" "libgee" "json-glib" "libhandy") - conflicts=("swaync" "swaync-client") - provides=("swaync" "swaync-client") - makedepends=(vala meson git scdoc) -diff --git a/build-scripts/swaync.rpkg.spec b/build-scripts/swaync.rpkg.spec -index a16b073..b2ef198 100644 ---- a/build-scripts/swaync.rpkg.spec -+++ b/build-scripts/swaync.rpkg.spec -@@ -23,7 +23,6 @@ BuildRequires: libhandy-devel >= 1.4.0 - BuildRequires: systemd-devel - BuildRequires: systemd - BuildRequires: scdoc --BuildRequires: pulseaudio-libs-devel - %{?systemd_requires} - - %description -diff --git a/man/swaync.5.scd b/man/swaync.5.scd -index ba83f55..f4c0157 100644 ---- a/man/swaync.5.scd -+++ b/man/swaync.5.scd -@@ -375,16 +375,6 @@ config file to be able to detect config errors - description: "Command to be executed on click" ++ - description: A list of actions containing a label and a command ++ - description: A grid of buttons that execute shell commands ++ -- *volume*++ -- type: object ++ -- css class: widget-volume ++ -- properties: ++ -- label: ++ -- type: string ++ -- optional: true ++ -- default: "Volume" ++ -- description: Text displayed in front of the volume slider ++ -- description: Slider to control pulse volume ++ - *backlight*++ - type: object ++ - css class: widget-backlight ++ -@@ -431,7 +421,6 @@ config file to be able to detect config errors - default: "Clear All" ++ - description: "Clear All" button text ++ - description: Displayed if notifications are inhibited. -- - example: - ``` - { -diff --git a/src/configSchema.json b/src/configSchema.json -index 9bbb649..c2bd07b 100644 ---- a/src/configSchema.json -+++ b/src/configSchema.json -@@ -293,9 +293,6 @@ - "^menubar(#[a-zA-Z0-9_-]{1,}){0,1}?$": { - "$ref": "#/widgets/menubar" - }, -- "^volume(#[a-zA-Z0-9_-]{1,}){0,1}?$": { -- "$ref": "#/widgets/volume" -- }, - "^backlight(#[a-zA-Z0-9_-]{1,}){0,1}?$": { - "$ref": "#/widgets/backlight" - }, -@@ -446,18 +443,6 @@ - } - } - }, -- "volume": { -- "type": "object", -- "description": "Slider to control pulse volume", -- "additionalProperties": false, -- "properties": { -- "label": { -- "type": "string", -- "description": "Text displayed in front of the volume slider", -- "default": "Volume" -- } -- } -- }, - "backlight": { - "type": "object", - "description": "Slider to control monitor brightness", -diff --git a/src/controlCenter/widgets/factory.vala b/src/controlCenter/widgets/factory.vala -index aea178d..f2ed445 100644 ---- a/src/controlCenter/widgets/factory.vala -+++ b/src/controlCenter/widgets/factory.vala -@@ -26,9 +26,6 @@ namespace SwayNotificationCenter.Widgets { - case "buttons-grid": - widget = new ButtonsGrid (suffix, swaync_daemon, noti_daemon); - break; -- case "volume": -- widget = new Volume (suffix, swaync_daemon, noti_daemon); -- break; - case "backlight": - widget = new Backlight (suffix, swaync_daemon, noti_daemon); - break; -diff --git a/src/controlCenter/widgets/volume/pulseDaemon.vala b/src/controlCenter/widgets/volume/pulseDaemon.vala -deleted file mode 100644 -index 766bf45..0000000 ---- a/src/controlCenter/widgets/volume/pulseDaemon.vala -+++ /dev/null -@@ -1,531 +0,0 @@ --// From SwaySettings PulseAudio page: https://github.com/ErikReider/SwaySettings/blob/407c9e99dd3e50a0f09c64d94a9e6ff741488378/src/Pages/Pulse/PulseDaemon.vala --using PulseAudio; --using Gee; -- --namespace SwayNotificationCenter.Widgets { -- /** -- * Loosely based off of Elementary OS switchboard-plug-sound -- * https://github.com/elementary/switchboard-plug-sound -- */ -- public class PulseDaemon : Object { -- private Context context; -- private GLibMainLoop mainloop; -- private bool quitting = false; -- -- public bool running { get; private set; } -- -- private string default_sink_name { get; private set; } -- private string default_source_name { get; private set; } -- -- private PulseDevice ? default_sink = null; -- -- public HashMap sinks { get; private set; } -- -- construct { -- mainloop = new GLibMainLoop (); -- -- sinks = new HashMap (); -- } -- -- public void start () { -- get_context (); -- } -- -- public void close () { -- quitting = true; -- context.disconnect (); -- context = null; -- } -- -- public signal void change_default_device (PulseDevice device); -- -- public signal void new_device (PulseDevice device); -- public signal void change_device (PulseDevice device); -- public signal void remove_device (PulseDevice device); -- -- private void get_context () { -- var ctx = new Context (mainloop.get_api (), null); -- ctx.set_state_callback ((ctx) => { -- debug ("Pulse Status: %s\n", ctx.get_state ().to_string ()); -- switch (ctx.get_state ()) { -- case Context.State.CONNECTING: -- case Context.State.AUTHORIZING: -- case Context.State.SETTING_NAME: -- break; -- case Context.State.READY: -- ctx.set_subscribe_callback (subscription); -- ctx.subscribe (Context.SubscriptionMask.SINK_INPUT | -- Context.SubscriptionMask.SINK | -- Context.SubscriptionMask.CARD | -- Context.SubscriptionMask.SERVER); -- // Init data -- ctx.get_server_info (this.get_server_info); -- running = true; -- break; -- case Context.State.TERMINATED: -- case Context.State.FAILED: -- running = false; -- if (quitting) { -- quitting = false; -- break; -- } -- stderr.printf ( -- "PulseAudio connection lost. Will retry connection.\n"); -- get_context (); -- break; -- default: -- running = false; -- stderr.printf ("Connection failure: %s\n", -- PulseAudio.strerror (ctx.errno ())); -- break; -- } -- }); -- if (ctx.connect ( -- null, Context.Flags.NOFAIL, null) < 0) { -- stdout.printf ("pa_context_connect() failed: %s\n", -- PulseAudio.strerror (ctx.errno ())); -- } -- this.context = ctx; -- } -- -- private void subscription (Context ctx, -- Context.SubscriptionEventType t, -- uint32 index) { -- var type = t & Context.SubscriptionEventType.FACILITY_MASK; -- var event = t & Context.SubscriptionEventType.TYPE_MASK; -- switch (type) { -- case Context.SubscriptionEventType.SINK: -- switch (event) { -- default: break; -- case Context.SubscriptionEventType.NEW: -- case Context.SubscriptionEventType.CHANGE: -- ctx.get_sink_info_by_index (index, this.get_sink_info); -- break; -- case Context.SubscriptionEventType.REMOVE: -- foreach (var sink in sinks.values) { -- if (sink.device_index != index) continue; -- sink.removed = true; -- sink.is_default = false; -- this.remove_device (sink); -- break; -- } -- break; -- } -- break; -- case Context.SubscriptionEventType.CARD: -- switch (event) { -- default: break; -- case Context.SubscriptionEventType.NEW: -- case Context.SubscriptionEventType.CHANGE: -- ctx.get_card_info_by_index (index, this.get_card_info); -- break; -- case Context.SubscriptionEventType.REMOVE: -- // A safe way of removing the sink_input -- var iter = sinks.map_iterator (); -- while (iter.next ()) { -- var device = iter.get_value (); -- if (device.card_index != index) continue; -- device.removed = true; -- device.is_default = false; -- iter.unset (); -- this.remove_device (device); -- break; -- } -- break; -- } -- break; -- case Context.SubscriptionEventType.SERVER: -- ctx.get_server_info (this.get_server_info); -- break; -- default: break; -- } -- } -- -- /* -- * Getters -- */ -- -- /** -- * Gets called when any server value changes like default devices -- * Calls `get_card_info_list` and `get_sink_info_list` -- */ -- private void get_server_info (Context ctx, ServerInfo ? info) { -- if (this.default_sink_name == null) { -- this.default_sink_name = info.default_sink_name; -- } -- if (this.default_sink_name != info.default_sink_name) { -- this.default_sink_name = info.default_sink_name; -- } -- -- ctx.get_card_info_list (this.get_card_info); -- ctx.get_sink_info_list (this.get_sink_info); -- } -- -- private void get_card_info (Context ctx, CardInfo ? info, int eol) { -- if (info == null || eol != 0) return; -- -- unowned string ? description = info.proplist -- .gets ("device.description"); -- unowned string ? props_icon = info.proplist -- .gets ("device.icon_name"); -- -- PulseDevice[] ports = {}; -- foreach (var port in info.ports) { -- if (port->available == PortAvailable.NO) continue; -- -- bool is_input = port->direction == Direction.INPUT; -- HashMap devices = this.sinks; -- string id = PulseDevice.get_hash_map_key ( -- description, port.name); -- -- bool has_device = devices.has_key (id); -- PulseDevice device = has_device -- ? devices.get (id) : new PulseDevice (); -- bool device_is_removed = device.removed; -- device.removed = false; -- -- device.is_bluetooth = info.proplist.gets ("device.api") == "bluez5"; -- -- device.card_index = info.index; -- device.direction = port.direction; -- -- device.card_name = info.name; -- device.card_description = description; -- device.card_active_profile = info.active_profile2->name; -- -- device.port_name = port.name; -- device.port_description = port.description; -- device.port_id = port->proplist.gets ("card.profile.port"); -- -- // Get port profiles2 (profiles is "Superseded by profiles2") -- // and sort largest priority first -- var profiles = new ArrayList -- .wrap (port->profiles2); -- -- profiles.sort ((a, b) => { -- if (a->priority == b->priority) return 0; -- return a.priority > b.priority ? -1 : 1; -- }); -- string[] new_profiles = {}; -- Array pulse_profiles = new Array (); -- foreach (var profile in profiles) { -- new_profiles += profile->name; -- -- var card_profile = new PulseCardProfile (profile); -- pulse_profiles.append_val (card_profile); -- if (profile->name == device.card_active_profile) { -- device.active_profile = card_profile; -- } -- } -- device.port_profiles = new_profiles; -- device.profiles = pulse_profiles; -- -- device.icon_name = port->proplist.gets ("device.icon_name") -- ?? props_icon; -- if (device.icon_name == null) { -- device.icon_name = is_input -- ? "microphone-sensitivity-high" -- : "audio-speakers"; -- } -- devices.set (id, device); -- ports += device; -- if (!has_device || device_is_removed) { -- this.new_device (device); -- } -- } -- -- /** Removes ports that are no longer available */ -- var iter = sinks.map_iterator (); -- while (iter.next ()) { -- var device = iter.get_value (); -- if (device.card_index != info.index) continue; -- bool found = false; -- foreach (var p in ports) { -- if (device.get_current_hash_key () -- == p.get_current_hash_key ()) { -- found = true; -- break; -- } -- } -- if (!found) { -- iter.unset (); -- remove_device (device); -- break; -- } -- } -- } -- -- private void get_sink_info (Context ctx, SinkInfo ? info, int eol) { -- if (info == null || eol != 0) return; -- -- bool found = false; -- foreach (PulseDevice device in sinks.values) { -- if (device.card_index == info.card) { -- // Sets the name and index to profiles that aren't active -- // Ex: The HDMI audio port that's not active -- device.device_name = info.name; -- device.device_description = info.description; -- device.device_index = info.index; -- // If the current selected sink profile is this -- if (info.active_port != null -- && info.active_port->name == device.port_name) { -- found = true; -- -- device.card_sink_port_name = info.active_port->name; -- bool is_default = -- device.device_name == this.default_sink_name; -- device.is_default = is_default; -- -- device.is_muted = info.mute == 1; -- -- device.is_virtual = info.proplist.gets ("node.virtual") == "true"; -- -- device.cvolume = info.volume; -- device.channel_map = info.channel_map; -- device.balance = device.cvolume -- .get_balance (device.channel_map); -- device.volume_operations.foreach ((op) => { -- if (op.get_state () != Operation.State.RUNNING) { -- device.volume_operations.remove (op); -- } -- return Source.CONTINUE; -- }); -- if (device.volume_operations.is_empty) { -- device.volume = volume_to_double ( -- device.cvolume.max ()); -- } -- -- if (is_default) { -- this.default_sink = device; -- this.change_default_device (device); -- } -- } -- this.change_device (device); -- } -- } -- // If not found, it's a cardless device -- if (found) return; -- -- HashMap devices = this.sinks; -- string id = PulseDevice.get_hash_map_key ( -- info.index.to_string (), info.description); -- bool has_device = devices.has_key (id); -- PulseDevice device = has_device ? devices.get (id) : new PulseDevice (); -- -- bool device_is_removed = device.removed; -- device.removed = false; -- -- device.has_card = false; -- -- device.direction = PulseAudio.Direction.OUTPUT; -- -- device.device_name = info.name; -- device.device_description = info.description; -- device.device_index = info.index; -- -- bool is_default = device.device_name == this.default_source_name; -- device.is_default = is_default; -- -- device.is_muted = info.mute == 1; -- -- device.is_virtual = info.proplist.gets ("node.virtual") == "true"; -- -- device.icon_name = "application-x-executable-symbolic"; -- -- device.cvolume = info.volume; -- device.channel_map = info.channel_map; -- device.balance = device.cvolume -- .get_balance (device.channel_map); -- device.volume_operations.foreach ((op) => { -- if (op.get_state () != Operation.State.RUNNING) { -- device.volume_operations.remove (op); -- } -- return Source.CONTINUE; -- }); -- if (device.volume_operations.is_empty) { -- device.volume = volume_to_double ( -- device.cvolume.max ()); -- } -- -- devices.set (id, device); -- -- if (is_default) { -- this.default_sink = device; -- this.change_default_device (device); -- } -- if (!has_device || device_is_removed) { -- this.new_device (device); -- } -- this.change_device (device); -- } -- -- /* -- * Setters -- */ -- public void set_device_volume (PulseDevice device, double volume) { -- device.volume_operations.foreach ((operation) => { -- if (operation.get_state () == Operation.State.RUNNING) { -- operation.cancel (); -- } -- -- device.volume_operations.remove (operation); -- return GLib.Source.CONTINUE; -- }); -- -- var cvol = device.cvolume; -- cvol.scale (double_to_volume (volume)); -- Operation ? operation = null; -- if (device.direction == Direction.OUTPUT) { -- operation = context.set_sink_volume_by_name ( -- device.device_name, cvol); -- } -- -- if (operation != null) { -- device.volume_operations.add (operation); -- } -- } -- -- public async void set_default_device (PulseDevice device) { -- if (device == null) return; -- bool is_input = device.direction == Direction.INPUT; -- -- // Only set port and card profile if the device is attached to a card -- if (device.has_card) { -- // Gets the profile that includes support for your other device -- string profile_name = device.port_profiles[0]; -- PulseDevice alt_device = default_sink; -- if (alt_device != null) { -- foreach (var profile in device.port_profiles) { -- if (profile in alt_device.port_profiles) { -- profile_name = profile; -- break; -- } -- } -- } -- -- if (profile_name != device.card_active_profile) { -- yield set_card_profile_by_index (profile_name, device); -- yield wait_for_update (device, "device-name"); -- } -- -- if (!is_input) { -- if (device.port_name != device.card_sink_port_name) { -- debug ("Setting port to: %s", device.port_name); -- yield set_sink_port_by_name (device); -- } -- } -- -- if (device.device_name == null) { -- yield wait_for_update (device, "device-name"); -- } -- } -- -- if (!is_input) { -- if (device.device_name != default_sink_name) { -- debug ("Setting default sink to: %s", device.device_name); -- yield set_default_sink (device); -- } -- } -- } -- -- private async void wait_for_update (PulseDevice device, -- string prop_name) { -- SourceFunc callback = wait_for_update.callback; -- ulong handler_id = 0; -- handler_id = device.notify[prop_name].connect ((s, p) => { -- T prop_value; -- device.get (prop_name, out prop_value); -- if (prop_value != null) { -- device.disconnect (handler_id); -- Idle.add ((owned) callback); -- } -- }); -- yield; -- } -- -- public async void set_bluetooth_card_profile (PulseCardProfile profile, -- PulseDevice device) { -- context.set_card_profile_by_index (device.card_index, -- profile.name, -- (c, success) => { -- if (success == 1) { -- set_bluetooth_card_profile.callback (); -- } else { -- stderr.printf ("setting the card %s profile to %s failed\n", -- device.card_name, profile.name); -- } -- }); -- yield; -- // Wait until the device has been updated -- yield wait_for_update (device, "device-name"); -- } -- -- private async void set_card_profile_by_index (string profile_name, -- PulseDevice device) { -- context.set_card_profile_by_index (device.card_index, -- profile_name, -- (c, success) => { -- if (success == 1) { -- set_card_profile_by_index.callback (); -- } else { -- stderr.printf ("setting the card %s profile to %s failed\n", -- device.card_name, profile_name); -- } -- }); -- yield; -- } -- -- private async void set_sink_port_by_name (PulseDevice device) { -- context.set_sink_port_by_name (device.device_name, -- device.port_name, -- (c, success) => { -- if (success == 1) { -- set_sink_port_by_name.callback (); -- } else { -- stderr.printf ("setting sink port to %s failed\n", -- device.port_name); -- } -- }); -- yield; -- } -- -- private async void set_default_sink (PulseDevice device) { -- context.set_default_sink (device.device_name, (c, success) => { -- if (success == 1) { -- set_default_sink.callback (); -- } else { -- stderr.printf ("setting default sink to %s failed\n", -- device.device_name); -- } -- }); -- yield; -- } -- -- public void set_device_mute (bool state, PulseDevice device) { -- if (device.is_muted == state) return; -- if (device.direction == Direction.OUTPUT) { -- context.set_sink_mute_by_index ( -- device.device_index, state); -- } -- } -- -- // public void set_sink_input_mute (bool state, PulseSinkInput sink_input) { -- // if (sink_input.is_muted == state) return; -- // context.set_sink_input_mute (sink_input.index, state); -- // } -- -- /* -- * Volume utils -- */ -- -- private static double volume_to_double (PulseAudio.Volume vol) { -- double tmp = (double) (vol - PulseAudio.Volume.MUTED); -- return 100 * tmp / (double) (PulseAudio.Volume.NORM - PulseAudio.Volume.MUTED); -- } -- -- private static PulseAudio.Volume double_to_volume (double vol) { -- double tmp = (double) (PulseAudio.Volume.NORM - PulseAudio.Volume.MUTED) * vol / 100; -- return (PulseAudio.Volume) tmp + PulseAudio.Volume.MUTED; -- } -- } --} -diff --git a/src/controlCenter/widgets/volume/pulseDevice.vala b/src/controlCenter/widgets/volume/pulseDevice.vala -deleted file mode 100644 -index accb8dc..0000000 ---- a/src/controlCenter/widgets/volume/pulseDevice.vala -+++ /dev/null -@@ -1,135 +0,0 @@ --// From SwaySettings PulseAudio page: https://github.com/ErikReider/SwaySettings/blob/407c9e99dd3e50a0f09c64d94a9e6ff741488378/src/Pages/Pulse/PulseDevice.vala --using PulseAudio; --using Gee; -- --namespace SwayNotificationCenter.Widgets { -- public class PulseCardProfile : Object { -- public string name; -- public string description; -- public uint32 n_sinks; -- public uint32 priority; -- int available; -- -- public PulseCardProfile (CardProfileInfo2 * profile) { -- this.name = profile->name; -- this.description = profile->description; -- this.n_sinks = profile->n_sinks; -- this.priority = profile->priority; -- this.available = profile->available; -- } -- -- public bool cmp (PulseCardProfile profile) { -- return profile.name == name -- && profile.description == description -- && profile.n_sinks == n_sinks -- && profile.priority == priority -- && profile.available == available; -- } -- } -- -- public class PulseDevice : Object { -- -- public bool removed { get; set; default = false; } -- -- public bool has_card { get; set; default = true; } -- -- /** The card index: ex. `Card #49` */ -- public uint32 card_index { get; set; } -- /** Sink index: ex. `Sink #55` */ -- public uint32 device_index { get; set; } -- -- /** Input or Output */ -- public Direction direction { get; set; } -- -- /** Is default Sink */ -- public bool is_default { get; set; } -- /** If the device is virtual */ -- public bool is_virtual { get; set; default = false; } -- /** If the device is a bluetooth device */ -- public bool is_bluetooth { get; set; default = false; } -- -- /** The icon name: `device.icon_name` */ -- public string icon_name { get; set; } -- -- /** The card name: `Name` */ -- public string card_name { get; set; } -- /** The card description: `device.description` */ -- public string card_description { get; set; } -- /** The card active profile: `Active Profile` */ -- public string card_active_profile { get; set; } -- /** The card sink port name: `Active Port` */ -- public string card_sink_port_name { get; set; } -- -- /** The Sink name: `Name` */ -- public string ? device_name { get; set; } -- /** The Sink description: `Description` */ -- public string device_description { get; set; } -- /** If the Sink is muted: `Mute` */ -- public bool is_muted { get; set; } -- -- public double volume { get; set; } -- public float balance { get; set; default = 0; } -- public CVolume cvolume; -- public ChannelMap channel_map; -- public LinkedList volume_operations { get; set; } -- -- /** Gets the name to be shown to the user: -- * "port_description - card_description" -- */ -- public string ? get_display_name () { -- if (card_name == null) { -- return device_description; -- } -- string p_desc = port_description; -- string c_desc = card_description; -- return "%s - %s".printf (p_desc, c_desc); -- } -- -- /** Compares PulseDevices. Returns true if they're the same */ -- public bool cmp (PulseDevice device) { -- return device.card_index == card_index -- && device.device_index == device_index -- && device.device_name == device_name -- && device.device_description == device_description -- && device.is_default == is_default -- && device.removed == removed -- && device.card_active_profile == card_active_profile -- && device.port_name == port_name; -- } -- -- /** -- * Gets the name to be shown to the user: -- * If has card: "card_description:port_name" -- * If cardless: "device_index:device_description" -- */ -- public string get_current_hash_key () { -- if (card_name == null) { -- return get_hash_map_key (device_index.to_string (), -- device_description); -- } -- return get_hash_map_key (card_description, port_name); -- } -- -- /** Gets the name to be shown to the user: -- * "card_description:port_name" -- */ -- public static string get_hash_map_key (string c_desc, string p_name) { -- return string.joinv (":", new string[] { c_desc, p_name }); -- } -- -- /** The port name: `Name` */ -- public string port_name { get; set; } -- /** The port name: `Description` */ -- public string port_description { get; set; } -- /** The port name: `card.profile.port` */ -- public string port_id { get; set; } -- /** All port profiles */ -- public string[] port_profiles { get; set; } -- public Array profiles { get; set; } -- public PulseCardProfile ? active_profile { get; set; } -- -- construct { -- volume_operations = new LinkedList (); -- } -- } --} -diff --git a/src/controlCenter/widgets/volume/volume.vala b/src/controlCenter/widgets/volume/volume.vala -deleted file mode 100644 -index 4575921..0000000 ---- a/src/controlCenter/widgets/volume/volume.vala -+++ /dev/null -@@ -1,61 +0,0 @@ --namespace SwayNotificationCenter.Widgets { -- public class Volume : BaseWidget { -- public override string widget_name { -- get { -- return "volume"; -- } -- } -- -- Gtk.Label label_widget = new Gtk.Label (null); -- Gtk.Scale slider = new Gtk.Scale.with_range (Gtk.Orientation.HORIZONTAL, 0, 100, 1); -- -- private PulseDevice ? default_sink = null; -- private PulseDaemon client = new PulseDaemon (); -- -- construct { -- this.client.change_default_device.connect (default_device_changed); -- -- slider.value_changed.connect (() => { -- if (default_sink != null) { -- this.client.set_device_volume ( -- default_sink, -- (float) slider.get_value ()); -- slider.tooltip_text = ((int) slider.get_value ()).to_string (); -- } -- }); -- } -- -- -- public Volume (string suffix, SwayncDaemon swaync_daemon, NotiDaemon noti_daemon) { -- base (suffix, swaync_daemon, noti_daemon); -- -- Json.Object ? config = get_config (this); -- if (config != null) { -- string ? label = get_prop (config, "label"); -- label_widget.set_label (label ?? "Volume"); -- } -- -- slider.draw_value = false; -- -- add (label_widget); -- pack_start (slider, true, true, 0); -- -- show_all (); -- } -- -- public override void on_cc_visibility_change (bool val) { -- if (val) { -- this.client.start (); -- } else { -- this.client.close (); -- } -- } -- -- private void default_device_changed (PulseDevice device) { -- if (device != null && device.direction == PulseAudio.Direction.OUTPUT) { -- this.default_sink = device; -- slider.set_value (device.volume); -- } -- } -- } --} -diff --git a/src/meson.build b/src/meson.build -index 94a8e2f..2746db2 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -40,10 +40,6 @@ widget_sources = [ - 'controlCenter/widgets/menubar/menubar.vala', - # Widget: Buttons Grid - 'controlCenter/widgets/buttonsGrid/buttonsGrid.vala', -- # Widget: Volume -- 'controlCenter/widgets/volume/volume.vala', -- 'controlCenter/widgets/volume/pulseDaemon.vala', -- 'controlCenter/widgets/volume/pulseDevice.vala', - # Widget: Backlight Slider - 'controlCenter/widgets/backlight/backlight.vala', - 'controlCenter/widgets/backlight/backlightUtil.vala', -@@ -75,9 +71,6 @@ app_deps = [ - meson.get_compiler('c').find_library('gtk-layer-shell'), - meson.get_compiler('c').find_library('m', required : true), - meson.get_compiler('vala').find_library('posix'), -- dependency('gee-0.8'), -- dependency('libpulse'), -- dependency('libpulse-mainloop-glib'), - ] - - # Checks if the user wants scripting enabled -diff --git a/src/style.css b/src/style.css -index 96b84a4..b2c7ed6 100644 ---- a/src/style.css -+++ b/src/style.css -@@ -282,15 +282,6 @@ - background: transparent; - } - --/* Volume widget */ -- --.widget-volume { -- background-color: @noti-bg; -- padding: 8px; -- margin: 8px; -- border-radius: 12px; --} -- - /* Backlight widget */ - .widget-backlight { - background-color: @noti-bg; diff --git a/gui-apps/swaync/swaync-0.8.0.ebuild b/gui-apps/swaync/swaync-0.10.0.ebuild similarity index 80% rename from gui-apps/swaync/swaync-0.8.0.ebuild rename to gui-apps/swaync/swaync-0.10.0.ebuild index 2e76984ae1..bc7a7d08e5 100644 --- a/gui-apps/swaync/swaync-0.8.0.ebuild +++ b/gui-apps/swaync/swaync-0.10.0.ebuild @@ -17,15 +17,17 @@ KEYWORDS="~amd64 ~x86" IUSE="pulseaudio" DEPEND=" + dev-lang/sassc + dev-libs/granite + dev-libs/libgee dev-libs/glib:2 dev-libs/gobject-introspection dev-libs/json-glib pulseaudio? ( - dev-libs/libgee:= media-libs/libpulse ) dev-libs/wayland - >=gui-libs/gtk-layer-shell-0.7.0[introspection] + >=gui-libs/gtk-layer-shell-0.7.0[introspection,vala] gui-libs/libhandy:1 sys-apps/dbus x11-libs/gdk-pixbuf:2 @@ -37,8 +39,14 @@ BDEPEND=" app-text/scdoc " +src_configure() { + local emesonargs=( + $(meson_use pulseaudio pulse-audio) + ) + meson_src_configure +} + src_prepare() { - ! use pulseaudio && local PATCHES=( "${FILESDIR}"/${P}-pulsefree.patch ) default vala_setup }