From kopete-devel Fri May 31 21:03:26 2002 From: Duncan Mac-Vicar Prett Date: Fri, 31 May 2002 21:03:26 +0000 To: kopete-devel Subject: Re: [Kopete-devel] BUGS (do you hate me yet martijn ?) X-MARC-Message: https://marc.info/?l=kopete-devel&m=102288132631937 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--------------Boundary-00=_QHUZVYUA40JROG0AUQES" --------------Boundary-00=_QHUZVYUA40JROG0AUQES Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Attached 2 patches, one for libkopete, another for msn, that prevents this to happen, if you disconnect, all protocol sessions willl not be able to send and MSN will clean its sessions automaticly when connected. old widnows are left open, may be the user want to finish reading them. Test them as muh as you can, if I dont receive any reply within a couple of hours I will commit and post the tarballs with this fix included. Apply the patches in libkopete and protocols/msn respectively Cheers Duncan -- ============================================= Duncan Mac-Vicar Prett | duncan@puc.cl | KDE Developer | duncan@kde.org | http://www.mac-vicar.com | ICQ: 31947372 | - Kopete, The KDE Instant Messenger http://kopete.kde.org ============================================= KDE 3.0, Konquer your Desktop. www.kde.org ============================================= Public Key available at: www.mac-vicar.com/~duncan/pgpkey.txt Key ID : 667E42D1 Fingerprint : 75DA 7B97 1FD6 ADB9 A880 BA9F CD1E B6A9 667E 42D1 --------------Boundary-00=_QHUZVYUA40JROG0AUQES Content-Type: text/x-diff; charset="iso-8859-1"; name="04-msnbug-libkopete.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="04-msnbug-libkopete.diff" Index: kopetemessagemanager.cpp =================================================================== RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanager.cpp,v retrieving revision 1.28 diff -u -3 -d -p -r1.28 kopetemessagemanager.cpp --- kopetemessagemanager.cpp 2002/05/25 16:03:42 1.28 +++ kopetemessagemanager.cpp 2002/05/31 21:03:12 @@ -32,7 +32,7 @@ KopeteMessageManager::KopeteMessageManag KopeteProtocol *protocol, QString logFile, enum WidgetType widget, QObject *parent, const char *name) : QObject( parent, name) { - + mSendEnabled = true; mContactList = others; mUser = user; mChatWindow = 0L; @@ -59,8 +59,19 @@ KopeteMessageManager::~KopeteMessageMana emit dying(this); } +void KopeteMessageManager::slotSendEnabled( bool e ) +{ + mSendEnabled = e; + if ( mChatWindow ) + { + mChatWindow->setSendEnabled(e); + } +} + void KopeteMessageManager::newChatWindow() { mChatWindow = new KopeteChatWindow(); + mChatWindow->setSendEnabled( mSendEnabled); + if (mContactList.first() != 0L) mChatWindow->setCaption(mContactList.first()->name()); //TODO: add multi-user support /* When the window is shown, we have to delete this contact event */ Index: kopetemessagemanager.h =================================================================== RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanager.h,v retrieving revision 1.14 diff -u -3 -d -p -r1.14 kopetemessagemanager.h --- kopetemessagemanager.h 2002/05/21 10:13:16 1.14 +++ kopetemessagemanager.h 2002/05/31 21:03:12 @@ -115,7 +115,7 @@ signals: public slots: void readModeChanged(); - + void slotSendEnabled( bool ); protected slots: void cancelUnreadMessageEvent(); void slotEventDeleted(KopeteEvent *); @@ -142,6 +142,7 @@ private: enum WidgetType mWidget; QMap resources; KopeteProtocol *mProtocol; + bool mSendEnabled; }; #endif Index: kopetemessagemanagerfactory.cpp =================================================================== RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanagerfactory.cpp,v retrieving revision 1.13 diff -u -3 -d -p -r1.13 kopetemessagemanagerfactory.cpp --- kopetemessagemanagerfactory.cpp 2002/05/26 16:18:24 1.13 +++ kopetemessagemanagerfactory.cpp 2002/05/31 21:03:12 @@ -113,5 +113,30 @@ void KopeteMessageManagerFactory::slotRe (mSessionList).remove(session); } +KopeteMessageManagerList KopeteMessageManagerFactory::protocolSessions( KopeteProtocol *protocol) +{ + KopeteMessageManager *tmpKmm; + KopeteMessageManagerList this_protocol_sessions; + for ( tmpKmm = mSessionList.first(); tmpKmm ; tmpKmm = mSessionList.next() ) + { + if ( tmpKmm->protocol() == protocol ) + { + this_protocol_sessions.append(tmpKmm); + } + } + return this_protocol_sessions; +} + +void KopeteMessageManagerFactory::cleanSessions( KopeteProtocol *protocol) +{ + KopeteMessageManager *tmpKmm; + KopeteMessageManagerList protocol_sessions = protocolSessions( protocol ); + for ( tmpKmm = protocol_sessions.first(); tmpKmm ; tmpKmm = protocol_sessions.next() ) + { + slotRemoveSession(tmpKmm); + } +} + + // vim: set noet ts=4 sts=4 sw=4: Index: kopetemessagemanagerfactory.h =================================================================== RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanagerfactory.h,v retrieving revision 1.9 diff -u -3 -d -p -r1.9 kopetemessagemanagerfactory.h --- kopetemessagemanagerfactory.h 2002/05/21 10:13:16 1.9 +++ kopetemessagemanagerfactory.h 2002/05/31 21:03:12 @@ -57,6 +57,14 @@ public: * Get a list of all open sessions */ static const KopeteMessageManagerList& sessions(); + /** + * Get a list of all open sessions for a protocol + */ + KopeteMessageManagerList protocolSessions( KopeteProtocol *); + /** + * Clean sessions for a protocol + */ + void cleanSessions( KopeteProtocol *); protected slots: void slotRemoveSession( KopeteMessageManager *session ); --------------Boundary-00=_QHUZVYUA40JROG0AUQES Content-Type: text/x-diff; charset="iso-8859-1"; name="04-msnbug-msnplugin.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="04-msnbug-msnplugin.diff" ? ui/msndebugrawcommand_base.cpp ? ui/msndebugrawcommand_base.h Index: msnprotocol.cpp =================================================================== RCS file: /home/kde/kdenonbeta/kopete/protocols/msn/msnprotocol.cpp,v retrieving revision 1.78 diff -u -3 -d -p -r1.78 msnprotocol.cpp --- msnprotocol.cpp 2002/05/29 14:07:44 1.78 +++ msnprotocol.cpp 2002/05/31 21:03:43 @@ -363,6 +363,7 @@ void MSNProtocol::slotOnlineStatusChange mIsConnected = status == MSNSocket::Connected; if ( mIsConnected ) { + kopeteapp->sessionFactory()->cleanSessions(this); // Sync public name when needed if( m_publicNameSyncNeeded ) { @@ -429,6 +430,14 @@ void MSNProtocol::slotOnlineStatusChange } else if( status == MSNSocket::Disconnected ) { + + KopeteMessageManagerList protocol_sessions = kopeteapp->sessionFactory()->protocolSessions( this ); + KopeteMessageManager *tmpKmm; + for ( tmpKmm = protocol_sessions.first(); tmpKmm ; tmpKmm = protocol_sessions.next() ) + { + tmpKmm->slotSendEnabled(false); + } + QMap::Iterator it = m_contacts.begin(); while( it != m_contacts.end() ) { --------------Boundary-00=_QHUZVYUA40JROG0AUQES-- _______________________________________________ Kopete-devel mailing list Kopete-devel@mail.kde.org http://mail.kde.org/mailman/listinfo/kopete-devel