mirror of
https://github.com/debauchee/barrier.git
synced 2025-06-18 02:31:42 +02:00
Initial commit of the synergy trunk sources from sf.net
This commit is contained in:
commit
958fa80d1d
429 changed files with 96848 additions and 0 deletions
261
cmd/launcher/LaunchUtil.cpp
Normal file
261
cmd/launcher/LaunchUtil.cpp
Normal file
|
@ -0,0 +1,261 @@
|
|||
/*
|
||||
* synergy -- mouse and keyboard sharing utility
|
||||
* Copyright (C) 2002 Chris Schoeneman
|
||||
*
|
||||
* This package is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* found in the file COPYING that should have accompanied this file.
|
||||
*
|
||||
* This package is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "CConfig.h"
|
||||
#include "LaunchUtil.h"
|
||||
#include "CMSWindowsUtil.h"
|
||||
#include "CArch.h"
|
||||
#include "resource.h"
|
||||
#include "stdfstream.h"
|
||||
|
||||
size_t s_showingDialog = 0;
|
||||
|
||||
CString
|
||||
getString(DWORD id)
|
||||
{
|
||||
return CMSWindowsUtil::getString(s_instance, id);
|
||||
}
|
||||
|
||||
CString
|
||||
getErrorString(DWORD error)
|
||||
{
|
||||
return CMSWindowsUtil::getErrorString(s_instance, error, IDS_ERROR);
|
||||
}
|
||||
|
||||
void
|
||||
showError(HWND hwnd, const CString& msg)
|
||||
{
|
||||
CString title = getString(IDS_ERROR);
|
||||
++s_showingDialog;
|
||||
MessageBox(hwnd, msg.c_str(), title.c_str(), MB_OK | MB_APPLMODAL);
|
||||
--s_showingDialog;
|
||||
}
|
||||
|
||||
void
|
||||
askOkay(HWND hwnd, const CString& title, const CString& msg)
|
||||
{
|
||||
++s_showingDialog;
|
||||
MessageBox(hwnd, msg.c_str(), title.c_str(), MB_OK | MB_APPLMODAL);
|
||||
--s_showingDialog;
|
||||
}
|
||||
|
||||
bool
|
||||
askVerify(HWND hwnd, const CString& msg)
|
||||
{
|
||||
CString title = getString(IDS_VERIFY);
|
||||
++s_showingDialog;
|
||||
int result = MessageBox(hwnd, msg.c_str(),
|
||||
title.c_str(), MB_OKCANCEL | MB_APPLMODAL);
|
||||
--s_showingDialog;
|
||||
return (result == IDOK);
|
||||
}
|
||||
|
||||
bool
|
||||
isShowingDialog()
|
||||
{
|
||||
return (s_showingDialog != 0);
|
||||
}
|
||||
|
||||
void
|
||||
setWindowText(HWND hwnd, const CString& msg)
|
||||
{
|
||||
SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)msg.c_str());
|
||||
}
|
||||
|
||||
CString
|
||||
getWindowText(HWND hwnd)
|
||||
{
|
||||
LRESULT size = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
|
||||
char* buffer = new char[size + 1];
|
||||
SendMessage(hwnd, WM_GETTEXT, size + 1, (LPARAM)buffer);
|
||||
buffer[size] = '\0';
|
||||
CString result(buffer);
|
||||
delete[] buffer;
|
||||
return result;
|
||||
}
|
||||
|
||||
HWND
|
||||
getItem(HWND hwnd, int id)
|
||||
{
|
||||
return GetDlgItem(hwnd, id);
|
||||
}
|
||||
|
||||
void
|
||||
enableItem(HWND hwnd, int id, bool enabled)
|
||||
{
|
||||
EnableWindow(GetDlgItem(hwnd, id), enabled);
|
||||
}
|
||||
|
||||
void
|
||||
setItemChecked(HWND hwnd, bool checked)
|
||||
{
|
||||
SendMessage(hwnd, BM_SETCHECK, checked ? BST_CHECKED : BST_UNCHECKED, 0);
|
||||
}
|
||||
|
||||
bool
|
||||
isItemChecked(HWND hwnd)
|
||||
{
|
||||
return (SendMessage(hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED);
|
||||
}
|
||||
|
||||
CString
|
||||
getAppPath(const CString& appName)
|
||||
{
|
||||
// prepare path to app
|
||||
char myPathname[MAX_PATH];
|
||||
GetModuleFileName(s_instance, myPathname, MAX_PATH);
|
||||
const char* myBasename = ARCH->getBasename(myPathname);
|
||||
CString appPath = CString(myPathname, myBasename - myPathname);
|
||||
appPath += appName;
|
||||
return appPath;
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
getFileTime(const CString& path, time_t& t)
|
||||
{
|
||||
struct _stat s;
|
||||
if (_stat(path.c_str(), &s) != -1) {
|
||||
t = s.st_mtime;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
isConfigNewer(time_t& oldTime, bool userConfig)
|
||||
{
|
||||
time_t newTime = oldTime;
|
||||
if (userConfig) {
|
||||
CString path = ARCH->getUserDirectory();
|
||||
if (!path.empty()) {
|
||||
path = ARCH->concatPath(path, CONFIG_NAME);
|
||||
getFileTime(path, newTime);
|
||||
}
|
||||
}
|
||||
else {
|
||||
CString path = ARCH->getSystemDirectory();
|
||||
if (!path.empty()) {
|
||||
path = ARCH->concatPath(path, CONFIG_NAME);
|
||||
getFileTime(path, newTime);
|
||||
}
|
||||
}
|
||||
bool result = (newTime > oldTime);
|
||||
oldTime = newTime;
|
||||
return result;
|
||||
}
|
||||
|
||||
static
|
||||
bool
|
||||
loadConfig(const CString& pathname, CConfig& config)
|
||||
{
|
||||
try {
|
||||
std::ifstream stream(pathname.c_str());
|
||||
if (stream) {
|
||||
stream >> config;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
// ignore
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
loadConfig(CConfig& config, time_t& t, bool& userConfig)
|
||||
{
|
||||
// load configuration
|
||||
bool configLoaded = false;
|
||||
CString path = ARCH->getUserDirectory();
|
||||
if (!path.empty()) {
|
||||
// try loading the user's configuration
|
||||
path = ARCH->concatPath(path, CONFIG_NAME);
|
||||
if (loadConfig(path, config)) {
|
||||
configLoaded = true;
|
||||
userConfig = true;
|
||||
getFileTime(path, t);
|
||||
}
|
||||
else {
|
||||
// try the system-wide config file
|
||||
path = ARCH->getSystemDirectory();
|
||||
if (!path.empty()) {
|
||||
path = ARCH->concatPath(path, CONFIG_NAME);
|
||||
if (loadConfig(path, config)) {
|
||||
configLoaded = true;
|
||||
userConfig = false;
|
||||
getFileTime(path, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return configLoaded;
|
||||
}
|
||||
|
||||
static
|
||||
bool
|
||||
saveConfig(const CString& pathname, const CConfig& config)
|
||||
{
|
||||
try {
|
||||
std::ofstream stream(pathname.c_str());
|
||||
if (stream) {
|
||||
stream << config;
|
||||
return !!stream;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
// ignore
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
saveConfig(const CConfig& config, bool sysOnly, time_t& t)
|
||||
{
|
||||
// try saving the user's configuration
|
||||
if (!sysOnly) {
|
||||
CString path = ARCH->getUserDirectory();
|
||||
if (!path.empty()) {
|
||||
path = ARCH->concatPath(path, CONFIG_NAME);
|
||||
if (saveConfig(path, config)) {
|
||||
getFileTime(path, t);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// try the system-wide config file
|
||||
else {
|
||||
CString path = ARCH->getSystemDirectory();
|
||||
if (!path.empty()) {
|
||||
path = ARCH->concatPath(path, CONFIG_NAME);
|
||||
if (saveConfig(path, config)) {
|
||||
getFileTime(path, t);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const TCHAR* const*
|
||||
getSettingsPath()
|
||||
{
|
||||
static const TCHAR* s_keyNames[] = {
|
||||
TEXT("Software"),
|
||||
TEXT("Synergy"),
|
||||
TEXT("Synergy"),
|
||||
NULL
|
||||
};
|
||||
return s_keyNames;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue