aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/server/PrimaryClient.h
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2018-04-25 18:07:30 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2018-04-25 18:07:30 -0400
commit9b1b081cfdb1c0fb6457278775e0823f8bc10f62 (patch)
treece8840148d8445055ba9e4f12263b2208f234c16 /src/lib/server/PrimaryClient.h
Import Upstream version 2.0.0+dfsgupstream/2.0.0+dfsg
Diffstat (limited to 'src/lib/server/PrimaryClient.h')
-rw-r--r--src/lib/server/PrimaryClient.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/lib/server/PrimaryClient.h b/src/lib/server/PrimaryClient.h
new file mode 100644
index 0000000..4296aaa
--- /dev/null
+++ b/src/lib/server/PrimaryClient.h
@@ -0,0 +1,156 @@
+/*
+ * barrier -- mouse and keyboard sharing utility
+ * Copyright (C) 2012-2016 Symless Ltd.
+ * 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 LICENSE 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "server/BaseClientProxy.h"
+#include "barrier/protocol_types.h"
+
+namespace barrier { class Screen; }
+
+//! Primary screen as pseudo-client
+/*!
+The primary screen does not have a client associated with it. This
+class provides a pseudo-client to allow the primary screen to be
+treated as if it was a client.
+*/
+class PrimaryClient : public BaseClientProxy {
+public:
+ /*!
+ \c name is the name of the server and \p screen is primary screen.
+ */
+ PrimaryClient(const String& name, barrier::Screen* screen);
+ ~PrimaryClient();
+
+#ifdef TEST_ENV
+ PrimaryClient() : BaseClientProxy("") { }
+#endif
+
+ //! @name manipulators
+ //@{
+
+ //! Update configuration
+ /*!
+ Handles reconfiguration of jump zones.
+ */
+ virtual void reconfigure(UInt32 activeSides);
+
+ //! Register a system hotkey
+ /*!
+ Registers a system-wide hotkey for key \p key with modifiers \p mask.
+ Returns an id used to unregister the hotkey.
+ */
+ virtual UInt32 registerHotKey(KeyID key, KeyModifierMask mask);
+
+ //! Unregister a system hotkey
+ /*!
+ Unregisters a previously registered hot key.
+ */
+ virtual void unregisterHotKey(UInt32 id);
+
+ //! Prepare to synthesize input on primary screen
+ /*!
+ Prepares the primary screen to receive synthesized input. We do not
+ want to receive this synthesized input as user input so this method
+ ensures that we ignore it. Calls to \c fakeInputBegin() and
+ \c fakeInputEnd() may be nested; only the outermost have an effect.
+ */
+ void fakeInputBegin();
+
+ //! Done synthesizing input on primary screen
+ /*!
+ Undoes whatever \c fakeInputBegin() did.
+ */
+ void fakeInputEnd();
+
+ //@}
+ //! @name accessors
+ //@{
+
+ //! Get jump zone size
+ /*!
+ Return the jump zone size, the size of the regions on the edges of
+ the screen that cause the cursor to jump to another screen.
+ */
+ SInt32 getJumpZoneSize() const;
+
+ //! Get cursor center position
+ /*!
+ Return the cursor center position which is where we park the
+ cursor to compute cursor motion deltas and should be far from
+ the edges of the screen, typically the center.
+ */
+ void getCursorCenter(SInt32& x, SInt32& y) const;
+
+ //! Get toggle key state
+ /*!
+ Returns the primary screen's current toggle modifier key state.
+ */
+ virtual KeyModifierMask
+ getToggleMask() const;
+
+ //! Get screen lock state
+ /*!
+ Returns true if the user is locked to the screen.
+ */
+ bool isLockedToScreen() const;
+
+ //@}
+
+ // FIXME -- these probably belong on IScreen
+ virtual void enable();
+ virtual void disable();
+
+ // IScreen overrides
+ virtual void* getEventTarget() const;
+ virtual bool getClipboard(ClipboardID id, IClipboard*) const;
+ virtual void getShape(SInt32& x, SInt32& y,
+ SInt32& width, SInt32& height) const;
+ virtual void getCursorPos(SInt32& x, SInt32& y) const;
+
+ // IClient overrides
+ virtual void enter(SInt32 xAbs, SInt32 yAbs,
+ UInt32 seqNum, KeyModifierMask mask,
+ bool forScreensaver);
+ virtual bool leave();
+ virtual void setClipboard(ClipboardID, const IClipboard*);
+ virtual void grabClipboard(ClipboardID);
+ virtual void setClipboardDirty(ClipboardID, bool);
+ virtual void keyDown(KeyID, KeyModifierMask, KeyButton);
+ virtual void keyRepeat(KeyID, KeyModifierMask,
+ SInt32 count, KeyButton);
+ virtual void keyUp(KeyID, KeyModifierMask, KeyButton);
+ virtual void mouseDown(ButtonID);
+ virtual void mouseUp(ButtonID);
+ virtual void mouseMove(SInt32 xAbs, SInt32 yAbs);
+ virtual void mouseRelativeMove(SInt32 xRel, SInt32 yRel);
+ virtual void mouseWheel(SInt32 xDelta, SInt32 yDelta);
+ virtual void screensaver(bool activate);
+ virtual void resetOptions();
+ virtual void setOptions(const OptionsList& options);
+ virtual void sendDragInfo(UInt32 fileCount, const char* info, size_t size);
+ virtual void fileChunkSending(UInt8 mark, char* data, size_t dataSize);
+
+ virtual barrier::IStream*
+ getStream() const { return NULL; }
+ bool isPrimary() const { return true; }
+private:
+ barrier::Screen* m_screen;
+ bool m_clipboardDirty[kClipboardEnd];
+ SInt32 m_fakeInputCount;
+};