Skip to content

Commit 5e77cb4

Browse files
author
lededev
committed
add headless mode settings in GUI, cursor no jump while reconnect
1 parent 833904e commit 5e77cb4

13 files changed

+45
-13
lines changed

src/gui/src/AppConfig.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ AppConfig::AppConfig(QSettings* settings) :
6161
m_CryptoEnabled(false),
6262
m_AutoHide(false),
6363
m_AutoStart(false),
64-
m_MinimizeToTray(false)
64+
m_MinimizeToTray(false),
65+
m_HeadlessMode(false)
6566
{
6667
Q_ASSERT(m_pSettings);
6768

@@ -161,6 +162,7 @@ void AppConfig::loadSettings()
161162
m_AutoHide = settings().value("autoHide", false).toBool();
162163
m_AutoStart = settings().value("autoStart", false).toBool();
163164
m_MinimizeToTray = settings().value("minimizeToTray", false).toBool();
165+
m_HeadlessMode = settings().value("headlessMode", false).toBool();
164166
}
165167

166168
void AppConfig::saveSettings()
@@ -184,6 +186,7 @@ void AppConfig::saveSettings()
184186
settings().setValue("autoHide", m_AutoHide);
185187
settings().setValue("autoStart", m_AutoStart);
186188
settings().setValue("minimizeToTray", m_MinimizeToTray);
189+
settings().setValue("headlessMode", m_HeadlessMode);
187190
settings().sync();
188191
}
189192

@@ -236,3 +239,7 @@ bool AppConfig::getAutoStart() { return m_AutoStart; }
236239
void AppConfig::setMinimizeToTray(bool b) { m_MinimizeToTray = b; }
237240

238241
bool AppConfig::getMinimizeToTray() { return m_MinimizeToTray; }
242+
243+
void AppConfig::setHeadlessMode(bool b) { m_HeadlessMode = b; }
244+
245+
bool AppConfig::getHeadlessMode() { return m_HeadlessMode; }

src/gui/src/AppConfig.h

+4
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ class AppConfig: public QObject
100100
void setMinimizeToTray(bool b);
101101
bool getMinimizeToTray();
102102

103+
void setHeadlessMode(bool b);
104+
bool getHeadlessMode();
105+
103106
void saveSettings();
104107

105108
protected:
@@ -135,6 +138,7 @@ class AppConfig: public QObject
135138
bool m_AutoHide;
136139
bool m_AutoStart;
137140
bool m_MinimizeToTray;
141+
bool m_HeadlessMode;
138142

139143
static const char m_BarriersName[];
140144
static const char m_BarriercName[];

src/gui/src/MainWindow.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,9 @@ void MainWindow::startBarrier()
519519
args << "--enable-crypto";
520520
}
521521

522+
if (m_AppConfig->getHeadlessMode()) {
523+
args << "--headless-mode";
524+
}
522525
#if defined(Q_OS_WIN)
523526
// on windows, the profile directory changes depending on the user that
524527
// launched the process (e.g. when launched with elevation). setting the

src/gui/src/SettingsDialog.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) :
5151
m_pCheckBoxAutoStart->setChecked(appConfig().getAutoStart());
5252
m_pCheckBoxMinimizeToTray->setChecked(appConfig().getMinimizeToTray());
5353
m_pCheckBoxEnableCrypto->setChecked(m_appConfig.getCryptoEnabled());
54+
m_pCheckBoxHeadlessMode->setChecked(m_appConfig.getHeadlessMode());
5455

5556
#if defined(Q_OS_WIN)
5657
m_pComboElevate->setCurrentIndex(static_cast<int>(appConfig().elevateMode()));
@@ -75,6 +76,7 @@ void SettingsDialog::accept()
7576
m_appConfig.setAutoHide(m_pCheckBoxAutoHide->isChecked());
7677
m_appConfig.setAutoStart(m_pCheckBoxAutoStart->isChecked());
7778
m_appConfig.setMinimizeToTray(m_pCheckBoxMinimizeToTray->isChecked());
79+
m_appConfig.setHeadlessMode(m_pCheckBoxHeadlessMode->isChecked());
7880
m_appConfig.saveSettings();
7981
QDialog::accept();
8082
}

src/gui/src/SettingsDialogBase.ui

+8-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>368</width>
10-
<height>428</height>
10+
<height>454</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -133,6 +133,13 @@
133133
</property>
134134
</widget>
135135
</item>
136+
<item row="3" column="1">
137+
<widget class="QCheckBox" name="m_pCheckBoxHeadlessMode">
138+
<property name="text">
139+
<string>Headless &amp;mode</string>
140+
</property>
141+
</widget>
142+
</item>
136143
</layout>
137144
</widget>
138145
</item>

src/lib/barrier/ClientApp.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ ClientApp::createScreen()
164164
{
165165
#if WINAPI_MSWINDOWS
166166
return new barrier::Screen(new MSWindowsScreen(
167-
false, args().m_noHooks, args().m_stopOnDeskSwitch, m_events), m_events);
167+
false, args().m_noHooks, args().m_stopOnDeskSwitch, args().m_headlessMode, m_events), m_events);
168168
#elif WINAPI_XWINDOWS
169169
return new barrier::Screen(new XWindowsScreen(
170170
new XWindowsImpl(),

src/lib/barrier/ServerApp.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ ServerApp::createScreen()
616616
{
617617
#if WINAPI_MSWINDOWS
618618
return new barrier::Screen(new MSWindowsScreen(
619-
true, args().m_noHooks, args().m_stopOnDeskSwitch, m_events), m_events);
619+
true, args().m_noHooks, args().m_stopOnDeskSwitch, args().m_headlessMode, m_events), m_events);
620620
#elif WINAPI_XWINDOWS
621621
return new barrier::Screen(new XWindowsScreen(
622622
new XWindowsImpl(),

src/lib/client/Client.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ void
240240
Client::enter(SInt32 xAbs, SInt32 yAbs, UInt32, KeyModifierMask mask, bool)
241241
{
242242
m_active = true;
243-
m_screen->mouseMove(xAbs, yAbs);
243+
if (!m_args.m_headlessMode)
244+
m_screen->mouseMove(xAbs, yAbs);
244245
m_screen->enter(mask);
245246

246247
if (m_sendFileThread != NULL) {

src/lib/platform/MSWindowsDesks.cpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
MSWindowsDesks::MSWindowsDesks(
101101
bool isPrimary, bool noHooks,
102102
const IScreenSaver* screensaver, IEventQueue* events,
103-
IJob* updateKeys, bool stopOnDeskSwitch) :
103+
IJob* updateKeys, bool stopOnDeskSwitch, bool headlessMode) :
104104
m_isPrimary(isPrimary),
105105
m_noHooks(noHooks),
106106
m_isOnScreen(m_isPrimary),
@@ -117,7 +117,8 @@ MSWindowsDesks::MSWindowsDesks(
117117
m_deskReady(&m_mutex, false),
118118
m_updateKeys(updateKeys),
119119
m_events(events),
120-
m_stopOnDeskSwitch(stopOnDeskSwitch)
120+
m_stopOnDeskSwitch(stopOnDeskSwitch),
121+
m_headlessMode(headlessMode)
121122
{
122123
m_cursor = createBlankCursor();
123124
m_deskClass = createDeskWindowClass(m_isPrimary);
@@ -596,9 +597,11 @@ MSWindowsDesks::deskLeave(Desk* desk, HKL keyLayout)
596597
// we aren't notified when the mouse leaves our window.
597598
SetCapture(desk->m_window);
598599

599-
// warp the mouse to the cursor center
600-
LOG((CLOG_DEBUG2 "warping cursor to center: %+d,%+d", m_xCenter, m_yCenter));
601-
deskMouseMove(m_xCenter, m_yCenter);
600+
if (!m_headlessMode) {
601+
// warp the mouse to the cursor center
602+
LOG((CLOG_DEBUG2 "warping cursor to center: %+d,%+d", m_xCenter, m_yCenter));
603+
deskMouseMove(m_xCenter, m_yCenter);
604+
}
602605
}
603606
}
604607

src/lib/platform/MSWindowsDesks.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class MSWindowsDesks {
6868
MSWindowsDesks(
6969
bool isPrimary, bool noHooks,
7070
const IScreenSaver* screensaver, IEventQueue* events,
71-
IJob* updateKeys, bool stopOnDeskSwitch);
71+
IJob* updateKeys, bool stopOnDeskSwitch, bool headlessMode);
7272
~MSWindowsDesks();
7373

7474
//! @name manipulators
@@ -294,4 +294,6 @@ class MSWindowsDesks {
294294

295295
// true if program should stop on desk switch.
296296
bool m_stopOnDeskSwitch;
297+
298+
bool m_headlessMode;
297299
};

src/lib/platform/MSWindowsScreen.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ MSWindowsScreen::MSWindowsScreen(
9393
bool isPrimary,
9494
bool noHooks,
9595
bool stopOnDeskSwitch,
96+
bool headlessMode,
9697
IEventQueue* events) :
9798
PlatformScreen(events),
9899
m_isPrimary(isPrimary),
@@ -136,7 +137,8 @@ MSWindowsScreen::MSWindowsScreen(
136137
m_events,
137138
new TMethodJob<MSWindowsScreen>(
138139
this, &MSWindowsScreen::updateKeysCB),
139-
stopOnDeskSwitch);
140+
stopOnDeskSwitch,
141+
headlessMode);
140142
m_keyState = new MSWindowsKeyState(m_desks, getEventTarget(), m_events);
141143

142144
updateScreenShape();

src/lib/platform/MSWindowsScreen.h

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class MSWindowsScreen : public PlatformScreen {
4444
bool isPrimary,
4545
bool noHooks,
4646
bool stopOnDeskSwitch,
47+
bool headlessMode,
4748
IEventQueue* events);
4849
virtual ~MSWindowsScreen();
4950

src/test/integtests/platform/MSWindowsKeyStateTests.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class MSWindowsKeyStateTests : public ::testing::Test
5353
return new MSWindowsDesks(
5454
true, false, m_screensaver, eventQueue,
5555
new TMethodJob<MSWindowsKeyStateTests>(
56-
this, &MSWindowsKeyStateTests::updateKeysCB), false);
56+
this, &MSWindowsKeyStateTests::updateKeysCB), false, false);
5757
}
5858

5959
void* getEventTarget() const

0 commit comments

Comments
 (0)