diff --git a/src/widget/friendlistwidget.cpp b/src/widget/friendlistwidget.cpp index d78ac7366..ee14fec0b 100644 --- a/src/widget/friendlistwidget.cpp +++ b/src/widget/friendlistwidget.cpp @@ -296,6 +296,7 @@ void FriendListWidget::addFriendWidget(FriendWidget* w, Status s, int circleInde moveWidget(w, s, true); else circleWidget->addFriendWidget(w, s); + connect(w, &FriendWidget::friendWidgetRenamed, this, &FriendListWidget::onFriendWidgetRenamed); } void FriendListWidget::removeGroupWidget(GroupWidget* w) @@ -395,6 +396,31 @@ void FriendListWidget::renameCircleWidget(CircleWidget* circleWidget, const QStr circleLayout->addSortedWidget(circleWidget); } +void FriendListWidget::onFriendWidgetRenamed(FriendWidget* friendWidget) +{ + const Friend* contact = friendWidget->getFriend(); + auto status = contact->getStatus(); + if (mode == Activity) { + QDate activityDate = getDateFriend(contact); + int time = static_cast(getTime(activityDate)); + QWidget* widget = activityLayout->itemAt(time)->widget(); + CategoryWidget* categoryWidget = qobject_cast(widget); + categoryWidget->removeFriendWidget(friendWidget, status); + categoryWidget->addFriendWidget(friendWidget, status); + } else { + int id = Settings::getInstance().getFriendCircleID(contact->getPublicKey()); + CircleWidget* circleWidget = CircleWidget::getFromID(id); + if (circleWidget != nullptr) { + circleWidget->removeFriendWidget(friendWidget, status); + circleWidget->addFriendWidget(friendWidget, status); + Widget::getInstance()->searchCircle(circleWidget); + } else { + listLayout->removeFriendWidget(friendWidget, status); + listLayout->addFriendWidget(friendWidget, status); + } + } +} + void FriendListWidget::onGroupchatPositionChanged(bool top) { groupsOnTop = top; diff --git a/src/widget/friendlistwidget.h b/src/widget/friendlistwidget.h index 5f26613ed..773042847 100644 --- a/src/widget/friendlistwidget.h +++ b/src/widget/friendlistwidget.h @@ -70,6 +70,7 @@ signals: public slots: void renameGroupWidget(GroupWidget* groupWidget, const QString& newName); void renameCircleWidget(CircleWidget* circleWidget, const QString& newName); + void onFriendWidgetRenamed(FriendWidget* friendWidget); void onGroupchatPositionChanged(bool top); void moveWidget(FriendWidget* w, Status s, bool add = false); diff --git a/src/widget/friendwidget.cpp b/src/widget/friendwidget.cpp index ea124746c..397b06e17 100644 --- a/src/widget/friendwidget.cpp +++ b/src/widget/friendwidget.cpp @@ -70,6 +70,7 @@ FriendWidget::FriendWidget(std::shared_ptr chatroom, bool compac connect(nameLabel, &CroppingLabel::editFinished, frnd, &Friend::setAlias); // update on changes of the displayed name connect(frnd, &Friend::displayedNameChanged, nameLabel, &CroppingLabel::setText); + connect(frnd, &Friend::displayedNameChanged, [this](const QString /* &newName */){emit friendWidgetRenamed(this);}); connect(chatroom.get(), &FriendChatroom::activeChanged, this, &FriendWidget::setActive); statusMessageLabel->setTextFormat(Qt::PlainText); } diff --git a/src/widget/friendwidget.h b/src/widget/friendwidget.h index 6e37cc345..c4f08a00e 100644 --- a/src/widget/friendwidget.h +++ b/src/widget/friendwidget.h @@ -49,6 +49,7 @@ signals: void copyFriendIdToClipboard(int friendId); void contextMenuCalled(QContextMenuEvent* event); void friendHistoryRemoved(); + void friendWidgetRenamed(FriendWidget* friendWidget); public slots: void onAvatarSet(const ToxPk& friendPk, const QPixmap& pic);