X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2FSelection.h;h=931cb4470efcb051949795a4f85cec0122e7e14f;hb=713264ae2b82f23e80ed6369b19ae6c9b030b6e4;hp=6a464172064a8e8678b1ab3792ae4bcdd05565cd;hpb=c585c2421b6c63bd3906f988a5d73b0dbc445c4e;p=lyx.git diff --git a/src/frontends/Selection.h b/src/frontends/Selection.h index 6a46417206..931cb4470e 100644 --- a/src/frontends/Selection.h +++ b/src/frontends/Selection.h @@ -11,10 +11,10 @@ * Full author contact details are available in file CREDITS. */ -#ifndef BASE_SELECTION_H -#define BASE_SELECTION_H +#ifndef SELECTION_H +#define SELECTION_H -#include "support/docstring.h" +#include "support/strfwd.h" namespace lyx { namespace frontend { @@ -27,7 +27,20 @@ class Selection public: virtual ~Selection() {} - /// Tell the window system whether we have a selection. + /** + * Returns true if the underlying system supports mouse selection + * (basically X11 and Wayland). + */ + virtual bool supported() const = 0; + /** + * Tell the window system whether we set or cleared our selection. + * This is a noop on systems that don't have a selection. + * This should be called by the kernel whenever a selection is + * created, changed or cleared. + * \param own + * If true: Tell that we got a valid selection. + * If false: Tell that we cleared our selection. + */ virtual void haveSelection(bool) = 0; /** * Get the X selection contents. @@ -39,16 +52,30 @@ public: virtual docstring const get() const = 0; /** * Fill the X selection. + * The format is plain text. * Does nothing on systems that don't have a selection. - * This should be called whenever some text is highlighted. + * Since the X selection protocol is asynchronous this should never be + * called from the kernel. + * If another application requests the current selection a + * SelectionRequest XEvent will be triggered. The response of the + * frontend to this event should be to retrieve the current selection + * from the kernel and push it to X with this method. */ virtual void put(docstring const &) = 0; + /** + * Is the X selection empty? + * This does always return true on systems that don't have a real + * selection. + */ + virtual bool empty() const = 0; }; } // namespace frontend + +/// Implementation is in Application.cpp +extern frontend::Selection & theSelection(); + } // namespace lyx -/// Implementation is in Application.C -extern lyx::frontend::Selection & theSelection(); -#endif // BASE_SELECTION_H +#endif // SELECTION_H