20 #ifndef INCLUDED_VCL_INC_UNX_GTK_GTKINST_HXX
21 #define INCLUDED_VCL_INC_UNX_GTK_GTKINST_HXX
30 #include <com/sun/star/datatransfer/DataFlavor.hpp>
31 #include <com/sun/star/datatransfer/dnd/XDragSource.hpp>
32 #include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
33 #include <com/sun/star/lang/XInitialization.hpp>
34 #include <com/sun/star/lang/XServiceInfo.hpp>
35 #include <com/sun/star/awt/XWindow.hpp>
61 std::vector<GtkTargetEntry>
FormatsToGtk(
const css::uno::Sequence<css::datatransfer::DataFlavor> &rFormats);
62 void setSelectionData(
const css::uno::Reference<css::datatransfer::XTransferable> &rTrans,
63 GtkSelectionData *selection_data, guint info);
68 class GtkTransferable :
public cppu::WeakImplHelper<css::datatransfer::XTransferable>
76 virtual css::uno::Any SAL_CALL
getTransferData(
const css::datatransfer::DataFlavor& rFlavor)
override = 0;
82 class GtkDnDTransferable;
84 class GtkDropTarget final :
public cppu::WeakComponentImplHelper<css::datatransfer::dnd::XDropTarget,
85 css::lang::XInitialization,
86 css::lang::XServiceInfo>
94 std::vector<css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>>
m_aListeners;
100 virtual void SAL_CALL
initialize(
const css::uno::Sequence<css::uno::Any>& rArgs)
override;
104 virtual void SAL_CALL
addDropTargetListener(
const css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>&)
override;
105 virtual void SAL_CALL
removeDropTargetListener(
const css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>&)
override;
117 void fire_dragEnter(
const css::datatransfer::dnd::DropTargetDragEnterEvent& dtdee);
118 void fire_dragOver(
const css::datatransfer::dnd::DropTargetDragEvent& dtde);
119 void fire_drop(
const css::datatransfer::dnd::DropTargetDropEvent& dtde);
120 void fire_dragExit(
const css::datatransfer::dnd::DropTargetEvent& dte);
124 m_pFormatConversionRequest = pRequest;
127 gboolean
signalDragDrop(GtkWidget* pWidget, GdkDragContext* context, gint x, gint y, guint time);
128 gboolean
signalDragMotion(GtkWidget* pWidget, GdkDragContext* context, gint x, gint y, guint time);
129 void signalDragDropReceived(GtkWidget* pWidget, GdkDragContext* context, gint x, gint y, GtkSelectionData* data, guint
ttype, guint time);
130 void signalDragLeave(GtkWidget* pWidget, GdkDragContext* context, guint time);
133 class GtkDragSource final :
public cppu::WeakComponentImplHelper<css::datatransfer::dnd::XDragSource,
134 css::lang::XInitialization,
135 css::lang::XServiceInfo>
139 css::uno::Reference<css::datatransfer::dnd::XDragSourceListener>
m_xListener;
140 css::uno::Reference<css::datatransfer::XTransferable>
m_xTrans;
144 : WeakComponentImplHelper(m_aMutex)
149 void set_datatransfer(
const css::uno::Reference<css::datatransfer::XTransferable>& rTrans,
150 const css::uno::Reference<css::datatransfer::dnd::XDragSourceListener>& rListener);
152 std::vector<GtkTargetEntry>
FormatsToGtk(
const css::uno::Sequence<css::datatransfer::DataFlavor> &rFormats);
162 const css::datatransfer::dnd::DragGestureEvent& trigger,
sal_Int8 sourceActions, sal_Int32 cursor, sal_Int32 image,
163 const css::uno::Reference< css::datatransfer::XTransferable >& transferable,
164 const css::uno::Reference< css::datatransfer::dnd::XDragSourceListener >& listener)
override;
167 virtual void SAL_CALL
initialize(
const css::uno::Sequence<css::uno::Any >& rArguments)
override;
178 void dragEnd(GdkDragContext* context);
179 void dragDataGet(GtkSelectionData *data, guint info);
191 GtkInstance( std::unique_ptr<SalYieldMutex> pMutex );
202 virtual std::unique_ptr<SalMenu>
CreateMenu(
bool,
Menu* )
override;
205 virtual void AddToRecentDocumentList(
const OUString& rFileUrl,
const OUString& rMimeType,
const OUString& rDocumentService)
override;
206 virtual std::unique_ptr<SalVirtualDevice>
213 virtual bool DoYield(
bool bWait,
bool bHandleAllCurrentEvents)
override;
222 virtual css::uno::Reference< css::ui::dialogs::XFilePicker2 >
223 createFilePicker(
const css::uno::Reference< css::uno::XComponentContext >& )
override;
224 virtual css::uno::Reference< css::ui::dialogs::XFolderPicker2 >
225 createFolderPicker(
const css::uno::Reference< css::uno::XComponentContext >& )
override;
227 virtual css::uno::Reference< css::uno::XInterface >
CreateClipboard(
const css::uno::Sequence< css::uno::Any >& i_rArguments )
override;
228 virtual css::uno::Reference< css::uno::XInterface >
CreateDragSource()
override;
229 virtual css::uno::Reference< css::uno::XInterface >
CreateDropTarget()
override;
233 bool bAllowCycleFocusOut, sal_uInt64 nLOKWindowId = 0)
override;
243 std::shared_ptr<vcl::unx::GtkPrintWrapper>
const &
getPrintWrapper()
const;
249 std::unordered_map< GdkAtom, css::uno::Reference<css::uno::XInterface> >
m_aClipboards;
266 , m_pWeldWidget(pWeldWidget)
273 m_pWeldWidget =
nullptr;
275 TransportAsXWindow::clear();
291 #endif // INCLUDED_VCL_INC_UNX_GTK_GTKINST_HXX
virtual bool hasNativeFileSelection() const override
virtual void AddToRecentDocumentList(const OUString &rFileUrl, const OUString &rMimeType, const OUString &rDocumentService) override
void dragEnd(GdkDragContext *context)
virtual std::unique_ptr< SalMenu > CreateMenu(bool, Menu *) override
std::vector< GtkTargetEntry > FormatsToGtk(const css::uno::Sequence< css::datatransfer::DataFlavor > &rFormats)
virtual const cairo_font_options_t * GetCairoFontOptions() override
std::shared_ptr< vcl::unx::GtkPrintWrapper > m_xPrintWrapper
TransportAsXWindow(weld::Widget *pWeldWidget, weld::Builder *pWeldWidgetBuilder=nullptr)
css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &rArguments) override
virtual css::uno::Any SAL_CALL getTransferData(const css::datatransfer::DataFlavor &rFlavor) override=0
weld::Window * getFrameWeld() const
virtual SalSystem * CreateSalSystem() override
virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors() override
void fire_dragOver(const css::datatransfer::dnd::DropTargetDragEvent &dtde)
gboolean signalDragMotion(GtkWidget *pWidget, GdkDragContext *context, gint x, gint y, guint time)
sal_Bool SAL_CALL supportsService(OUString const &ServiceName) override
virtual std::vector< css::datatransfer::DataFlavor > getTransferDataFlavorsAsVector()=0
void * CreateGStreamerSink(const SystemChildWindow *) override
virtual OpenGLContext * CreateOpenGLContext() override
virtual void SAL_CALL setDefaultActions(sal_Int8 actions) override
virtual void clear() override
void signalDragLeave(GtkWidget *pWidget, GdkDragContext *context, guint time)
virtual weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIRoot, const OUString &rUIFile) override
virtual SalTimer * CreateSalTimer() override
GtkWidget * getGtkWidget() const
vcl::Font pango_to_vcl(const PangoFontDescription *font, const css::lang::Locale &rLocale)
const cairo_font_options_t * GetLastSeenCairoFontOptions() const
css::uno::Reference< css::datatransfer::XTransferable > m_xTrans
virtual sal_Int32 SAL_CALL getDefaultCursor(sal_Int8 dragAction) override
virtual ~GtkDropTarget() override
virtual void SAL_CALL addDropTargetListener(const css::uno::Reference< css::datatransfer::dnd::XDropTargetListener > &) override
virtual css::uno::Reference< css::ui::dialogs::XFilePicker2 > createFilePicker(const css::uno::Reference< css::uno::XComponentContext > &) override
virtual ~GtkDragSource() override
sal_Int8 m_nDefaultActions
virtual css::uno::Reference< css::ui::dialogs::XFolderPicker2 > createFolderPicker(const css::uno::Reference< css::uno::XComponentContext > &) override
std::vector< css::datatransfer::DataFlavor > aInfoToFlavor
virtual SalFrame * CreateFrame(SalFrame *pParent, SalFrameStyleFlags nStyle) override
GdkPixbuf * load_icon_by_name(const OUString &rIconName)
OUString SAL_CALL getImplementationName() override
virtual sal_Bool SAL_CALL isActive() override
void fire_dragExit(const css::datatransfer::dnd::DropTargetEvent &dte)
virtual css::uno::Reference< css::uno::XInterface > CreateDragSource() override
cairo_font_options_t * m_pLastCairoFontOptions
virtual void AfterAppInit() override
virtual std::unique_ptr< SalMenuItem > CreateMenuItem(const SalItemParams &) override
void SetFormatConversionRequest(GtkDnDTransferable *pRequest)
virtual void SAL_CALL setActive(sal_Bool active) override
std::vector< GtkTargetEntry > FormatsToGtk(const css::uno::Sequence< css::datatransfer::DataFlavor > &rFormats)
virtual std::shared_ptr< SalBitmap > CreateSalBitmap() override
virtual bool AnyInput(VclInputFlags nType) override
std::map< OUString, GdkAtom > m_aMimeTypeToAtom
sal_Bool SAL_CALL supportsService(OUString const &ServiceName) override
void setActiveDragSource()
virtual bool IsMainThread() const override
virtual std::unique_ptr< SalVirtualDevice > CreateVirtualDevice(SalGraphics *, tools::Long &nDX, tools::Long &nDY, DeviceFormat eFormat, const SystemGraphicsData *=nullptr) override
virtual css::uno::Reference< css::uno::XInterface > CreateClipboard(const css::uno::Sequence< css::uno::Any > &i_rArguments) override
css::uno::Reference< css::datatransfer::XTransferable > const & GetTransferrable() const
virtual weld::Window * GetFrameWeld(const css::uno::Reference< css::awt::XWindow > &rWindow) override
std::shared_ptr< vcl::unx::GtkPrintWrapper > const & getPrintWrapper() const
void fire_dragEnter(const css::datatransfer::dnd::DropTargetDragEnterEvent &dtdee)
std::vector< css::uno::Reference< css::datatransfer::dnd::XDropTargetListener > > m_aListeners
static GtkDragSource * g_ActiveDragSource
A SalFrame is a system window (e.g. an X11 window).
struct _cairo_font_options cairo_font_options_t
virtual void SAL_CALL removeDropTargetListener(const css::uno::Reference< css::datatransfer::dnd::XDropTargetListener > &) override
css::uno::Reference< css::datatransfer::dnd::XDragSourceListener > m_xListener
gboolean signalDragDrop(GtkWidget *pWidget, GdkDragContext *context, gint x, gint y, guint time)
void setSelectionData(const css::uno::Reference< css::datatransfer::XTransferable > &rTrans, GtkSelectionData *selection_data, guint info)
virtual ~GtkInstance() override
virtual sal_Int8 SAL_CALL getDefaultActions() override
virtual SalObject * CreateObject(SalFrame *pParent, SystemWindowData *pWindowData, bool bShow) override
void dragDataGet(GtkSelectionData *data, guint info)
VclToGtkHelper m_aConversionHelper
virtual css::uno::Reference< css::uno::XInterface > CreateDropTarget() override
virtual SalFrame * CreateChildFrame(SystemParentData *pParent, SalFrameStyleFlags nStyle) override
SalGtkXWindow(weld::Window *pWeldWidget, GtkWidget *pWidget)
virtual std::unique_ptr< GenPspGraphics > CreatePrintGraphics() override
void set_datatransfer(const css::uno::Reference< css::datatransfer::XTransferable > &rTrans, const css::uno::Reference< css::datatransfer::dnd::XDragSourceListener > &rListener)
GtkDnDTransferable * m_pFormatConversionRequest
weld::Window * m_pWeldWidget
virtual sal_Bool SAL_CALL isDataFlavorSupported(const css::datatransfer::DataFlavor &rFlavor) override
virtual weld::Builder * CreateInterimBuilder(vcl::Window *pParent, const OUString &rUIRoot, const OUString &rUIFile, bool bAllowCycleFocusOut, sal_uInt64 nLOKWindowId=0) override
virtual weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage) override
virtual SalInfoPrinter * CreateInfoPrinter(SalPrinterQueueInfo *pPrinterQueueInfo, ImplJobSetup *pJobSetup) override
OUString SAL_CALL getImplementationName() override
virtual sal_Bool SAL_CALL isDragImageSupported() override
virtual std::unique_ptr< SalPrinter > CreatePrinter(SalInfoPrinter *pInfoPrinter) override
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &rArgs) override
std::unordered_map< GdkAtom, css::uno::Reference< css::uno::XInterface > > m_aClipboards
virtual bool DoYield(bool bWait, bool bHandleAllCurrentEvents) override
Wait for the next event (if bWait) and dispatch it, includes posted events, and timers.
virtual void SAL_CALL startDrag(const css::datatransfer::dnd::DragGestureEvent &trigger, sal_Int8 sourceActions, sal_Int32 cursor, sal_Int32 image, const css::uno::Reference< css::datatransfer::XTransferable > &transferable, const css::uno::Reference< css::datatransfer::dnd::XDragSourceListener > &listener) override
void signalDragDropReceived(GtkWidget *pWidget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint ttype, guint time)
GtkTargetEntry makeGtkTargetEntry(const css::datatransfer::DataFlavor &rFlavor)
void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent &dtde)
static thread_local std::stack< sal_uInt32 > yieldCounts
css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
void ResetLastSeenCairoFontOptions(const cairo_font_options_t *pOptions)
GtkInstance(std::unique_ptr< SalYieldMutex > pMutex)