From 554d1b88fc46d07ebe6be6315d0830b013e84296 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Wed, 12 Apr 2017 17:55:28 +0200 Subject: [PATCH] Avatar: macOS support --- src/3rdparty/qtmacgoodies | 2 +- src/gui/settingsdialogmac.cpp | 38 +++++++++++++++++++++++++++++++++++ src/gui/settingsdialogmac.h | 1 + 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/3rdparty/qtmacgoodies b/src/3rdparty/qtmacgoodies index 044580c3283..4ffbff5d5fc 160000 --- a/src/3rdparty/qtmacgoodies +++ b/src/3rdparty/qtmacgoodies @@ -1 +1 @@ -Subproject commit 044580c32837edba05a055aabca27245939454eb +Subproject commit 4ffbff5d5fca7332f6390ddc2fe74cd29e8675f8 diff --git a/src/gui/settingsdialogmac.cpp b/src/gui/settingsdialogmac.cpp index 9e4d6a950ee..ac65dae7a33 100644 --- a/src/gui/settingsdialogmac.cpp +++ b/src/gui/settingsdialogmac.cpp @@ -34,9 +34,30 @@ #include #include #include +#include +#include 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(sender()); + auto list = findChildren(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)); + } + } + } +} + } diff --git a/src/gui/settingsdialogmac.h b/src/gui/settingsdialogmac.h index 608c4f8e18d..a000461534e 100644 --- a/src/gui/settingsdialogmac.h +++ b/src/gui/settingsdialogmac.h @@ -52,6 +52,7 @@ public slots: private slots: void accountAdded(AccountState *); void accountRemoved(AccountState *); + void slotAccountAvatarChanged(); private: void closeEvent(QCloseEvent *event);