Merge pull request #75 from debauchee/master

pull in recent patches from master
This commit is contained in:
walker0643 2018-06-30 18:51:49 -04:00 committed by GitHub
commit f65189190c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 61 additions and 26 deletions

View File

@ -193,7 +193,7 @@ if (UNIX)
message (FATAL_ERROR "Missing header: " ${XKBlib}) message (FATAL_ERROR "Missing header: " ${XKBlib})
endif() endif()
if (NOT HAVE_DNSSD) if (BARRIER_BUILD_GUI AND NOT HAVE_DNSSD)
message (FATAL_ERROR "Missing header: dns_sd.h") message (FATAL_ERROR "Missing header: dns_sd.h")
endif() endif()

5
debian/changelog vendored Normal file
View File

@ -0,0 +1,5 @@
barrier (2.1-1) unstable; urgency=low
* Initial release (Closes: #123456)
-- Debauchee Open Source Group <debauchee.oss@gmail.com> Sat, 01 Apr 2018 00:00:00 +0000

View File

@ -22,7 +22,7 @@ add_executable (barrier WIN32
include_directories (./src) include_directories (./src)
qt5_use_modules (barrier Core Widgets Network) target_link_libraries (barrier Qt5::Core Qt5::Widgets Qt5::Network)
target_compile_definitions (barrier PRIVATE -DBARRIER_VERSION_STAGE="${BARRIER_VERSION_STAGE}") target_compile_definitions (barrier PRIVATE -DBARRIER_VERSION_STAGE="${BARRIER_VERSION_STAGE}")
target_compile_definitions (barrier PRIVATE -DBARRIER_REVISION="${BARRIER_REVISION}") target_compile_definitions (barrier PRIVATE -DBARRIER_REVISION="${BARRIER_REVISION}")

View File

@ -25,6 +25,7 @@
#include <QtCore> #include <QtCore>
#include <QtGui> #include <QtGui>
#include <QButtonGroup>
ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey, Action& action) : ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey, Action& action) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),

View File

@ -1,4 +1,4 @@
/* /*
* barrier -- mouse and keyboard sharing utility * barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2008 Volker Lanz (vl@fidra.de) * Copyright (C) 2008 Volker Lanz (vl@fidra.de)

View File

@ -23,6 +23,19 @@
#include <QtGui> #include <QtGui>
#include <QMessageBox> #include <QMessageBox>
static const QRegExp ValidScreenName("[a-z0-9\\._-]{,255}", Qt::CaseInsensitive);
static QString check_name_param(QString name)
{
// after internationalization happens the default name "Unnamed" might
// be translated with spaces (or other chars). let's replace the spaces
// with dashes and just give up if that doesn't pass the regexp
name.replace(' ', '-');
if (ValidScreenName.exactMatch(name))
return name;
return "";
}
ScreenSettingsDialog::ScreenSettingsDialog(QWidget* parent, Screen* pScreen) : ScreenSettingsDialog::ScreenSettingsDialog(QWidget* parent, Screen* pScreen) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
Ui::ScreenSettingsDialogBase(), Ui::ScreenSettingsDialogBase(),
@ -30,13 +43,11 @@ ScreenSettingsDialog::ScreenSettingsDialog(QWidget* parent, Screen* pScreen) :
{ {
setupUi(this); setupUi(this);
QRegExp validScreenName("[a-z0-9\\._-]{,255}", Qt::CaseInsensitive); m_pLineEditName->setText(check_name_param(m_pScreen->name()));
m_pLineEditName->setValidator(new QRegExpValidator(ValidScreenName, m_pLineEditName));
m_pLineEditName->setText(m_pScreen->name());
m_pLineEditName->setValidator(new QRegExpValidator(validScreenName, m_pLineEditName));
m_pLineEditName->selectAll(); m_pLineEditName->selectAll();
m_pLineEditAlias->setValidator(new QRegExpValidator(validScreenName, m_pLineEditName)); m_pLineEditAlias->setValidator(new QRegExpValidator(ValidScreenName, m_pLineEditName));
for (int i = 0; i < m_pScreen->aliases().count(); i++) for (int i = 0; i < m_pScreen->aliases().count(); i++)
new QListWidgetItem(m_pScreen->aliases()[i], m_pListAliases); new QListWidgetItem(m_pScreen->aliases()[i], m_pListAliases);

View File

@ -22,6 +22,7 @@
#include <QtCore> #include <QtCore>
#include <QtGui> #include <QtGui>
#include <QHeaderView>
ScreenSetupView::ScreenSetupView(QWidget* parent) : ScreenSetupView::ScreenSetupView(QWidget* parent) :
QTableView(parent) QTableView(parent)

View File

@ -144,10 +144,10 @@ private:
ButtonID mapMacButtonToBarrier(UInt16) const; ButtonID mapMacButtonToBarrier(UInt16) const;
// map mac scroll wheel value to a barrier scroll wheel value // map mac scroll wheel value to a barrier scroll wheel value
SInt32 mapScrollWheelToBarrier(SInt32) const; SInt32 mapScrollWheelToBarrier(float) const;
// map barrier scroll wheel value to a mac scroll wheel value // map barrier scroll wheel value to a mac scroll wheel value
SInt32 mapScrollWheelFromBarrier(SInt32) const; SInt32 mapScrollWheelFromBarrier(float) const;
// get the current scroll wheel speed // get the current scroll wheel speed
double getScrollSpeed() const; double getScrollSpeed() const;

View File

@ -1421,7 +1421,7 @@ OSXScreen::mapMacButtonToBarrier(UInt16 macButton) const
} }
SInt32 SInt32
OSXScreen::mapScrollWheelToBarrier(SInt32 x) const OSXScreen::mapScrollWheelToBarrier(float x) const
{ {
// return accelerated scrolling but not exponentially scaled as it is // return accelerated scrolling but not exponentially scaled as it is
// on the mac. // on the mac.
@ -1430,7 +1430,7 @@ OSXScreen::mapScrollWheelToBarrier(SInt32 x) const
} }
SInt32 SInt32
OSXScreen::mapScrollWheelFromBarrier(SInt32 x) const OSXScreen::mapScrollWheelFromBarrier(float x) const
{ {
// use server's acceleration with a little boost since other platforms // use server's acceleration with a little boost since other platforms
// take one wheel step as a larger step than the mac does. // take one wheel step as a larger step than the mac does.
@ -1948,9 +1948,9 @@ OSXScreen::handleCGInputEvent(CGEventTapProxy proxy,
break; break;
case kCGEventScrollWheel: case kCGEventScrollWheel:
screen->onMouseWheel(screen->mapScrollWheelToBarrier( screen->onMouseWheel(screen->mapScrollWheelToBarrier(
CGEventGetIntegerValueField(event, kCGScrollWheelEventDeltaAxis2)), CGEventGetIntegerValueField(event, kCGScrollWheelEventFixedPtDeltaAxis2) / 65536.0f),
screen->mapScrollWheelToBarrier( screen->mapScrollWheelToBarrier(
CGEventGetIntegerValueField(event, kCGScrollWheelEventDeltaAxis1))); CGEventGetIntegerValueField(event, kCGScrollWheelEventFixedPtDeltaAxis1) / 65536.0f));
break; break;
case kCGEventKeyDown: case kCGEventKeyDown:
case kCGEventKeyUp: case kCGEventKeyUp:

View File

@ -99,6 +99,7 @@ XWindowsScreen::XWindowsScreen(
IEventQueue* events) : IEventQueue* events) :
m_isPrimary(isPrimary), m_isPrimary(isPrimary),
m_mouseScrollDelta(mouseScrollDelta), m_mouseScrollDelta(mouseScrollDelta),
m_accumulatedScroll(0),
m_display(NULL), m_display(NULL),
m_root(None), m_root(None),
m_window(None), m_window(None),
@ -865,9 +866,11 @@ XWindowsScreen::fakeMouseWheel(SInt32, SInt32 yDelta) const
return; return;
} }
// choose button depending on rotation direction int numEvents = accumulateMouseScroll(yDelta);
const unsigned int xButton = mapButtonToX(static_cast<ButtonID>(
(yDelta >= 0) ? -1 : -2)); // choose button depending on rotation direction
const unsigned int xButton = mapButtonToX(static_cast<ButtonID>(
(numEvents >= 0) ? -1 : -2));
if (xButton == 0) { if (xButton == 0) {
// If we get here, then the XServer does not support the scroll // If we get here, then the XServer does not support the scroll
// wheel buttons, so send PageUp/PageDown keystrokes instead. // wheel buttons, so send PageUp/PageDown keystrokes instead.
@ -886,20 +889,14 @@ XWindowsScreen::fakeMouseWheel(SInt32, SInt32 yDelta) const
return; return;
} }
// now use absolute value of delta numEvents = std::abs(numEvents);
if (yDelta < 0) {
yDelta = -yDelta;
}
if (yDelta < m_mouseScrollDelta) {
LOG((CLOG_WARN "Wheel scroll delta (%d) smaller than threshold (%d)", yDelta, m_mouseScrollDelta));
}
// send as many clicks as necessary // send as many clicks as necessary
for (; yDelta >= m_mouseScrollDelta; yDelta -= m_mouseScrollDelta) { for (; numEvents > 0; numEvents--) {
XTestFakeButtonEvent(m_display, xButton, True, CurrentTime); XTestFakeButtonEvent(m_display, xButton, True, CurrentTime);
XTestFakeButtonEvent(m_display, xButton, False, CurrentTime); XTestFakeButtonEvent(m_display, xButton, False, CurrentTime);
} }
XFlush(m_display); XFlush(m_display);
} }
@ -1643,6 +1640,15 @@ XWindowsScreen::onMouseMove(const XMotionEvent& xmotion)
} }
} }
int
XWindowsScreen::accumulateMouseScroll(SInt32 yDelta) const
{
m_accumulatedScroll += yDelta;
int numEvents = m_accumulatedScroll / m_mouseScrollDelta;
m_accumulatedScroll -= numEvents * m_mouseScrollDelta;
return numEvents;
}
Cursor Cursor
XWindowsScreen::createBlankCursor() const XWindowsScreen::createBlankCursor() const
{ {

View File

@ -136,6 +136,10 @@ private:
void onMouseRelease(const XButtonEvent&); void onMouseRelease(const XButtonEvent&);
void onMouseMove(const XMotionEvent&); void onMouseMove(const XMotionEvent&);
// Returns the number of scroll events needed after the current delta has
// been taken into account
int accumulateMouseScroll(SInt32 yDelta) const;
bool detectXI2(); bool detectXI2();
#ifdef HAVE_XI2 #ifdef HAVE_XI2
void selectXIRawMotion(); void selectXIRawMotion();
@ -172,8 +176,15 @@ private:
// true if screen is being used as a primary screen, false otherwise // true if screen is being used as a primary screen, false otherwise
bool m_isPrimary; bool m_isPrimary;
// The size of a smallest supported scroll event, in points
int m_mouseScrollDelta; int m_mouseScrollDelta;
// Accumulates scrolls of less than m_mouseScrollDelta across multiple
// scroll events. We dispatch a scroll event whenever the accumulated scroll
// becomes larger than m_mouseScrollDelta
mutable int m_accumulatedScroll;
Display* m_display; Display* m_display;
Window m_root; Window m_root;
Window m_window; Window m_window;