mirror of
https://github.com/debauchee/barrier.git
synced 2026-05-07 22:23:12 +08:00
Added switch delay and double-tap options to win32 and added a
tray icon to the client and server that gives status feedback to the user and allows the user to kill the app.
This commit is contained in:
183
cmd/launcher/CAdvancedOptions.cpp
Normal file
183
cmd/launcher/CAdvancedOptions.cpp
Normal file
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* 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 "ProtocolTypes.h"
|
||||
#include "CStringUtil.h"
|
||||
#include "CArch.h"
|
||||
#include "CAdvancedOptions.h"
|
||||
#include "LaunchUtil.h"
|
||||
#include "resource.h"
|
||||
|
||||
//
|
||||
// CAdvancedOptions
|
||||
//
|
||||
|
||||
CAdvancedOptions* CAdvancedOptions::s_singleton = NULL;
|
||||
|
||||
CAdvancedOptions::CAdvancedOptions(HWND parent, CConfig* config) :
|
||||
m_parent(parent),
|
||||
m_config(config),
|
||||
m_isClient(false),
|
||||
m_screenName(ARCH->getHostName()),
|
||||
m_port(kDefaultPort)
|
||||
{
|
||||
assert(s_singleton == NULL);
|
||||
s_singleton = this;
|
||||
}
|
||||
|
||||
CAdvancedOptions::~CAdvancedOptions()
|
||||
{
|
||||
s_singleton = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
CAdvancedOptions::doModal(bool isClient)
|
||||
{
|
||||
// save state
|
||||
m_isClient = isClient;
|
||||
|
||||
// do dialog
|
||||
DialogBoxParam(s_instance, MAKEINTRESOURCE(IDD_ADVANCED_OPTIONS),
|
||||
m_parent, dlgProc, (LPARAM)this);
|
||||
}
|
||||
|
||||
CString
|
||||
CAdvancedOptions::getScreenName() const
|
||||
{
|
||||
return m_screenName;
|
||||
}
|
||||
|
||||
int
|
||||
CAdvancedOptions::getPort() const
|
||||
{
|
||||
return m_port;
|
||||
}
|
||||
|
||||
CString
|
||||
CAdvancedOptions::getCommandLine(bool isClient, const CString& serverName) const
|
||||
{
|
||||
CString cmdLine;
|
||||
|
||||
// screen name
|
||||
if (!m_screenName.empty()) {
|
||||
cmdLine += " --name ";
|
||||
cmdLine += m_screenName;
|
||||
}
|
||||
|
||||
// port
|
||||
char portString[20];
|
||||
sprintf(portString, "%d", m_port);
|
||||
if (isClient) {
|
||||
cmdLine += " ";
|
||||
cmdLine += serverName;
|
||||
cmdLine += ":";
|
||||
cmdLine += portString;
|
||||
}
|
||||
else {
|
||||
cmdLine += " --address :";
|
||||
cmdLine += portString;
|
||||
}
|
||||
|
||||
return cmdLine;
|
||||
}
|
||||
|
||||
void
|
||||
CAdvancedOptions::init(HWND hwnd)
|
||||
{
|
||||
HWND child;
|
||||
char buffer[20];
|
||||
sprintf(buffer, "%d", m_port);
|
||||
child = getItem(hwnd, IDC_ADVANCED_PORT_EDIT);
|
||||
SendMessage(child, WM_SETTEXT, 0, (LPARAM)buffer);
|
||||
|
||||
child = getItem(hwnd, IDC_ADVANCED_NAME_EDIT);
|
||||
SendMessage(child, WM_SETTEXT, 0, (LPARAM)m_screenName.c_str());
|
||||
}
|
||||
|
||||
bool
|
||||
CAdvancedOptions::save(HWND hwnd)
|
||||
{
|
||||
HWND child = getItem(hwnd, IDC_ADVANCED_NAME_EDIT);
|
||||
CString name = getWindowText(child);
|
||||
if (!m_config->isValidScreenName(name)) {
|
||||
showError(hwnd, CStringUtil::format(
|
||||
getString(IDS_INVALID_SCREEN_NAME).c_str(),
|
||||
name.c_str()));
|
||||
SetFocus(child);
|
||||
return false;
|
||||
}
|
||||
if (!m_isClient && !m_config->isScreen(name)) {
|
||||
showError(hwnd, CStringUtil::format(
|
||||
getString(IDS_UNKNOWN_SCREEN_NAME).c_str(),
|
||||
name.c_str()));
|
||||
SetFocus(child);
|
||||
return false;
|
||||
}
|
||||
|
||||
// get and verify port
|
||||
child = getItem(hwnd, IDC_ADVANCED_PORT_EDIT);
|
||||
CString portString = getWindowText(child);
|
||||
int port = atoi(portString.c_str());
|
||||
if (port < 1 || port > 65535) {
|
||||
CString defaultPortString = CStringUtil::print("%d", kDefaultPort);
|
||||
showError(hwnd, CStringUtil::format(
|
||||
getString(IDS_INVALID_PORT).c_str(),
|
||||
portString.c_str(),
|
||||
defaultPortString.c_str()));
|
||||
SetFocus(child);
|
||||
return false;
|
||||
}
|
||||
|
||||
// save state
|
||||
m_screenName = name;
|
||||
m_port = port;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL
|
||||
CAdvancedOptions::doDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM)
|
||||
{
|
||||
switch (message) {
|
||||
case WM_INITDIALOG:
|
||||
init(hwnd);
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam)) {
|
||||
case IDOK:
|
||||
if (save(hwnd)) {
|
||||
EndDialog(hwnd, 0);
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case IDCANCEL:
|
||||
EndDialog(hwnd, 0);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CALLBACK
|
||||
CAdvancedOptions::dlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return s_singleton->doDlgProc(hwnd, message, wParam, lParam);
|
||||
}
|
||||
Reference in New Issue
Block a user