[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-i18n-doc
Subject:    KBabel Patch: Find in files/Replace in files uses wrong project
From:       Stephan Johach <lucardus () onlinehome ! de>
Date:       2006-12-20 17:44:49
Message-ID: 200612201901.26387.lucardus () onlinehome ! de
[Download RAW message or body]

Hi all!

The attached patch fixes 

http://bugs.kde.org/show_bug.cgi?id=117308

How to reproduce:

Open catalogmanager (default project is used)
Open another project  (to see the problem it should have other identiy 
settings for example).
Use Ctrl-F to start the find in file Dialog.
-> KBabel is started with the first match

Look into the project settings in KBabel 

-> The default project is loaded

The problem is that saving the file could lead to saving wrong identity 
settings or other project data to the po-File.

Solution:

Catalogmanager now passes the open project via dcop to kbabel.

Please test. If no one objects I will commit on saturday 23.12.06 to the 3.5 
branch.

Stephan


["kbabel-BR117308.patch" (text/x-diff)]

Index: kbabel/kbabeliface.h
===================================================================
--- kbabel/kbabeliface.h	(revision 615209)
+++ kbabel/kbabeliface.h	(working copy)
@@ -67,6 +67,14 @@
 	QString findStr, QString replaceStr, int caseSensitive, int wholeWords, int \
isRegExp,   int inMsgid, int inMsgstr, int inComment, int ignoreAccelMarker, 
 	int ignoreContextInfo, int ask, int askForNextFile, int askForSave)=0;
+  virtual bool findInFile(QCString fileSource, QCString url, 
+	QString findStr, int caseSensitive, int wholeWords, int isRegExp, 
+	int inMsgid, int inMsgstr, int inComment, 
+	int ignoreAccelMarker, int ignoreContextInfo, int askForNextFile, int askForSave, \
QCString project )=0; +  virtual bool replaceInFile(QCString fileSource, QCString \
url,  +	QString findStr, QString replaceStr, int caseSensitive, int wholeWords, int \
isRegExp,  +	int inMsgid, int inMsgstr, int inComment, int ignoreAccelMarker, 
+	int ignoreContextInfo, int ask, int askForNextFile, int askForSave, QCString \
project )=0;  virtual void spellcheck(QStringList fileList)=0;
 };
 
Index: kbabel/main.cpp
===================================================================
--- kbabel/main.cpp	(revision 615209)
+++ kbabel/main.cpp	(working copy)
@@ -73,6 +73,14 @@
 	QString findStr, QString replaceStr, int caseSensitive, int wholeWords, int \
isRegExp,  int inMsgid, int inMsgstr, int inComment,
 	int ignoreAccelMarker, int ignoreContextInfo, int ask, int askForNextFile, int \
askForSave); +    virtual bool findInFile(QCString fileSource, QCString url,
+	QString findStr, int caseSensitive, int wholeWords, int isRegExp,
+	int inMsgid, int inMsgstr, int inComment,
+	int ignoreAccelMarker, int ignoreContextInfo, int askForNextFile, int askForSave, \
QCString project ); +    virtual bool replaceInFile(QCString fileSource, QCString \
url, +	QString findStr, QString replaceStr, int caseSensitive, int wholeWords, int \
isRegExp, +	int inMsgid, int inMsgstr, int inComment,
+	int ignoreAccelMarker, int ignoreContextInfo, int ask, int askForNextFile, int \
askForSave, QCString project );  virtual void spellcheck(QStringList fileList);
 private:
     KBabelMW* findInstance( const KURL& url, const QString& project, const QString& \
package) const; @@ -393,10 +401,22 @@
 	int inMsgid, int inMsgstr, int inComment,
 	int ignoreAccelMarker, int ignoreContextInfo, int askForNextFile, int askForSave)
 {
+	// no project given, open with default project
+	return findInFile ( fileSource, url, findStr, caseSensitive, 
+                             wholeWords, isRegExp, inMsgid, inMsgstr, inComment, \
ignoreAccelMarker, ignoreContextInfo, +                             askForNextFile, \
askForSave, +			     KBabel::ProjectManager::defaultProjectName().utf8() );
+}
+
+bool KBabelInterface::findInFile(QCString fileSource, QCString url,
+	QString findStr, int caseSensitive, int wholeWords, int isRegExp,
+	int inMsgid, int inMsgstr, int inComment,
+	int ignoreAccelMarker, int ignoreContextInfo, int askForNextFile, int askForSave, \
QCString project ) +{
     kdDebug(KBABEL) << "findInFile (" <<fileSource<< "): " << url << " for " << \
findStr << endl;  
     const KURL u( QString::fromLocal8Bit( url ) );
-    KBabelMW *kb = findInstance( u, KBabel::ProjectManager::defaultProjectName(), \
QString() ); +    KBabelMW *kb = findInstance( u, QString::fromLocal8Bit(project), \
QString() );  
     if(!kb) return false;
 
@@ -424,10 +444,23 @@
 	int inMsgid, int inMsgstr, int inComment,
 	int ignoreAccelMarker, int ignoreContextInfo, int ask, int askForNextFile, int \
askForSave)  {
+	return replaceInFile( fileSource, url,
+                               findStr, replaceStr, caseSensitive, wholeWords, \
isRegExp, +                               inMsgid, inMsgstr, inComment, \
ignoreAccelMarker, ignoreContextInfo, +                               ask, \
askForNextFile, askForSave, +			       \
KBabel::ProjectManager::defaultProjectName().utf8() );	 +}
+
+bool KBabelInterface::replaceInFile(QCString fileSource, QCString url,
+	QString findStr, QString replaceStr, int caseSensitive, int wholeWords, int \
isRegExp, +	int inMsgid, int inMsgstr, int inComment,
+	int ignoreAccelMarker, int ignoreContextInfo, int ask, int askForNextFile, int \
askForSave, +        QCString project )
+{
     kdDebug(KBABEL) << "replaceInFile (" <<fileSource<< "): " << url << " for " << \
findStr << endl;  
     const KURL u ( QString::fromLocal8Bit( url ) );
-    KBabelMW *kb = findInstance( u, KBabel::ProjectManager::defaultProjectName(), \
QString() ); +    KBabelMW *kb = findInstance( u, QString::fromLocal8Bit(project), \
QString() );  
     if( !kb ) return false;
 
Index: catalogmanager/catalogmanager.cpp
===================================================================
--- catalogmanager/catalogmanager.cpp	(revision 615209)
+++ catalogmanager/catalogmanager.cpp	(working copy)
@@ -958,6 +958,7 @@
         {
             if( startKBabel() )
             {
+                QCString \
funcCall("findInFile(QCString,QCString,QString,int,int,int,int,int,int,int,int,int,int)");
  DCOPClient *client = kapp->dcopClient();
                 QByteArray data;
                 QDataStream arg(data, IO_WriteOnly);
@@ -974,8 +975,13 @@
                 arg << (_findOptions.ignoreContextInfo ? 1 : 0);
                 arg << (_findOptions.askForNextFile ? 1 : 0);
                 arg << (_findOptions.askForSave ? 1 : 0);
+		if(_configFile != "kbabelrc" ) {
+        	   arg << _configFile.utf8();
+                   funcCall="findInFile(QCString,QCString,QString,int,int,int,int,int,int,int,int,int,int,QCString)";
 +                }
+		kdDebug(KBABEL) << "DCOP: " << QString(data.data()) << endl;
                 if( !client->send("kbabel","KBabelIFace",
-                                  \
"findInFile(QCString,QCString,QString,int,int,int,int,int,int,int,int,int,int)", \
data) +                                  funcCall, data)
                     ) {
                     KMessageBox::error( this, i18n("DCOP communication with KBabel \
failed."), i18n("DCOP Communication Error"));  stopSearching();
@@ -1037,9 +1043,11 @@
         {
             if( startKBabel() )
             {
+		QCString funcCall("replaceInFile(QCString,QCString,QString,QString,int,int,int,int,int,int,int,int,int,int,int)");
  DCOPClient *client = kapp->dcopClient();
                 QByteArray data;
                 QDataStream arg(data, IO_WriteOnly);
+                
                 arg << client->appId();
                 arg << url.utf8();
                 arg << options.findStr;
@@ -1055,8 +1063,12 @@
                 arg << (options.ask ? 1 : 0);
                 arg << (options.askForNextFile ? 1 : 0);
                 arg << (options.askForSave ? 1 : 0);
+		if(_configFile != "kbabelrc" ) {
+        	   arg << _configFile.utf8();
+                   funcCall="replaceInFile(QCString,QCString,QString,QString,int,int,int,int,int,int,int,int,int,int,int,QCString)";
 +                }
                 if( !client->send("kbabel","KBabelIFace",
-                                  \
"replaceInFile(QCString,QCString,QString,QString,int,int,int,int,int,int,int,int,int,int,int)", \
data) +                                  funcCall, data)
                     ) {
                     KMessageBox::error( this, i18n("DCOP communication with KBabel \
failed."), i18n("DCOP Communication Error"));  stopSearching();



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic