diff options
author | Gregorio Guidi <greg_g@gentoo.org> | 2005-04-03 23:46:26 +0000 |
---|---|---|
committer | Gregorio Guidi <greg_g@gentoo.org> | 2005-04-03 23:46:26 +0000 |
commit | 12b25b6fd2d601d4b881347155a9c3b0c1f2b214 (patch) | |
tree | d0857282e24e41b5096111b1d53576b0a3fd2029 /kde-base | |
parent | Fix patch. (diff) | |
download | historical-12b25b6fd2d601d4b881347155a9c3b0c1f2b214.tar.gz historical-12b25b6fd2d601d4b881347155a9c3b0c1f2b214.tar.bz2 historical-12b25b6fd2d601d4b881347155a9c3b0c1f2b214.zip |
Add patches for bug #86446 (crash on logout) and for bug #87485 (handling of names with spaces).
Package-Manager: portage-2.0.51.19
Diffstat (limited to 'kde-base')
-rw-r--r-- | kde-base/kopete/ChangeLog | 10 | ||||
-rw-r--r-- | kde-base/kopete/files/digest-kopete-3.4.0-r1 | 1 | ||||
-rw-r--r-- | kde-base/kopete/files/kdenetwork-3.4.0-kopete-logout.patch | 534 | ||||
-rw-r--r-- | kde-base/kopete/files/kdenetwork-3.4.0-kopete-spaces.patch | 225 | ||||
-rw-r--r-- | kde-base/kopete/kopete-3.4.0-r1.ebuild | 20 |
5 files changed, 789 insertions, 1 deletions
diff --git a/kde-base/kopete/ChangeLog b/kde-base/kopete/ChangeLog index 7225dcf2d8f5..73d4a932d97d 100644 --- a/kde-base/kopete/ChangeLog +++ b/kde-base/kopete/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog for kde-base/kopete # Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/kde-base/kopete/ChangeLog,v 1.7 2005/03/26 00:41:47 weeve Exp $ +# $Header: /var/cvsroot/gentoo-x86/kde-base/kopete/ChangeLog,v 1.8 2005/04/03 23:46:26 greg_g Exp $ + +*kopete-3.4.0-r1 (03 Apr 2005) + + 03 Apr 2005; Gregorio Guidi <greg_g@gentoo.org> + +files/kdenetwork-3.4.0-kopete-logout.patch, + +files/kdenetwork-3.4.0-kopete-spaces.patch, +kopete-3.4.0-r1.ebuild: + Add patches for bug #86446 (crash on logout) and for bug #87485 (handling of + names with spaces). 26 Mar 2005; Jason Wever <weeve@gentoo.org> kopete-3.4.0.ebuild: Added ~sparc keyword. diff --git a/kde-base/kopete/files/digest-kopete-3.4.0-r1 b/kde-base/kopete/files/digest-kopete-3.4.0-r1 new file mode 100644 index 000000000000..8bdd86e1c2ed --- /dev/null +++ b/kde-base/kopete/files/digest-kopete-3.4.0-r1 @@ -0,0 +1 @@ +MD5 47a8d21ce486426caf56bf6129ce993f kdenetwork-3.4.0.tar.bz2 7327047 diff --git a/kde-base/kopete/files/kdenetwork-3.4.0-kopete-logout.patch b/kde-base/kopete/files/kdenetwork-3.4.0-kopete-logout.patch new file mode 100644 index 000000000000..ae1d402a00da --- /dev/null +++ b/kde-base/kopete/files/kdenetwork-3.4.0-kopete-logout.patch @@ -0,0 +1,534 @@ +diff -Nur kdenetwork-3.4.0.orig/kopete/kopete/chatwindow/kopetechatwindow.cpp kdenetwork-3.4.0/kopete/kopete/chatwindow/kopetechatwindow.cpp +--- kdenetwork-3.4.0.orig/kopete/kopete/chatwindow/kopetechatwindow.cpp 2005-02-23 11:30:49.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/kopete/chatwindow/kopetechatwindow.cpp 2005-04-04 00:12:30.000000000 +0200 +@@ -26,6 +26,7 @@ + #include <qtooltip.h> + #include <qfileinfo.h> + ++#include <kapplication.h> + #include <kcursor.h> + #include <klocale.h> + #include <kmenubar.h> +@@ -49,6 +50,7 @@ + #include "chatmessagepart.h" + #include "chattexteditpart.h" + #include "chatview.h" ++#include "../kopeteapplication.h" + #include "kopetechatwindow.h" + #include "kopeteemoticonaction.h" + #include "kopetegroup.h" +@@ -214,6 +216,7 @@ + KGlobal::config()->setGroup( QString::fromLatin1("ChatWindowSettings") ); + m_alwaysShowTabs = KGlobal::config()->readBoolEntry( QString::fromLatin1("AlwaysShowTabs"), false ); + // kdDebug( 14010 ) << k_funcinfo << "Open Windows: " << windows.count() << endl; ++ kapp->ref(); + } + + KopeteChatWindow::~KopeteChatWindow() +@@ -261,6 +264,7 @@ + } + + delete anim; ++ kapp->deref(); + } + + void KopeteChatWindow::windowListChanged() +@@ -1030,13 +1034,8 @@ + m_activeView->addText( sm ); + } + +-void KopeteChatWindow::closeEvent( QCloseEvent *e ) ++bool KopeteChatWindow::queryClose() + { +-// kdDebug( 14010 ) << k_funcinfo << endl; +- +- // FIXME: This should only check if it *can* close +- // and not start closing if the close can be aborted halfway, it would +- // leave us with half the chats open and half of them closed. - Martijn + bool canClose = true; + + // kdDebug( 14010 ) << " Windows left open:" << endl; +@@ -1049,6 +1048,10 @@ + // move out of the way before view is removed + ++it; + ++ // FIXME: This should only check if it *can* close ++ // and not start closing if the close can be aborted halfway, it would ++ // leave us with half the chats open and half of them closed. - Martijn ++ + // if the view is closed, it is removed from chatViewList for us + if ( !view->closeView() ) + { +@@ -1056,21 +1059,44 @@ + canClose = false; + } + } ++ return canClose; ++} + +- if ( canClose ) ++bool KopeteChatWindow::queryExit() ++{ ++ KopeteApplication *app = static_cast<KopeteApplication *>( kapp ); ++ if ( app->sessionSaving() ++ || app->isShuttingDown() /* only set if KopeteApplication::quitKopete() or ++ KopeteApplication::commitData() called */ ++ || !KopetePrefs::prefs()->showTray() /* also close if our tray icon is hidden! */ ++ || !isShown() ) + { ++ Kopete::PluginManager::self()->shutdown(); ++ return true; ++ } ++ else ++ return false; ++} ++ ++void KopeteChatWindow::closeEvent( QCloseEvent * e ) ++{ ++ // if there's a system tray applet and we are not shutting down then just do what needs to be done if a ++ // window is closed. ++ KopeteApplication *app = static_cast<KopeteApplication *>( kapp ); ++ if ( KopetePrefs::prefs()->showTray() && !app->isShuttingDown() && !app->sessionSaving() ) { ++ hide(); ++/* // BEGIN of code borrowed from KMainWindow::closeEvent + // Save settings if auto-save is enabled, and settings have changed + if ( settingsDirty() && autoSaveSettings() ) + saveAutoSaveSettings(); +- +- e->accept(); +- +- // DO NOT call base class's closeEvent - see comment in KopeteApplication constructor for reason ++ ++ if ( queryClose() ) { ++ e->accept(); ++ } ++ // END of code borrowed from KMainWindow::closeEvent*/ + } + else +- { +- e->ignore(); +- } ++ KMainWindow::closeEvent( e ); + } + + void KopeteChatWindow::slotConfKeys() +diff -Nur kdenetwork-3.4.0.orig/kopete/kopete/chatwindow/kopetechatwindow.h kdenetwork-3.4.0/kopete/kopete/chatwindow/kopetechatwindow.h +--- kdenetwork-3.4.0.orig/kopete/kopete/chatwindow/kopetechatwindow.h 2004-11-17 13:05:31.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/kopete/chatwindow/kopetechatwindow.h 2005-04-04 00:12:30.000000000 +0200 +@@ -94,6 +94,13 @@ + void updateMembersActions(); + void setStatus( const QString & ); + ++ /** ++ * Reimplemented from KMainWindow - asks each ChatView in the window if it is ok to close the window ++ * @return true if no ChatView objects to closing. ++ */ ++ virtual bool queryClose(); ++ virtual bool queryExit(); ++ + KTempFile *backgroundFile; + QPtrList<ChatView> chatViewList; + +diff -Nur kdenetwork-3.4.0.orig/kopete/kopete/kopeteapplication.cpp kdenetwork-3.4.0/kopete/kopete/kopeteapplication.cpp +--- kdenetwork-3.4.0.orig/kopete/kopete/kopeteapplication.cpp 2005-02-03 23:52:01.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/kopete/kopeteapplication.cpp 2005-04-04 00:12:30.000000000 +0200 +@@ -55,25 +55,7 @@ + m_isShuttingDown = false; + m_mainWindow = new KopeteWindow( 0, "mainWindow" ); + +- /* KMainWindow is very broken from our point of view - it deref()'s the app +- * when the last visible KMainWindow is destroyed. This is broken for a number +- * of reasons, not least because it can happen more than once within a single +- * instance of Kopete. Also, our main window is hidden when it's in the tray, +- * and closing the last chatwindow when in that state can cause the app to quit. +- * +- * KopeteApplication's reference counting scheme is different to that of a normal +- * KDE application. It works as follows: the Kopete::PluginManager has a reference +- * to the application. No windows ever call KMainWindow::closeEvent, so KMainWindow +- * doesn't stupidly deref() our application. This ensures that the application +- * reference counting still works properly, and that the application terminates +- * neither too early (bug 75805) nor too late (bug 71657). - Richard +- */ +- +- // KApplication sets the reference count to 1 on startup. Kopete::PluginManager has a +- // reference to us once created, so create it and drop our own reference. + Kopete::PluginManager::self(); +- deref(); +- + + Kopete::UI::Global::setMainWidget( m_mainWindow ); + +@@ -106,6 +88,8 @@ + + //Create the emoticon installer + m_emoticonHandler = new Kopete::EmoticonMimeTypeHandler; ++ ++ QObject::connect( this, SIGNAL( aboutToQuit() ), SLOT( slotCleanShutdown() ) ); + } + + KopeteApplication::~KopeteApplication() +@@ -223,7 +207,6 @@ + } + } + +- + void KopeteApplication::slotAllPluginsLoaded() + { + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); +@@ -320,41 +303,28 @@ + { + kdDebug( 14000 ) << k_funcinfo << endl; + +- if ( !m_isShuttingDown ) +- { +- m_isShuttingDown = true; ++ m_isShuttingDown = true; + +-#if KDE_VERSION < KDE_MAKE_VERSION( 3, 1, 90 ) +- // When we close Kopete through KSystemTray, kdelibs will close all open +- // windows first. However, despite the destructive close the main window +- // is _NOT_ yet deleted at this point (it's a scheduled deleteLater() +- // call). +- // Due to a bug in KMainWindow prior to KDE 3.2 calling close() a second +- // time also derefs KApplication a second time, which causes a premature +- // call to KApplication::quit(), so we never go through the plugin +- // manager's shutdown process. +- // Unfortunately we can't assume close() ever being called though, +- // because the code paths not using the system tray still need this. +- // As a workaround we schedule a call to quitKopete() through a timer, +- // so the event loop is processed and the window is already deleted. +- // - Martijn +- QTimer::singleShot( 0, this, SLOT( quitKopete() ) ); +- return; +-#endif ++ // close all windows ++ QPtrListIterator<KMainWindow> it(*KMainWindow::memberList); ++ for (it.toFirst(); it.current(); ++it) ++ { ++ if ( !it.current()->close() ) ++ { ++ m_isShuttingDown = false; ++ break; ++ } + } ++} + +- if ( !m_mainWindow.isNull() ) +- m_mainWindow->close(); +- ++void KopeteApplication::slotCleanShutdown() ++{ + // save the contact list now, just in case a change was made very recently + // and it hasn't autosaved yet + Kopete::ContactList::self()->save(); + Kopete::AccountManager::self()->save(); + +- //unload plugins and shutdown +- Kopete::PluginManager::self()->shutdown(); + } +- + void KopeteApplication::commitData( QSessionManager &sm ) + { + m_isShuttingDown = true; +diff -Nur kdenetwork-3.4.0.orig/kopete/kopete/kopeteapplication.h kdenetwork-3.4.0/kopete/kopete/kopeteapplication.h +--- kdenetwork-3.4.0.orig/kopete/kopete/kopeteapplication.h 2004-02-29 04:52:59.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/kopete/kopeteapplication.h 2005-04-04 00:12:30.000000000 +0200 +@@ -58,7 +58,8 @@ + + public slots: + /** +- * Quit Kopete. This method marks Kopete as 'shutting down' to avoid ++ * Quit Kopete, closing all the windows, which causes application shutdown ++ * This method marks Kopete as 'shutting down' to avoid + * showing the message box that Kopete will be left running in the + * system tray before calling qApp->quit(). + */ +@@ -75,7 +76,7 @@ + * auto-connect + */ + void slotAllPluginsLoaded(); +- ++ void slotCleanShutdown(); + private: + // The main window might get deleted behind our back (W_DestructiveClose), + // so use a guarded pointer +diff -Nur kdenetwork-3.4.0.orig/kopete/kopete/kopetewindow.cpp kdenetwork-3.4.0/kopete/kopete/kopetewindow.cpp +--- kdenetwork-3.4.0.orig/kopete/kopete/kopetewindow.cpp 2005-02-25 11:52:29.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/kopete/kopetewindow.cpp 2005-04-04 00:12:30.000000000 +0200 +@@ -67,9 +67,32 @@ + #include "kopeteuiglobal.h" + #include "systemtray.h" + ++/* KMainWindow is very broken from our point of view - it deref()'s the app ++ * when the last visible KMainWindow is destroyed. But when our main window is ++ * hidden when it's in the tray,closing the last chatwindow would cause the app ++ * to quit. - Richard ++ * ++ * Fortunately KMainWindow checks queryExit before deref()ing the Kapplication. ++ * KopeteWindow reimplements queryExit() and only returns true if it is shutting down ++ * (either because the user quit Kopete, or the session manager did). ++ * ++ * KopeteWindow and ChatWindows are closed by session management. ++ * App shutdown is not performed by the KopeteWindow but by KopeteApplication: ++ * 1) user quit - KopeteWindow::slotQuit() was called, calls KopeteApplication::quitKopete(), ++ * which closes all chatwindows and the KopeteWindow. The last window to close ++ * shuts down the PluginManager in queryExit(). When the PluginManager has completed its ++ * shutdown, the app is finally deref()ed, and the contactlist and accountmanager ++ * are saved. ++ * and calling KApplication::quit() ++ * 2) session - KopeteWindow and all chatwindows are closed by KApplication session management. ++ * quit Then the shutdown proceeds as above. ++ * ++ * queryClose() is honoured so group chats and chats receiving recent messages can interrupt ++ * (session) quit. ++ */ + + KopeteWindow::KopeteWindow( QWidget *parent, const char *name ) +-: KMainWindow( parent, name ) ++: KMainWindow( parent, name, WType_TopLevel ) + { + // Applications should ensure that their StatusBar exists before calling createGUI() + // so that the StatusBar is always correctly positioned when KDE is configured to use +@@ -446,42 +469,59 @@ + Kopete::AccountManager::self()->setAwayAll( awayReason ); + } + +-void KopeteWindow::closeEvent( QCloseEvent *e ) ++ ++bool KopeteWindow::queryClose() + { +- // Note that KSystemTray closes all windows when you select quit() +- // from it. This means that closeEvent will be called twice on exit. + KopeteApplication *app = static_cast<KopeteApplication *>( kapp ); ++ if ( !app->sessionSaving() // if we are just closing but not shutting down ++ && !app->isShuttingDown() ++ && KopetePrefs::prefs()->showTray() ++ && isShown() ) ++ // I would make this a KMessageBox::queuedMessageBox but there doesn't seem to be don'tShowAgain support for those ++ KMessageBox::information( this, ++ i18n( "<qt>Closing the main window will keep Kopete running in the " ++ "system tray. Use 'Quit' from the 'File' menu to quit the application.</qt>" ), ++ i18n( "Docking in System Tray" ), "hideOnCloseInfo" ); ++// else // we are shutting down either user initiated or session management ++// Kopete::PluginManager::self()->shutdown(); ++ ++ return true; ++} + +- // also close if our tray icon is hidden! +- if( app->isShuttingDown() || !KopetePrefs::prefs()->showTray() || !isShown() ) ++bool KopeteWindow::queryExit() ++{ ++ KopeteApplication *app = static_cast<KopeteApplication *>( kapp ); ++ if ( app->sessionSaving() ++ || app->isShuttingDown() /* only set if KopeteApplication::quitKopete() or ++ KopeteApplication::commitData() called */ ++ || !KopetePrefs::prefs()->showTray() /* also close if our tray icon is hidden! */ ++ || !isShown() ) + { +- // DO NOT call base class's closeEvent - see comment in KopeteApplication constructor for reason ++ Kopete::PluginManager::self()->shutdown(); ++ return true; ++ } ++ else ++ return false; ++} ++ ++void KopeteWindow::closeEvent( QCloseEvent *e ) ++{ ++ // if there's a system tray applet and we are not shutting down then just do what needs to be done if a ++ // window is closed. ++ KopeteApplication *app = static_cast<KopeteApplication *>( kapp ); ++ if ( KopetePrefs::prefs()->showTray() && !app->isShuttingDown() && !app->sessionSaving() ) { ++ // BEGIN of code borrowed from KMainWindow::closeEvent + // Save settings if auto-save is enabled, and settings have changed + if ( settingsDirty() && autoSaveSettings() ) + saveAutoSaveSettings(); +- +- e->accept(); +- +- //If we're not showing the tray, and they close the window (via the 'X' in the titlebar), +- //workaround the fact that accepting the close event doesn't cause kopete to shutdown +- if ( !app->isShuttingDown() ) +- { +- queryExit(); +- slotQuit(); ++ ++ if ( queryClose() ) { ++ e->accept(); + } +- +- //may never get called +- return; ++ // END of code borrowed from KMainWindow::closeEvent + } +- +- // FIXME: KDE 3.3: use queuedMessageBox +- KMessageBox::information( this, +- i18n( "<qt>Closing the main window will keep Kopete running in the " +- "system tray. Use 'Quit' from the 'File' menu to quit the application.</qt>" ), +- i18n( "Docking in System Tray" ), "hideOnCloseInfo" ); +- +- hide(); +- e->ignore(); ++ else ++ KMainWindow::closeEvent( e ); + } + + void KopeteWindow::slotQuit() +diff -Nur kdenetwork-3.4.0.orig/kopete/kopete/kopetewindow.h kdenetwork-3.4.0/kopete/kopete/kopetewindow.h +--- kdenetwork-3.4.0.orig/kopete/kopete/kopetewindow.h 2005-02-23 11:30:49.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/kopete/kopetewindow.h 2005-04-04 00:12:30.000000000 +0200 +@@ -190,6 +190,8 @@ + void makeTrayToolTip(); + void startAutoHideTimer(); + ++ virtual bool queryClose(); ++ virtual bool queryExit(); + private: + int docked; + bool hidden; +diff -Nur kdenetwork-3.4.0.orig/kopete/kopete/systemtray.cpp kdenetwork-3.4.0/kopete/kopete/systemtray.cpp +--- kdenetwork-3.4.0.orig/kopete/kopete/systemtray.cpp 2005-02-03 23:52:01.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/kopete/systemtray.cpp 2005-04-04 00:12:30.000000000 +0200 +@@ -25,6 +25,7 @@ + + #include <kwin.h> + #include <kaboutdata.h> ++#include <kactioncollection.h> + #include <kapplication.h> + #include <kdebug.h> + #include <kiconloader.h> +@@ -36,7 +37,7 @@ + #include "kopeteaccount.h" + #include "kopeteaccountmanager.h" + #include "kopetecontact.h" +- ++#include "kopetewindow.h" + + KopeteSystemTray* KopeteSystemTray::s_systemTray = 0L; + +@@ -70,6 +71,18 @@ + const Kopete::OnlineStatus &, const Kopete::OnlineStatus &)), + this, SLOT(slotReevaluateAccountStates())); + ++ // the slot called by default by the quit action, KSystemTray::maybeQuit(), ++ // just closes the parent window, which is hard to distinguish in that window's closeEvent() ++ // from a click on the window's close widget ++ // in the quit case, we want to quit the application ++ // in the close widget click case, we only want to hide the parent window ++ // so instead, we make it call our general purpose quit slot on the window, which causes a window close and everything else we need ++ // KDE4 - app will have to listen for quitSelected instead ++ KAction *quit = actionCollection()->action( "file_quit" ); ++ quit->disconnect(); ++ KopeteWindow *myParent = static_cast<KopeteWindow *>( parent ); ++ connect( quit, SIGNAL( activated() ), myParent, SLOT( slotQuit() ) ); ++ + //setPixmap(mKopeteIcon); + slotReevaluateAccountStates(); + slotConfigChanged(); +diff -Nur kdenetwork-3.4.0.orig/kopete/libkopete/kopeteaccount.cpp kdenetwork-3.4.0/kopete/libkopete/kopeteaccount.cpp +--- kdenetwork-3.4.0.orig/kopete/libkopete/kopeteaccount.cpp 2005-03-04 10:53:38.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/libkopete/kopeteaccount.cpp 2005-04-04 00:12:30.000000000 +0200 +@@ -97,6 +97,7 @@ + while ( !d->contacts.isEmpty() ) + delete *QDictIterator<Contact>( d->contacts ); + ++ kdDebug( 14010 ) << k_funcinfo << " account '" << d->id << "' about to emit accountDestroyed " << endl; + emit accountDestroyed(this); + + delete d->myself; +diff -Nur kdenetwork-3.4.0.orig/kopete/libkopete/kopetepluginmanager.cpp kdenetwork-3.4.0/kopete/libkopete/kopetepluginmanager.cpp +--- kdenetwork-3.4.0.orig/kopete/libkopete/kopetepluginmanager.cpp 2004-10-17 20:37:16.000000000 +0200 ++++ kdenetwork-3.4.0/kopete/libkopete/kopetepluginmanager.cpp 2005-04-04 00:12:30.000000000 +0200 +@@ -101,7 +101,7 @@ + PluginManager::~PluginManager() + { + if ( d->shutdownMode != Private::DoneShutdown ) +- kdWarning( 14010 ) << k_funcinfo << "Destructing plugin manager without going through the shutdown process!" << endl << kdBacktrace() << endl; ++ kdWarning( 14010 ) << k_funcinfo << "Destructing plugin manager without going through the shutdown process! Backtrace is: " << endl << kdBacktrace() << endl; + + // Quick cleanup of the remaining plugins, hope it helps + // Note that deleting it.data() causes slotPluginDestroyed to be called, which +@@ -160,7 +160,7 @@ + + void PluginManager::shutdown() + { +- //kdDebug( 14010 ) << k_funcinfo << endl; ++ kdDebug( 14010 ) << k_funcinfo << kdBacktrace() << endl; + + d->shutdownMode = Private::ShuttingDown; + +@@ -200,6 +200,7 @@ + // FIXME: I don't buy the above argument. Add a Kopete::Plugin::emitReadyForUnload(void), + // and make readyForUnload be passed a plugin. - Richard + Plugin *plugin = dynamic_cast<Plugin *>( const_cast<QObject *>( sender() ) ); ++ kdDebug( 14010 ) << k_funcinfo << plugin->pluginId() << "ready for unload" << endl; + if ( !plugin ) + { + kdWarning( 14010 ) << k_funcinfo << "Calling object is not a plugin!" << endl; +diff -Nur kdenetwork-3.4.0.orig/kopete/libkopete/kopetepluginmanager.h kdenetwork-3.4.0/kopete/libkopete/kopetepluginmanager.h +--- kdenetwork-3.4.0.orig/kopete/libkopete/kopetepluginmanager.h 2004-11-18 23:12:09.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/libkopete/kopetepluginmanager.h 2005-04-04 00:12:30.000000000 +0200 +@@ -175,7 +175,6 @@ + * is neglectable for the user. + */ + void allPluginsLoaded(); +- + private slots: + /** + * @brief Cleans up some references if the plugin is destroyed +diff -Nur kdenetwork-3.4.0.orig/kopete/libkopete/kopeteprotocol.cpp kdenetwork-3.4.0/kopete/libkopete/kopeteprotocol.cpp +--- kdenetwork-3.4.0.orig/kopete/libkopete/kopeteprotocol.cpp 2004-12-04 15:39:03.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/libkopete/kopeteprotocol.cpp 2005-04-04 00:12:30.000000000 +0200 +@@ -96,6 +96,8 @@ + {//slot connected in aboutToUnload + if ( !self || !self->account() || self->account()->isConnected()) + return; ++ // some protocols change status several times during shutdown. We should only call deleteLater() once ++ disconnect( self, 0, this, 0 ); + + connect( self->account(), SIGNAL(accountDestroyed(const Kopete::Account* )), + this, SLOT( slotAccountDestroyed( ) ) ); +@@ -105,15 +107,23 @@ + + void Protocol::slotAccountDestroyed( ) + { ++ kdDebug( 14010 ) << k_funcinfo << " an account was destroyed" << endl; + QDict<Account> dict = AccountManager::self()->accounts( this ); + if ( dict.isEmpty() ) + { ++ kdDebug( 14010 ) << "all gone, we are ready for unload" << endl; + // While at this point we are still in a stack trace from the destroyed + // account it's safe to emit readyForUnload already, because it uses a + // deleteLater rather than a delete for exactly this reason, to keep the + // API managable + emit( readyForUnload() ); + } ++ else ++ { ++ kdDebug( 14010 ) << "protocol still has " << dict.count() << " accounts:" << endl; ++ for( QDictIterator<Account> di(dict); di.current(); ++di ) ++ kdDebug( 14010 ) << " " << di.currentKey() << " : " << di.current()->accountId() << endl; ++ } + } + + void Protocol::aboutToUnload() +@@ -121,8 +131,6 @@ + + d->unloading = true; + +- bool allDisconnected = true; +- + // Disconnect all accounts + QDict<Account> accounts = AccountManager::self()->accounts( this ); + +@@ -139,8 +147,6 @@ + SIGNAL( onlineStatusChanged( Kopete::Contact *, const Kopete::OnlineStatus &, const Kopete::OnlineStatus & ) ), + this, SLOT( slotAccountOnlineStatusChanged( Kopete::Contact * ) ) ); + it.current()->disconnect(); +- +- allDisconnected = false; + } + else + { diff --git a/kde-base/kopete/files/kdenetwork-3.4.0-kopete-spaces.patch b/kde-base/kopete/files/kdenetwork-3.4.0-kopete-spaces.patch new file mode 100644 index 000000000000..26c8382f3684 --- /dev/null +++ b/kde-base/kopete/files/kdenetwork-3.4.0-kopete-spaces.patch @@ -0,0 +1,225 @@ +diff -Nur kdenetwork-3.4.0.orig/kopete/protocols/oscar/aim/aimcontact.cpp kdenetwork-3.4.0/kopete/protocols/oscar/aim/aimcontact.cpp +--- kdenetwork-3.4.0.orig/kopete/protocols/oscar/aim/aimcontact.cpp 2005-02-23 11:30:54.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/protocols/oscar/aim/aimcontact.cpp 2005-04-04 01:41:26.000000000 +0200 +@@ -145,7 +145,7 @@ + + void AIMContact::userInfoUpdated( const QString& contact, const UserDetails& details ) + { +- if ( contact.lower() != contactId().lower() ) ++ if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) + return; + + kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << contact << endl; +@@ -179,7 +179,7 @@ + + void AIMContact::userOnline( const QString& userId ) + { +- if ( userId.lower() == contactId().lower() ) ++ if ( Oscar::normalize( userId ) == Oscar::normalize( contactId() ) ) + { + kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Getting more contact info" << endl; + setOnlineStatus( mProtocol->statusOnline ); +@@ -197,7 +197,7 @@ + + void AIMContact::updateAwayMessage( const QString& contact, const QString& message ) + { +- if ( contact.lower() != contactId().lower() ) ++ if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) + return; + else + { +@@ -220,7 +220,7 @@ + + void AIMContact::updateProfile( const QString& contact, const QString& profile ) + { +- if ( contact.lower() != contactId().lower() ) ++ if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) + return; + + setProperty( mProtocol->clientProfile, profile ); +diff -Nur kdenetwork-3.4.0.orig/kopete/protocols/oscar/icq/icqcontact.cpp kdenetwork-3.4.0/kopete/protocols/oscar/icq/icqcontact.cpp +--- kdenetwork-3.4.0.orig/kopete/protocols/oscar/icq/icqcontact.cpp 2005-02-03 23:52:07.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/protocols/oscar/icq/icqcontact.cpp 2005-04-04 01:41:26.000000000 +0200 +@@ -106,7 +106,7 @@ + + void ICQContact::userOnline( const QString& userId ) + { +- if ( userId != contactId() ) ++ if ( Oscar::normalize( userId ) != Oscar::normalize( contactId() ) ) + return; + + kdDebug(OSCAR_ICQ_DEBUG) << "Setting " << userId << " online" << endl; +@@ -116,7 +116,7 @@ + + void ICQContact::userOffline( const QString& userId ) + { +- if ( userId != contactId() ) ++ if ( Oscar::normalize( userId ) != Oscar::normalize( contactId() ) ) + return; + + kdDebug(OSCAR_ICQ_DEBUG) << "Setting " << userId << " offline" << endl; +@@ -130,7 +130,7 @@ + setOnlineStatus( mProtocol->statusManager()->waitingForAuth() ); + + QString nickname = property( Kopete::Global::Properties::self()->nickName() ).value().toString(); +- if ( nickname.isEmpty() || nickname == contactId() ) ++ if ( nickname.isEmpty() || Oscar::normalize( nickname ) == Oscar::normalize( contactId() ) ) + { + int time = ( KApplication::random() % 25 ) * 1000; + kdDebug(OSCAR_ICQ_DEBUG) << k_funcinfo << "updating nickname in " << time/1000 << " seconds" << endl; +@@ -164,7 +164,7 @@ + + void ICQContact::slotGotAuthReply( const QString& contact, const QString& reason, bool granted ) + { +- if ( contact != contactId() ) ++ if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) + return; + + kdDebug(OSCAR_ICQ_DEBUG) << k_funcinfo << endl; +@@ -189,7 +189,7 @@ + + void ICQContact::slotGotAuthRequest( const QString& contact, const QString& reason ) + { +- if ( contact != contactId() ) ++ if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) + return; + + ICQAuthReplyDialog replyDialog; +@@ -202,7 +202,7 @@ + + void ICQContact::receivedLongInfo( const QString& contact ) + { +- if ( contact.lower() != contactId().lower() ) ++ if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) + { + if ( m_infoWidget ) + m_infoWidget->delayedDestruct(); +@@ -224,7 +224,7 @@ + + void ICQContact::receivedShortInfo( const QString& contact ) + { +- if ( contact != contactId() ) ++ if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) + return; + + ICQShortInfo shortInfo = mAccount->engine()->getShortInfo( contact ); +diff -Nur kdenetwork-3.4.0.orig/kopete/protocols/oscar/liboscar/ssiauthtask.cpp kdenetwork-3.4.0/kopete/protocols/oscar/liboscar/ssiauthtask.cpp +--- kdenetwork-3.4.0.orig/kopete/protocols/oscar/liboscar/ssiauthtask.cpp 2005-01-30 16:09:38.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/protocols/oscar/liboscar/ssiauthtask.cpp 2005-04-04 01:41:26.000000000 +0200 +@@ -21,6 +21,7 @@ + #include "transfer.h" + #include "buffer.h" + #include "connection.h" ++#include "oscarutils.h" + + #include <kdebug.h> + +@@ -135,7 +136,7 @@ + { + Buffer* buf = transfer()->buffer(); + +- QString uin = buf->getBUIN(); ++ QString uin = Oscar::normalize( buf->getBUIN() ); + QString reason = buf->getBSTR(); + + buf->getWord(); // 0x0000 - Unknown +@@ -149,7 +150,7 @@ + { + Buffer* buf = transfer()->buffer(); + +- QString uin = buf->getBUIN(); ++ QString uin = Oscar::normalize( buf->getBUIN() ); + QString reason = buf->getBSTR(); + + buf->getWord(); // 0x0000 - Unknown +@@ -164,7 +165,7 @@ + { + Buffer* buf = transfer()->buffer(); + +- QString uin = buf->getBUIN(); ++ QString uin = Oscar::normalize( buf->getBUIN() ); + bool accepted = buf->getByte(); + QString reason = buf->getBSTR(); + +@@ -186,7 +187,7 @@ + { + Buffer* buf = transfer()->buffer(); + +- QString uin = buf->getBUIN(); ++ QString uin = Oscar::normalize( buf->getBUIN() ); + + kdDebug( OSCAR_RAW_DEBUG ) << k_funcinfo << "User " << uin << " added you to the contact list" << endl; + emit contactAddedYou( uin ); +diff -Nur kdenetwork-3.4.0.orig/kopete/protocols/oscar/liboscar/ssilisttask.cpp kdenetwork-3.4.0/kopete/protocols/oscar/liboscar/ssilisttask.cpp +--- kdenetwork-3.4.0.orig/kopete/protocols/oscar/liboscar/ssilisttask.cpp 2005-01-25 16:10:19.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/protocols/oscar/liboscar/ssilisttask.cpp 2005-04-04 01:41:26.000000000 +0200 +@@ -110,6 +110,9 @@ + tlvList.append( t ); + } + ++ if ( itemType == ROSTER_CONTACT ) ++ itemName = Oscar::normalize( itemName ); ++ + Oscar::SSI s( itemName, groupId, itemId, itemType, tlvList ); + s.setTLVListLength( tlvLength ); + +diff -Nur kdenetwork-3.4.0.orig/kopete/protocols/oscar/liboscar/ssimodifytask.cpp kdenetwork-3.4.0/kopete/protocols/oscar/liboscar/ssimodifytask.cpp +--- kdenetwork-3.4.0.orig/kopete/protocols/oscar/liboscar/ssimodifytask.cpp 2005-02-01 20:41:08.000000000 +0100 ++++ kdenetwork-3.4.0/kopete/protocols/oscar/liboscar/ssimodifytask.cpp 2005-04-04 01:41:26.000000000 +0200 +@@ -41,7 +41,7 @@ + { + } + +-void SSIModifyTask::onGo( ) ++void SSIModifyTask::onGo() + { + sendSSIUpdate(); + } +@@ -62,7 +62,10 @@ + { + m_opType = Add; + m_opSubject = Contact; +- Oscar::SSI oldItem = m_ssiManager->findContact( contact ); ++ ++ QString newContact = Oscar::normalize( contact ); ++ ++ Oscar::SSI oldItem = m_ssiManager->findContact( newContact ); + Oscar::SSI groupItem = m_ssiManager->findGroup( group ); + + if ( !groupItem ) +@@ -81,7 +84,7 @@ + } + + kdDebug( OSCAR_RAW_DEBUG ) << k_funcinfo << "creating new SSI item for " << contact << " in group " << group << endl; +- Oscar::SSI newItem( contact, groupItem.gid(), m_ssiManager->nextContactId(), ROSTER_CONTACT, tlvList ); ++ Oscar::SSI newItem( newContact, groupItem.gid(), m_ssiManager->nextContactId(), ROSTER_CONTACT, tlvList ); + m_newItem = newItem; + return true; + } +@@ -90,7 +93,7 @@ + { + m_opType = Remove; + m_opSubject = Contact; +- m_oldItem = m_ssiManager->findContact( contact ); ++ m_oldItem = m_ssiManager->findContact( Oscar::normalize( contact ) ); + kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Scheduling" << m_oldItem.name() << " for removal" << endl; + return true; + } +@@ -99,7 +102,7 @@ + { + m_opType = Change; + m_opSubject = Group; +- m_oldItem = m_ssiManager->findContact( contact ); ++ m_oldItem = m_ssiManager->findContact( Oscar::normalize( contact ) ); + Oscar::SSI oldGroupItem; + if ( m_oldItem.isValid() ) + oldGroupItem = m_ssiManager->findGroup( newGroup ); +@@ -138,7 +141,7 @@ + return true; + } + +-bool SSIModifyTask::removeGroup( const QString & groupName ) ++bool SSIModifyTask::removeGroup( const QString& groupName ) + { + m_opType = Remove; + m_opSubject = Group; diff --git a/kde-base/kopete/kopete-3.4.0-r1.ebuild b/kde-base/kopete/kopete-3.4.0-r1.ebuild new file mode 100644 index 000000000000..a75e78509ef8 --- /dev/null +++ b/kde-base/kopete/kopete-3.4.0-r1.ebuild @@ -0,0 +1,20 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/kde-base/kopete/kopete-3.4.0-r1.ebuild,v 1.1 2005/04/03 23:46:26 greg_g Exp $ + +KMNAME=kdenetwork +MAXKDEVER=$PV +KM_DEPRANGE="$PV $MAXKDEVER" +inherit kde-meta eutils + +DESCRIPTION="KDE multi-protocol IM client" +KEYWORDS="~x86 ~amd64 ~ppc ~sparc" +IUSE="ssl" + +RDEPEND="ssl? ( app-crypt/qca-tls )" + +# fix kde bug 91288. Applied for 3.4.1. +PATCHES1="${FILESDIR}/kdenetwork-3.4.0-kopete-logout.patch" + +# fix kde bug 99671. Applied for 3.4.1. +PATCHES1="${PATCHES1} ${FILESDIR}/kdenetwork-3.4.0-kopete-spaces.patch" |