[telepathy-qt4/master] Improved call/roster examples.

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Tue Mar 31 16:29:16 PDT 2009


---
 examples/call/call-handler.cpp    |    4 ++--
 examples/call/call-window.cpp     |    4 ++--
 examples/roster/roster-widget.cpp |   22 +++++++++++++++++-----
 examples/roster/roster-widget.h   |    8 ++++----
 examples/roster/roster-window.cpp |    4 ++--
 5 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/examples/call/call-handler.cpp b/examples/call/call-handler.cpp
index c05e9a7..73f5c8d 100644
--- a/examples/call/call-handler.cpp
+++ b/examples/call/call-handler.cpp
@@ -99,7 +99,7 @@ void CallHandler::onOutgoingChannelCreated(PendingOperation *op)
 void CallHandler::onOutgoingChannelReady(PendingOperation *op)
 {
     PendingReady *pr = qobject_cast<PendingReady *>(op);
-    StreamedMediaChannel *chan = qobject_cast<StreamedMediaChannel *>(pr->object());
+    StreamedMediaChannelPtr chan = StreamedMediaChannelPtr(qobject_cast<StreamedMediaChannel *>(pr->object()));
 
     if (op->isError()) {
         qWarning() << "CallHandler::onOutgoingChannelReady: channel cannot become ready:" <<
@@ -128,7 +128,7 @@ void CallHandler::onOutgoingChannelReady(PendingOperation *op)
 void CallHandler::onIncomingChannelReady(PendingOperation *op)
 {
     PendingReady *pr = qobject_cast<PendingReady *>(op);
-    StreamedMediaChannel *chan = qobject_cast<StreamedMediaChannel *>(pr->object());
+    StreamedMediaChannelPtr chan = StreamedMediaChannelPtr(qobject_cast<StreamedMediaChannel *>(pr->object()));
 
     if (op->isError()) {
         // ignore - channel cannot be ready
diff --git a/examples/call/call-window.cpp b/examples/call/call-window.cpp
index c881f3c..972b28c 100644
--- a/examples/call/call-window.cpp
+++ b/examples/call/call-window.cpp
@@ -115,7 +115,7 @@ void CallWindow::onConnectionConnected(Telepathy::Client::PendingOperation *op)
     }
 
     PendingReady *pr = qobject_cast<PendingReady *>(op);
-    Connection *conn = qobject_cast<Connection *>(pr->object());
+    ConnectionPtr conn = ConnectionPtr(qobject_cast<Connection *>(pr->object()));
 
     if (conn->interfaces().contains(TELEPATHY_INTERFACE_CONNECTION_INTERFACE_CAPABILITIES)) {
         Telepathy::CapabilityPair capability = {
@@ -146,7 +146,7 @@ void CallWindow::onConnectionInvalidated(DBusProxy *proxy,
 {
     qDebug() << "CallWindow::onConnectionInvalidated: connection became invalid:" <<
         errorName << "-" << errorMessage;
-    mRoster->removeConnection(mConn.data());
+    mRoster->removeConnection(mConn);
     mConn.reset();
 }
 
diff --git a/examples/roster/roster-widget.cpp b/examples/roster/roster-widget.cpp
index 60c4c6d..0fde9f2 100644
--- a/examples/roster/roster-widget.cpp
+++ b/examples/roster/roster-widget.cpp
@@ -59,7 +59,7 @@ RosterWidget::~RosterWidget()
 {
 }
 
-void RosterWidget::addConnection(Connection *conn)
+void RosterWidget::addConnection(const ConnectionPtr &conn)
 {
     mConns.append(conn);
     connect(conn->becomeReady(Connection::FeatureRoster),
@@ -67,11 +67,23 @@ void RosterWidget::addConnection(Connection *conn)
             SLOT(onConnectionReady(Telepathy::Client::PendingOperation *)));
 }
 
-void RosterWidget::removeConnection(Connection *conn)
+void RosterWidget::removeConnection(const ConnectionPtr &conn)
 {
-    // TODO remove all contacts from this connection
-    //      if there is only one connection left, disable all actions/buttons
+    int i = 0;
+    while (i < mList->count()) {
+        RosterItem *item = (RosterItem *) mList->item(i);
+        if (item->contact()->manager()->connection() == conn) {
+            mList->takeItem(i);
+            delete item;
+            continue;
+        }
+        ++i;
+    }
     mConns.removeOne(conn);
+    if (mConns.count() == 0) {
+        updateActions();
+        mAddBtn->setEnabled(false);
+    }
 }
 
 void RosterWidget::createActions()
@@ -173,7 +185,7 @@ void RosterWidget::onConnectionReady(Telepathy::Client::PendingOperation *op)
     }
 
     PendingReady *pr = qobject_cast<PendingReady *>(op);
-    Connection *conn = qobject_cast<Connection *>(pr->object());
+    ConnectionPtr conn = ConnectionPtr(qobject_cast<Connection *>(pr->object()));
     connect(conn->contactManager(),
             SIGNAL(presencePublicationRequested(const Telepathy::Client::Contacts &)),
             SLOT(onPresencePublicationRequested(const Telepathy::Client::Contacts &)));
diff --git a/examples/roster/roster-widget.h b/examples/roster/roster-widget.h
index d9c9c20..00bc437 100644
--- a/examples/roster/roster-widget.h
+++ b/examples/roster/roster-widget.h
@@ -50,9 +50,9 @@ public:
     RosterWidget(QWidget *parent = 0);
     virtual ~RosterWidget();
 
-    QList<Telepathy::Client::Connection *> connections() const { return mConns; }
-    void addConnection(Telepathy::Client::Connection *conn);
-    void removeConnection(Telepathy::Client::Connection *conn);
+    QList<Telepathy::Client::ConnectionPtr> connections() const { return mConns; }
+    void addConnection(const Telepathy::Client::ConnectionPtr &conn);
+    void removeConnection(const Telepathy::Client::ConnectionPtr &conn);
 
     QListWidget *listWidget() const { return mList; }
 
@@ -78,7 +78,7 @@ private:
     void createActions();
     void setupGui();
 
-    QList<Telepathy::Client::Connection *> mConns;
+    QList<Telepathy::Client::ConnectionPtr> mConns;
     QAction *mAuthAction;
     QAction *mRemoveAction;
     QAction *mDenyAction;
diff --git a/examples/roster/roster-window.cpp b/examples/roster/roster-window.cpp
index d1d2ade..1909ea4 100644
--- a/examples/roster/roster-window.cpp
+++ b/examples/roster/roster-window.cpp
@@ -109,7 +109,7 @@ void RosterWindow::onConnectionConnected(Telepathy::Client::PendingOperation *op
     }
 
     PendingReady *pr = qobject_cast<PendingReady *>(op);
-    Connection *conn = qobject_cast<Connection *>(pr->object());
+    ConnectionPtr conn = ConnectionPtr(qobject_cast<Connection *>(pr->object()));
     mRoster->addConnection(conn);
 }
 
@@ -120,7 +120,7 @@ void RosterWindow::onConnectionInvalidated(DBusProxy *proxy,
         errorName << "-" << errorMessage;
     foreach (const ConnectionPtr &conn, mConns) {
         if (conn.data() == proxy) {
-            mRoster->removeConnection(conn.data());
+            mRoster->removeConnection(conn);
             mConns.removeOne(conn);
         }
     }
-- 
1.5.6.5




More information about the telepathy-commits mailing list