mirror of
https://github.com/debauchee/barrier.git
synced 2026-02-11 14:15:46 +08:00
the apps still exit but they do it in a mostly controlled manner. in particular, the server threads except the one processing primary screen events will terminate gracefully. this will be important should the server ever allow HTTP clients to rewrite the configuration file. note that X makes it effectively impossible to continue once the X server disconnects. even if it didn't it would be difficult for synergy to recover. users will have to add synergy to the X display manager's startup script if they expect the server to be restarted. alternatively, we could add code to fork synergy at startup; the child would do the normal work while the parent would simply wait for the child to exit and restart it.
78 lines
2.1 KiB
C++
78 lines
2.1 KiB
C++
#ifndef CXWINDOWSPRIMARYSCREEN_H
|
|
#define CXWINDOWSPRIMARYSCREEN_H
|
|
|
|
#include "KeyTypes.h"
|
|
#include "MouseTypes.h"
|
|
#include "CXWindowsScreen.h"
|
|
#include "IPrimaryScreen.h"
|
|
|
|
class CXWindowsPrimaryScreen : public CXWindowsScreen, public IPrimaryScreen {
|
|
public:
|
|
CXWindowsPrimaryScreen();
|
|
virtual ~CXWindowsPrimaryScreen();
|
|
|
|
// IPrimaryScreen overrides
|
|
virtual void run();
|
|
virtual void stop();
|
|
virtual void open(CServer*);
|
|
virtual void close();
|
|
virtual void enter(SInt32 xAbsolute, SInt32 yAbsolute);
|
|
virtual void leave();
|
|
virtual void onConfigure();
|
|
virtual void warpCursor(SInt32 xAbsolute, SInt32 yAbsolute);
|
|
virtual void setClipboard(ClipboardID, const IClipboard*);
|
|
virtual void grabClipboard(ClipboardID);
|
|
virtual void getSize(SInt32* width, SInt32* height) const;
|
|
virtual SInt32 getJumpZoneSize() const;
|
|
virtual void getClipboard(ClipboardID, IClipboard*) const;
|
|
virtual KeyModifierMask getToggleMask() const;
|
|
virtual bool isLockedToScreen() const;
|
|
|
|
protected:
|
|
// CXWindowsScreen overrides
|
|
virtual void onOpenDisplay(Display*);
|
|
virtual CXWindowsClipboard*
|
|
createClipboard(ClipboardID);
|
|
virtual void onCloseDisplay(Display*);
|
|
virtual void onUnexpectedClose();
|
|
virtual void onLostClipboard(ClipboardID);
|
|
|
|
private:
|
|
void selectEvents(Display*, Window) const;
|
|
void doSelectEvents(Display*, Window) const;
|
|
void warpCursorNoLock(Display*,
|
|
SInt32 xAbsolute, SInt32 yAbsolute);
|
|
|
|
KeyModifierMask mapModifier(unsigned int state) const;
|
|
KeyID mapKey(XKeyEvent*) const;
|
|
ButtonID mapButton(unsigned int button) const;
|
|
|
|
void updateModifierMap(Display* display);
|
|
|
|
class CKeyEventInfo {
|
|
public:
|
|
int m_event;
|
|
Window m_window;
|
|
Time m_time;
|
|
KeyCode m_keycode;
|
|
};
|
|
static Bool findKeyEvent(Display*, XEvent* xevent, XPointer arg);
|
|
|
|
private:
|
|
CServer* m_server;
|
|
bool m_active;
|
|
Window m_window;
|
|
|
|
// note toggle keys that toggle on up/down (false) or on
|
|
// transition (true)
|
|
bool m_numLockHalfDuplex;
|
|
bool m_capsLockHalfDuplex;
|
|
|
|
// masks that indicate which modifier bits are for toggle keys
|
|
unsigned int m_numLockMask;
|
|
unsigned int m_capsLockMask;
|
|
unsigned int m_scrollLockMask;
|
|
};
|
|
|
|
#endif
|