Avatar: macOS support
authorMarkus Goetz <markus@woboq.com>
Wed, 12 Apr 2017 15:55:28 +0000 (17:55 +0200)
committerMarkus Goetz <markus@woboq.com>
Wed, 12 Apr 2017 15:55:28 +0000 (17:55 +0200)
src/3rdparty/qtmacgoodies
src/gui/settingsdialogmac.cpp
src/gui/settingsdialogmac.h

index 044580c32837edba05a055aabca27245939454eb..4ffbff5d5fca7332f6390ddc2fe74cd29e8675f8 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 044580c32837edba05a055aabca27245939454eb
+Subproject commit 4ffbff5d5fca7332f6390ddc2fe74cd29e8675f8
index 9e4d6a950eef0b8d28ba4ed6aea40ac16b3ea9d6..ac65dae7a33e32c5045355e83291a6fd5320fcaa 100644 (file)
 #include <QPushButton>
 #include <QDebug>
 #include <QSettings>
+#include <QPainter>
+#include <QPainterPath>
 
 namespace OCC {
 
+// Duplicate in settingsdialog.cpp
+static QIcon circleMask( const QImage& avatar )
+{
+    int dim = avatar.width();
+
+    QPixmap fixedImage(dim, dim);
+    fixedImage.fill(Qt::transparent);
+
+    QPainter imgPainter(&fixedImage);
+    QPainterPath clip;
+    clip.addEllipse(0, 0, dim, dim);
+    imgPainter.setClipPath(clip);
+    imgPainter.drawImage(0, 0, avatar);
+    imgPainter.end();
+
+    return QIcon(fixedImage);
+}
+
+
 //
 // Whenever you change something here check both settingsdialog.cpp and settingsdialogmac.cpp !
 //
@@ -125,6 +146,8 @@ void SettingsDialogMac::accountAdded(AccountState *s)
     connect( accountSettings, &AccountSettings::folderChanged, _gui,  &ownCloudGui::slotFoldersChanged);
     connect( accountSettings, &AccountSettings::openFolderAlias, _gui, &ownCloudGui::slotFolderOpenAction);
 
+    connect(s->account().data(), SIGNAL(accountChangedAvatar()), this, SLOT(slotAccountAvatarChanged()));
+
     slotRefreshActivity(s);
 }
 
@@ -147,4 +170,19 @@ void SettingsDialogMac::slotRefreshActivity( AccountState* accountState )
     }
 }
 
+void SettingsDialogMac::slotAccountAvatarChanged()
+{
+    Account *account = static_cast<Account*>(sender());
+    auto list = findChildren<AccountSettings*>(QString());
+    foreach(auto p, list) {
+        if (p->accountsState()->account() == account) {
+            int idx = indexForPanel(p);
+            QImage pix = account->avatar();
+            if (!pix.isNull()) {
+                setPreferencesPanelIcon(idx, circleMask(pix));
+            }
+        }
+    }
+}
+
 }
index 608c4f8e18d915b478b6f5965614adddadf37e61..a000461534e38a68f13e306841aae322bd5868c9 100644 (file)
@@ -52,6 +52,7 @@ public slots:
 private slots:
     void accountAdded(AccountState *);
     void accountRemoved(AccountState *);
+    void slotAccountAvatarChanged();
 private:
     void closeEvent(QCloseEvent *event);