All pastes #773882 Raw Edit

Meins

public cpp v1 · immutable
·published 2007-11-14 20:58 UTC
rendered paste body
Index: protocols/yahoo/yahooeditaccount.cpp===================================================================--- protocols/yahoo/yahooeditaccount.cpp	(Revision 736753)+++ protocols/yahoo/yahooeditaccount.cpp	(Arbeitskopie)@@ -96,21 +96,19 @@ 	show(); } -bool YahooEditAccount::validateData()+bool YahooEditAccount::validateData( Kopete::AccountChangeAction changeAction ) { 	kDebug(YAHOO_GEN_DEBUG) ; -	if(mScreenName->text().isEmpty())-	{	KMessageBox::queuedMessageBox(this, KMessageBox::Sorry,-			i18n("<qt>You must enter a valid screen name.</qt>"), i18n("Yahoo"));-		return false;-	}+	QString userName(mScreenName->text());+ 	if(!mPasswordWidget->validate()) 	{	KMessageBox::queuedMessageBox(this, KMessageBox::Sorry, 			i18n("<qt>You must enter a valid password.</qt>"), i18n("Yahoo")); 		return false; 	}-	return true;++	return validateAccountId("YahooProtocol", userName, changeAction); }  Kopete::Account *YahooEditAccount::apply()Index: protocols/yahoo/yahooeditaccount.h===================================================================--- protocols/yahoo/yahooeditaccount.h	(Revision 736753)+++ protocols/yahoo/yahooeditaccount.h	(Arbeitskopie)@@ -43,7 +43,7 @@ public: 	YahooEditAccount(YahooProtocol *protocol, Kopete::Account *theAccount, QWidget *parent = 0); -	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create );  public slots: 	virtual Kopete::Account *apply();Index: protocols/gadu/gadueditaccount.h===================================================================--- protocols/gadu/gadueditaccount.h	(Revision 736753)+++ protocols/gadu/gadueditaccount.h	(Arbeitskopie)@@ -38,7 +38,7 @@  public: 	GaduEditAccount( GaduProtocol*, Kopete::Account*, QWidget* parent = 0 );-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	Kopete::Account* apply();  private slots:Index: protocols/gadu/gadueditaccount.cpp===================================================================--- protocols/gadu/gadueditaccount.cpp	(Revision 736753)+++ protocols/gadu/gadueditaccount.cpp	(Arbeitskopie)@@ -210,15 +210,13 @@ }  bool-GaduEditAccount::validateData()+GaduEditAccount::validateData( Kopete::AccountChangeAction changeAction ) {--	if ( loginEdit_->text().isEmpty() ) {-		KMessageBox::sorry( this, i18n( "<b>Enter UIN please.</b>" ), i18n( "Gadu-Gadu" ) );+	QString userName(loginEdit_->text());+	if ( !validateAccountId("GaduProtocol", userName, changeAction) ) 		return false;-	} -	if ( loginEdit_->text().toInt() < 0 || loginEdit_->text().toInt() == 0 ) {+	if ( userName.toInt() <= 0 ) { 		KMessageBox::sorry( this, i18n( "<b>UIN should be a positive number.</b>" ), i18n( "Gadu-Gadu" ) ); 		return false; 	}Index: protocols/winpopup/wpeditaccount.cpp===================================================================--- protocols/winpopup/wpeditaccount.cpp	(Revision 736753)+++ protocols/winpopup/wpeditaccount.cpp	(Arbeitskopie)@@ -36,7 +36,6 @@ #include <kconfig.h> #include <kstandarddirs.h> - // Kopete Includes #include <addcontactpage.h> @@ -93,11 +92,12 @@ 	mProtocol->installSamba(); } -bool WPEditAccount::validateData()+bool WPEditAccount::validateData( Kopete::AccountChangeAction changeAction ) { 	kDebug(14170) << "WPEditAccount::validateData()"; -	if(mHostName->text().isEmpty()) {+	QString hostname(mHostName->text());+	if(hostname.isEmpty()) { 		KMessageBox::sorry(this, i18n("<qt>You must enter a valid screen name.</qt>"), i18n("WinPopup")); 		return false; 	}@@ -108,7 +108,7 @@ 		return false; 	} -	return true;+	return validateAccountId("WPProtocol", hostname, changeAction); }  void WPEditAccount::writeConfig()Index: protocols/winpopup/wpeditaccount.h===================================================================--- protocols/winpopup/wpeditaccount.h	(Revision 736753)+++ protocols/winpopup/wpeditaccount.h	(Arbeitskopie)@@ -43,7 +43,7 @@ public: 	WPEditAccount(QWidget *parent, Kopete::Account *theAccount); -	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	void writeConfig();  public slots:Index: protocols/qq/ui/qqeditaccountwidget.cpp===================================================================--- protocols/qq/ui/qqeditaccountwidget.cpp	(Revision 736753)+++ protocols/qq/ui/qqeditaccountwidget.cpp	(Arbeitskopie)@@ -165,14 +165,21 @@ 	return account(); } -bool QQEditAccountWidget::validateData()+bool QQEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { 	QString userid = d->ui->m_login->text();++	if ( !validateAccountId("QQProtocol", userid, changeAction) )+	{+		return false;+	}+ 	if ( QQProtocol::validContactId( userid ) ) 		return true;  	KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, 		i18n( "<qt>You must enter a valid email address.</qt>" ), i18n( "QQ Plugin" ) );+ 	return false; } Index: protocols/qq/ui/qqeditaccountwidget.h===================================================================--- protocols/qq/ui/qqeditaccountwidget.h	(Revision 736753)+++ protocols/qq/ui/qqeditaccountwidget.h	(Arbeitskopie)@@ -42,7 +42,7 @@ 	/** 	 * Is the data correct? 	 */-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create );  private slots: 	void slotOpenRegister();Index: protocols/groupwise/ui/gweditaccountwidget.cpp===================================================================--- protocols/groupwise/ui/gweditaccountwidget.cpp	(Revision 736753)+++ protocols/groupwise/ui/gweditaccountwidget.cpp	(Arbeitskopie)@@ -114,9 +114,12 @@ 	return account(); } -bool GroupWiseEditAccountWidget::validateData()+bool GroupWiseEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) {-    return !( m_preferencesDialog->m_userId->text().isEmpty() || m_preferencesDialog->m_server->text().isEmpty() );+	if (!validateAccountId("GroupwiseProtocol", m_preferencesDialog->m_userId->text(), changeAction))+		return false;++	return !m_preferencesDialog->m_server->text().isEmpty(); }  void GroupWiseEditAccountWidget::writeConfig()Index: protocols/groupwise/ui/gweditaccountwidget.h===================================================================--- protocols/groupwise/ui/gweditaccountwidget.h	(Revision 736753)+++ protocols/groupwise/ui/gweditaccountwidget.h	(Arbeitskopie)@@ -49,7 +49,7 @@ 	/** 	 * Is the data correct? 	 */-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); protected slots: 	void configChanged(); protected:Index: protocols/jabber/ui/jabbereditaccountwidget.cpp===================================================================--- protocols/jabber/ui/jabbereditaccountwidget.cpp	(Revision 736753)+++ protocols/jabber/ui/jabbereditaccountwidget.cpp	(Arbeitskopie)@@ -194,11 +194,17 @@ 	account()->configGroup()->writeEntry("HideSystemInfo", cbHideSystemInfo->isChecked()); } -bool JabberEditAccountWidget::validateData ()+bool JabberEditAccountWidget::validateData ( Kopete::AccountChangeAction changeAction ) {+	QString userId(mID->text()); -	if(!mID->text().contains('@'))+	if (!validateAccountId("JabberProtocol", userId, changeAction)) 	{+		return false;+	}++	if(!userId.contains('@'))+	{ 		KMessageBox::sorry(this, i18n("The Jabber ID you have chosen is invalid. " 							"Please make sure it is in the form user@server.com, like an email address."), 							i18n("Invalid Jabber ID"));Index: protocols/jabber/ui/jabbereditaccountwidget.h===================================================================--- protocols/jabber/ui/jabbereditaccountwidget.h	(Revision 736753)+++ protocols/jabber/ui/jabbereditaccountwidget.h	(Arbeitskopie)@@ -39,7 +39,7 @@ public: 	JabberEditAccountWidget (JabberProtocol * proto, JabberAccount *, QWidget * parent = 0); 	~JabberEditAccountWidget ();-	virtual bool validateData ();+	virtual bool validateData ( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	virtual Kopete::Account *apply (); 	JabberAccount *account (); Index: protocols/testbed/testbededitaccountwidget.cpp===================================================================--- protocols/testbed/testbededitaccountwidget.cpp	(Revision 736753)+++ protocols/testbed/testbededitaccountwidget.cpp	(Arbeitskopie)@@ -58,7 +58,7 @@ 	return account(); } -bool TestbedEditAccountWidget::validateData()+bool TestbedEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) {     //return !( m_preferencesWidget->m_acctName->text().isEmpty() ); 	return true;Index: protocols/testbed/testbededitaccountwidget.h===================================================================--- protocols/testbed/testbededitaccountwidget.h	(Revision 736753)+++ protocols/testbed/testbededitaccountwidget.h	(Arbeitskopie)@@ -45,7 +45,7 @@ 	/** 	 * Is the data correct? 	 */-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); protected: 	Kopete::Account *m_account; 	Ui::TestbedAccountPreferences *m_preferencesWidget;Index: protocols/msn/ui/msneditaccountwidget.cpp===================================================================--- protocols/msn/ui/msneditaccountwidget.cpp	(Revision 736753)+++ protocols/msn/ui/msneditaccountwidget.cpp	(Arbeitskopie)@@ -214,9 +214,15 @@ 	return account(); } -bool MSNEditAccountWidget::validateData()+bool MSNEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { 	QString userid = d->ui->m_login->text();++	if ( !validateAccountId("MSNProtocol", userid, changeAction) )+	{+		return false;+	}+ 	if ( MSNProtocol::validContactId( userid ) ) 		return true; Index: protocols/msn/ui/msneditaccountwidget.h===================================================================--- protocols/msn/ui/msneditaccountwidget.h	(Revision 736753)+++ protocols/msn/ui/msneditaccountwidget.h	(Arbeitskopie)@@ -39,7 +39,7 @@ public: 	MSNEditAccountWidget( MSNProtocol *proto, Kopete::Account *account, QWidget *parent = 0 ); 	~MSNEditAccountWidget();-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	virtual Kopete::Account * apply();  private slots:Index: protocols/telepathy/ui/telepathyeditaccountwidget.cpp===================================================================--- protocols/telepathy/ui/telepathyeditaccountwidget.cpp	(Revision 736753)+++ protocols/telepathy/ui/telepathyeditaccountwidget.cpp	(Arbeitskopie)@@ -105,7 +105,7 @@ 	return static_cast<TelepathyAccount*>( KopeteEditAccountWidget::account() ); } -bool TelepathyEditAccountWidget::validateData()+bool TelepathyEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { 	kDebug(TELEPATHY_DEBUG_AREA) ; 	// You must fill the form to move to the next stepIndex: protocols/telepathy/ui/telepathyeditaccountwidget.h===================================================================--- protocols/telepathy/ui/telepathyeditaccountwidget.h	(Revision 736753)+++ protocols/telepathy/ui/telepathyeditaccountwidget.h	(Arbeitskopie)@@ -42,7 +42,7 @@ 	explicit TelepathyEditAccountWidget(Kopete::Account *account, QWidget *parent = 0); 	~TelepathyEditAccountWidget(); -	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create );  	/** 	 * Create a new account if we are in the 'add account wizard',Index: protocols/sms/smseditaccountwidget.h===================================================================--- protocols/sms/smseditaccountwidget.h	(Revision 736753)+++ protocols/sms/smseditaccountwidget.h	(Arbeitskopie)@@ -33,7 +33,7 @@ 	SMSEditAccountWidget(SMSProtocol *protocol, Kopete::Account *theAccount, QWidget *parent = 0); 	~SMSEditAccountWidget(); -	bool validateData();+	bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	Kopete::Account* apply(); public slots: 	void setServicePreferences(const QString& serviceName);Index: protocols/sms/smseditaccountwidget.cpp===================================================================--- protocols/sms/smseditaccountwidget.cpp	(Revision 736753)+++ protocols/sms/smseditaccountwidget.cpp	(Arbeitskopie)@@ -90,9 +90,9 @@ 	delete service; } -bool SMSEditAccountWidget::validateData()+bool SMSEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) {-	return true;+	return validateAccountId("SMSProtocol", preferencesDialog->accountId->text(), changeAction); }  Kopete::Account* SMSEditAccountWidget::apply()Index: protocols/oscar/aim/ui/aimeditaccountwidget.h===================================================================--- protocols/oscar/aim/ui/aimeditaccountwidget.h	(Revision 736753)+++ protocols/oscar/aim/ui/aimeditaccountwidget.h	(Arbeitskopie)@@ -44,7 +44,7 @@ 	                     QWidget *parent=0); 	virtual ~AIMEditAccountWidget(); 	-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	virtual Kopete::Account *apply(); 	 private slots:Index: protocols/oscar/aim/ui/aimeditaccountwidget.cpp===================================================================--- protocols/oscar/aim/ui/aimeditaccountwidget.cpp	(Revision 736753)+++ protocols/oscar/aim/ui/aimeditaccountwidget.cpp	(Arbeitskopie)@@ -203,7 +203,7 @@ 	return mAccount; } -bool AIMEditAccountWidget::validateData()+bool AIMEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { 	//kDebug(14152) << "Called."; @@ -211,18 +211,13 @@ 	QString server = mGui->edtServerAddress->text(); 	int port = mGui->sbxServerPort->value(); -	if ( userName.length() < 1 )-		return false;- 	if ( port < 1 ) 		return false;  	if ( server.length() < 1 ) 		return false; -	// Seems good to me-	//kDebug(14152) << "Account data validated successfully.";-	return true;+	return validateAccountId("AIMProtocol", userName, changeAction); }  void AIMEditAccountWidget::slotOpenRegister()Index: protocols/oscar/icq/icqprotocol.cpp===================================================================--- protocols/oscar/icq/icqprotocol.cpp	(Revision 736753)+++ protocols/oscar/icq/icqprotocol.cpp	(Arbeitskopie)@@ -842,6 +842,11 @@ 	return statusManager_; } +bool ICQProtocol::validatePassword( const QString & password ) const+{+	return password.length() >= 6 && password.length() <= 8;+}+ //END class ICQProtocol  #include "icqprotocol.moc"Index: protocols/oscar/icq/icqprotocol.h===================================================================--- protocols/oscar/icq/icqprotocol.h	(Revision 736753)+++ protocols/oscar/icq/icqprotocol.h	(Arbeitskopie)@@ -76,6 +76,8 @@ 	void setTZComboValue(QComboBox *combo, const char &tz); 	char getTZComboValue(QComboBox *combo); */ +	virtual bool validatePassword( const QString & password ) const;+ private: 	void initGenders(); 	void initLang();Index: protocols/oscar/icq/ui/icqeditaccountwidget.cpp===================================================================--- protocols/oscar/icq/ui/icqeditaccountwidget.cpp	(Revision 736753)+++ protocols/oscar/icq/ui/icqeditaccountwidget.cpp	(Arbeitskopie)@@ -68,6 +68,8 @@ 	QRegExp rx("[0-9]{9}"); 	QValidator* validator = new QRegExpValidator( rx, this ); 	mAccountSettings->edtAccountId->setValidator(validator);+	+	mAccountSettings->mPasswordWidget->setValidationProtocol(protocol);  	// Read in the settings from the account if it exists 	if(mAccount)@@ -78,7 +80,7 @@ 		mAccountSettings->edtAccountId->setReadOnly(true); 		mAccountSettings->mPasswordWidget->load(&mAccount->password()); 		mAccountSettings->chkAutoLogin->setChecked(mAccount->excludeConnect());-+			 		QString serverEntry = mAccount->configGroup()->readEntry("Server", "login.oscar.aol.com"); 		int portEntry = mAccount->configGroup()->readEntry("Port", 5190); 		if ( serverEntry != "login.oscar.aol.com" || ( portEntry != 5190) )@@ -261,7 +263,7 @@ 	return mAccount; } -bool ICQEditAccountWidget::validateData()+bool ICQEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { 	kDebug(14153) << "Called."; 	bool bOk;@@ -274,6 +276,18 @@ 		return false; 	} +	if ( !validateAccountId("ICQProtocol", userId, changeAction) )+	{+		return false;+	}+	+	if (!mAccountSettings->mPasswordWidget->validate())+	{+		KMessageBox::queuedMessageBox( this, KMessageBox::Sorry, i18nc( "@info",+			"<qt>The password entered does not match the ICQ password guidelines: Passwords must be 6-8 characters long.</qt>"), i18n( "ICQ" ) );+		return false;+	}+	 	// No need to check port, min and max values are properly defined in .ui  	if (mAccountSettings->edtServerAddress->text().isEmpty())Index: protocols/oscar/icq/ui/icqeditaccountwidget.h===================================================================--- protocols/oscar/icq/ui/icqeditaccountwidget.h	(Revision 736753)+++ protocols/oscar/icq/ui/icqeditaccountwidget.h	(Arbeitskopie)@@ -40,7 +40,7 @@ 	                     QWidget *parent=0); 	~ICQEditAccountWidget(); 	-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	virtual Kopete::Account *apply(); 	 private slots:Index: protocols/meanwhile/meanwhileeditaccountwidget.cpp===================================================================--- protocols/meanwhile/meanwhileeditaccountwidget.cpp	(Revision 736753)+++ protocols/meanwhile/meanwhileeditaccountwidget.cpp	(Arbeitskopie)@@ -83,15 +83,11 @@     return myAccount; } -bool MeanwhileEditAccountWidget::validateData()+bool MeanwhileEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) {-    if(mScreenName->text().isEmpty())-    {-        KMessageBox::queuedMessageBox(this, KMessageBox::Sorry,-            i18n("<qt>You must enter a valid screen name.</qt>"), -            i18n("Meanwhile Plugin"));+    if(!validateAccountId("MeanwhileProtocol", mScreenName->text(), changeAction))         return false;-    }+     if( !mPasswordWidget->validate() )     {         KMessageBox::queuedMessageBox(this, KMessageBox::Sorry,Index: protocols/meanwhile/meanwhileeditaccountwidget.h===================================================================--- protocols/meanwhile/meanwhileeditaccountwidget.h	(Revision 736753)+++ protocols/meanwhile/meanwhileeditaccountwidget.h	(Arbeitskopie)@@ -40,7 +40,7 @@      virtual Kopete::Account* apply(); -    virtual bool validateData();+    virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); protected slots:     void slotSetServer2Default(); protected:Index: protocols/irc/ui/irceditaccountwidget.cpp===================================================================--- protocols/irc/ui/irceditaccountwidget.cpp	(Revision 736753)+++ protocols/irc/ui/irceditaccountwidget.cpp	(Arbeitskopie)@@ -268,7 +268,7 @@ 	return account(); } -bool IRCEditAccountWidget::validateData()+bool IRCEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { 	if( nickNames->text().isEmpty() ) 		KMessageBox::sorry(this, i18n("<qt>You must enter a nickname.</qt>"), i18n("Kopete"));Index: protocols/irc/ui/irceditaccountwidget.h===================================================================--- protocols/irc/ui/irceditaccountwidget.h	(Revision 736753)+++ protocols/irc/ui/irceditaccountwidget.h	(Arbeitskopie)@@ -37,7 +37,7 @@ 	~IRCEditAccountWidget();  	IRCAccount *account();-	virtual bool validateData();+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); 	virtual Kopete::Account *apply();  private slots:Index: kopete/addaccountwizard/addaccountwizard.cpp===================================================================--- kopete/addaccountwizard/addaccountwizard.cpp	(Revision 736753)+++ kopete/addaccountwizard/addaccountwizard.cpp	(Arbeitskopie)@@ -180,7 +180,7 @@ 	else if (currentPage()->widget() == d->accountPageWidget) 	{ 		// check the data of the page is valid-		if (!d->accountPage->validateData())+		if (!d->accountPage->validateData(Kopete::Create)) 		{ 			return; 		}@@ -201,17 +201,33 @@  void AddAccountWizard::accept() {-	// registeredAccount shouldn't probably be called here. Anyway, if the account is already registered, -	// it won't be registered twice 	Kopete::AccountManager *manager = Kopete::AccountManager::self();-	Kopete::Account        *account = manager->registerAccount(d->accountPage->apply()); -	// if the account wasn't created correctly then leave+	// Have the plugin extract account information+	Kopete::Account *account = d->accountPage->apply(); 	if (!account) 	{+		KMessageBox::sorry( this, i18nc("@info", "<qt>An error occurred during account creation.</qt>")); 		return; 	} +	// Check that the account doesn't exist yet, otherwise the account manager would delete it during registration+	// This shouldn't be the case as the protocol's account edit page should prevent this, but it's not guaranteed+	if (manager->findAccount(account->protocol()->pluginId(), account->accountId()))+	{+		KMessageBox::sorry( this, i18nc("@info", "<qt>This account already exists.</qt>"));+		reject();+		return;+	}++	// Register account and leave if it doesn't work+	account = manager->registerAccount(account);+	if (!account)+	{+		KMessageBox::sorry( this, i18nc("@info", "<qt>An error occurred during account registration.</qt>"));+		return;+	}+ 	// Make sure the protocol is correctly enabled.  This is not really needed, but still good 	const QString PROTO_NAME = d->proto->pluginId().remove("Protocol").toLower(); 	Kopete::PluginManager::self()->setPluginEnabled(PROTO_NAME , true);Index: kopete/config/accounts/kopeteaccountconfig.cpp===================================================================--- kopete/config/accounts/kopeteaccountconfig.cpp	(Revision 736753)+++ kopete/config/accounts/kopeteaccountconfig.cpp	(Arbeitskopie)@@ -239,6 +239,9 @@ 	 void KopeteAccountConfig::modifyAccount(Kopete::Account *account) {+	// FIXME: This function is almost identical to editAccount() in libkopete/kopeteaccount.cpp+	// and both should be merged.+ 	Kopete::Protocol *proto = account->protocol();  	KDialog editDialog ( this );@@ -264,7 +267,11 @@ 	editDialog.setMainWidget( w ); 	if ( editDialog.exec() == QDialog::Accepted ) 	{-		if( m_accountWidget->validateData() )+                // FIXME: The dialog is hidden at this point, which means that messages+                // created in validateData() with "this" as parent won't be shown. It+                // should be called earlier such that messages are displayed to the user+                // and he gets a chance to know about them and fix them instantly.+		if( m_accountWidget->validateData(Kopete::Edit) ) 			m_accountWidget->apply(); 	} Index: libkopete/kopeteaccount.cpp===================================================================--- libkopete/kopeteaccount.cpp	(Revision 736753)+++ libkopete/kopeteaccount.cpp	(Arbeitskopie)@@ -566,11 +566,11 @@  void Account::editAccount(QWidget *parent) {-	KDialog *editDialog = new KDialog( parent );-	editDialog->setCaption( i18n( "Edit Account" ) );-	editDialog->setButtons( KDialog::Ok | KDialog::Apply | KDialog::Cancel );+	KDialog editDialog( parent );+	editDialog.setCaption( i18n( "Edit Account" ) );+	editDialog.setButtons( KDialog::Ok | KDialog::Cancel ); -	KopeteEditAccountWidget *m_accountWidget = protocol()->createEditAccountWidget( this, editDialog );+	KopeteEditAccountWidget *m_accountWidget = protocol()->createEditAccountWidget( this, &editDialog ); 	if ( !m_accountWidget ) 		return; @@ -584,14 +584,16 @@ 	if ( !w ) 		return; -	editDialog->setMainWidget( w );-	if ( editDialog->exec() == QDialog::Accepted )+	editDialog.setMainWidget( w );+	if ( editDialog.exec() == QDialog::Accepted ) 	{-		if( m_accountWidget->validateData() )+		// FIXME: The dialog is hidden at this point, which means that messages+		// created in validateData() with "this" as parent won't be shown. It+		// should be called earlier such that messages are displayed to the user+		// and he gets a chance to know about them and fix them instantly.+		if( m_accountWidget->validateData(Kopete::Edit) ) 			m_accountWidget->apply(); 	}--	editDialog->deleteLater(); }  void Account::setCustomIcon( const QString & i)Index: libkopete/ui/editaccountwidget.cpp===================================================================--- libkopete/ui/editaccountwidget.cpp	(Revision 736753)+++ libkopete/ui/editaccountwidget.cpp	(Arbeitskopie)@@ -17,7 +17,12 @@ */  #include "editaccountwidget.h"+#include <kopeteaccountmanager.h>+#include <kopeteuiglobal.h> +#include <kmessagebox.h>+#include <klocale.h>+ class KopeteEditAccountWidgetPrivate { public:@@ -45,5 +50,23 @@ 	d->account = account; } +bool KopeteEditAccountWidget::validateAccountId( const QString &protocolId, const QString &accountId, Kopete::AccountChangeAction changeAction )+{+	if ( accountId.isEmpty() )+	{+		KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18nc( "@info", +		"<qt>Please fill in an account ID.</qt>") );+		return false;+	}++	if (changeAction == Kopete::Create && Kopete::AccountManager::self()->findAccount( protocolId, accountId ) )+	{+		KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18nc( "@info", +		"<qt>This account already exists. Please choose a different account ID or use the Configure Dialog to change the settings of the <resource>%1</resource> account.</qt>", accountId) );+		return false;+	}++	return true;+}+ // vim: set noet ts=4 sts=4 sw=4:-Index: libkopete/ui/editaccountwidget.h===================================================================--- libkopete/ui/editaccountwidget.h	(Revision 736753)+++ libkopete/ui/editaccountwidget.h	(Arbeitskopie)@@ -23,7 +23,17 @@  namespace Kopete {-class Account;+	class Account;++	/**+	 * \brief Possible changes to accounts+	 * @sa @ref KopeteEditAccountWidget::validateData()+	 */+	enum AccountChangeAction {+		Create = 0, ///< New account will be created +		Edit = 1 ///< Existing account will be changed+	};+ }  class KopeteEditAccountWidgetPrivate;@@ -70,9 +80,11 @@  	/** 	 * This method must be reimplemented.-	 * It does the same as @ref AddContactPage::validateData()+	 * Returns true if all account configuration data filled in by the user is valid, and+	 * false otherwise, preferably with a message telling what is wrong. +	 * It is similar to @ref AddContactPage::validateData() 	 */-	virtual bool validateData() = 0;+	virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ) = 0;  	/** 	 * Create a new account if we are in the 'add account wizard',@@ -80,6 +92,12 @@ 	 */ 	virtual Kopete::Account *apply() = 0; +	/**+	 * Account id (username) validation. The default implementation returns false if the account +	 * id is empty or the account already exists in case of changeAction==Create.+	 */+	virtual bool validateAccountId( const QString &protocolId, const QString &accountId, Kopete::AccountChangeAction changeAction );+ protected: 	/** 	 * Get a pointer to the Kopete::Account passed to the constructor.