From 9dd277623a176da2b4dbb5cc1958dd825dab6508 Mon Sep 17 00:00:00 2001 From: TheSpiritXIII Date: Tue, 16 Jun 2015 16:26:20 -0400 Subject: [PATCH] Fix circles: Fix rename on creation and graphical bug --- src/widget/categorywidget.cpp | 10 +++++++++ src/widget/circlewidget.cpp | 37 +++++++++------------------------ src/widget/circlewidget.h | 3 ++- src/widget/friendlistwidget.cpp | 7 +++++++ 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/widget/categorywidget.cpp b/src/widget/categorywidget.cpp index 8c7d0bf16..8085096e9 100644 --- a/src/widget/categorywidget.cpp +++ b/src/widget/categorywidget.cpp @@ -81,6 +81,7 @@ void CategoryWidget::setExpanded(bool isExpanded) { expanded = isExpanded; listWidget->setVisible(isExpanded); + listWidget->move(1000, 1000); if (isExpanded) { statusPic.setPixmap(QPixmap(":/ui/chatArea/scrollBarDownArrow.svg")); @@ -90,6 +91,15 @@ void CategoryWidget::setExpanded(bool isExpanded) statusPic.setPixmap(QPixmap(":/ui/chatArea/scrollBarRightArrow.svg")); } + // The listWidget will recieve a enterEvent for some reason if now visible. + // Using the following, we prevent that. + hide(); + show(); + + // However, the above also removes the hover, so we need to reenable it. + if (underMouse()) + setContainerAttribute(Qt::WA_UnderMouse, true); // Simulate hover. + onExpand(); } diff --git a/src/widget/circlewidget.cpp b/src/widget/circlewidget.cpp index 43abc6260..f9a49da9b 100644 --- a/src/widget/circlewidget.cpp +++ b/src/widget/circlewidget.cpp @@ -21,14 +21,11 @@ #include "friendwidget.h" #include "friendlistwidget.h" #include "tool/croppinglabel.h" -#include "src/widget/style.h" - #include "src/persistence/settings.h" #include "src/friendlist.h" #include "src/friend.h" #include "widget.h" #include -#include #include #include #include @@ -38,14 +35,12 @@ QHash CircleWidget::circleList; -CircleWidget::CircleWidget(FriendListWidget* parent, int id_) +CircleWidget::CircleWidget(FriendListWidget* parent, int id) : CategoryWidget(parent) - , id(id_) + , id(id) { - if (id != -1) - { - setName(Settings::getInstance().getCircleName(id)); - } + setName(Settings::getInstance().getCircleName(id)); + circleList[id] = this; connect(nameLabel, &CroppingLabel::editFinished, [this](const QString &newName) { @@ -59,23 +54,6 @@ CircleWidget::CircleWidget(FriendListWidget* parent, int id_) nameLabel->minimizeMaximumWidth(); }); - bool isNew = false; - auto circleIt = circleList.find(id); - if (circleIt == circleList.end()) - { - if (id == -1) - { - isNew = true; - id = Settings::getInstance().addCircle(); - nameLabel->setText(tr("Circle #%1").arg(id + 1)); - Settings::getInstance().setCircleName(id, nameLabel->fullText()); - } - } - circleList[id] = this; - - if (isNew) - editName(); - setExpanded(Settings::getInstance().getCircleExpanded(id)); updateStatus(); } @@ -85,6 +63,11 @@ CircleWidget::~CircleWidget() circleList.remove(id); } +void CircleWidget::editName() +{ + CategoryWidget::editName(); +} + CircleWidget* CircleWidget::getFromID(int id) { auto circleIt = circleList.find(id); @@ -104,7 +87,7 @@ void CircleWidget::contextMenuEvent(QContextMenuEvent* event) editName(); else if (selectedItem == removeAction) { - FriendListWidget* friendList = dynamic_cast(parentWidget()); + FriendListWidget* friendList = static_cast(parentWidget()); moveFriendWidgets(friendList); friendList->removeCircleWidget(this); diff --git a/src/widget/circlewidget.h b/src/widget/circlewidget.h index 42c01098d..136b26270 100644 --- a/src/widget/circlewidget.h +++ b/src/widget/circlewidget.h @@ -26,9 +26,10 @@ class CircleWidget final : public CategoryWidget { Q_OBJECT public: - CircleWidget(FriendListWidget* parent = 0, int id = -1); + CircleWidget(FriendListWidget* parent, int id); ~CircleWidget(); + void editName(); static CircleWidget* getFromID(int id); signals: diff --git a/src/widget/friendlistwidget.cpp b/src/widget/friendlistwidget.cpp index 452efa2dd..d08d6af9d 100644 --- a/src/widget/friendlistwidget.cpp +++ b/src/widget/friendlistwidget.cpp @@ -546,9 +546,12 @@ void FriendListWidget::reDraw() CircleWidget* FriendListWidget::createCircleWidget(int id) { + bool isNew = (id == -1); + if (id == -1) id = Settings::getInstance().addCircle(); + // Stop, after it has been created. Code after this is for displaying. if (mode == Activity) return nullptr; @@ -557,6 +560,10 @@ CircleWidget* FriendListWidget::createCircleWidget(int id) connect(this, &FriendListWidget::onCompactChanged, circleWidget, &CircleWidget::onCompactChanged); connect(circleWidget, &CircleWidget::renameRequested, this, &FriendListWidget::renameCircleWidget); circleWidget->show(); // Avoid flickering. + + if (isNew) + circleWidget->editName(); + return circleWidget; }