From 2d024c0d6f85976209e3d5ff67f32e4a86f3780b Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 23 Nov 2022 21:48:09 +0100 Subject: [PATCH] made GxsIdChooser to auto update when identities are added/created/modified --- retroshare-gui/src/gui/gxs/GxsIdChooser.cpp | 20 +++++++++++++++++++ retroshare-gui/src/gui/gxs/GxsIdChooser.h | 4 ++++ retroshare-gui/src/gui/msgs/MessageModel.cpp | 2 +- retroshare-gui/src/gui/msgs/MessageWidget.cpp | 3 ++- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp b/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp index a3398e4cd..f40182563 100644 --- a/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp +++ b/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp @@ -25,6 +25,7 @@ #include "gui/common/FilesDefs.h" #include "gui/Identity/IdEditDialog.h" #include "util/misc.h" +#include "util/qtthreadsutils.h" #include @@ -76,6 +77,24 @@ GxsIdChooser::GxsIdChooser(QWidget *parent) /* Connect signals */ connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(myCurrentIndexChanged(int))); connect(this, SIGNAL(activated(int)), this, SLOT(indexActivated(int))); + + // also capture identity creation/deletion events so as to update the UI accordingly + + mEventHandlerId = 0; + rsEvents->registerEventsHandler( [this](std::shared_ptr event) { + RsQThreadUtils::postToObject( [this,event]() { handleEvent_main_thread(event); }) ;}, mEventHandlerId, RsEventType::GXS_IDENTITY ); +} + +void GxsIdChooser::handleEvent_main_thread(std::shared_ptr event) +{ + if(event->mType != RsEventType::GXS_IDENTITY) return; + + const RsGxsIdentityEvent *fe = dynamic_cast(event.get()); + if(!fe) + return; + + updateDisplay(true); + update(); // Qt flush } void GxsIdChooser::setFlags(uint32_t flags) @@ -86,6 +105,7 @@ void GxsIdChooser::setFlags(uint32_t flags) GxsIdChooser::~GxsIdChooser() { + rsEvents->unregisterEventsHandler(mEventHandlerId); } void GxsIdChooser::fillDisplay(bool complete) diff --git a/retroshare-gui/src/gui/gxs/GxsIdChooser.h b/retroshare-gui/src/gui/gxs/GxsIdChooser.h index 205d0d13a..61a610763 100644 --- a/retroshare-gui/src/gui/gxs/GxsIdChooser.h +++ b/retroshare-gui/src/gui/gxs/GxsIdChooser.h @@ -21,6 +21,7 @@ #ifndef _GXS_ID_CHOOSER_H #define _GXS_ID_CHOOSER_H +#include "retroshare/rsevents.h" #include "gui/common/RSComboBox.h" #include "retroshare/rsgxsifacetypes.h" @@ -78,6 +79,7 @@ private slots: private: void loadPrivateIds(); void setDefaultItem(); + void handleEvent_main_thread(std::shared_ptr event); uint32_t mFlags; RsGxsId mDefaultId; @@ -86,6 +88,8 @@ private: std::set mConstraintIdsSet ; // leave empty if all allowed // RsGxsUpdateBroadcastBase *mBase; + + RsEventsHandlerId_t mEventHandlerId; }; #endif diff --git a/retroshare-gui/src/gui/msgs/MessageModel.cpp b/retroshare-gui/src/gui/msgs/MessageModel.cpp index 0b8c27085..544366937 100644 --- a/retroshare-gui/src/gui/msgs/MessageModel.cpp +++ b/retroshare-gui/src/gui/msgs/MessageModel.cpp @@ -585,7 +585,7 @@ QVariant RsMessageModel::userRole(const Rs::Msgs::MsgInfoSummary& fmpe,int col) { switch(col) { - case COLUMN_THREAD_AUTHOR: return QVariant(QString::fromStdString(fmpe.from.toStdString())); + case COLUMN_THREAD_AUTHOR: return displayRole(fmpe,col); case COLUMN_THREAD_MSGID: return QVariant(QString::fromStdString(fmpe.msgId)); default: return QVariant(); diff --git a/retroshare-gui/src/gui/msgs/MessageWidget.cpp b/retroshare-gui/src/gui/msgs/MessageWidget.cpp index 1335ceb50..b733e373b 100644 --- a/retroshare-gui/src/gui/msgs/MessageWidget.cpp +++ b/retroshare-gui/src/gui/msgs/MessageWidget.cpp @@ -627,6 +627,7 @@ void MessageWidget::fill(const std::string &msgId) case MsgAddress::MSG_ADDRESS_MODE_TO: to_text += link.toHtml() + " "; break; case MsgAddress::MSG_ADDRESS_MODE_CC: cc_text += link.toHtml() + " "; break; case MsgAddress::MSG_ADDRESS_MODE_BCC: bcc_text += link.toHtml() + " "; break; + default: break; } } @@ -880,7 +881,7 @@ void MessageWidget::sendInvite() if (!rsMail->getMessage(currMsgId, mi)) return; - if(!mi.from.type()==MsgAddress::MSG_ADDRESS_TYPE_RSGXSID) + if(mi.from.type()!=MsgAddress::MSG_ADDRESS_TYPE_RSGXSID) return; if ((QMessageBox::question(this, tr("Send invite?"),tr("Do you really want send a invite with your Certificate?"),QMessageBox::Yes|QMessageBox::No, QMessageBox::Cancel))== QMessageBox::Yes)