Index: kio/kio/jobuidelegate.h
===================================================================
--- kio/kio/jobuidelegate.h	(revisión: 615879)
+++ kio/kio/jobuidelegate.h	(copia de trabajo)
@@ -81,6 +81,35 @@ public:
 
     virtual void showErrorMessage();
 
+    /**
+      * Set the icon associated with this job to @p jobIcon.
+      * @param jobIcon the icon associated with this job
+      * @see jobIcon()
+      */
+    void setJobIcon(const QString &jobIcon);
+
+    /**
+      * Returns the icon associated to this job. If no icon
+      * has been set explicitly using setJobIcon, the icon
+      * associated with the application that started this
+      * job will be returned
+      * @return the icon associated to this job
+      * @see setJobIcon()
+      */
+    QString jobIcon() const;
+
+    /**
+      * Returns the app friendly name that launched this job
+      * @return the app friendly name that launched this job
+      */
+    QString appName() const;
+
+    /**
+      * Returns the app internal name that launched this job
+      * @return the app internal name that launched this job
+      */
+    QString internalAppName() const;
+
 protected:
      virtual void connectJob( KJob *job );
 
Index: kio/kio/jobuidelegate.cpp
===================================================================
--- kio/kio/jobuidelegate.cpp	(revisión: 615879)
+++ kio/kio/jobuidelegate.cpp	(copia de trabajo)
@@ -24,6 +24,9 @@
 #include <qpointer.h>
 #include <kmessagebox.h>
 #include <kjob.h>
+#include <kglobal.h>
+#include <kinstance.h>
+#include <kaboutdata.h>
 #include "kio/observer.h"
 #include "kio/scheduler.h"
 
@@ -38,6 +41,9 @@ public:
     bool showProgressInfo;
     QPointer<QWidget> errorParentWidget;
     unsigned long userTimestamp;
+    QString jobIcon;
+    QString appName;
+    QString internalAppName;
 };
 
 KIO::JobUiDelegate::JobUiDelegate( bool showProgressInfo )
@@ -48,11 +54,26 @@ KIO::JobUiDelegate::JobUiDelegate( bool 
 #if defined Q_WS_X11
     d->userTimestamp = QX11Info::appUserTime();
 #endif
+
+    if (KGlobal::instance() && KGlobal::instance()->aboutData())
+    {
+        d->jobIcon = KGlobal::instance()->aboutData()->appName();
+        d->appName = KGlobal::instance()->aboutData()->programName();
+    }
+    else
+    {
+        kDebug() << "Couldn't retrieve application job launcher information. Some information won't be shown on the kio_uiserver" << endl;
+
+        d->jobIcon = QString();
+        d->appName = QString();
+    }
+
+    d->internalAppName = d->jobIcon;
 }
 
 KIO::JobUiDelegate::~JobUiDelegate()
 {
-    if ( d->showProgressInfo )
+    if ( d->showProgressInfo && job() )
     {
         Observer::self()->jobFinished( job()->progressId() );
     }
@@ -123,6 +144,26 @@ void KIO::JobUiDelegate::showErrorMessag
     }
 }
 
+void KIO::JobUiDelegate::setJobIcon(const QString &jobIcon)
+{
+    d->jobIcon = jobIcon;
+}
+
+QString KIO::JobUiDelegate::jobIcon() const
+{
+    return d->jobIcon;
+}
+
+QString KIO::JobUiDelegate::appName() const
+{
+    return d->appName;
+}
+
+QString KIO::JobUiDelegate::internalAppName() const
+{
+    return d->internalAppName;
+}
+
 void KIO::JobUiDelegate::slotFinished( KJob * /*job*/, int /*id*/ )
 {
     // If we are displaying a progress dialog, remove it first.

Index: kdecore/kjob.cpp
===================================================================
--- kdecore/kjob.cpp	(revisión: 615879)
+++ kdecore/kjob.cpp	(copia de trabajo)
@@ -58,10 +58,16 @@ KJob::~KJob()
 
 void KJob::setUiDelegate( KJobUiDelegate *delegate )
 {
-    if ( delegate == 0 || delegate->setJob( this ) )
+    if ( d->uiDelegate )
     {
         delete d->uiDelegate;
+    }
+
         d->uiDelegate = delegate;
+
+    if ( d->uiDelegate )
+    {
+        d->uiDelegate->setJob( this );
     }
 }
 
Index: kdecore/kjobuidelegate.cpp
===================================================================
--- kdecore/kjobuidelegate.cpp	(revisión: 615879)
+++ kdecore/kjobuidelegate.cpp	(copia de trabajo)
@@ -22,8 +22,6 @@
 #include "kjobuidelegate.h"
 #include "kjob.h"
 
-#include <kdebug.h>
-
 class KJobUiDelegate::Private
 {
 public:
@@ -92,7 +90,7 @@ void KJobUiDelegate::connectJob( KJob *j
     connect( d->job, SIGNAL( finished( KJob*, int ) ),
              this, SLOT( slotFinished( KJob*, int ) ) );
 
-    connect( job, SIGNAL( warning( KJob*, const QString& ) ),
+    connect( d->job, SIGNAL( warning( KJob*, const QString& ) ),
              this, SLOT( slotWarning( KJob*, const QString& ) ) );
 }
 
