summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swift/Controllers/RosterController.cpp2
-rw-r--r--Swift/Controllers/UIInterfaces/MainWindow.h1
-rw-r--r--Swift/QtUI/QtMainWindow.cpp5
-rw-r--r--Swift/QtUI/QtMainWindow.h1
-rw-r--r--Swift/QtUI/QtNameWidget.cpp68
-rw-r--r--Swift/QtUI/QtNameWidget.h25
-rw-r--r--Swift/QtUI/QtRosterHeader.cpp1
-rw-r--r--Swift/QtUI/QtRosterHeader.h1
-rw-r--r--Swiften/Client/NickManagerImpl.cpp9
-rw-r--r--Swiften/Client/NickManagerImpl.h1
10 files changed, 49 insertions, 65 deletions
diff --git a/Swift/Controllers/RosterController.cpp b/Swift/Controllers/RosterController.cpp
index 1feeb58..282f041 100644
--- a/Swift/Controllers/RosterController.cpp
+++ b/Swift/Controllers/RosterController.cpp
@@ -69,8 +69,6 @@ RosterController::RosterController(const JID& jid, XMPPRoster* xmppRoster, Avata
mainWindow_->setMyJID(jid);
mainWindow_->setMyNick(nickManager_->getOwnNick());
- mainWindow_->onChangeNickRequest.connect(boost::bind(&NickManager::setOwnNick, nickManager_, _1));
-
if (settings->getBoolSetting(SHOW_OFFLINE, false)) {
uiEventStream->onUIEvent(boost::shared_ptr<UIEvent>(new ToggleShowOfflineUIEvent(true)));
}
diff --git a/Swift/Controllers/UIInterfaces/MainWindow.h b/Swift/Controllers/UIInterfaces/MainWindow.h
index 124d229..125aae5 100644
--- a/Swift/Controllers/UIInterfaces/MainWindow.h
+++ b/Swift/Controllers/UIInterfaces/MainWindow.h
@@ -36,7 +36,6 @@ namespace Swift {
boost::signal<void (StatusShow::Type, const String&)> onChangeStatusRequest;
boost::signal<void ()> onSignOutRequest;
- boost::signal<void (const String&)> onChangeNickRequest;
private:
bool canDelete_;
diff --git a/Swift/QtUI/QtMainWindow.cpp b/Swift/QtUI/QtMainWindow.cpp
index fb84da4..5cbc40c 100644
--- a/Swift/QtUI/QtMainWindow.cpp
+++ b/Swift/QtUI/QtMainWindow.cpp
@@ -40,7 +40,6 @@ QtMainWindow::QtMainWindow(UIEventStream* uiEventStream) : QWidget(), MainWindow
meView_ = new QtRosterHeader(this);
mainLayout->addWidget(meView_);
connect(meView_, SIGNAL(onChangeStatusRequest(StatusShow::Type, const QString&)), this, SLOT(handleStatusChanged(StatusShow::Type, const QString&)));
- connect(meView_, SIGNAL(onChangeNickRequest(const QString&)), this, SLOT(handleChangeNickRequest(const QString&)));
tabs_ = new QtTabWidget(this);
#if QT_VERSION >= 0x040500
@@ -187,9 +186,5 @@ void QtMainWindow::setConnecting() {
meView_->setConnecting();
}
-void QtMainWindow::handleChangeNickRequest(const QString& nick) {
- onChangeNickRequest(Q2PSTRING(nick));
-}
-
}
diff --git a/Swift/QtUI/QtMainWindow.h b/Swift/QtUI/QtMainWindow.h
index ccec12c..62aafba 100644
--- a/Swift/QtUI/QtMainWindow.h
+++ b/Swift/QtUI/QtMainWindow.h
@@ -56,7 +56,6 @@ namespace Swift {
void handleAddContactDialogComplete(const JID& contact, const QString& name);
void handleAddActionTriggered(bool checked);
void handleEventCountUpdated(int count);
- void handleChangeNickRequest(const QString& nick);
private:
std::vector<QMenu*> menus_;
diff --git a/Swift/QtUI/QtNameWidget.cpp b/Swift/QtUI/QtNameWidget.cpp
index bf38da8..d123bad 100644
--- a/Swift/QtUI/QtNameWidget.cpp
+++ b/Swift/QtUI/QtNameWidget.cpp
@@ -6,52 +6,25 @@
#include "QtNameWidget.h"
-#include <QStackedWidget>
#include <QHBoxLayout>
+#include <QMenu>
#include <QMouseEvent>
+#include <QtDebug>
#include <Swift/QtUI/QtElidingLabel.h>
-#include <Swift/QtUI/QtSwiftUtil.h>
-#include <Swift/QtUI/QtLineEdit.h>
namespace Swift {
-QtNameWidget::QtNameWidget(QWidget *parent) : QWidget(parent) {
+QtNameWidget::QtNameWidget(QWidget *parent) : QWidget(parent), mode(ShowNick) {
QHBoxLayout* mainLayout = new QHBoxLayout(this);
mainLayout->setSpacing(0);
mainLayout->setContentsMargins(0,0,0,0);
- stack = new QStackedWidget(this);
- mainLayout->addWidget(stack);
-
textLabel = new QtElidingLabel(this);
QFont font = textLabel->font();
font.setBold(true);
textLabel->setFont(font);
- stack->addWidget(textLabel);
-
- nickEdit = new QtLineEdit(this);
- connect(nickEdit, SIGNAL(returnPressed()), this, SLOT(handleEditComplete()));
- connect(nickEdit, SIGNAL(escapePressed()), this, SLOT(handleEditCancelled()));
- stack->addWidget(nickEdit);
-}
-
-void QtNameWidget::mouseDoubleClickEvent(QMouseEvent* event) {
- if (stack->currentWidget() != nickEdit) {
- if (event->button() == Qt::LeftButton) {
- nickEdit->setText(nick);
- stack->setCurrentWidget(nickEdit);
- }
- }
-}
-
-void QtNameWidget::handleEditComplete() {
- stack->setCurrentWidget(textLabel);
- emit onChangeNickRequest(nickEdit->text());
-}
-
-void QtNameWidget::handleEditCancelled() {
- stack->setCurrentWidget(textLabel);
+ mainLayout->addWidget(textLabel);
}
void QtNameWidget::setNick(const QString& nick) {
@@ -64,13 +37,40 @@ void QtNameWidget::setJID(const QString& jid) {
updateText();
}
+void QtNameWidget::mousePressEvent(QMouseEvent* event) {
+ QMenu menu;
+
+ QAction* showAsNick = new QAction("Show nickname", this);
+ showAsNick->setCheckable(true);
+ if (mode == ShowNick) {
+ showAsNick->setChecked(true);
+ }
+ menu.addAction(showAsNick);
+
+ QAction* showAsJID = new QAction("Show ID", this);
+ showAsJID->setCheckable(true);
+ if (mode == ShowJID) {
+ showAsJID->setChecked(true);
+ }
+ menu.addAction(showAsJID);
+
+ QAction* result = menu.exec(event->globalPos());
+ if (result == showAsJID) {
+ mode = ShowJID;
+ }
+ else {
+ mode = ShowNick;
+ }
+ updateText();
+}
+
void QtNameWidget::updateText() {
QString text;
- if (nick.isEmpty()) {
- text = jid;
+ if (mode == ShowNick && !nick.isEmpty()) {
+ text = nick;
}
else {
- text = nick + " (" + jid + ")";
+ text = jid;
}
text.replace("<","&lt;");
textLabel->setText(text);
diff --git a/Swift/QtUI/QtNameWidget.h b/Swift/QtUI/QtNameWidget.h
index c1c3e07..52586b7 100644
--- a/Swift/QtUI/QtNameWidget.h
+++ b/Swift/QtUI/QtNameWidget.h
@@ -8,12 +8,8 @@
#include <QWidget>
-class QLabel;
-class QStackedWidget;
-
namespace Swift {
class QtElidingLabel;
- class QtLineEdit;
class QtNameWidget : public QWidget {
Q_OBJECT
@@ -24,25 +20,18 @@ namespace Swift {
void setNick(const QString& text);
void setJID(const QString& jid);
- signals:
- /**
- * When this is emitted, the widget is disabled until
- * setNick() is called.
- */
- void onChangeNickRequest(const QString& nick);
-
- private slots:
- void handleEditComplete();
- void handleEditCancelled();
- virtual void mouseDoubleClickEvent(QMouseEvent* event);
-
private:
void updateText();
+ virtual void mousePressEvent(QMouseEvent* event);
private:
- QStackedWidget* stack;
+ enum Mode {
+ ShowNick,
+ ShowJID,
+ };
+
+ Mode mode;
QtElidingLabel* textLabel;
- QtLineEdit* nickEdit;
QString jid;
QString nick;
};
diff --git a/Swift/QtUI/QtRosterHeader.cpp b/Swift/QtUI/QtRosterHeader.cpp
index efc198a..4649839 100644
--- a/Swift/QtUI/QtRosterHeader.cpp
+++ b/Swift/QtUI/QtRosterHeader.cpp
@@ -40,7 +40,6 @@ QtRosterHeader::QtRosterHeader(QWidget* parent) : QWidget(parent) {
topLayout->addLayout(rightLayout);
nameWidget_ = new QtNameWidget(this);
- connect(nameWidget_, SIGNAL(onChangeNickRequest(const QString&)), this, SIGNAL(onChangeNickRequest(const QString&)));
rightLayout->addWidget(nameWidget_);
diff --git a/Swift/QtUI/QtRosterHeader.h b/Swift/QtUI/QtRosterHeader.h
index cd5f26c..23e6be0 100644
--- a/Swift/QtUI/QtRosterHeader.h
+++ b/Swift/QtUI/QtRosterHeader.h
@@ -37,7 +37,6 @@ namespace Swift {
void setConnecting();
signals:
void onChangeStatusRequest(StatusShow::Type showType, const QString &statusMessage);
- void onChangeNickRequest(const QString &nick);
private slots:
void handleChangeStatusRequest(StatusShow::Type type, const QString &statusMessage);
diff --git a/Swiften/Client/NickManagerImpl.cpp b/Swiften/Client/NickManagerImpl.cpp
index 09f8de5..fd37222 100644
--- a/Swiften/Client/NickManagerImpl.cpp
+++ b/Swiften/Client/NickManagerImpl.cpp
@@ -14,6 +14,8 @@ namespace Swift {
NickManagerImpl::NickManagerImpl(const JID& ownJID, VCardManager* vcardManager) : ownJID(ownJID), vcardManager(vcardManager) {
vcardManager->onVCardChanged.connect(boost::bind(&NickManagerImpl::handleVCardReceived, this, _1, _2));
+
+ updateOwnNickFromVCard(vcardManager->getVCard(ownJID.toBare()));
}
NickManagerImpl::~NickManagerImpl() {
@@ -21,7 +23,7 @@ NickManagerImpl::~NickManagerImpl() {
}
String NickManagerImpl::getOwnNick() const {
- return ownJID;
+ return ownNick;
}
void NickManagerImpl::setOwnNick(const String&) {
@@ -31,9 +33,12 @@ void NickManagerImpl::handleVCardReceived(const JID& jid, VCard::ref vcard) {
if (!jid.equals(ownJID, JID::WithoutResource)) {
return;
}
+ updateOwnNickFromVCard(vcard);
+}
+void NickManagerImpl::updateOwnNickFromVCard(VCard::ref vcard) {
String nick;
- if (!vcard->getNickname().isEmpty()) {
+ if (vcard && !vcard->getNickname().isEmpty()) {
nick = vcard->getNickname();
}
if (ownNick != nick) {
diff --git a/Swiften/Client/NickManagerImpl.h b/Swiften/Client/NickManagerImpl.h
index 87c9711..8796dbe 100644
--- a/Swiften/Client/NickManagerImpl.h
+++ b/Swiften/Client/NickManagerImpl.h
@@ -24,6 +24,7 @@ namespace Swift {
private:
void handleVCardReceived(const JID& jid, VCard::ref vCard);
+ void updateOwnNickFromVCard(VCard::ref vcard);
private:
JID ownJID;