Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
cabb09d
Bump deps
danirabbit May 16, 2025
efc605f
Merge branch 'master' into danirabbit/gtk4
danirabbit May 22, 2025
c24c8d9
Merge branch 'master' into danirabbit/gtk4
danirabbit May 22, 2025
666e3e8
Merge branch 'master' into danirabbit/gtk4
danirabbit May 22, 2025
f811cf8
Merge branch 'master' into danirabbit/gtk4
danirabbit May 23, 2025
b0b7630
DisplayWidget: multipress → Click
danirabbit May 23, 2025
aac1ccc
Merge branch 'master' into danirabbit/gtk4
danirabbit Aug 12, 2025
8e8707d
Comment out scroll events
danirabbit Aug 12, 2025
a4f11d3
provider for display
danirabbit Aug 12, 2025
dcbe7c7
Get close to able to compile
danirabbit Aug 12, 2025
f04f57d
Merge master
danirabbit Mar 11, 2026
ef67495
Fix bad merge
danirabbit Mar 11, 2026
6fa8af1
CanberraGtk4
danirabbit Mar 11, 2026
d7f25e5
Bump to wingpanel 9
danirabbit Mar 11, 2026
12b4682
Scroll controllers
danirabbit Mar 17, 2026
8d67861
More scroll controller
danirabbit Mar 17, 2026
6ea5056
Merge master
danirabbit Mar 19, 2026
1a95639
Update style classes
danirabbit Mar 19, 2026
337ebda
Remove image mask
danirabbit Mar 19, 2026
35df3ae
Remove extra destroys
danirabbit Mar 19, 2026
c5687b3
Merge branch 'master' into danirabbit/gtk4
danirabbit Apr 14, 2026
bebde74
Fix device list hexpand
danirabbit Apr 14, 2026
ccbbfed
remove unused canberragtk dep
danirabbit Apr 14, 2026
0f1615c
Remove canberragtk4 dep
danirabbit Apr 14, 2026
837a1fa
Remove canberragtk4 dep from README
danirabbit Apr 14, 2026
47e7445
See if this fixes compilation
danirabbit Apr 14, 2026
ff571c5
nope
danirabbit Apr 14, 2026
07c07f9
Merge branch 'master' into danirabbit/gtk4
ryonakano Jul 27, 2026
7c167bf
Fix build failing when defining signals with Gdk.ScrollEvent (#329)
ryonakano Jul 28, 2026
47db698
Fix missing player controls (#331)
ryonakano Aug 14, 2026
1bce5ff
Update meson.build
danirabbit Aug 19, 2026
eb3e527
Update src/CanberraGtk4.vala
danirabbit Aug 19, 2026
32e2b4b
README: Update dependencies
ryonakano Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- name: Install Dependencies
run: |
apt update
apt install -y libcanberra-gtk3-dev libgranite-dev libglib2.0-dev libgtk-3-dev libnotify-dev libpulse-dev libwingpanel-dev libxml2-utils meson valac
apt install -y libgranite-7-dev libglib2.0-dev libgtk-4-dev libnotify-dev libpulse-dev libwingpanel-9-dev libxml2-utils meson valac
- name: Build
env:
DESTDIR: out
Expand Down
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@

You'll need the following dependencies:

libcanberra-gtk-dev
libcanberra-gtk3-dev
libgranite-dev
libgranite-7-dev >= 7.7.0
libglib2.0-dev
libgtk-3-dev
libgtk-4-dev
libnotify-dev
libpulse-dev
libwingpanel-dev
libwingpanel-9-dev
meson (>= 0.57.0)
valac (>= 0.26)

Expand Down
1 change: 0 additions & 1 deletion data/gresource.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/io/elementary/wingpanel/sound">
<file compressed="true" preprocess="xml-stripblanks">image-mask.svg</file>
<file alias="indicator.css" compressed="true">indicator.css</file>
</gresource>
<gresource prefix="/org/elementary/wingpanel/icons">
Expand Down
235 changes: 0 additions & 235 deletions data/image-mask.svg

This file was deleted.

10 changes: 6 additions & 4 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ gresource = gnome.compile_resources(
source_dir: 'data'
)

wingpanel_dep = dependency('wingpanel', version: '>=2.1.0')
wingpanel_dep = dependency('wingpanel-9')
wingpanel_indicatorsdir = wingpanel_dep.get_pkgconfig_variable('indicatorsdir', define_variable: ['libdir', libdir])

config_data = configuration_data()
Expand All @@ -43,6 +43,7 @@ config_file = configure_file(
shared_module(
meson.project_name(),
config_file,
'src/CanberraGtk4.vala',
'src/Device.vala',
'src/Indicator.vala',
'src/Widgets/DisplayWidget.vala',
Expand All @@ -63,13 +64,14 @@ shared_module(
dependency('glib-2.0'),
dependency('gio-2.0'),
dependency('gobject-2.0'),
dependency('granite', version: '>=6.0.0'),
dependency('gtk+-3.0'),
dependency('granite-7', version: '>=7.7.0'),
dependency('gtk4'),
dependency('gtk4-wayland'),
dependency('gtk4-x11'),
dependency('libpulse'),
dependency('libpulse-mainloop-glib'),
dependency('libnotify'),
dependency('libcanberra'),
dependency('libcanberra-gtk3'),
meson.get_compiler('vala').find_library('libpulse-ext', dirs: join_paths(meson.source_root(), 'vapi')),
wingpanel_dep
],
Expand Down
82 changes: 82 additions & 0 deletions src/CanberraGtk4.vala
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* Copyright 2022 elementary, Inc. (https://elementary.io)
* SPDX-License-Identifier: GPL-3.0-or-later
*/

/* code adapted from libcanberra */

namespace CanberraGtk4 {
private Canberra.Context? context = null;

public unowned Canberra.Context? context_get () {
Canberra.Proplist proplist;

if (context != null) {
return context;
}

if (Canberra.Context.create (out context) != Canberra.SUCCESS) {
return null;
}

if (Canberra.Proplist.create (out proplist) != Canberra.SUCCESS) {
return null;
}
Comment thread
danirabbit marked this conversation as resolved.

proplist.sets (Canberra.PROP_CANBERRA_XDG_THEME_NAME, Gtk.Settings.get_default ().gtk_sound_theme_name);

unowned var name = GLib.Environment.get_application_name ();
if (name != null) {
proplist.sets (Canberra.PROP_APPLICATION_NAME, name);
} else {
proplist.sets (Canberra.PROP_APPLICATION_NAME, "libcanberra-gtk");
proplist.sets (Canberra.PROP_APPLICATION_VERSION, "%i.%i".printf (Canberra.MAJOR, Canberra.MINOR));
proplist.sets (Canberra.PROP_APPLICATION_ID, "org.freedesktop.libcanberra.gtk");
}

unowned var icon = Gtk.Window.get_default_icon_name ();
if (icon != null) {
proplist.sets (Canberra.PROP_APPLICATION_ICON_NAME, icon);
}

unowned var display = Gdk.Display.get_default ();
if (display is Gdk.X11.Display) {
unowned var display_name = display.get_name ();
if (display_name != null) {
proplist.sets (Canberra.PROP_WINDOW_X11_SCREEN, display_name);
}

var screen = "%i".printf (((Gdk.X11.Display) display).get_screen ().get_screen_number ());
proplist.sets (Canberra.PROP_WINDOW_X11_SCREEN, screen);
}

context.change_props_full (proplist);

var val = Value (typeof (string));
if (display.get_setting ("gtk-sound-theme-name", val)) {
context.change_props (Canberra.PROP_CANBERRA_XDG_THEME_NAME, val.get_string ());
}

val = Value (typeof (bool));
if (display.get_setting ("gtk-enable-event-sounds", val)) {
unowned var env = GLib.Environment.get_variable ("CANBERRA_FORCE_EVENT_SOUNDS");
context.change_props (Canberra.PROP_CANBERRA_ENABLE, env != null ? true : val.get_boolean ());
}

display.setting_changed.connect ((setting) => {
Value new_val;
if (setting == "gtk-sound-theme-name") {
new_val = Value (typeof (string));
display.get_setting ("gtk-sound-theme-name", new_val);
context.change_props (Canberra.PROP_CANBERRA_ENABLE, new_val.get_string ());
} else if (setting == "gtk-enable-event-sounds") {
new_val = Value (typeof (bool));
unowned var env = GLib.Environment.get_variable ("CANBERRA_FORCE_EVENT_SOUNDS");
display.get_setting ("gtk-enable-event-sounds", new_val);
context.change_props (Canberra.PROP_CANBERRA_ENABLE, env != null ? true : new_val.get_boolean ());
}
});

return context;
}
}
Loading
Loading