From 1ec40b74b77485b6efced3e6d8e67354ca864e88 Mon Sep 17 00:00:00 2001 From: Nokta-strigo Date: Fri, 2 Jan 2015 03:57:31 +0300 Subject: [PATCH] Contacts changing status to offline and having new events are not moved to the bottom of the list. (see issue #740) --- src/widget/friendlistwidget.cpp | 13 ++++++++----- src/widget/friendlistwidget.h | 12 ++++++------ src/widget/widget.cpp | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/widget/friendlistwidget.cpp b/src/widget/friendlistwidget.cpp index 176850e82..667143b3d 100644 --- a/src/widget/friendlistwidget.cpp +++ b/src/widget/friendlistwidget.cpp @@ -32,7 +32,7 @@ FriendListWidget::FriendListWidget(QWidget *parent) : for (Status s : {Status::Online, Status::Away, Status::Busy, Status::Offline}) { - QLayout *l = new QVBoxLayout(); + QVBoxLayout *l = new QVBoxLayout(); l->setSpacing(0); l->setMargin(0); @@ -46,12 +46,12 @@ FriendListWidget::FriendListWidget(QWidget *parent) : mainLayout->addLayout(layouts[static_cast(Status::Offline)], 4, 0); } -QLayout* FriendListWidget::getGroupLayout() +QVBoxLayout* FriendListWidget::getGroupLayout() { return groupLayout; } -QLayout* FriendListWidget::getFriendLayout(Status s) +QVBoxLayout* FriendListWidget::getFriendLayout(Status s) { auto res = layouts.find(static_cast(s)); if (res != layouts.end()) @@ -61,8 +61,11 @@ QLayout* FriendListWidget::getFriendLayout(Status s) return layouts[static_cast(Status::Online)]; } -void FriendListWidget::moveWidget(QWidget *w, Status s) +void FriendListWidget::moveWidget(QWidget *w, Status s, int hasNewEvents) { mainLayout->removeWidget(w); - getFriendLayout(s)->addWidget(w); + if (hasNewEvents == 0) + getFriendLayout(s)->addWidget(w); + else + getFriendLayout(s)->insertWidget(0, w); } diff --git a/src/widget/friendlistwidget.h b/src/widget/friendlistwidget.h index ec44ba717..1dbddd45c 100644 --- a/src/widget/friendlistwidget.h +++ b/src/widget/friendlistwidget.h @@ -21,7 +21,7 @@ #include #include "src/corestructs.h" -class QLayout; +class QVBoxLayout; class QGridLayout; class QPixmap; @@ -31,17 +31,17 @@ class FriendListWidget : public QWidget public: explicit FriendListWidget(QWidget *parent = 0); - QLayout* getGroupLayout(); - QLayout* getFriendLayout(Status s); - void moveWidget(QWidget *w, Status s); + QVBoxLayout* getGroupLayout(); + QVBoxLayout* getFriendLayout(Status s); + void moveWidget(QWidget *w, Status s, int hasNewEvents); signals: public slots: private: - QHash layouts; - QLayout *groupLayout; + QHash layouts; + QVBoxLayout *groupLayout; QGridLayout *mainLayout; }; diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp index d11bd3e9f..938ca3a60 100644 --- a/src/widget/widget.cpp +++ b/src/widget/widget.cpp @@ -725,7 +725,7 @@ void Widget::onFriendStatusChanged(int friendId, Status status) if (!f) return; - contactListWidget->moveWidget(f->getFriendWidget(), status); + contactListWidget->moveWidget(f->getFriendWidget(), status, f->getEventFlag()); bool isActualChange = f->getStatus() != status;