deskflow/src/lib/platform/MSWindowsClipboard.h
Chris Rizzitello ed1217e9cc
Use Deskflow Name (#7519)
* Use Deskflow Name

* Remove business-oriented options from issue templates

* Remove business-oriented workflow

* Bump version to 3.0.0 (to avoid confusion with previously used version numbers 1.x & 2.x)

* Update readme to reflect new project name and goals

* Found some more "synergy" to rename

* Rename `synlib` to `app`

* Rename `syntool` to `deskflow-legacy`

* Rename `synwinhk` to `dfwhook`

* Rename dirs from synergy to deskflow

* Rename more "Synergy" files

* Rename app bundle ID

* Fixed copyright typo

* Rename only title in serial key dialog (to be moved downstream later)

* Preserve original serial key window for moving downstream

* Restore dialogs ready for moving downstream

* Rename `QDeskflowApplication` to `DeskflowApplication` (the Q is confusing)

* Restore Volker's original project name

* Fixed mimetype

* Fixed weird grammar

* Fixed (more) weird grammar

* Broken link, restoring (but we should move all links out of source)

* Broken link, restoring (but we should move all links out of source)

* Add write permission to valgrind-analysis.yml

* Restore AUR conflicts

* Apply Clang format

* Update ChangeLog

* Back out version change

---------

Co-authored-by: Nick Bolton <nick@symless.com>
2024-09-17 20:00:25 +01:00

112 lines
3.7 KiB
C++

/*
* Deskflow -- 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 "common/stdvector.h"
#include "deskflow/IClipboard.h"
#include "platform/MSWindowsClipboardFacade.h"
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
class IMSWindowsClipboardConverter;
class IMSWindowsClipboardFacade;
//! Microsoft windows clipboard implementation
class MSWindowsClipboard : public IClipboard {
public:
MSWindowsClipboard(HWND window);
MSWindowsClipboard(HWND window, IMSWindowsClipboardFacade &facade);
virtual ~MSWindowsClipboard();
//! Empty clipboard without ownership
/*!
Take ownership of the clipboard and clear all data from it.
This must be called between a successful open() and close().
Return false if the clipboard ownership could not be taken;
the clipboard should not be emptied in this case. Unlike
empty(), isOwnedByDeskflow() will return false when emptied
this way. This is useful when deskflow wants to put data on
clipboard but pretend (to itself) that some other app did it.
When using empty(), deskflow assumes the data came from the
server and doesn't need to be sent back. emptyUnowned()
makes deskflow send the data to the server.
*/
bool emptyUnowned();
//! Test if clipboard is owned by deskflow
static bool isOwnedByDeskflow();
// IClipboard overrides
virtual bool empty();
virtual void add(EFormat, const String &data);
virtual bool open(Time) const;
virtual void close() const;
virtual Time getTime() const;
virtual bool has(EFormat) const;
virtual String get(EFormat) const;
void setFacade(IMSWindowsClipboardFacade &facade);
private:
void clearConverters();
UINT convertFormatToWin32(EFormat) const;
HANDLE convertTextToWin32(const String &data) const;
String convertTextFromWin32(HANDLE) const;
static UINT getOwnershipFormat();
private:
typedef std::vector<IMSWindowsClipboardConverter *> ConverterList;
HWND m_window;
mutable Time m_time;
ConverterList m_converters;
static UINT s_ownershipFormat;
IMSWindowsClipboardFacade *m_facade;
bool m_deleteFacade;
};
//! Clipboard format converter interface
/*!
This interface defines the methods common to all win32 clipboard format
converters.
*/
class IMSWindowsClipboardConverter : public IInterface {
public:
// accessors
// return the clipboard format this object converts from/to
virtual IClipboard::EFormat getFormat() const = 0;
// return the atom representing the win32 clipboard format that
// this object converts from/to
virtual UINT getWin32Format() const = 0;
// convert from the IClipboard format to the win32 clipboard format.
// the input data must be in the IClipboard format returned by
// getFormat(). the return data will be in the win32 clipboard
// format returned by getWin32Format(), allocated by GlobalAlloc().
virtual HANDLE fromIClipboard(const String &) const = 0;
// convert from the win32 clipboard format to the IClipboard format
// (i.e., the reverse of fromIClipboard()).
virtual String toIClipboard(HANDLE data) const = 0;
};