add headless mode settings in GUI, cursor no jump while reconnect

This commit is contained in:
lededev 2021-04-24 04:37:49 +08:00
parent 833904e3bf
commit 5e77cb4577
13 changed files with 45 additions and 13 deletions

View File

@ -61,7 +61,8 @@ AppConfig::AppConfig(QSettings* settings) :
m_CryptoEnabled(false), m_CryptoEnabled(false),
m_AutoHide(false), m_AutoHide(false),
m_AutoStart(false), m_AutoStart(false),
m_MinimizeToTray(false) m_MinimizeToTray(false),
m_HeadlessMode(false)
{ {
Q_ASSERT(m_pSettings); Q_ASSERT(m_pSettings);
@ -161,6 +162,7 @@ void AppConfig::loadSettings()
m_AutoHide = settings().value("autoHide", false).toBool(); m_AutoHide = settings().value("autoHide", false).toBool();
m_AutoStart = settings().value("autoStart", false).toBool(); m_AutoStart = settings().value("autoStart", false).toBool();
m_MinimizeToTray = settings().value("minimizeToTray", false).toBool(); m_MinimizeToTray = settings().value("minimizeToTray", false).toBool();
m_HeadlessMode = settings().value("headlessMode", false).toBool();
} }
void AppConfig::saveSettings() void AppConfig::saveSettings()
@ -184,6 +186,7 @@ void AppConfig::saveSettings()
settings().setValue("autoHide", m_AutoHide); settings().setValue("autoHide", m_AutoHide);
settings().setValue("autoStart", m_AutoStart); settings().setValue("autoStart", m_AutoStart);
settings().setValue("minimizeToTray", m_MinimizeToTray); settings().setValue("minimizeToTray", m_MinimizeToTray);
settings().setValue("headlessMode", m_HeadlessMode);
settings().sync(); settings().sync();
} }
@ -236,3 +239,7 @@ bool AppConfig::getAutoStart() { return m_AutoStart; }
void AppConfig::setMinimizeToTray(bool b) { m_MinimizeToTray = b; } void AppConfig::setMinimizeToTray(bool b) { m_MinimizeToTray = b; }
bool AppConfig::getMinimizeToTray() { return m_MinimizeToTray; } bool AppConfig::getMinimizeToTray() { return m_MinimizeToTray; }
void AppConfig::setHeadlessMode(bool b) { m_HeadlessMode = b; }
bool AppConfig::getHeadlessMode() { return m_HeadlessMode; }

View File

@ -100,6 +100,9 @@ class AppConfig: public QObject
void setMinimizeToTray(bool b); void setMinimizeToTray(bool b);
bool getMinimizeToTray(); bool getMinimizeToTray();
void setHeadlessMode(bool b);
bool getHeadlessMode();
void saveSettings(); void saveSettings();
protected: protected:
@ -135,6 +138,7 @@ protected:
bool m_AutoHide; bool m_AutoHide;
bool m_AutoStart; bool m_AutoStart;
bool m_MinimizeToTray; bool m_MinimizeToTray;
bool m_HeadlessMode;
static const char m_BarriersName[]; static const char m_BarriersName[];
static const char m_BarriercName[]; static const char m_BarriercName[];

View File

@ -519,6 +519,9 @@ void MainWindow::startBarrier()
args << "--enable-crypto"; args << "--enable-crypto";
} }
if (m_AppConfig->getHeadlessMode()) {
args << "--headless-mode";
}
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
// on windows, the profile directory changes depending on the user that // on windows, the profile directory changes depending on the user that
// launched the process (e.g. when launched with elevation). setting the // launched the process (e.g. when launched with elevation). setting the

View File

@ -51,6 +51,7 @@ SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) :
m_pCheckBoxAutoStart->setChecked(appConfig().getAutoStart()); m_pCheckBoxAutoStart->setChecked(appConfig().getAutoStart());
m_pCheckBoxMinimizeToTray->setChecked(appConfig().getMinimizeToTray()); m_pCheckBoxMinimizeToTray->setChecked(appConfig().getMinimizeToTray());
m_pCheckBoxEnableCrypto->setChecked(m_appConfig.getCryptoEnabled()); m_pCheckBoxEnableCrypto->setChecked(m_appConfig.getCryptoEnabled());
m_pCheckBoxHeadlessMode->setChecked(m_appConfig.getHeadlessMode());
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
m_pComboElevate->setCurrentIndex(static_cast<int>(appConfig().elevateMode())); m_pComboElevate->setCurrentIndex(static_cast<int>(appConfig().elevateMode()));
@ -75,6 +76,7 @@ void SettingsDialog::accept()
m_appConfig.setAutoHide(m_pCheckBoxAutoHide->isChecked()); m_appConfig.setAutoHide(m_pCheckBoxAutoHide->isChecked());
m_appConfig.setAutoStart(m_pCheckBoxAutoStart->isChecked()); m_appConfig.setAutoStart(m_pCheckBoxAutoStart->isChecked());
m_appConfig.setMinimizeToTray(m_pCheckBoxMinimizeToTray->isChecked()); m_appConfig.setMinimizeToTray(m_pCheckBoxMinimizeToTray->isChecked());
m_appConfig.setHeadlessMode(m_pCheckBoxHeadlessMode->isChecked());
m_appConfig.saveSettings(); m_appConfig.saveSettings();
QDialog::accept(); QDialog::accept();
} }

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>368</width> <width>368</width>
<height>428</height> <height>454</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -133,6 +133,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1">
<widget class="QCheckBox" name="m_pCheckBoxHeadlessMode">
<property name="text">
<string>Headless &amp;mode</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@ -164,7 +164,7 @@ ClientApp::createScreen()
{ {
#if WINAPI_MSWINDOWS #if WINAPI_MSWINDOWS
return new barrier::Screen(new MSWindowsScreen( return new barrier::Screen(new MSWindowsScreen(
false, args().m_noHooks, args().m_stopOnDeskSwitch, m_events), m_events); false, args().m_noHooks, args().m_stopOnDeskSwitch, args().m_headlessMode, m_events), m_events);
#elif WINAPI_XWINDOWS #elif WINAPI_XWINDOWS
return new barrier::Screen(new XWindowsScreen( return new barrier::Screen(new XWindowsScreen(
new XWindowsImpl(), new XWindowsImpl(),

View File

@ -616,7 +616,7 @@ ServerApp::createScreen()
{ {
#if WINAPI_MSWINDOWS #if WINAPI_MSWINDOWS
return new barrier::Screen(new MSWindowsScreen( return new barrier::Screen(new MSWindowsScreen(
true, args().m_noHooks, args().m_stopOnDeskSwitch, m_events), m_events); true, args().m_noHooks, args().m_stopOnDeskSwitch, args().m_headlessMode, m_events), m_events);
#elif WINAPI_XWINDOWS #elif WINAPI_XWINDOWS
return new barrier::Screen(new XWindowsScreen( return new barrier::Screen(new XWindowsScreen(
new XWindowsImpl(), new XWindowsImpl(),

View File

@ -240,6 +240,7 @@ void
Client::enter(SInt32 xAbs, SInt32 yAbs, UInt32, KeyModifierMask mask, bool) Client::enter(SInt32 xAbs, SInt32 yAbs, UInt32, KeyModifierMask mask, bool)
{ {
m_active = true; m_active = true;
if (!m_args.m_headlessMode)
m_screen->mouseMove(xAbs, yAbs); m_screen->mouseMove(xAbs, yAbs);
m_screen->enter(mask); m_screen->enter(mask);

View File

@ -100,7 +100,7 @@
MSWindowsDesks::MSWindowsDesks( MSWindowsDesks::MSWindowsDesks(
bool isPrimary, bool noHooks, bool isPrimary, bool noHooks,
const IScreenSaver* screensaver, IEventQueue* events, const IScreenSaver* screensaver, IEventQueue* events,
IJob* updateKeys, bool stopOnDeskSwitch) : IJob* updateKeys, bool stopOnDeskSwitch, bool headlessMode) :
m_isPrimary(isPrimary), m_isPrimary(isPrimary),
m_noHooks(noHooks), m_noHooks(noHooks),
m_isOnScreen(m_isPrimary), m_isOnScreen(m_isPrimary),
@ -117,7 +117,8 @@ MSWindowsDesks::MSWindowsDesks(
m_deskReady(&m_mutex, false), m_deskReady(&m_mutex, false),
m_updateKeys(updateKeys), m_updateKeys(updateKeys),
m_events(events), m_events(events),
m_stopOnDeskSwitch(stopOnDeskSwitch) m_stopOnDeskSwitch(stopOnDeskSwitch),
m_headlessMode(headlessMode)
{ {
m_cursor = createBlankCursor(); m_cursor = createBlankCursor();
m_deskClass = createDeskWindowClass(m_isPrimary); m_deskClass = createDeskWindowClass(m_isPrimary);
@ -596,10 +597,12 @@ MSWindowsDesks::deskLeave(Desk* desk, HKL keyLayout)
// we aren't notified when the mouse leaves our window. // we aren't notified when the mouse leaves our window.
SetCapture(desk->m_window); SetCapture(desk->m_window);
if (!m_headlessMode) {
// warp the mouse to the cursor center // warp the mouse to the cursor center
LOG((CLOG_DEBUG2 "warping cursor to center: %+d,%+d", m_xCenter, m_yCenter)); LOG((CLOG_DEBUG2 "warping cursor to center: %+d,%+d", m_xCenter, m_yCenter));
deskMouseMove(m_xCenter, m_yCenter); deskMouseMove(m_xCenter, m_yCenter);
} }
}
} }
void void

View File

@ -68,7 +68,7 @@ public:
MSWindowsDesks( MSWindowsDesks(
bool isPrimary, bool noHooks, bool isPrimary, bool noHooks,
const IScreenSaver* screensaver, IEventQueue* events, const IScreenSaver* screensaver, IEventQueue* events,
IJob* updateKeys, bool stopOnDeskSwitch); IJob* updateKeys, bool stopOnDeskSwitch, bool headlessMode);
~MSWindowsDesks(); ~MSWindowsDesks();
//! @name manipulators //! @name manipulators
@ -294,4 +294,6 @@ private:
// true if program should stop on desk switch. // true if program should stop on desk switch.
bool m_stopOnDeskSwitch; bool m_stopOnDeskSwitch;
bool m_headlessMode;
}; };

View File

@ -93,6 +93,7 @@ MSWindowsScreen::MSWindowsScreen(
bool isPrimary, bool isPrimary,
bool noHooks, bool noHooks,
bool stopOnDeskSwitch, bool stopOnDeskSwitch,
bool headlessMode,
IEventQueue* events) : IEventQueue* events) :
PlatformScreen(events), PlatformScreen(events),
m_isPrimary(isPrimary), m_isPrimary(isPrimary),
@ -136,7 +137,8 @@ MSWindowsScreen::MSWindowsScreen(
m_events, m_events,
new TMethodJob<MSWindowsScreen>( new TMethodJob<MSWindowsScreen>(
this, &MSWindowsScreen::updateKeysCB), this, &MSWindowsScreen::updateKeysCB),
stopOnDeskSwitch); stopOnDeskSwitch,
headlessMode);
m_keyState = new MSWindowsKeyState(m_desks, getEventTarget(), m_events); m_keyState = new MSWindowsKeyState(m_desks, getEventTarget(), m_events);
updateScreenShape(); updateScreenShape();

View File

@ -44,6 +44,7 @@ public:
bool isPrimary, bool isPrimary,
bool noHooks, bool noHooks,
bool stopOnDeskSwitch, bool stopOnDeskSwitch,
bool headlessMode,
IEventQueue* events); IEventQueue* events);
virtual ~MSWindowsScreen(); virtual ~MSWindowsScreen();

View File

@ -53,7 +53,7 @@ protected:
return new MSWindowsDesks( return new MSWindowsDesks(
true, false, m_screensaver, eventQueue, true, false, m_screensaver, eventQueue,
new TMethodJob<MSWindowsKeyStateTests>( new TMethodJob<MSWindowsKeyStateTests>(
this, &MSWindowsKeyStateTests::updateKeysCB), false); this, &MSWindowsKeyStateTests::updateKeysCB), false, false);
} }
void* getEventTarget() const void* getEventTarget() const