diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index b6cc470b..c5359871 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -8,7 +8,9 @@ jobs:
container: alpine:latest
steps:
- run: echo 'http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories
- - run: apk --no-cache add git g++ binutils pkgconf meson ninja musl-dev gtk+3.0-dev gtkmm3-dev wayland-protocols wayfire-dev gtk-layer-shell-dev pulseaudio-dev libdbusmenu-gtk3-dev alsa-lib-dev
+ - run: apk --no-cache add git g++ binutils pkgconf meson ninja musl-dev gtk4.0-dev gtkmm4-dev vala gobject-introspection gobject-introspection-dev wayland-protocols wayfire-dev pulseaudio-dev libdbusmenu-glib-dev alsa-lib-dev
+ - run: echo 'http://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
+ - run: apk --no-cache add gtk4-layer-shell-dev
- name: wf-shell
uses: actions/checkout@v2
with:
diff --git a/.gitmodules b/.gitmodules
index 03ef7c62..0e49778e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,9 +1,9 @@
-[submodule "subprojects/gtk-layer-shell"]
- path = subprojects/gtk-layer-shell
- url = https://github.com/wmww/gtk-layer-shell
[submodule "subprojects/gvc"]
path = subprojects/gvc
url = https://github.com/GNOME/libgnome-volume-control
[submodule "subprojects/wayland-logout"]
path = subprojects/wayland-logout
url = https://github.com/soreau/wayland-logout
+[submodule "subprojects/gtk4-layer-shell"]
+ path = subprojects/gtk4-layer-shell
+ url = https://github.com/wmww/gtk4-layer-shell.git
diff --git a/README.md b/README.md
index fb500c59..e8b5d5fe 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Currently it has only a GTK-based panel and background client.
# Dependencies
-wf-shell needs the core wayland libraries and protocols (`wayland-devel` and `wayland-protocols-devel` for Fedora), gtkmm-3.0 and [wf-config](https://github.com/WayfireWM/wf-config)
+wf-shell needs the core wayland libraries and protocols (`wayland-devel` and `wayland-protocols-devel` for Fedora), gtkmm-4.0 and [wf-config](https://github.com/WayfireWM/wf-config)
# Build
diff --git a/data/css/default.css b/data/css/default.css
index fb09b080..c07530e8 100644
--- a/data/css/default.css
+++ b/data/css/default.css
@@ -59,4 +59,100 @@
.wf-panel .command-output.icon-bottom label {
padding-bottom: 5px;
+}
+
+.excellent {
+ color: #00ff00;
+}
+
+.good {
+ color: #88ff00;
+}
+
+.ok {
+ color: #ffff00;
+}
+
+.weak {
+ color: #ff8800;
+}
+
+.none {
+ color: #ff0000;
+}
+
+.wf-dock,
+.wf-dock .out-box {
+ background: transparent;
+}
+
+.wf-dock .box {
+ padding-left: 1em;
+ padding-right: 1em;
+ border-radius: 1em;
+}
+
+.wf-dock image {
+ transition: 200ms;
+ -gtk-icon-transform: scale(1.0);
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+.wf-dock image:hover {
+ transition: 200ms;
+ -gtk-icon-transform: scale(1.3);
+ padding-left: 2rem;
+ padding-right: 2rem;
+}
+
+.wf-dock .minimized image {
+ -gtk-icon-filter: grayscale(1);
+}
+
+.wf-dock image {
+ animation-name: embiggen;
+ animation-duration: 1000ms;
+ animation-timing-function: linear;
+ animation-iteration-count: 1;
+}
+
+.wf-dock .closing image {
+ animation-name: kromulent;
+ animation-duration: 1000ms;
+ animation-timing-function: linear;
+ animation-iteration-count: 1;
+ animation-fill-mode: forwards;
+}
+
+@keyframes embiggen {
+ to {
+ -gtk-icon-size: 64px;
+ -gtk-icon-transform: translateY(0px);
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+
+ from {
+ -gtk-icon-size: 0px;
+ -gtk-icon-transform: translateY(64px);
+ padding-left: 0rem;
+ padding-right: 0rem;
+ }
+}
+
+@keyframes kromulent {
+ from {
+ -gtk-icon-size: 64px;
+ -gtk-icon-transform: translateY(0px);
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+
+ to {
+ -gtk-icon-size: 0px;
+ -gtk-icon-transform: translateY(64px);
+ padding-left: 0rem;
+ padding-right: 0rem;
+ }
}
\ No newline at end of file
diff --git a/meson.build b/meson.build
index 147c4e35..d026d85d 100644
--- a/meson.build
+++ b/meson.build
@@ -1,51 +1,55 @@
project(
'wf-shell',
- 'c',
+ 'c',
'cpp',
version: '0.10.0',
license: 'MIT',
meson_version: '>=0.51.0',
default_options: [
'cpp_std=c++17',
- 'c_std=c11',
+ 'c_std=c11',
'warning_level=2',
'werror=false',
],
)
-wayfire = dependency('wayfire')
+wayfire = dependency('wayfire')
wayland_client = dependency('wayland-client')
wayland_protos = dependency('wayland-protocols')
-gtkmm = dependency('gtkmm-3.0', version: '>=3.24')
-wfconfig = dependency('wf-config', version: '>=0.7.0') #TODO fallback submodule
-gtklayershell = dependency('gtk-layer-shell-0', version: '>= 0.6', fallback: ['gtk-layer-shell', 'gtk_layer_shell'])
-libpulse = dependency('libpulse', required : get_option('pulse'))
-dbusmenu_gtk = dependency('dbusmenu-gtk3-0.4')
-libgvc = subproject('gvc', default_options: ['static=true'], required : get_option('pulse'))
+gtkmm = dependency('gtkmm-4.0', version: '>=4.12')
+wfconfig = dependency('wf-config', version: '>=0.7.0') #TODO fallback submodule
+epoxy = dependency('epoxy')
+gtklayershell = dependency('gtk4-layer-shell')
+libpulse = dependency('libpulse', required: get_option('pulse'))
+dbusmenu_gtk = dependency('dbusmenu-glib-0.4')
+libgvc = subproject('gvc', default_options: ['static=true'], required: get_option('pulse'))
if get_option('wayland-logout') == true
- wayland_logout = subproject('wayland-logout')
+ wayland_logout = subproject('wayland-logout')
endif
if libpulse.found()
- libgvc = libgvc.get_variable('libgvc_dep')
- add_project_arguments('-DHAVE_PULSE=1', language : 'cpp')
+ libgvc = libgvc.get_variable('libgvc_dep')
+ add_project_arguments('-DHAVE_PULSE=1', language: 'cpp')
endif
needs_libinotify = ['freebsd', 'dragonfly'].contains(host_machine.system())
-libinotify = dependency('libinotify', required: needs_libinotify)
+libinotify = dependency('libinotify', required: needs_libinotify)
-add_project_arguments(['-Wno-pedantic', '-Wno-unused-parameter', '-Wno-parentheses'], language: 'cpp')
+add_project_arguments(
+ ['-Wno-pedantic', '-Wno-unused-parameter', '-Wno-parentheses'],
+ language: 'cpp',
+)
resource_dir = join_paths(get_option('prefix'), 'share', 'wayfire')
metadata_dir = join_paths(resource_dir, 'metadata', 'wf-shell')
sysconf_dir = join_paths(get_option('prefix'), get_option('sysconfdir'))
icon_dir = join_paths(get_option('prefix'), 'share', 'wayfire', 'icons')
-add_project_arguments('-DICONDIR="' + icon_dir + '"', language : 'cpp')
-add_project_arguments('-DRESOURCEDIR="' + resource_dir + '"', language : 'cpp')
-add_project_arguments('-DMETADATA_DIR="' + metadata_dir + '"', language : 'cpp')
-add_project_arguments('-DSYSCONF_DIR="' + sysconf_dir + '"', language : 'cpp')
+add_project_arguments('-DICONDIR="' + icon_dir + '"', language: 'cpp')
+add_project_arguments('-DRESOURCEDIR="' + resource_dir + '"', language: 'cpp')
+add_project_arguments('-DMETADATA_DIR="' + metadata_dir + '"', language: 'cpp')
+add_project_arguments('-DSYSCONF_DIR="' + sysconf_dir + '"', language: 'cpp')
subdir('metadata')
subdir('proto')
diff --git a/meson_options.txt b/meson_options.txt
index 22ccddad..aca93f47 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,2 +1,12 @@
-option('pulse', type: 'feature', value: 'auto', description: 'Build pulseaudio volume widget')
-option('wayland-logout', type: 'boolean', value: 'true', description: 'Install wayland-logout')
+option(
+ 'pulse',
+ type: 'feature',
+ value: 'auto',
+ description: 'Build pulseaudio volume widget',
+)
+option(
+ 'wayland-logout',
+ type: 'boolean',
+ value: true,
+ description: 'Install wayland-logout',
+)
\ No newline at end of file
diff --git a/metadata/dock.xml b/metadata/dock.xml
index 1c74e047..3451c111 100644
--- a/metadata/dock.xml
+++ b/metadata/dock.xml
@@ -40,5 +40,10 @@
<_long>The distance from the cursor to the edge of screen to show the panel when it's hidden.
20
+
diff --git a/metadata/panel.xml b/metadata/panel.xml
index 2fbb3598..bfe391f0 100644
--- a/metadata/panel.xml
+++ b/metadata/panel.xml
@@ -351,6 +351,11 @@ Set to -1 to only run it by clicking the button.
<_short>Middle Click Closes Windows
false
+
diff --git a/src/background/background.cpp b/src/background/background.cpp
index 81ebec83..759a54d7 100644
--- a/src/background/background.cpp
+++ b/src/background/background.cpp
@@ -1,11 +1,9 @@
#include
#include
-#include
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
#include
#include
@@ -14,154 +12,297 @@
#include