From 3bbf11e26fa9c0aa1b44ce4d543ea5e1b9fbbb18 Mon Sep 17 00:00:00 2001 From: thez3ro Date: Sat, 8 Oct 2016 18:55:05 +0200 Subject: [PATCH] Unlocked tray icon #37 --- share/CMakeLists.txt | 2 +- .../scalable/apps/keepassx-locked.svgz | Bin 0 -> 4263 bytes src/core/FilePath.cpp | 10 ++++++++++ src/core/FilePath.h | 2 ++ src/gui/DatabaseTabWidget.cpp | 8 ++++++++ src/gui/DatabaseTabWidget.h | 3 +++ src/gui/DatabaseWidget.cpp | 1 + src/gui/MainWindow.cpp | 18 +++++++++++++++++- src/gui/MainWindow.h | 1 + 9 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 share/icons/application/scalable/apps/keepassx-locked.svgz diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 6a276d97c..ede76cb68 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -21,7 +21,7 @@ install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database) if(UNIX AND NOT APPLE) install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor - FILES_MATCHING PATTERN "keepassx.png" PATTERN "keepassx.svgz") + FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svgz") install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor FILES_MATCHING PATTERN "application-x-keepassx.png" PATTERN "application-x-keepassx.svgz") install(FILES linux/keepassx.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) diff --git a/share/icons/application/scalable/apps/keepassx-locked.svgz b/share/icons/application/scalable/apps/keepassx-locked.svgz new file mode 100644 index 0000000000000000000000000000000000000000..2c3405c9a951e7dfc8d7f63b906f81a371879ba6 GIT binary patch literal 4263 zcmb2|=3sz;w^6tI9-o+4`+og{Rq@LbC!YH48hVxOO(QRJcEv{H&A&4?s7&k1^Az#8 z_Vx957q#_Tq5k~W;%-Mwf0$`xWMr&lq~zxkbbWuF-J8kB7v-ILRk8VjWVFiB!rs;vtv@@?e!seLN2JW^qwDSKcl_IK;#(IjUKyP;dHJTj{{IU8T*~;h* zI}V>wvKD*$>bLxUdA8tbxwqe@%)Iw&b8WhN(HVZ%;#20Xn_s<5{C7sa<3mW^?ccLo zKS>Jr7)y72cip)=zk1bHn{&F|%kPJrH|L(Vp~ZM&;lkEe^Ljdco_9{M+dOEhUibg=@B2s1_vD+s{=e>({$1^V9g6!~x0rVyeco8J_wJg9O6`08 z#>jn&b=>zud&iNlSu!&Wx9cxYiZRiP7Qc91ukCqRu}0>lSMA&Gy#MboTW8YMn~PF+ z>$^Srx@z*i%ekh3@2ak5%in8bUV8b?B>U2|SGvDLtTyt}<9ddt;)D?TgFZ1Zo+$|)^evg@z+#!UVGyJ26q zt!SV74mY>mVCavv$?t zvxk)CtO3?zF#F74g@^;`u=rI^dYO- z8o}E&E?jHdc?#}2EHs=q`&%mi-Od?o`y=Z`4v9F$u?9V_$*$Wf@jRrw+}H5phWk^~ zJc>F!6V8`Q@9f#TK_R{-)Ij-j^vwN&Ywo|TG7aCoxG#}=iiP5h0I@H(c}})`x_UP0 zoYwYc3*}35{>dE3p3AWH8t48KAB8L#oWAhyKJl3=r6fLb*<^*a4}4VxG(OF=G+tvF z$n`+MJvryw)0g(2zSW)bF)^!h>aARS@ORFMWyh`3E^2)AKN%>+vLeFm;T)K zobO}Y+wTz%(k8y2|7m(!g!L4s*S~i;y!`gDslQ&8WzVT;(O^s z(WksC?ktY_*LT{dB5`fZsxyYidWGk^Y5$X5bL{5-INK1B(w~21XR_2`%V zc7>-~-+n)u-1$yLY|XublQTc3Gn(9Yj5@Atev-aYlAkD3YFCwd73BOui92HS$5EoMr9VEB->-XH+Qg2@8s#U9HPsP9D zzV`O*)!^7|5vsN!x0Cj+51z1S!|}7W2HIZUrQrhWcIv;sRrr)tM1-5b9z`r{`!FY8qHTHK1G;4&E2_t=fgt(DpU0?%UPN26BJ1duRRI-M{#E{VuIO%eKq6Yd)ujhw~qQYjrmDmKPkk%v}#1f5a&eIzBWI45CRMw{fPF8Wrp37hfo8VO8 z@%~~|grCatCD&|zerH)bucSi6yER3>;>yX)?iLaKby)HdADaiS6g7%q@DcbFGvK%gY9j;r#CCT?X!A@o32E8Cw z5s@}c9iOW%M68CqIa_QPO&>&$j0?j@1gbwfvT&w9?L8}DRaEj zO371KQT(FHpUxfAGGg`=9<;d;!m0PzQ0wW|&7NAu3>%L9T= zx;ll7>m-4>P(FZgFo~(ir;ikoWY3 zvdtwEnZB?bt>XFUz-jm_X^kq^ztcTeT@24~>BcY}zaq1(L5st+&A{|u(t&+y^*#kz zPg>^oHtI8ZOTQFZb9&(;q5q9RaUL2+CtX+M-P5X<^Kb*7iRv4v`y9LX7;dn4oW7}J zo&V=e5*4a@cLzk|uX-%#xp!4?$<+SJ-vQ#6Kb7u@b8uR|j$!G!XMfgb9)h~P>&tLn0qQLk3)-{aL{G1#3 zIA;m8X63p`_FR&8n*T|uNg%N+!MyF5=mX9lPD?uW3HhyLXfs>l#HXmC=_@+xpXTh9;Tu-G$f9(w3Lsgz@J4~lAF}k0a zTjaU2<&lAcs2D??@xuw#ycez~v29X_y*!I0lD+BogvhKd&dMAq#~!_^kQdnNs}F#k#CBcELPJL(Y~5*zF#{VTNU zHtYyzc=?g#@NY?J*=IbyfeKEJ2*eKI=>P`f#*O7Uw^l@+Q1csF#oxLYBGMmn1TPqMH z;=Q_)Z{A6x69+vuO-osj$GMi*%2@2(!Gfv+7N*_{;cO>1+^u?%JTakp=A%tl&L)_7 zaU9(J)Rm!di`td$$!EA<>>=~zHWqt2nIaR-%+xe`G zeZ>p;dzL0u2Or4Z`l7ZxF3vq>S(yB%OS$YfCve$$c$Z7H%?djzI@RvWQ@PIyIXUd^ zTs^MkZ30q(3Dy-%F-8m4&%dBy@E{}c8ehKV3)A{q zGk4ux=*4IGNH|2-n=bgId>M`e_&L!YQJ1jT*J9Em47xBZ87rp;{O-L)LXV^ zWojNVy>s^01eZW#Dd`}MsaLM}DOf!G6{5_m;#eMVF8dVglm1zU`B$o?ZP07FoptzO zspO@e2PMUcD_$)W$+~E9!Bu3JUQ4`3&y&<^7jn0q5|GzmW|nT=-|o!1`np)Ppt^WQ zLr0*(jfy$8i(5HYlrr#hR6Qx%<*S)LOPg zl2t**i``$X!llbzrWyn`E3_=#HC1@BOVu>Pyor0)F0Ycms&atY#$Z`Hqv)g9j8Fa# zJ*P{m&SAT2A*H*R>B@m0oSgnw-dWyUs(8uYYnAWB7^}8-J1*T^)AytA^6dBrUxc^c zJu7}YQPn*1<)PS9H{DgQoMgySeiEc;tEJHX*W~ZV(>8kdY8cMFKAU7_!#n46IrDoq zzw`F1C%1*Ks!f=M^1|memkA0o%MZ% zq1)LdhgFxWpNTH(-l6h#zS@$$xk48WZu!qWCo!+-eY!Chkf;*ez={@5HMWKRuUCR(?89Z%e~=v&tpwO+Hj*rolock(); // database has changed so we can't use the db variable anymore updateTabName(dbWidget->database()); + + Q_EMIT databaseLocked(dbWidget); } } @@ -764,6 +767,11 @@ void DatabaseTabWidget::emitActivateDatabaseChanged() Q_EMIT activateDatabaseChanged(currentDatabaseWidget()); } +void DatabaseTabWidget::emitDatabaseUnlockedFromDbWidgetSender() +{ + Q_EMIT databaseUnlocked(static_cast(sender())); +} + void DatabaseTabWidget::connectDatabase(Database* newDb, Database* oldDb) { if (oldDb) { diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h index de4a9ca12..618b48b1c 100644 --- a/src/gui/DatabaseTabWidget.h +++ b/src/gui/DatabaseTabWidget.h @@ -80,6 +80,8 @@ Q_SIGNALS: void tabNameChanged(); void databaseWithFileClosed(QString filePath); void activateDatabaseChanged(DatabaseWidget* dbWidget); + void databaseLocked(DatabaseWidget* dbWidget); + void databaseUnlocked(DatabaseWidget* dbWidget); private Q_SLOTS: void updateTabName(Database* db); @@ -89,6 +91,7 @@ private Q_SLOTS: void toggleTabbar(); void changeDatabase(Database* newDb); void emitActivateDatabaseChanged(); + void emitDatabaseUnlockedFromDbWidgetSender(); private: bool saveDatabase(Database* db); diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 120379171..0ede41926 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -658,6 +658,7 @@ void DatabaseWidget::openDatabase(bool accepted) if (accepted) { replaceDatabase(static_cast(sender())->database()); setCurrentWidget(m_mainWidget); + Q_EMIT unlockedDatabase(); // We won't need those anymore and KeePass1OpenWidget closes // the file in its dtor. diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 6dccf1dc3..f3d41521c 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -185,6 +185,10 @@ MainWindow::MainWindow() SLOT(databaseTabChanged(int))); connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); + connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), + SLOT(databaseStatusChanged(DatabaseWidget*))); + connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), + SLOT(databaseStatusChanged(DatabaseWidget*))); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); connect(m_ui->settingsWidget, SIGNAL(editFinished(bool)), SLOT(switchToDatabases())); @@ -486,6 +490,11 @@ void MainWindow::switchToSettings() m_ui->stackedWidget->setCurrentIndex(1); } +void MainWindow::databaseStatusChanged(DatabaseWidget *) +{ + updateTrayIcon(); +} + void MainWindow::databaseTabChanged(int tabIndex) { if (tabIndex != -1 && m_ui->stackedWidget->currentIndex() == 2) { @@ -573,7 +582,7 @@ void MainWindow::updateTrayIcon() { if (isTrayIconEnabled()) { if (!m_trayIcon) { - m_trayIcon = new QSystemTrayIcon(filePath()->applicationIcon(), this); + m_trayIcon = new QSystemTrayIcon(this); QMenu* menu = new QMenu(this); @@ -587,8 +596,15 @@ void MainWindow::updateTrayIcon() connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow())); m_trayIcon->setContextMenu(menu); + m_trayIcon->setIcon(filePath()->applicationIcon()); m_trayIcon->show(); } + if (m_ui->tabWidget->hasLockableDatabases()) { + m_trayIcon->setIcon(filePath()->trayIconUnlocked()); + } + else { + m_trayIcon->setIcon(filePath()->trayIconLocked()); + } } else { if (m_trayIcon) { diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 02019312d..7e1a18293 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -54,6 +54,7 @@ private Q_SLOTS: void showAboutDialog(); void switchToDatabases(); void switchToSettings(); + void databaseStatusChanged(DatabaseWidget *dbWidget); void databaseTabChanged(int tabIndex); void openRecentDatabase(QAction* action); void clearLastDatabases();