1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

chore: Make the windows code compatible with TCHAR.

This adds support for multi-byte builds. Users building qTox in
multi-byte instead of unicode mode would otherwise get compiler errors.
This is one step in the direction of making qTox a library with the UI
being just one application of it: it gives library users a choice of how
they build it.
This commit is contained in:
iphydf 2016-08-18 10:40:21 +01:00
parent 76c4cf7d39
commit e20dffab07
No known key found for this signature in database
GPG Key ID: 3855DBA2D74403C9

View File

@ -24,35 +24,48 @@
#include <windows.h> #include <windows.h>
#include <string> #include <string>
#ifdef UNICODE
/**
* tstring is either std::wstring or std::string, depending on whether the user
* is building a Unicode or Multi-Byte version of qTox. This makes the code
* easier to reuse and compatible with both setups.
*/
using tstring = std::wstring;
static inline tstring toTString(QString s) { return s.toStdWString(); }
#else
using tstring = std::string;
static inline tstring toTString(QString s) { return s.toStdString(); }
#endif
namespace Platform namespace Platform
{ {
inline std::wstring currentCommandLine() inline tstring currentCommandLine()
{ {
return ("\"" + QApplication::applicationFilePath().replace('/', '\\') + "\" -p \"" + return toTString("\"" + QApplication::applicationFilePath().replace('/', '\\') + "\" -p \"" +
Settings::getInstance().getCurrentProfile() + "\"").toStdWString(); Settings::getInstance().getCurrentProfile() + "\"");
} }
inline std::wstring currentRegistryKeyName() inline tstring currentRegistryKeyName()
{ {
return (QString("qTox - ") + Settings::getInstance().getCurrentProfile()).toStdWString(); return toTString("qTox - " + Settings::getInstance().getCurrentProfile());
} }
} }
bool Platform::setAutorun(bool on) bool Platform::setAutorun(bool on)
{ {
HKEY key = 0; HKEY key = 0;
if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) 0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS)
return false; return false;
bool result = false; bool result = false;
std::wstring keyName = currentRegistryKeyName(); tstring keyName = currentRegistryKeyName();
if (on) if (on)
{ {
std::wstring path = currentCommandLine(); tstring path = currentCommandLine();
result = RegSetValueEx(key, keyName.c_str(), 0, REG_SZ, (PBYTE)path.c_str(), result = RegSetValueEx(key, keyName.c_str(), 0, REG_SZ, (PBYTE)path.c_str(),
path.length() * sizeof(wchar_t)) == ERROR_SUCCESS; path.length() * sizeof(TCHAR)) == ERROR_SUCCESS;
} }
else else
result = RegDeleteValue(key, keyName.c_str()) == ERROR_SUCCESS; result = RegDeleteValue(key, keyName.c_str()) == ERROR_SUCCESS;
@ -64,13 +77,13 @@ bool Platform::setAutorun(bool on)
bool Platform::getAutorun() bool Platform::getAutorun()
{ {
HKEY key = 0; HKEY key = 0;
if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) 0, KEY_ALL_ACCESS, &key) != ERROR_SUCCESS)
return false; return false;
std::wstring keyName = currentRegistryKeyName();; tstring keyName = currentRegistryKeyName();
wchar_t path[MAX_PATH] = { 0 }; TCHAR path[MAX_PATH] = { 0 };
DWORD length = sizeof(path); DWORD length = sizeof(path);
DWORD type = REG_SZ; DWORD type = REG_SZ;
bool result = false; bool result = false;