From b0a68ea0deaba0b02133df6e99a413b85a98d09b Mon Sep 17 00:00:00 2001
From: Jonathan White <support@dmapps.us>
Date: Sat, 3 Sep 2022 09:17:18 -0400
Subject: [PATCH] Improve various application icons

---
 COPYING                                       | 31 +++++++++++++++++--
 .../scalable/actions/attributes-copy.svg      |  1 +
 .../scalable/actions/database-search.svg      |  1 +
 .../application/scalable/actions/qrcode.svg   |  1 +
 .../scalable/actions/tag-multiple.svg         |  1 +
 .../scalable/actions/totp-copy.svg            |  1 +
 .../scalable/actions/totp-edit.svg            |  1 +
 .../actions/{chronometer.svg => totp.svg}     |  0
 share/icons/icons.qrc                         |  8 ++++-
 src/autotype/AutoTypeSelectDialog.cpp         |  2 +-
 src/gui/EntryPreviewWidget.cpp                |  2 +-
 src/gui/MainWindow.cpp                        |  7 +++++
 src/gui/entry/EntryModel.cpp                  |  4 +--
 13 files changed, 53 insertions(+), 7 deletions(-)
 create mode 100644 share/icons/application/scalable/actions/attributes-copy.svg
 create mode 100644 share/icons/application/scalable/actions/database-search.svg
 create mode 100644 share/icons/application/scalable/actions/qrcode.svg
 create mode 100644 share/icons/application/scalable/actions/tag-multiple.svg
 create mode 100644 share/icons/application/scalable/actions/totp-copy.svg
 create mode 100644 share/icons/application/scalable/actions/totp-edit.svg
 rename share/icons/application/scalable/actions/{chronometer.svg => totp.svg} (100%)

diff --git a/COPYING b/COPYING
index 35cfc1b1e..4325e067b 100644
--- a/COPYING
+++ b/COPYING
@@ -144,10 +144,24 @@ Files: share/icons/badges/2_Expired.svg
 Copyright: 2022 KeePassXC Team <team@keepassxc.org>
 License: MIT
 
-Files: share/icons/application/scalable/actions/chevron-double-down.svg
+Files: share/icons/application/scalable/actions/application-exit.svg
+       share/icons/application/scalable/actions/attributes-copy.svg
+       share/icons/application/scalable/actions/auto-type.svg
+       share/icons/application/scalable/actions/bugreport.svg
+       share/icons/application/scalable/actions/chevron-double-down.svg
        share/icons/application/scalable/actions/chevron-double-right.svg
+       share/icons/application/scalable/actions/totp.svg
+       share/icons/application/scalable/actions/totp-copy.svg
+       share/icons/application/scalable/actions/totp-edit.svg
+       share/icons/application/scalable/actions/clipboard-text.svg
+       share/icons/application/scalable/actions/configure.svg
+       share/icons/application/scalable/actions/database-change-key.svg
        share/icons/application/scalable/actions/database-lock.svg
        share/icons/application/scalable/actions/database-lock-all.svg
+       share/icons/application/scalable/actions/database-merge.svg
+       share/icons/application/scalable/actions/database-search.svg
+       share/icons/application/scalable/actions/dialog-close.svg
+       share/icons/application/scalable/actions/dialog-ok.svg
        share/icons/application/scalable/actions/document-close.svg
        share/icons/application/scalable/actions/document-edit.svg
        share/icons/application/scalable/actions/document-export.svg
@@ -159,43 +173,56 @@ Files: share/icons/application/scalable/actions/chevron-double-down.svg
        share/icons/application/scalable/actions/document-save.svg
        share/icons/application/scalable/actions/document-save-as.svg
        share/icons/application/scalable/actions/document-save-copy.svg
+       share/icons/application/scalable/actions/donate.svg
        share/icons/application/scalable/actions/edit-clear-locationbar-ltr.svg
        share/icons/application/scalable/actions/edit-clear-locationbar-rtl.svg
        share/icons/application/scalable/actions/entry-clone.svg
        share/icons/application/scalable/actions/entry-delete.svg
+       share/icons/application/scalable/actions/entry-restore.svg
        share/icons/application/scalable/actions/entry-edit.svg
        share/icons/application/scalable/actions/entry-new.svg
        share/icons/application/scalable/actions/favicon-download.svg
        share/icons/application/scalable/actions/fingerprint.svg
-       share/icons/application/scalable/actions/group-clone.svg
+       share/icons/application/scalable/actions/getting-started.svg
        share/icons/application/scalable/actions/group-delete.svg
        share/icons/application/scalable/actions/group-edit.svg
+       share/icons/application/scalable/actions/group-clone.svg
        share/icons/application/scalable/actions/group-empty-trash.svg
        share/icons/application/scalable/actions/group-new.svg
        share/icons/application/scalable/actions/hammer-wrench.svg
        share/icons/application/scalable/actions/health.svg
        share/icons/application/scalable/actions/help-about.svg
        share/icons/application/scalable/actions/lock-question.svg
+       share/icons/application/scalable/actions/keyboard-shortcuts.svg
        share/icons/application/scalable/actions/message-close.svg
        share/icons/application/scalable/actions/move-down.svg
        share/icons/application/scalable/actions/move-up.svg
+       share/icons/application/scalable/actions/object-locked.svg
+       share/icons/application/scalable/actions/object-unlocked.svg
        share/icons/application/scalable/actions/paperclip.svg
        share/icons/application/scalable/actions/password-copy.svg
        share/icons/application/scalable/actions/password-generator.svg
        share/icons/application/scalable/actions/password-show-off.svg
        share/icons/application/scalable/actions/password-show-on.svg
+       share/icons/application/scalable/actions/qrcode.svg
        share/icons/application/scalable/actions/refresh.svg
        share/icons/application/scalable/actions/reports.svg
        share/icons/application/scalable/actions/reports-exclude.svg
+       share/icons/application/scalable/actions/sort-alphabetical-ascending.svg
+       share/icons/application/scalable/actions/sort-alphabetical-descending.svg
        share/icons/application/scalable/actions/statistics.svg
        share/icons/application/scalable/actions/system-help.svg
        share/icons/application/scalable/actions/system-search.svg
+       share/icons/application/scalable/actions/system-software-update.svg
        share/icons/application/scalable/actions/tag.svg
+       share/icons/application/scalable/actions/tag-multiple.svg
        share/icons/application/scalable/actions/tag-search.svg
        share/icons/application/scalable/actions/trash.svg
        share/icons/application/scalable/actions/url-copy.svg
+       share/icons/application/scalable/actions/user-guide.svg
        share/icons/application/scalable/actions/username-copy.svg
        share/icons/application/scalable/actions/view-history.svg
+       share/icons/application/scalable/actions/web.svg
        share/icons/application/scalable/apps/internet-web-browser.svg
        share/icons/application/scalable/apps/keepassxc.svg
        share/icons/application/scalable/apps/keepassxc-dark.svg
diff --git a/share/icons/application/scalable/actions/attributes-copy.svg b/share/icons/application/scalable/actions/attributes-copy.svg
new file mode 100644
index 000000000..b4e4725b7
--- /dev/null
+++ b/share/icons/application/scalable/actions/attributes-copy.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" /></svg>
\ No newline at end of file
diff --git a/share/icons/application/scalable/actions/database-search.svg b/share/icons/application/scalable/actions/database-search.svg
new file mode 100644
index 000000000..a1a30a675
--- /dev/null
+++ b/share/icons/application/scalable/actions/database-search.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 18.95C7.77 18.72 6 17.45 6 17V14.77C7.13 15.32 8.5 15.69 10 15.87C10 15.21 10.04 14.54 10.21 13.89C8.5 13.67 6.97 13.16 6 12.45V9.64C7.43 10.45 9.5 10.97 11.82 11C11.85 10.97 11.87 10.93 11.9 10.9C14.1 8.71 17.5 8.41 20 10.03V7C20 4.79 16.42 3 12 3S4 4.79 4 7V17C4 19.21 7.59 21 12 21C12.34 21 12.68 21 13 20.97C12.62 20.72 12.24 20.44 11.9 20.1C11.55 19.74 11.25 19.36 11 18.95M12 5C15.87 5 18 6.5 18 7S15.87 9 12 9 6 7.5 6 7 8.13 5 12 5M20.31 17.9C20.75 17.21 21 16.38 21 15.5C21 13 19 11 16.5 11S12 13 12 15.5 14 20 16.5 20C17.37 20 18.19 19.75 18.88 19.32L22 22.39L23.39 21L20.31 17.9M16.5 18C15.12 18 14 16.88 14 15.5S15.12 13 16.5 13 19 14.12 19 15.5 17.88 18 16.5 18Z" /></svg>
\ No newline at end of file
diff --git a/share/icons/application/scalable/actions/qrcode.svg b/share/icons/application/scalable/actions/qrcode.svg
new file mode 100644
index 000000000..7778d1054
--- /dev/null
+++ b/share/icons/application/scalable/actions/qrcode.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3,11H5V13H3V11M11,5H13V9H11V5M9,11H13V15H11V13H9V11M15,11H17V13H19V11H21V13H19V15H21V19H19V21H17V19H13V21H11V17H15V15H17V13H15V11M19,19V15H17V19H19M15,3H21V9H15V3M17,5V7H19V5H17M3,3H9V9H3V3M5,5V7H7V5H5M3,15H9V21H3V15M5,17V19H7V17H5Z" /></svg>
\ No newline at end of file
diff --git a/share/icons/application/scalable/actions/tag-multiple.svg b/share/icons/application/scalable/actions/tag-multiple.svg
new file mode 100644
index 000000000..925e47ed1
--- /dev/null
+++ b/share/icons/application/scalable/actions/tag-multiple.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 10C7.3 10 8 9.3 8 8.5S7.3 7 6.5 7 5 7.7 5 8.5 5.7 10 6.5 10M9 6L16 13L11 18L4 11V6H9M9 4H4C2.9 4 2 4.9 2 6V11C2 11.6 2.2 12.1 2.6 12.4L9.6 19.4C9.9 19.8 10.4 20 11 20S12.1 19.8 12.4 19.4L17.4 14.4C17.8 14 18 13.5 18 13C18 12.4 17.8 11.9 17.4 11.6L10.4 4.6C10.1 4.2 9.6 4 9 4M13.5 5.7L14.5 4.7L21.4 11.6C21.8 12 22 12.5 22 13S21.8 14.1 21.4 14.4L16 19.8L15 18.8L20.7 13L13.5 5.7Z" /></svg>
\ No newline at end of file
diff --git a/share/icons/application/scalable/actions/totp-copy.svg b/share/icons/application/scalable/actions/totp-copy.svg
new file mode 100644
index 000000000..1f134017c
--- /dev/null
+++ b/share/icons/application/scalable/actions/totp-copy.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 11.11V5C21 3.9 20.11 3 19 3H14.82C14.4 1.84 13.3 1 12 1S9.6 1.84 9.18 3H5C3.9 3 3 3.9 3 5V19C3 20.11 3.9 21 5 21H11.11C12.37 22.24 14.09 23 16 23C19.87 23 23 19.87 23 16C23 14.09 22.24 12.37 21 11.11M12 3C12.55 3 13 3.45 13 4S12.55 5 12 5 11 4.55 11 4 11.45 3 12 3M5 19V5H7V7H17V5H19V9.68C18.09 9.25 17.08 9 16 9C12.13 9 9 12.13 9 16C9 17.08 9.25 18.09 9.68 19H5M16 21C13.24 21 11 18.76 11 16S13.24 11 16 11 21 13.24 21 16 18.76 21 16 21M16.5 16.25L19.36 17.94L18.61 19.16L15 17V12H16.5V16.25Z" /></svg>
\ No newline at end of file
diff --git a/share/icons/application/scalable/actions/totp-edit.svg b/share/icons/application/scalable/actions/totp-edit.svg
new file mode 100644
index 000000000..b3814fc4d
--- /dev/null
+++ b/share/icons/application/scalable/actions/totp-edit.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1C20.9 13.1 20.7 13.2 20.6 13.3L19.6 14.3L21.7 16.4L22.7 15.4C22.9 15.2 22.9 14.8 22.7 14.6L21.4 13.3C21.3 13.2 21.2 13.1 21 13.1M19.1 14.9L13 20.9V23H15.1L21.2 16.9L19.1 14.9M12.5 7V12.2L16.5 14.6L15.5 15.6L11 13V7H12.5M11 21.9C5.9 21.4 2 17.1 2 12C2 6.5 6.5 2 12 2C17.3 2 21.6 6.1 22 11.3C21.7 11.2 21.4 11.1 21 11.1C20.6 11.1 20.3 11.2 20 11.3C19.6 7.2 16.2 4 12 4C7.6 4 4 7.6 4 12C4 16.1 7.1 19.5 11.1 19.9L11 20.1V21.9Z" /></svg>
\ No newline at end of file
diff --git a/share/icons/application/scalable/actions/chronometer.svg b/share/icons/application/scalable/actions/totp.svg
similarity index 100%
rename from share/icons/application/scalable/actions/chronometer.svg
rename to share/icons/application/scalable/actions/totp.svg
diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc
index 209a1d35c..8c8c78211 100644
--- a/share/icons/icons.qrc
+++ b/share/icons/icons.qrc
@@ -6,17 +6,21 @@
         <file>application/256x256/apps/keepassxc.png</file>
 
         <file>application/scalable/actions/application-exit.svg</file>
+        <file>application/scalable/actions/attributes-copy.svg</file>
         <file>application/scalable/actions/auto-type.svg</file>
         <file>application/scalable/actions/bugreport.svg</file>
         <file>application/scalable/actions/chevron-double-down.svg</file>
         <file>application/scalable/actions/chevron-double-right.svg</file>
-        <file>application/scalable/actions/chronometer.svg</file>
+        <file>application/scalable/actions/totp.svg</file>
+        <file>application/scalable/actions/totp-copy.svg</file>
+        <file>application/scalable/actions/totp-edit.svg</file>
         <file>application/scalable/actions/clipboard-text.svg</file>
         <file>application/scalable/actions/configure.svg</file>
         <file>application/scalable/actions/database-change-key.svg</file>
         <file>application/scalable/actions/database-lock.svg</file>
         <file>application/scalable/actions/database-lock-all.svg</file>
         <file>application/scalable/actions/database-merge.svg</file>
+        <file>application/scalable/actions/database-search.svg</file>
         <file>application/scalable/actions/dialog-close.svg</file>
         <file>application/scalable/actions/dialog-ok.svg</file>
         <file>application/scalable/actions/document-close.svg</file>
@@ -62,6 +66,7 @@
         <file>application/scalable/actions/password-generator.svg</file>
         <file>application/scalable/actions/password-show-off.svg</file>
         <file>application/scalable/actions/password-show-on.svg</file>
+        <file>application/scalable/actions/qrcode.svg</file>
         <file>application/scalable/actions/refresh.svg</file>
         <file>application/scalable/actions/reports.svg</file>
         <file>application/scalable/actions/reports-exclude.svg</file>
@@ -72,6 +77,7 @@
         <file>application/scalable/actions/system-search.svg</file>
         <file>application/scalable/actions/system-software-update.svg</file>
         <file>application/scalable/actions/tag.svg</file>
+        <file>application/scalable/actions/tag-multiple.svg</file>
         <file>application/scalable/actions/tag-search.svg</file>
         <file>application/scalable/actions/trash.svg</file>
         <file>application/scalable/actions/url-copy.svg</file>
diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp
index b9d20fe8d..38c1ac58c 100644
--- a/src/autotype/AutoTypeSelectDialog.cpp
+++ b/src/autotype/AutoTypeSelectDialog.cpp
@@ -294,7 +294,7 @@ void AutoTypeSelectDialog::buildActionMenu()
     auto typeTotpAction = new QAction(icons()->icon("auto-type"), tr("Type {TOTP}"), this);
     auto copyUsernameAction = new QAction(icons()->icon("username-copy"), tr("Copy Username"), this);
     auto copyPasswordAction = new QAction(icons()->icon("password-copy"), tr("Copy Password"), this);
-    auto copyTotpAction = new QAction(icons()->icon("chronometer"), tr("Copy TOTP"), this);
+    auto copyTotpAction = new QAction(icons()->icon("totp"), tr("Copy TOTP"), this);
     m_actionMenu->addAction(typeUsernameAction);
     m_actionMenu->addAction(typePasswordAction);
     m_actionMenu->addAction(typeTotpAction);
diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp
index d7017a9b4..304fc733f 100644
--- a/src/gui/EntryPreviewWidget.cpp
+++ b/src/gui/EntryPreviewWidget.cpp
@@ -45,7 +45,7 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent)
     m_ui->setupUi(this);
 
     // Entry
-    m_ui->entryTotpButton->setIcon(icons()->icon("chronometer"));
+    m_ui->entryTotpButton->setIcon(icons()->icon("totp"));
     m_ui->entryCloseButton->setIcon(icons()->icon("dialog-close"));
     m_ui->togglePasswordButton->setIcon(icons()->onOffIcon("password-show", true));
     m_ui->toggleEntryNotesButton->setIcon(icons()->onOffIcon("password-show", true));
diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp
index 7df74fdf9..163ae7011 100644
--- a/src/gui/MainWindow.cpp
+++ b/src/gui/MainWindow.cpp
@@ -402,6 +402,13 @@ MainWindow::MainWindow()
     m_ui->actionEntryCopyUsername->setIcon(icons()->icon("username-copy"));
     m_ui->actionEntryCopyPassword->setIcon(icons()->icon("password-copy"));
     m_ui->actionEntryCopyURL->setIcon(icons()->icon("url-copy"));
+    m_ui->menuEntryCopyAttribute->setIcon(icons()->icon("attributes-copy"));
+    m_ui->menuEntryTotp->setIcon(icons()->icon("totp"));
+    m_ui->actionEntryTotp->setIcon(icons()->icon("totp"));
+    m_ui->actionEntryCopyTotp->setIcon(icons()->icon("totp-copy"));
+    m_ui->actionEntryTotpQRCode->setIcon(icons()->icon("qrcode"));
+    m_ui->actionEntrySetupTotp->setIcon(icons()->icon("totp-edit"));
+    m_ui->menuTags->setIcon(icons()->icon("tag-multiple"));
     m_ui->actionEntryDownloadIcon->setIcon(icons()->icon("favicon-download"));
     m_ui->actionGroupSortAsc->setIcon(icons()->icon("sort-alphabetical-ascending"));
     m_ui->actionGroupSortDesc->setIcon(icons()->icon("sort-alphabetical-descending"));
diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp
index 8d2bc30cd..2a125a881 100644
--- a/src/gui/entry/EntryModel.cpp
+++ b/src/gui/entry/EntryModel.cpp
@@ -291,7 +291,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
             break;
         case Totp:
             if (entry->hasTotp()) {
-                return icons()->icon("chronometer");
+                return icons()->icon("totp");
             }
             break;
         case PasswordStrength:
@@ -388,7 +388,7 @@ QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int ro
         case Paperclip:
             return icons()->icon("paperclip");
         case Totp:
-            return icons()->icon("chronometer");
+            return icons()->icon("totp");
         case PasswordStrength:
             return icons()->icon("lock-question");
         }