Index: kio/kio/krun.cpp
===================================================================
--- kio/kio/krun.cpp	(wersja 830359)
+++ kio/kio/krun.cpp	(kopia robocza)
@@ -31,7 +31,6 @@
 #include <sys/stat.h>
 
 #include <QtGui/QWidget>
-#include <QtCore/QPointer>
 
 #include "kmimetypetrader.h"
 #include "kmimetype.h"
@@ -71,61 +70,19 @@
 #include <kwindowsystem.h>
 #endif
 
-class KRun::KRunPrivate
+KRun::KRunPrivate::KRunPrivate(KRun *parent)
+  : q(parent),
+    m_showingDialog(false)
 {
-public:
-    KRunPrivate(KRun *parent)
-      : q(parent),
-        m_showingDialog(false)
-    {
-    }
+}
 
-    void init (const KUrl& url, QWidget* window, mode_t mode,
-               bool isLocalFile, bool showProgressInfo, const QByteArray& asn);
+void KRun::KRunPrivate::startTimer()
+{
+    m_timer.start(0);
+}
 
-    // This helper method makes debugging easier: a single breakpoint for all
-    // the code paths that start the timer - at least from KRun itself.
-    // TODO: add public method startTimer() and deprecate timer() accessor,
-    // starting is the only valid use of the timer in subclasses (BrowserRun, KHTMLRun and KonqRun)
-    void startTimer() {
-        m_timer.start(0);
-    }
+// ---------------------------------------------------------------------------
 
-    KRun *q;
-    bool m_showingDialog;
-    bool m_runExecutables;
-
-    QString m_preferredService;
-    QString m_externalBrowser;
-    QString m_localPath;
-    QString m_suggestedFileName;
-    QPointer <QWidget> m_window;
-    QByteArray m_asn;
-    KUrl m_strURL;
-    bool m_bFault;
-    bool m_bAutoDelete;
-    bool m_bProgressInfo;
-    bool m_bFinished;
-    KIO::Job * m_job;
-    QTimer m_timer;
-
-    /**
-     * Used to indicate that the next action is to scan the file.
-     * This action is invoked from slotTimeout.
-     */
-    bool m_bScanFile;
-    bool m_bIsDirectory;
-
-    /**
-     * Used to indicate that the next action is to initialize.
-     * This action is invoked from slotTimeout
-     */
-    bool m_bInit;
-
-    bool m_bIsLocalFile;
-    mode_t m_mode;
-};
-
 bool KRun::isExecutableFile( const KUrl& url, const QString &mimetype )
 {
   if ( !url.isLocalFile() )
@@ -211,15 +168,24 @@
   return KRun::run( *offer, lst, window, tempFile, suggestedFileName, asn );
 }
 
-bool KRun::displayOpenWithDialog( const KUrl::List& lst, QWidget* window, bool tempFiles, const QString& suggestedFileName,
-    const QByteArray& asn )
+bool KRun::displayOpenWithDialog( const KUrl::List& lst, QWidget* window, bool tempFiles, 
+                                  const QString& suggestedFileName, const QByteArray& asn )
 {
     if (!KAuthorized::authorizeKAction("openwith"))
     {
-       KMessageBox::sorry(window, i18n("You are not authorized to select an application to open this file."));
+       KMessageBox::sorry(window, 
+         i18n("You are not authorized to select an application to open this file."));
        return false;
     }
 
+#ifdef Q_WS_WIN
+    KConfigGroup cfgGroup(KGlobal::config(), "KOpenWithDialog Settings");
+    if (cfgGroup.readEntry("Native", true))
+    {
+      return KRun::KRunPrivate::displayOpenWithDialog( lst, window, tempFiles,
+                                                       suggestedFileName, asn );
+    }
+#endif
     KOpenWithDialog l( lst, i18n("Open with:"), QString(), window );
     if ( l.exec() )
     {
Index: kio/kio/krun_p.h
===================================================================
--- kio/kio/krun_p.h	(wersja 830359)
+++ kio/kio/krun_p.h	(kopia robocza)
@@ -23,6 +23,8 @@
 #define KRUN_P_H
 
 #include <QtCore/QObject>
+#include <QtCore/QPointer>
+
 #include "kprocess.h"
 #include "kstartupinfo.h"
 
@@ -66,4 +68,59 @@
     Q_DISABLE_COPY(KProcessRunner)
 };
 
+/**
+ * @internal
+ */
+class KRun::KRunPrivate
+{
+public:
+    KRunPrivate(KRun *parent);
+
+    void init (const KUrl& url, QWidget* window, mode_t mode,
+               bool isLocalFile, bool showProgressInfo, const QByteArray& asn);
+
+    // This helper method makes debugging easier: a single breakpoint for all
+    // the code paths that start the timer - at least from KRun itself.
+    // TODO: add public method startTimer() and deprecate timer() accessor,
+    // starting is the only valid use of the timer in subclasses (BrowserRun, KHTMLRun and KonqRun)
+    void startTimer();
+
+    static bool displayOpenWithDialog( const KUrl::List& lst, QWidget* window, bool tempFiles,
+                                       const QString& suggestedFileName, const QByteArray& asn );
+
+    KRun *q;
+    bool m_showingDialog;
+    bool m_runExecutables;
+
+    QString m_preferredService;
+    QString m_externalBrowser;
+    QString m_localPath;
+    QString m_suggestedFileName;
+    QPointer <QWidget> m_window;
+    QByteArray m_asn;
+    KUrl m_strURL;
+    bool m_bFault;
+    bool m_bAutoDelete;
+    bool m_bProgressInfo;
+    bool m_bFinished;
+    KIO::Job * m_job;
+    QTimer m_timer;
+
+    /**
+     * Used to indicate that the next action is to scan the file.
+     * This action is invoked from slotTimeout.
+     */
+    bool m_bScanFile;
+    bool m_bIsDirectory;
+
+    /**
+     * Used to indicate that the next action is to initialize.
+     * This action is invoked from slotTimeout
+     */
+    bool m_bInit;
+
+    bool m_bIsLocalFile;
+    mode_t m_mode;
+};
+
 #endif  // KRUN_P_H
Index: kio/kfile/kopenwithdialog.h
===================================================================
--- kio/kfile/kopenwithdialog.h	(wersja 830359)
+++ kio/kfile/kopenwithdialog.h	(kopia robocza)
@@ -29,8 +29,11 @@
 class KOpenWithDialogPrivate;
 
 /**
- * "Open with" dialog box.
+ * "Open With" dialog box.
  *
+ * @note It is recommended to use KRun::displayOpenWithDialog() instead, because it is simpler
+ *       and on Windows it gives native "Open With" dialog box (by default).
+ *
  * @author David Faure <faure@kde.org>
  */
 class KIO_EXPORT KOpenWithDialog : public KDialog
Index: kio/CMakeLists.txt
===================================================================
--- kio/CMakeLists.txt	(wersja 830359)
+++ kio/CMakeLists.txt	(kopia robocza)
@@ -128,6 +128,12 @@
    )
 endif(UNIX)
 
+if(WIN32)
+   set(kiocore_STAT_SRCS ${kiocore_STAT_SRCS}
+       kio/krun_win.cpp
+   )
+endif(WIN32)
+
 set(kbookmarks_STAT_SRCS
   bookmarks/kbookmark.cc
   bookmarks/kbookmarkimporter.cc
