https://svn.collab.net/viewvc/svn?view=revision&revision=38004
https://svn.collab.net/viewvc/svn?view=revision&revision=38014
https://svn.collab.net/viewvc/svn?view=revision&revision=38028
https://svn.collab.net/viewvc/svn?view=revision&revision=38122

--- subversion/libsvn_auth_kwallet/kwallet.cpp
+++ subversion/libsvn_auth_kwallet/kwallet.cpp
@@ -22,6 +22,7 @@
 
 /*** Includes. ***/
 
+#include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
@@ -30,6 +31,9 @@
 #include "svn_auth.h"
 #include "svn_config.h"
 #include "svn_error.h"
+#include "svn_io.h"
+#include "svn_pools.h"
+#include "svn_string.h"
 #include "svn_version.h"
 
 #include "private/svn_auth_private.h"
@@ -38,13 +42,20 @@
 
 #include <dbus/dbus.h>
 #include <QtCore/QCoreApplication>
+#include <QtCore/QList>
+#include <QtCore/QMap>
 #include <QtCore/QString>
+#include <QtGui/QApplication>
+#include <QtGui/QX11Info>
 
 #include <kaboutdata.h>
 #include <kcmdlineargs.h>
 #include <kcomponentdata.h>
 #include <klocalizedstring.h>
 #include <kwallet.h>
+#include <kwindowsystem.h>
+#include <netwm.h>
+#include <netwm_def.h>
 
 
 /*-----------------------------------------------------------------------*/
@@ -52,6 +63,28 @@
 /*-----------------------------------------------------------------------*/
 
 
+#define INITIALIZE_APPLICATION                                            \
+  if (apr_hash_get(parameters,                                            \
+                   "svn:auth:qapplication-safe",                          \
+                   APR_HASH_KEY_STRING))                                  \
+    {                                                                     \
+      QApplication *app;                                                  \
+      if (! qApp)                                                         \
+        {                                                                 \
+          int argc = 1;                                                   \
+          app = new QApplication(argc, (char *[1]) {(char *) "svn"});     \
+        }                                                                 \
+    }                                                                     \
+  else                                                                    \
+    {                                                                     \
+      QCoreApplication *app;                                              \
+      if (! qApp)                                                         \
+        {                                                                 \
+          int argc = 1;                                                   \
+          app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"}); \
+        }                                                                 \
+    }
+
 static const char *
 get_application_name(apr_hash_t *parameters,
                      apr_pool_t *pool)
@@ -69,8 +102,7 @@
   const char *svn_application_name;
   if (svn_application_name_with_pid)
     {
-      long pid = getpid();
-      svn_application_name = apr_psprintf(pool, "Subversion [%ld]", pid);
+      svn_application_name = apr_psprintf(pool, "Subversion [%ld]", long(getpid()));
     }
   else
     {
@@ -102,9 +134,108 @@
     }
 }
 
+static pid_t
+get_parent_pid(pid_t pid,
+               apr_pool_t *pool)
+{
+  pid_t parent_pid = 0;
+
+#ifdef __linux__
+  svn_stream_t *stat_file_stream;
+  svn_string_t *stat_file_string;
+  const char *preceeding_space, *following_space, *parent_pid_string;
+
+  const char *path = apr_psprintf(pool, "/proc/%ld/stat", long(pid));
+  svn_error_t *err = svn_stream_open_readonly(&stat_file_stream, path, pool, pool);
+  if (err == SVN_NO_ERROR)
+    {
+      err = svn_string_from_stream(&stat_file_string, stat_file_stream, pool, pool);
+      if (err == SVN_NO_ERROR)
+        {
+          if ((preceeding_space = strchr(stat_file_string->data, ' ')))
+            {
+              if ((preceeding_space = strchr(preceeding_space + 1, ' ')))
+                {
+                  if ((preceeding_space = strchr(preceeding_space + 1, ' ')))
+                    {
+                      if ((following_space = strchr(preceeding_space + 1, ' ')))
+                        {
+                          parent_pid_string = apr_pstrndup(pool,
+                                                           preceeding_space + 1,
+                                                           following_space - preceeding_space);
+                          parent_pid = atol(parent_pid_string);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+  if (err)
+    {
+      svn_error_clear(err);
+    }
+#endif
+
+  return parent_pid;
+}
+
+static WId
+get_wid(apr_hash_t *parameters,
+        apr_pool_t *pool)
+{
+  WId wid = 1;
+
+  if (apr_hash_get(parameters,
+                   "svn:auth:qapplication-safe",
+                   APR_HASH_KEY_STRING))
+    {
+      QMap<pid_t, WId> process_info_list;
+      QList<WId> windows(KWindowSystem::windows());
+      QList<WId>::const_iterator i;
+      for (i = windows.begin(); i != windows.end(); i++)
+        {
+          process_info_list[NETWinInfo(QX11Info::display(),
+                                       *i,
+                                       QX11Info::appRootWindow(),
+                                       NET::WMPid).pid()] = *i;
+        }
+
+      apr_pool_t *iterpool = svn_pool_create(pool);
+      pid_t pid = getpid();
+      while (pid != 0)
+        {
+          svn_pool_clear(iterpool);
+          if (process_info_list.contains(pid))
+            {
+              wid = process_info_list[pid];
+              break;
+            }
+          pid = get_parent_pid(pid, iterpool);
+        }
+      svn_pool_destroy(iterpool);
+    }
+
+  if (wid == 1)
+    {
+      const char *wid_env_string = getenv("WINDOWID");
+      if (wid_env_string)
+        {
+          long wid_env = atol(wid_env_string);
+          if (wid_env != 0)
+            {
+              wid = wid_env;
+            }
+        }
+    }
+
+  return wid;
+}
+
 static KWallet::Wallet *
 get_wallet(QString wallet_name,
-           apr_hash_t *parameters)
+           apr_hash_t *parameters,
+           apr_pool_t *pool)
 {
   KWallet::Wallet *wallet =
     static_cast<KWallet::Wallet *> (apr_hash_get(parameters,
@@ -115,7 +246,7 @@
                                  APR_HASH_KEY_STRING))
     {
       wallet = KWallet::Wallet::openWallet(wallet_name,
-                                           -1,
+                                           pool ? get_wid(parameters, pool) : 1,
                                            KWallet::Wallet::Synchronous);
     }
   if (wallet)
@@ -141,7 +272,7 @@
   apr_hash_t *parameters = static_cast<apr_hash_t *> (data);
   if (apr_hash_get(parameters, "kwallet-initialized", APR_HASH_KEY_STRING))
     {
-      KWallet::Wallet *wallet = get_wallet(NULL, parameters);
+      KWallet::Wallet *wallet = get_wallet(NULL, parameters, NULL);
       delete wallet;
       apr_hash_set(parameters,
                    "kwallet-initialized",
@@ -172,12 +303,7 @@
       return FALSE;
     }
 
-  QCoreApplication *app;
-  if (! qApp)
-    {
-      int argc = 1;
-      app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
-    }
+  INITIALIZE_APPLICATION
 
   KCmdLineArgs::init(1,
                      (char *[1]) {(char *) "svn"},
@@ -195,7 +321,7 @@
     QString::fromUtf8(username) + "@" + QString::fromUtf8(realmstring);
   if (! KWallet::Wallet::keyDoesNotExist(wallet_name, folder, key))
     {
-      KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
+      KWallet::Wallet *wallet = get_wallet(wallet_name, parameters, pool);
       if (wallet)
         {
           apr_hash_set(parameters,
@@ -242,12 +368,7 @@
       return FALSE;
     }
 
-  QCoreApplication *app;
-  if (! qApp)
-    {
-      int argc = 1;
-      app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
-    }
+  INITIALIZE_APPLICATION
 
   KCmdLineArgs::init(1,
                      (char *[1]) {(char *) "svn"},
@@ -262,7 +383,7 @@
   QString q_password = QString::fromUtf8(password);
   QString wallet_name = get_wallet_name(parameters);
   QString folder = QString::fromUtf8("Subversion");
-  KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
+  KWallet::Wallet *wallet = get_wallet(wallet_name, parameters, pool);
   if (wallet)
     {
       apr_hash_set(parameters,
--- subversion/svn/main.c
+++ subversion/svn/main.c
@@ -2067,6 +2067,9 @@
                                            pool)))
     svn_handle_error2(err, stderr, TRUE, "svn: ");
 
+  /* svn can safely create instance of QApplication class. */
+  svn_auth_set_parameter(ab, "svn:auth:qapplication-safe", "1");
+
   ctx->auth_baton = ab;
 
   /* Set up conflict resolution callback. */
--- subversion/svnsync/main.c
+++ subversion/svnsync/main.c
@@ -1,6 +1,6 @@
 /*
  * ====================================================================
- * Copyright (c) 2005-2008 CollabNet.  All rights reserved.
+ * Copyright (c) 2005-2009 CollabNet.  All rights reserved.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
@@ -2362,7 +2362,15 @@
                                         check_cancel, NULL,
                                         pool);
   if (! err)
-    err = (*subcommand->cmd_func)(os, &opt_baton, pool);
+    {
+      /* svnsync can safely create instance of QApplication class. */
+      svn_auth_set_parameter(opt_baton.source_auth_baton,
+                             "svn:auth:qapplication-safe", "1");
+      svn_auth_set_parameter(opt_baton.sync_auth_baton,
+                             "svn:auth:qapplication-safe", "1");
+
+      err = (*subcommand->cmd_func)(os, &opt_baton, pool);
+    }
   if (err)
     {
       /* For argument-related problems, suggest using the 'help'
