diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8440e5..d4458c7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,13 @@ Every release of Effector, newest first. The version lives in one place, the
`project()` line of `CMakeLists.txt`, and each release is a `vX.Y.Z` tag on the
commit that made it. The interface shows this file under Changelog in its menu.
+## [0.5.3] - 2026-09-26
+
+### Added
+- Effector has its own icon, an E split into its colour channels, in the app
+ menu, the dock and About Effector; a one-colour version goes with it for
+ panels.
+
## [0.5.2] - 2026-09-26
### Changed
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d940029..4e4af18 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.20)
-project(effector VERSION 0.5.2 LANGUAGES CXX)
+project(effector VERSION 0.5.3 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -70,6 +70,9 @@ add_library(effector_gui STATIC
)
target_link_libraries(effector_gui PUBLIC effector_core PkgConfig::GTKMM)
target_compile_options(effector_gui PRIVATE -Wall -Wextra -Wpedantic)
+# Where a build that was never installed finds its own icon (see app.cpp).
+target_compile_definitions(effector_gui PRIVATE
+ EFFECTOR_SOURCE_ICON_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data/icons")
# --- application --------------------------------------------------------------
add_executable(effector src/main.cpp)
@@ -79,6 +82,8 @@ target_compile_options(effector PRIVATE -Wall -Wextra -Wpedantic)
install(TARGETS effector RUNTIME DESTINATION bin)
# The launcher entry, so the interface shows up in the desktop's app menu.
install(FILES data/org.effector.Effector.desktop DESTINATION share/applications)
+# The icon it names, in full colour and as a one-colour symbolic for panels.
+install(DIRECTORY data/icons/hicolor DESTINATION share/icons)
# --- tests --------------------------------------------------------------------
include(CTest)
diff --git a/data/icons/hicolor/scalable/apps/org.effector.Effector.svg b/data/icons/hicolor/scalable/apps/org.effector.Effector.svg
new file mode 100644
index 0000000..e35d808
--- /dev/null
+++ b/data/icons/hicolor/scalable/apps/org.effector.Effector.svg
@@ -0,0 +1,52 @@
+
diff --git a/data/icons/hicolor/symbolic/apps/org.effector.Effector-symbolic.svg b/data/icons/hicolor/symbolic/apps/org.effector.Effector-symbolic.svg
new file mode 100644
index 0000000..1be1541
--- /dev/null
+++ b/data/icons/hicolor/symbolic/apps/org.effector.Effector-symbolic.svg
@@ -0,0 +1,10 @@
+
diff --git a/data/org.effector.Effector.desktop b/data/org.effector.Effector.desktop
index 0e5ff3b..9291f53 100644
--- a/data/org.effector.Effector.desktop
+++ b/data/org.effector.Effector.desktop
@@ -4,7 +4,7 @@ Name=Effector
GenericName=Image Effects
Comment=Cascade glitch and collage effects over your photographs
Exec=effector %F
-Icon=applications-graphics
+Icon=org.effector.Effector
Terminal=false
Categories=Graphics;2DGraphics;RasterGraphics;GTK;
MimeType=image/jpeg;image/png;image/webp;image/tiff;image/bmp;
diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD
index 3b5e066..9390d56 100644
--- a/packaging/arch/PKGBUILD
+++ b/packaging/arch/PKGBUILD
@@ -2,7 +2,7 @@
# so pkgver must follow the project() line of CMakeLists.txt (the version core
# test checks it). From this folder: makepkg -si
pkgname=effector
-pkgver=0.5.2
+pkgver=0.5.3
pkgrel=1
pkgdesc='Image effects app: a GTK4 interface and a headless CLI over pluggable effects'
arch=('x86_64' 'aarch64')
diff --git a/src/gui/app.cpp b/src/gui/app.cpp
index 8a3b4db..32c108c 100644
--- a/src/gui/app.cpp
+++ b/src/gui/app.cpp
@@ -13,6 +13,14 @@ int runGui(const Options& initial, int argc, char** argv) {
auto app = Gtk::Application::create("org.effector.Effector",
Gio::Application::Flags::NON_UNIQUE);
+ app->signal_startup().connect([] {
+ // An installed Effector finds its icon in the hicolor theme; one run
+ // straight from the build tree falls back to the copy in the sources.
+ const char* icon = "org.effector.Effector";
+ auto theme = Gtk::IconTheme::get_for_display(Gdk::Display::get_default());
+ if (!theme->has_icon(icon)) theme->add_search_path(EFFECTOR_SOURCE_ICON_DIR);
+ Gtk::Window::set_default_icon_name(icon);
+ });
return app->make_window_and_run(0, nullptr, initial);
}
diff --git a/src/gui/window.cpp b/src/gui/window.cpp
index ac2d50c..c259e83 100644
--- a/src/gui/window.cpp
+++ b/src/gui/window.cpp
@@ -2220,7 +2220,7 @@ void EffectorWindow::showAbout() {
aboutDialog_->set_program_name("Effector");
aboutDialog_->set_version(std::string(kVersion));
aboutDialog_->set_comments("Image effects, cascaded through a chain.");
- aboutDialog_->set_logo_icon_name("applications-graphics");
+ aboutDialog_->set_logo_icon_name("org.effector.Effector");
aboutDialog_->set_copyright("Copyright © 2026 Si");
aboutDialog_->set_license_type(Gtk::License::GPL_3_0);
}