diff --git a/MANIFEST.in b/MANIFEST.in
index ed4b5e5b1..81bf824b7 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -4,7 +4,7 @@ recursive-include qutebrowser/javascript *.js
graft tests
graft qutebrowser/html
graft qutebrowser/3rdparty
-graft icons
+graft qutebrowser/icons
graft doc/img
graft misc/apparmor
graft misc/userscripts
diff --git a/README.asciidoc b/README.asciidoc
index bb1f2562c..d1bb9ee98 100644
--- a/README.asciidoc
+++ b/README.asciidoc
@@ -7,7 +7,7 @@ qutebrowser
===========
// QUTE_WEB_HIDE
-image:icons/qutebrowser-64x64.png[qutebrowser logo] *A keyboard-driven, vim-like browser based on PyQt5 and Qt.*
+image:qutebrowser/icons/qutebrowser-64x64.png[qutebrowser logo] *A keyboard-driven, vim-like browser based on PyQt5 and Qt.*
image:https://github.com/qutebrowser/qutebrowser/workflows/CI/badge.svg["Build Status", link="https://github.com/qutebrowser/qutebrowser/actions?query=workflow%3ACI"]
image:https://codecov.io/github/qutebrowser/qutebrowser/coverage.svg?branch=master["coverage badge",link="https://codecov.io/github/qutebrowser/qutebrowser?branch=master"]
diff --git a/misc/Makefile b/misc/Makefile
index b916a20d5..0b021f305 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -24,7 +24,7 @@ install: man
"$(DESTDIR)$(MANDIR)/man1/qutebrowser.1"
install -Dm644 misc/org.qutebrowser.qutebrowser.desktop \
"$(DESTDIR)$(DATADIR)/applications/org.qutebrowser.qutebrowser.desktop"
- $(foreach i,$(ICONSIZES),install -Dm644 "icons/qutebrowser-$(i)x$(i).png" \
+ $(foreach i,$(ICONSIZES),install -Dm644 "qutebrowser/icons/qutebrowser-$(i)x$(i).png" \
"$(DESTDIR)$(DATADIR)/icons/hicolor/$(i)x$(i)/apps/qutebrowser.png";)
install -Dm644 icons/qutebrowser.svg \
"$(DESTDIR)$(DATADIR)/icons/hicolor/scalable/apps/qutebrowser.svg"
diff --git a/misc/qutebrowser.rcc b/misc/qutebrowser.rcc
deleted file mode 100644
index ffe9e47f6..000000000
--- a/misc/qutebrowser.rcc
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- ../icons/qutebrowser-16x16.png
- ../icons/qutebrowser-24x24.png
- ../icons/qutebrowser-32x32.png
- ../icons/qutebrowser-48x48.png
- ../icons/qutebrowser-64x64.png
- ../icons/qutebrowser-96x96.png
- ../icons/qutebrowser-128x128.png
- ../icons/qutebrowser-256x256.png
- ../icons/qutebrowser-512x512.png
-
-
diff --git a/misc/qutebrowser.spec b/misc/qutebrowser.spec
index ffb17d371..11eb11c7d 100644
--- a/misc/qutebrowser.spec
+++ b/misc/qutebrowser.spec
@@ -40,9 +40,9 @@ setupcommon.write_git_file()
if os.name == 'nt':
- icon = '../icons/qutebrowser.ico'
+ icon = '../qutebrowser/icons/qutebrowser.ico'
elif sys.platform == 'darwin':
- icon = '../icons/qutebrowser.icns'
+ icon = '../qutebrowser/icons/qutebrowser.icns'
else:
icon = None
diff --git a/qutebrowser/app.py b/qutebrowser/app.py
index 1ab28e8d0..663c33ffc 100644
--- a/qutebrowser/app.py
+++ b/qutebrowser/app.py
@@ -182,8 +182,9 @@ def _init_icon():
"""Initialize the icon of qutebrowser."""
fallback_icon = QIcon()
for size in [16, 24, 32, 48, 64, 96, 128, 256, 512]:
- filename = ':/icons/qutebrowser-{size}x{size}.png'.format(size=size)
- pixmap = QPixmap(filename)
+ filename = 'icons/qutebrowser-{size}x{size}.png'.format(size=size)
+ pixmap = QPixmap()
+ pixmap.loadFromData(resources.read_file_binary(filename))
if pixmap.isNull():
log.init.warning("Failed to load {}".format(filename))
else:
diff --git a/qutebrowser/browser/webengine/notification.py b/qutebrowser/browser/webengine/notification.py
index 69c702aec..2b77a5ac4 100644
--- a/qutebrowser/browser/webengine/notification.py
+++ b/qutebrowser/browser/webengine/notification.py
@@ -65,7 +65,9 @@ if TYPE_CHECKING:
from qutebrowser.config import config
from qutebrowser.misc import objects
-from qutebrowser.utils import qtutils, log, utils, debug, message, version, objreg
+from qutebrowser.utils import (
+ qtutils, log, utils, debug, message, version, objreg, resources,
+)
from qutebrowser.qt import sip
@@ -965,8 +967,8 @@ class DBusNotificationAdapter(AbstractNotificationAdapter):
icon = qt_notification.icon()
if icon.isNull():
- filename = ':/icons/qutebrowser-64x64.png'
- icon = QImage(filename)
+ filename = 'icons/qutebrowser-64x64.png'
+ icon = QImage.fromData(resources.read_file_binary(filename))
key = self._quirks.icon_key or "image-data"
data = self._convert_image(icon)
diff --git a/icons/qutebrowser-128x128.png b/qutebrowser/icons/qutebrowser-128x128.png
similarity index 100%
rename from icons/qutebrowser-128x128.png
rename to qutebrowser/icons/qutebrowser-128x128.png
diff --git a/icons/qutebrowser-16x16.png b/qutebrowser/icons/qutebrowser-16x16.png
similarity index 100%
rename from icons/qutebrowser-16x16.png
rename to qutebrowser/icons/qutebrowser-16x16.png
diff --git a/icons/qutebrowser-24x24.png b/qutebrowser/icons/qutebrowser-24x24.png
similarity index 100%
rename from icons/qutebrowser-24x24.png
rename to qutebrowser/icons/qutebrowser-24x24.png
diff --git a/icons/qutebrowser-256x256.png b/qutebrowser/icons/qutebrowser-256x256.png
similarity index 100%
rename from icons/qutebrowser-256x256.png
rename to qutebrowser/icons/qutebrowser-256x256.png
diff --git a/icons/qutebrowser-32x32.png b/qutebrowser/icons/qutebrowser-32x32.png
similarity index 100%
rename from icons/qutebrowser-32x32.png
rename to qutebrowser/icons/qutebrowser-32x32.png
diff --git a/icons/qutebrowser-48x48.png b/qutebrowser/icons/qutebrowser-48x48.png
similarity index 100%
rename from icons/qutebrowser-48x48.png
rename to qutebrowser/icons/qutebrowser-48x48.png
diff --git a/icons/qutebrowser-512x512.png b/qutebrowser/icons/qutebrowser-512x512.png
similarity index 100%
rename from icons/qutebrowser-512x512.png
rename to qutebrowser/icons/qutebrowser-512x512.png
diff --git a/icons/qutebrowser-64x64.png b/qutebrowser/icons/qutebrowser-64x64.png
similarity index 100%
rename from icons/qutebrowser-64x64.png
rename to qutebrowser/icons/qutebrowser-64x64.png
diff --git a/icons/qutebrowser-96x96.png b/qutebrowser/icons/qutebrowser-96x96.png
similarity index 100%
rename from icons/qutebrowser-96x96.png
rename to qutebrowser/icons/qutebrowser-96x96.png
diff --git a/icons/qutebrowser-all.svg b/qutebrowser/icons/qutebrowser-all.svg
similarity index 100%
rename from icons/qutebrowser-all.svg
rename to qutebrowser/icons/qutebrowser-all.svg
diff --git a/icons/qutebrowser-favicon.svg b/qutebrowser/icons/qutebrowser-favicon.svg
similarity index 100%
rename from icons/qutebrowser-favicon.svg
rename to qutebrowser/icons/qutebrowser-favicon.svg
diff --git a/icons/qutebrowser.icns b/qutebrowser/icons/qutebrowser.icns
similarity index 100%
rename from icons/qutebrowser.icns
rename to qutebrowser/icons/qutebrowser.icns
diff --git a/icons/qutebrowser.ico b/qutebrowser/icons/qutebrowser.ico
similarity index 100%
rename from icons/qutebrowser.ico
rename to qutebrowser/icons/qutebrowser.ico
diff --git a/icons/qutebrowser.svg b/qutebrowser/icons/qutebrowser.svg
similarity index 100%
rename from icons/qutebrowser.svg
rename to qutebrowser/icons/qutebrowser.svg
diff --git a/icons/qutebrowser.xpm b/qutebrowser/icons/qutebrowser.xpm
similarity index 100%
rename from icons/qutebrowser.xpm
rename to qutebrowser/icons/qutebrowser.xpm
diff --git a/scripts/asciidoc2html.py b/scripts/asciidoc2html.py
index 0a6912b82..6b4e3fb0d 100755
--- a/scripts/asciidoc2html.py
+++ b/scripts/asciidoc2html.py
@@ -196,7 +196,11 @@ class AsciiDoc:
continue
self._build_website_file(item_path.parent, item_path.name)
- copy = {'icons': 'icons', 'doc/img': 'doc/img', 'www/media': 'media/'}
+ copy = {
+ 'qutebrowser/icons': 'icons',
+ 'doc/img': 'doc/img',
+ 'www/media': 'media/',
+ }
for src, dest in copy.items():
full_src = REPO_ROOT / src
diff --git a/scripts/dev/gen_resources.py b/scripts/dev/gen_resources.py
deleted file mode 100644
index efa6c6a3d..000000000
--- a/scripts/dev/gen_resources.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python3
-# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
-
-# Copyright 2014-2021 Florian Bruhin (The-Compiler)
-
-# this file is part of qutebrowser.
-#
-# qutebrowser is free software: you can redistribute it and/or modify
-# it under the terms of the gnu general public license as published by
-# the free software foundation, either version 3 of the license, or
-# (at your option) any later version.
-#
-# qutebrowser is distributed in the hope that it will be useful,
-# but without any warranty; without even the implied warranty of
-# merchantability or fitness for a particular purpose. see the
-# gnu general public license for more details.
-#
-# you should have received a copy of the gnu general public license
-# along with qutebrowser. If not, see .
-
-"""Generate Qt resources based on source files."""
-
-import subprocess
-import pathlib
-
-ROOT = pathlib.Path(__file__).parents[2]
-OUTPUT = ROOT / 'qutebrowser' / 'resources.py'
-INPUT = ROOT / 'misc' / 'qutebrowser.rcc'
-
-subprocess.run(['pyrcc5', '-o', str(OUTPUT), str(INPUT)], check=True)
diff --git a/tests/end2end/fixtures/webserver_sub.py b/tests/end2end/fixtures/webserver_sub.py
index 6a4b249c2..392fbe43f 100644
--- a/tests/end2end/fixtures/webserver_sub.py
+++ b/tests/end2end/fixtures/webserver_sub.py
@@ -294,7 +294,7 @@ def view_user_agent():
def favicon():
# WORKAROUND for https://github.com/PyCQA/pylint/issues/5783
# pylint: disable-next=no-member,useless-suppression
- icon_dir = END2END_DIR.parents[1] / 'icons'
+ icon_dir = END2END_DIR.parents[1] / 'qutebrowser' / 'icons'
return flask.send_from_directory(
icon_dir, 'qutebrowser.ico', mimetype='image/vnd.microsoft.icon')