diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ab7444f..650cf47e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -180,7 +180,7 @@ if (UNIX) ${lib_Carbon} ) - else() + else() # not-apple # add include dir for bsd (posix uses /usr/include/) set(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH}:/usr/local/include") @@ -284,9 +284,9 @@ if (UNIX) add_definitions(-DWINAPI_XWINDOWS=1) endif() -else (UNIX) +else() # not-unix - list(APPEND libs Wtsapi32 Userenv Wininet) + list(APPEND libs Wtsapi32 Userenv Wininet comsuppw) add_definitions( /DWIN32 diff --git a/src/lib/client/CClient.cpp b/src/lib/client/CClient.cpp index c12851f2..193bffc9 100644 --- a/src/lib/client/CClient.cpp +++ b/src/lib/client/CClient.cpp @@ -737,11 +737,15 @@ CClient::onFileRecieveCompleted() void CClient::writeToDropDirThread(void*) { + LOG((CLOG_DEBUG "starting write to drop dir thread")); + while (m_screen->getFakeDraggingStarted()) { ARCH->sleep(.1f); } m_fileTransferDes = m_screen->getDropTarget(); + LOG((CLOG_DEBUG "dropping file, files=%i target=%s", m_dragFileList.size(), m_fileTransferDes.c_str())); + if (!m_fileTransferDes.empty() && m_dragFileList.size() > 0) { std::fstream file; CString dropTarget = m_fileTransferDes; diff --git a/src/lib/platform/CMSWindowsScreen.cpp b/src/lib/platform/CMSWindowsScreen.cpp index 1b57e127..d910b855 100644 --- a/src/lib/platform/CMSWindowsScreen.cpp +++ b/src/lib/platform/CMSWindowsScreen.cpp @@ -43,6 +43,7 @@ #include #include #include +#include // // add backwards compatible multihead support (and suppress bogus warning). @@ -147,10 +148,11 @@ CMSWindowsScreen::CMSWindowsScreen( LOG((CLOG_DEBUG "screen shape: %d,%d %dx%d %s", m_x, m_y, m_w, m_h, m_multimon ? "(multi-monitor)" : "")); LOG((CLOG_DEBUG "window is 0x%08x", m_window)); - char desktopPath[MAX_PATH]; - SHGetFolderPath(NULL, CSIDL_DESKTOP, NULL, 0, desktopPath); - m_desktopPath = CString(desktopPath); - LOG((CLOG_DEBUG "temporarily use desktop directory for drop target: %s", m_desktopPath.c_str())); + wchar_t* desktopPath = 0; + SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &desktopPath); + m_desktopPath = _bstr_t(desktopPath); + CoTaskMemFree(static_cast(desktopPath)); + LOG((CLOG_DEBUG "using desktop for drop target: %s", m_desktopPath.c_str())); } catch (...) { delete m_keyState; diff --git a/src/lib/server/CServer.cpp b/src/lib/server/CServer.cpp index bd66e2e3..6bb8845e 100644 --- a/src/lib/server/CServer.cpp +++ b/src/lib/server/CServer.cpp @@ -1988,11 +1988,15 @@ CServer::onFileRecieveCompleted() void CServer::writeToDropDirThread(void*) { + LOG((CLOG_DEBUG "starting write to drop dir thread")); + while (m_screen->getFakeDraggingStarted()) { ARCH->sleep(.1f); } m_fileTransferDes = m_screen->getDropTarget(); + LOG((CLOG_DEBUG "dropping file, files=%i target=%s", m_dragFileList.size(), m_fileTransferDes.c_str())); + if (!m_fileTransferDes.empty() && m_dragFileList.size() > 0) { std::fstream file; CString dropTarget = m_fileTransferDes; diff --git a/src/lib/synwinxt/CDataHandlerExtension.cpp b/src/lib/synwinxt/CDataHandlerExtension.cpp index 0cc90872..57ce01ff 100644 --- a/src/lib/synwinxt/CDataHandlerExtension.cpp +++ b/src/lib/synwinxt/CDataHandlerExtension.cpp @@ -16,13 +16,14 @@ */ #include "CDataHandlerExtension.h" -#include -#include +#include +#include +#include extern LONG g_refCount; extern GUID g_CLSID; -extern void setDraggingFilename(char*); -extern void outputDebugStringF(const char *str, ...); +extern void setDraggingFilename(const char* str); +extern void outputDebugStringF(const char* str, ...); CDataHandlerExtension::CDataHandlerExtension() : m_refCount(1) @@ -85,11 +86,9 @@ HRESULT STDMETHODCALLTYPE CDataHandlerExtension::Load(__RPC__in LPCOLESTR pszFileName, DWORD dwMode) { outputDebugStringF("synwinxt: > CDataHandlerExtension::Load\n"); - - char selectedFilename[MAX_PATH]; - StringCchCopyW(m_selectedFilename, ARRAYSIZE(m_selectedFilename), pszFileName); - WideCharToMultiByte(CP_ACP, 0, m_selectedFilename, -1, selectedFilename, MAX_PATH, NULL, NULL); - setDraggingFilename(selectedFilename); + + std::string fileName = _bstr_t(pszFileName); + setDraggingFilename(fileName.c_str()); outputDebugStringF("synwinxt: < CDataHandlerExtension::Load\n"); return S_OK; diff --git a/src/lib/synwinxt/CDataHandlerExtension.h b/src/lib/synwinxt/CDataHandlerExtension.h index 97c381bb..0e470ec8 100644 --- a/src/lib/synwinxt/CDataHandlerExtension.h +++ b/src/lib/synwinxt/CDataHandlerExtension.h @@ -53,5 +53,4 @@ public: private: LONG m_refCount; - WCHAR m_selectedFilename[MAX_PATH]; }; diff --git a/src/lib/synwinxt/synwinxt.cpp b/src/lib/synwinxt/synwinxt.cpp index 901a0caf..8cea1974 100644 --- a/src/lib/synwinxt/synwinxt.cpp +++ b/src/lib/synwinxt/synwinxt.cpp @@ -282,7 +282,7 @@ unregisterShellExtDataHandler(CHAR* fileType, const CLSID& clsid) } void -setDraggingFilename(char* filename) +setDraggingFilename(const char* filename) { outputDebugStringF("synwinxt: > setDraggingFilename, filename=%s\n", filename); memcpy(g_draggingFilename, filename, MAX_PATH);