20 #ifndef INCLUDED_VCL_INC_UNX_GTK_GTKFRAME_HXX
21 #define INCLUDED_VCL_INC_UNX_GTK_GTKFRAME_HXX
28 #include <gdk/gdkkeysyms.h>
38 #include <com/sun/star/awt/XTopWindow.hpp>
39 #include <com/sun/star/datatransfer/DataFlavor.hpp>
40 #include <com/sun/star/datatransfer/dnd/XDragSource.hpp>
41 #include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
46 #include <config_dbus.h>
47 #include <config_gio.h>
55 #define GDK_WINDOW_XWINDOW(o) GDK_WINDOW_XID(o)
56 #define gdk_set_sm_client_id(i) gdk_x11_set_sm_client_id(i)
57 #define gdk_window_foreign_new_for_display(a,b) gdk_x11_window_foreign_new_for_display(a,b)
60 class GtkDnDTransferable;
97 window =
event->window;
98 send_event =
event->send_event;
100 state =
event->state;
101 keyval =
event->keyval;
102 hardware_keycode =
event->hardware_keycode;
103 group =
event->group;
108 : window( rPrev.window ),
109 send_event( rPrev.send_event ),
111 state( rPrev.state ),
112 keyval( rPrev.keyval ),
113 hardware_keycode( rPrev.hardware_keycode ),
119 return (event !=
nullptr)
120 && (
event->window ==
window)
121 && (event->send_event == send_event)
123 && ((
event->state & GDK_MODIFIER_MASK) == (state & GDK_MODIFIER_MASK))
124 && (event->keyval == keyval)
126 && (event->group == group)
127 && (
event->time - time < 300)
214 #if ENABLE_DBUS && ENABLE_GIO
216 friend void ensure_dbus_setup(GdkWindow* gdkWindow,
GtkSalFrame* pSalFrame);
217 friend void on_registrar_available (
GDBusConnection*,
const gchar*,
const gchar*, gpointer);
218 friend void on_registrar_unavailable (
GDBusConnection*,
const gchar*, gpointer);
228 static gboolean
signalButton( GtkWidget*, GdkEventButton*, gpointer );
232 static void sizeAllocated(GtkWidget*, GdkRectangle *pAllocation, gpointer frame);
234 gboolean keyboard_mode, GtkTooltip *tooltip,
236 static gboolean
signalDragMotion(GtkWidget *widget, GdkDragContext *context, gint x, gint y,
237 guint time, gpointer frame);
238 static gboolean
signalDragDrop(GtkWidget* widget, GdkDragContext *context, gint x, gint y,
239 guint time, gpointer frame);
241 GtkSelectionData *data, guint
ttype, guint time, gpointer frame);
242 static void signalDragLeave(GtkWidget *widget, GdkDragContext *context, guint time, gpointer frame);
244 static gboolean
signalDragFailed(GtkWidget *widget, GdkDragContext *context, GtkDragResult result, gpointer frame);
245 static void signalDragDelete(GtkWidget *widget, GdkDragContext *context, gpointer frame);
246 static void signalDragEnd(GtkWidget *widget, GdkDragContext *context, gpointer frame);
247 static void signalDragDataGet(GtkWidget* widget, GdkDragContext* context, GtkSelectionData *data, guint info,
248 guint time, gpointer frame);
250 static void gestureSwipe(GtkGestureSwipe* gesture, gdouble velocity_x, gdouble velocity_y, gpointer frame);
251 static void gestureLongPress(GtkGestureLongPress* gesture, gdouble x, gdouble y, gpointer frame);
252 static gboolean
signalFocus( GtkWidget*, GdkEventFocus*, gpointer );
253 static void signalSetFocus( GtkWindow* pWindow, GtkWidget* pWidget, gpointer frame );
254 static gboolean
signalMap( GtkWidget*, GdkEvent*, gpointer );
255 static gboolean
signalUnmap( GtkWidget*, GdkEvent*, gpointer );
256 static gboolean
signalConfigure( GtkWidget*, GdkEventConfigure*, gpointer );
257 static gboolean
signalMotion( GtkWidget*, GdkEventMotion*, gpointer );
258 static gboolean
signalKey( GtkWidget*, GdkEventKey*, gpointer );
259 static gboolean
signalDelete( GtkWidget*, GdkEvent*, gpointer );
261 static gboolean
signalScroll( GtkWidget*, GdkEvent*, gpointer );
262 static gboolean
signalCrossing( GtkWidget*, GdkEventCrossing*, gpointer );
270 guint16 hardware_keycode,
289 bool isChild(
bool bPlug =
true,
bool bSysChild =
true )
296 return bool(m_nStyle & nMask);
320 void SetIcon(
const char* pIcon);
338 void grabPointer(
bool bGrab,
bool bKeyboardAlso,
bool bOwnerEvents);
352 void damaged(sal_Int32 nExtentsLeft, sal_Int32 nExtentsTop,
353 sal_Int32 nExtentsRight, sal_Int32 nExtentsBottom)
const;
358 m_pDropTarget = pDropTarget;
363 assert(m_pDropTarget == pDropTarget); (
void)pDropTarget;
364 m_pDropTarget =
nullptr;
370 m_pDragSource = pDragSource;
375 assert(m_pDragSource == pDragSource); (
void)pDragSource;
376 m_pDragSource =
nullptr;
379 void startDrag(gint nButton, gint nDragOriginX, gint nDragOriginY,
380 GdkDragAction sourceActions, GtkTargetList* pTargetList);
401 virtual bool PostEvent(std::unique_ptr<ImplSVEvent> pData)
override;
403 virtual void SetTitle(
const OUString& rTitle )
override;
404 virtual void SetIcon( sal_uInt16 nIcon )
override;
413 virtual void Show(
bool bVisible,
bool bNoActivate =
false )
override;
424 virtual void ShowFullScreen(
bool bFullScreen, sal_Int32 nDisplay )
override;
442 virtual void Flush()
override;
448 virtual OUString
GetKeyName( sal_uInt16 nKeyCode )
override;
457 virtual void Beep()
override;
490 virtual void SetModal(
bool bModal)
override;
491 virtual bool GetModal()
const override;
513 guint* pGdkKeyCode, GdkModifierType *pGdkModifiers);
519 static guint
GetKeyValFor(GdkKeymap* pKeyMap, guint16 hardware_keycode, guint8 group);
524 GdkModifierType, gpointer pFrame);
525 static OUString
GetPreeditDetails(GtkIMContext* pIMContext, std::vector<ExtTextInputAttr>& rInputFlags, sal_Int32& rCursorPos,
sal_uInt8& rCursorFlags);
533 #define OOO_TYPE_FIXED ooo_fixed_get_type()
542 #if !GTK_CHECK_VERSION(3, 22, 0)
557 #endif // INCLUDED_VCL_INC_UNX_GTK_GTKFRAME_HXX
tools::Rectangle m_aRestorePosSize
GdkNativeWindow m_aForeignTopLevelWindow
virtual bool HidePopover(void *nId) override
GdkNativeWindow m_aForeignParentWindow
guint m_nActionGroupExportId
bool doKeyCallback(guint state, guint keyval, guint16 hardware_keycode, guint8 group, sal_Unicode aOrigCode, bool bDown, bool bSendRelease)
struct _GDBusConnection GDBusConnection
virtual void GetClientSize(tools::Long &rWidth, tools::Long &rHeight) override
void nopaint_container_resize_children(GtkContainer *)
virtual void Show(bool bVisible, bool bNoActivate=false) override
static void gestureLongPress(GtkGestureLongPress *gesture, gdouble x, gdouble y, gpointer frame)
void EnsureAppMenuWatch()
static sal_uInt16 GetKeyCode(guint nKeyVal)
static void signalDragDataGet(GtkWidget *widget, GdkDragContext *context, GtkSelectionData *data, guint info, guint time, gpointer frame)
virtual bool MapUnicodeToKeyCode(sal_Unicode aUnicode, LanguageType aLangType, vcl::KeyCode &rKeyCode) override
bool isFloatGrabWindow() const
void deregisterDragSource(GtkDragSource const *pDragSource)
static gboolean signalWindowState(GtkWidget *, GdkEvent *, gpointer)
cairo_t * getCairoContext() const
static gboolean NativeWidgetHelpPressed(GtkAccelGroup *, GObject *, guint, GdkModifierType, gpointer pFrame)
static void signalDragDropReceived(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint ttype, guint time, gpointer frame)
virtual void Flush() override
void SetIcon(const char *pIcon)
static gboolean signalDelete(GtkWidget *, GdkEvent *, gpointer)
GtkDropTarget * m_pDropTarget
virtual void SetParent(SalFrame *pNewParent) override
GtkHeaderBar * m_pHeaderBar
std::vector< gulong > m_aMouseSignalIds
static void signalDestroy(GtkWidget *, gpointer)
virtual const SystemEnvData * GetSystemData() const override
tools::Long m_nWidthRequest
static sal_uInt16 GetKeyModCode(guint nState)
virtual void EndExtTextInput(EndExtTextInputFlags nFlags) override
virtual void SimulateKeyPress(sal_uInt16 nKeyCode) override
static gboolean signalIMRetrieveSurrounding(GtkIMContext *, gpointer)
std::unique_ptr< GtkSalGraphics > m_pGraphics
SalExtTextInputEvent m_aInputEvent
void updateIMSpotLocation()
std::vector< GdkEvent * > m_aPendingScrollEvents
std::vector< ExtTextInputAttr > m_aInputFlags
GtkDragSource * m_pDragSource
virtual bool GetModal() const override
virtual void ShowFullScreen(bool bFullScreen, sal_Int32 nDisplay) override
virtual SalFrame * GetParent() const override
virtual void PositionByToolkit(const tools::Rectangle &rRect, FloatWinPopupFlags nFlags) override
static void gestureSwipe(GtkGestureSwipe *gesture, gdouble velocity_x, gdouble velocity_y, gpointer frame)
GtkEventBox * m_pEventBox
virtual KeyIndicatorState GetIndicatorState() override
gulong m_nSetFocusSignalId
GdkWindow * m_pForeignParent
GtkFixed * m_pFixedContainer
GdkWindow * m_pForeignTopLevel
std::list< PreviousKeyPress > m_aPrevKeyPresses
static gboolean signalIMDeleteSurrounding(GtkIMContext *, gint, gint, gpointer)
static GtkSalFrame * getFromWindow(GtkWidget *pWindow)
virtual void SetMenu(SalMenu *pSalMenu) override
virtual void UnionClipRegion(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight) override
PointerStyle m_ePointerStyle
static OUString GetPreeditDetails(GtkIMContext *pIMContext, std::vector< ExtTextInputAttr > &rInputFlags, sal_Int32 &rCursorPos, sal_uInt8 &rCursorFlags)
virtual void * ShowPopover(const OUString &rHelpText, vcl::Window *pParent, const tools::Rectangle &rHelpArea, QuickHelpFlags nFlags) override
static void KeyCodeToGdkKey(const vcl::KeyCode &rKeyCode, guint *pGdkKeyCode, GdkModifierType *pGdkModifiers)
void DisallowCycleFocusOut()
bool handleKeyEvent(GdkEventKey *pEvent)
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
GtkIMContext * m_pIMContext
GtkGrid * getTopLevelGridWidget() const
GtkSalFrame(SalFrame *pParent, SalFrameStyleFlags nStyle)
static gboolean signalMotion(GtkWidget *, GdkEventMotion *, gpointer)
static gboolean signalDragFailed(GtkWidget *widget, GdkDragContext *context, GtkDragResult result, gpointer frame)
virtual void GetWorkArea(tools::Rectangle &rRect) override
void grabPointer(bool bGrab, bool bKeyboardAlso, bool bOwnerEvents)
virtual void EndSetClipRegion() override
void widget_set_size_request(tools::Long nWidth, tools::Long nHeight)
void startDrag(gint nButton, gint nDragOriginX, gint nDragOriginY, GdkDragAction sourceActions, GtkTargetList *pTargetList)
void window_resize(tools::Long nWidth, tools::Long nHeight)
DECL_LINK(AsyncScroll, Timer *, void)
static void signalSetFocus(GtkWindow *pWindow, GtkWidget *pWidget, gpointer frame)
static void UpdateLastInputEventTime(guint32 nUserInputTime)
virtual void SetScreenNumber(unsigned int) override
static GdkEvent * makeFakeKeyPress(GtkWidget *pWidget)
void damaged(sal_Int32 nExtentsLeft, sal_Int32 nExtentsTop, sal_Int32 nExtentsRight, sal_Int32 nExtentsBottom) const
PreviousKeyPress(const PreviousKeyPress &rPrev)
bool CallCallbackExc(SalEvent nEvent, const void *pEvent) const
bool operator==(GdkEventKey const *event) const
GtkWidget * getWindow() const
void registerDropTarget(GtkDropTarget *pDropTarget)
virtual void ReleaseGraphics(SalGraphics *pGraphics) override
virtual void SetApplicationID(const OUString &rWMClass) override
virtual void SetMaxClientSize(tools::Long nWidth, tools::Long nHeight) override
virtual void SetAlwaysOnTop(bool bOnTop) override
GType ooo_fixed_get_type()
GtkEventBox * getEventBox() const
static void signalDragDelete(GtkWidget *widget, GdkDragContext *context, gpointer frame)
virtual bool PostEvent(std::unique_ptr< ImplSVEvent > pData) override
void updateScreenNumber()
virtual void SetPosSize(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, sal_uInt16 nFlags) override
static guint GetKeyValFor(GdkKeymap *pKeyMap, guint16 hardware_keycode, guint8 group)
PreviousKeyPress(GdkEventKey *event)
virtual void CaptureMouse(bool bMouse) override
virtual void SetPointer(PointerStyle ePointerStyle) override
virtual void SetMinClientSize(tools::Long nWidth, tools::Long nHeight) override
GtkGrid * m_pTopLevelGrid
virtual SalPointerState GetPointerState() override
static SalWheelMouseEvent GetWheelEvent(const GdkEventScroll &rEvent)
static gboolean signalDragDrop(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer frame)
void registerDragSource(GtkDragSource *pDragSource)
sal_uIntPtr GdkNativeWindow
void Init(SalFrame *pParent, SalFrameStyleFlags nStyle)
virtual void SetTitle(const OUString &rTitle) override
GtkWidget * getMouseEventWidget() const
static guint32 GetLastInputEventTime()
static void signalIMPreeditEnd(GtkIMContext *, gpointer)
SalFrameGeometry maGeometry
absolute, unmirrored values
void AllowCycleFocusOut()
FloatWinPopupFlags m_nFloatFlags
static void signalIMPreeditStart(GtkIMContext *, gpointer)
static void signalRealize(GtkWidget *, gpointer frame)
static sal_uInt16 GetMouseModCode(guint nState)
void endExtTextInput(EndExtTextInputFlags nFlags)
DamageHandler m_aDamageHandler
virtual OUString GetKeyName(sal_uInt16 nKeyCode) override
bool m_bSalObjectSetPosSize
void doCallEndExtTextInput()
basegfx::B2IVector m_aFrameSize
static void signalDragLeave(GtkWidget *widget, GdkDragContext *context, guint time, gpointer frame)
static gboolean signalDraw(GtkWidget *, cairo_t *cr, gpointer)
static gboolean signalButton(GtkWidget *, GdkEventButton *, gpointer)
static void sizeAllocated(GtkWidget *, GdkRectangle *pAllocation, gpointer frame)
void SetScreen(unsigned int nNewScreen, SetType eType, tools::Rectangle const *pSize=nullptr)
virtual void SetPointerPos(tools::Long nX, tools::Long nY) override
cairo_surface_t * m_pSurface
virtual void StartPresentation(bool bStart) override
static gboolean signalDragMotion(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer frame)
static gboolean signalKey(GtkWidget *, GdkEventKey *, gpointer)
A SalFrame is a system window (e.g. an X11 window).
static GdkDisplay * getGdkDisplay()
static gboolean signalMap(GtkWidget *, GdkEvent *, gpointer)
void resizeWindow(tools::Long nWidth, tools::Long nHeight)
cairo_region_t * m_pRegion
virtual bool SetPluginParent(SystemParentData *pNewParent) override
virtual bool UpdatePopover(void *nId, const OUString &rHelpText, vcl::Window *pParent, const tools::Rectangle &rHelpArea) override
virtual void SetModal(bool bModal) override
void moveWindow(tools::Long nX, tools::Long nY)
static void signalIMPreeditChanged(GtkIMContext *, gpointer)
void deregisterDropTarget(GtkDropTarget const *pDropTarget)
tools::Long m_nHeightRequest
void InvalidateGraphics()
virtual void DrawMenuBar() override
static gboolean signalCrossing(GtkWidget *, GdkEventCrossing *, gpointer)
ScreenSaverInhibitor m_ScreenSaverInhibitor
GtkFixed * getFixedContainer() const
ModKeyFlags m_nKeyModifiers
virtual bool ShowTooltip(const OUString &rHelpText, const tools::Rectangle &rHelpArea) override
static void signalDragEnd(GtkWidget *widget, GdkDragContext *context, gpointer frame)
static Selection CalcDeleteSurroundingSelection(const OUString &rSurroundingText, sal_Int32 nCursorIndex, int nOffset, int nChars)
virtual void Beep() override
bool m_bSpanMonitorsWhenFullscreen
static void signalIMCommit(GtkIMContext *, gchar *, gpointer)
bool isChild(bool bPlug=true, bool bSysChild=true)
static GdkNativeWindow findTopLevelSystemWindow(GdkNativeWindow aWindow)
static gboolean signalUnmap(GtkWidget *, GdkEvent *, gpointer)
static void signalStyleUpdated(GtkWidget *, gpointer)
AtkObject * ooo_fixed_get_accessible(GtkWidget *obj)
virtual void SetExtendedFrameStyle(SalExtStyle nExtStyle) override
virtual void GrabFocus() override
bool m_bIconSetWhileUnmapped
int GetDisplayScreen() const
SystemEnvData m_aSystemData
static gboolean signalConfigure(GtkWidget *, GdkEventConfigure *, gpointer)
std::unique_ptr< IMHandler > m_pIMHandler
virtual void UpdateSettings(AllSettings &rSettings) override
virtual SalGraphics * AcquireGraphics() override
virtual bool GetWindowState(SalFrameState *pState) override
static gboolean signalTooltipQuery(GtkWidget *, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer frame)
virtual void ToTop(SalFrameToTop nFlags) override
static gboolean signalScroll(GtkWidget *, GdkEvent *, gpointer)
std::list< GtkSalFrame * > m_aChildren
virtual weld::Window * GetFrameWeld() const override
sal_uIntPtr GetNativeWindowHandle(GtkWidget *pWidget)
tools::Rectangle m_aHelpArea
bool IsCycleFocusOutDisallowed() const
static gboolean signalFocus(GtkWidget *, GdkEventFocus *, gpointer)
struct _cairo_surface cairo_surface_t
virtual void ResetClipRegion() override
const SalX11Screen & getXScreenNumber() const
virtual LanguageType GetInputLanguage() override
virtual void SetInputContext(SalInputContext *pContext) override
tools::Rectangle m_aFloatRect
virtual void BeginSetClipRegion(sal_uInt32 nRects) override
bool m_bPreeditJustChanged
virtual void SetWindowState(const SalFrameState *pState) override
void focusChanged(bool bFocusIn)
unsigned int nDisplayScreenNumber
An idle is a timer to be scheduled immediately.
void LaunchAsyncScroll(GdkEvent const *pEvent)
static GtkSalDisplay * getDisplay()
bool m_bGeometryIsProvisional
virtual ~GtkSalFrame() override
SalFrameStyleFlags m_nStyle