kdelibs 3.4.0 BICs -- KIO::Job, KNS::DownloadDialog, KNS::Engine, KIMProxy

Maks Orlovich mo85 at cornell.edu
Sun Feb 27 18:09:05 GMT 2005


On Sunday 27 February 2005 12:25, you wrote:
> Am Sonntag, 27. Februar 2005 17:50 schrieb Maks Orlovich:
> > KNS::DownloadDialog is incompatible due to a size change: there is an
> > extra field, QString m_providerlist;
> >
> > Similarly, KNS::Engine adds in  bool mIgnoreInstallResult;
>
> In both cases it should be possible to mark the new members as static.
> Can this be confirmed?

That would fix the BC bug, yes; but is there any risk of multiple instances of 
the object? An alternative is something like this:


--- engine.h    21 Feb 2005 21:23:06 -0000      1.13
+++ engine.h    27 Feb 2005 18:07:48 -0000
@@ -51,6 +51,7 @@ class ProviderDialog;
 class KDE_EXPORT Engine : public QObject
 {
     Q_OBJECT
+    struct Private;
   public:
     /**
       Constructor.
@@ -177,11 +178,9 @@ class KDE_EXPORT Engine : public QObject
     QString mPreviewFile;
     QString mProviderList;

-    KNewStuff *mNewStuff;
+    Private* d;

     QString mType;
-
-    bool mIgnoreInstallResult;
 };

 }

--- engine.cpp  8 Feb 2005 09:47:41 -0000       1.22
+++ engine.cpp  27 Feb 2005 18:07:48 -0000
@@ -39,12 +39,19 @@

 using namespace KNS;

+struct Engine::Private
+{
+    bool mIgnoreInstallResult;
+    KNewStuff *mNewStuff;
+};
+
 Engine::Engine( KNewStuff *newStuff, const QString &type,
                 QWidget *parentWidget ) :
   mParentWidget( parentWidget ), mDownloadDialog( 0 ),
   mUploadDialog( 0 ), mProviderDialog( 0 ), mUploadProvider( 0 ),
-  mNewStuff( newStuff ), mType( type )
+  d(new Private), mType( type )
 {
+  d->mNewStuff = newStuff;
   mProviderLoader = new ProviderLoader( mParentWidget );

   mNewStuffList.setAutoDelete( true );
@@ -55,15 +62,17 @@ Engine::Engine( KNewStuff *newStuff, con
                 mParentWidget( parentWidget ),
                mDownloadDialog( 0 ), mUploadDialog( 0 ),
                mProviderDialog( 0 ), mUploadProvider( 0 ),
-                mProviderList( providerList ), mNewStuff( newStuff ),
+                mProviderList( providerList ), d(new Private),
                mType( type )
 {
+  d->mNewStuff = newStuff;
   mProviderLoader = new ProviderLoader( mParentWidget );
   mNewStuffList.setAutoDelete( true );
 }

 Engine::~Engine()
 {
+  delete d;
   delete mProviderLoader;

   delete mUploadDialog;
@@ -180,7 +189,7 @@ void Engine::download( Entry *entry )
   kdDebug(5850) << "Engine::download(entry)" << endl;

   KURL source = entry->payload();
-  mDownloadDestination = mNewStuff->downloadDestination( entry );
+  mDownloadDestination = d->mNewStuff->downloadDestination( entry );

   if ( mDownloadDestination.isEmpty() ) {
     kdDebug(5850) << "Empty downloadDestination. Cancelling download." << 
endl;
@@ -205,13 +214,13 @@ void Engine::slotDownloadJobResult( KIO:
     return;
   }

-  if ( mNewStuff->install( mDownloadDestination ) ) {
-    if ( !mIgnoreInstallResult ) {
+  if ( d->mNewStuff->install( mDownloadDestination ) ) {
+    if ( !d->mIgnoreInstallResult ) {
       KMessageBox::information( mParentWidget,
                                 i18n("Successfully installed hot new 
stuff.") );
     }
   } else
-    if ( !mIgnoreInstallResult ){
+    if ( !d->mIgnoreInstallResult ){
       KMessageBox::error( mParentWidget,
                           i18n("Failed to install hot new stuff.") );
   }
@@ -266,7 +275,7 @@ void Engine::upload( Entry *entry )
     mUploadFile = entry->fullName();
     mUploadFile = locateLocal( "data", QString(kapp->instanceName()) + 
"/upload/" + mUploadFile );

-    if ( !mNewStuff->createUploadFile( mUploadFile ) ) {
+    if ( !d->mNewStuff->createUploadFile( mUploadFile ) ) {
       KMessageBox::error( mParentWidget, i18n("Unable to create file to 
upload.") );
       emit uploadFinished( false );
       return;
@@ -415,5 +424,5 @@ void Engine::slotUploadMetaJobResult( KI

 void Engine::ignoreInstallResult(bool ignore)
 {
-  mIgnoreInstallResult = ignore;
+  d->mIgnoreInstallResult = ignore;
 }


Oh, and *bug*: mIgnoreInstallResult doesn't seem to be initialized in the 
constructor.


> (I still couldn't revive my dead harddisk...)

ouch.




More information about the kde-core-devel mailing list