21 #include <config_features.h>
22 #include <config_feature_desktop.h>
26 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
46 #include <com/sun/star/datatransfer/dnd/XDragSource.hpp>
47 #include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
48 #include <com/sun/star/uno/XComponentContext.hpp>
58 Point aFramePos( rFramePos );
68 Point aTempPos = aFramePos;
131 return ePointerStyle;
142 sal_uInt16
nCode = nMouseCode;
146 bLeave = ((nX < 0) || (nY < 0) ||
165 mpWindowImpl->mpFrameData->mnMouseMoveId =
nullptr;
171 ImplCallMouseMove( mpWindowImpl->mpFrameData->mnMouseCode );
252 bool bAsyncFocusWaiting =
false;
258 bAsyncFocusWaiting =
true;
261 pFrame = pFrame->
mpWindowImpl->mpFrameData->mpNextFrame;
266 bool bMustNotGrabFocus =
false;
274 bMustNotGrabFocus =
true;
282 ( bAsyncFocusWaiting && !bHasFocus && !bMustNotGrabFocus )) )
299 if( bMustNotGrabFocus )
323 if ( pOldFocusWindow )
328 if ( pOldOverlapWindow != pNewOverlapWindow )
337 if ( pNewRealWindow != pNewOverlapWindow )
345 if ( pOldFocusWindow && ! pOldFocusWindow->
IsDisposed() )
371 if( pOldFocusWindow &&
431 mpWindowImpl->mpBorderWindow->SetMouseTransparent( bTransparent );
434 mpWindowImpl->mpSysObj->SetMouseTransparent( bTransparent );
490 OString aPointerString =
"default";
494 aPointerString = aIt->second;
503 pWin->
GetLOKNotifier()->libreOfficeKitViewCallback(LOK_CALLBACK_MOUSE_POINTER, aPointerString.getStr());
537 mpWindowImpl->mpFrame->SetPointerPos( aPos.X(), aPos.Y() );
647 mpWindowImpl->mpFrameData->mxDropTargetListener.clear();
661 return Reference< css::datatransfer::dnd::XDropTarget >();
677 nDefaultActions =
mpWindowImpl->mpFrameData->mxDropTarget->getDefaultActions();
679 if( !
mpWindowImpl->mpFrameData->mxDropTargetListener.is() )
688 Reference< css::datatransfer::dnd::XDragGestureRecognizer > xDragGestureRecognizer(
691 if( xDragGestureRecognizer.is() )
693 xDragGestureRecognizer->addDragGestureListener(
694 Reference< css::datatransfer::dnd::XDragGestureListener > (
mpWindowImpl->mpFrameData->mxDropTargetListener, UNO_QUERY));
697 mpWindowImpl->mpFrameData->mbInternalDragGestureRecognizer =
true;
715 return Reference< css::datatransfer::dnd::XDropTarget > (
mpWindowImpl->mxDNDListenerContainer, UNO_QUERY );
721 #if HAVE_FEATURE_DESKTOP
734 Sequence< Any > aDragSourceAL( 2 ), aDropTargetAL( 2 );
735 OUString aDragSourceSN, aDropTargetSN;
737 aDragSourceSN =
"com.sun.star.datatransfer.dnd.OleDragSource";
738 aDropTargetSN =
"com.sun.star.datatransfer.dnd.OleDropTarget";
739 aDragSourceAL[ 1 ] <<=
static_cast<sal_uInt64
>(
reinterpret_cast<sal_IntPtr
>(pEnvData->hWnd) );
740 aDropTargetAL[ 0 ] <<=
static_cast<sal_uInt64
>(
reinterpret_cast<sal_IntPtr
>(pEnvData->hWnd) );
744 aDragSourceSN =
"com.sun.star.datatransfer.dnd.OleDragSource";
745 aDropTargetSN =
"com.sun.star.datatransfer.dnd.OleDropTarget";
746 aDragSourceAL[ 1 ] <<=
static_cast<sal_uInt64
>(
reinterpret_cast<sal_IntPtr
>(pEnvData->mpNSView) );
747 aDropTargetAL[ 0 ] <<=
static_cast<sal_uInt64
>(
reinterpret_cast<sal_IntPtr
>(pEnvData->mpNSView) );
748 #elif HAVE_FEATURE_X11
749 aDragSourceSN =
"com.sun.star.datatransfer.dnd.X11DragSource";
750 aDropTargetSN =
"com.sun.star.datatransfer.dnd.X11DropTarget";
757 if( !aDragSourceSN.isEmpty() )
759 xContext->getServiceManager()->createInstanceWithArgumentsAndContext( aDragSourceSN, aDragSourceAL, xContext ),
762 if( !aDropTargetSN.isEmpty() )
764 xContext->getServiceManager()->createInstanceWithArgumentsAndContext( aDropTargetSN, aDropTargetAL, xContext ),
781 return Reference< css::datatransfer::dnd::XDragSource > ();
786 return Reference< css::datatransfer::dnd::XDragGestureRecognizer > (
GetDropTarget(), UNO_QUERY );
#define LINK(Instance, Class, Member)
bool IsInputEnabled() const
vcl::Window * ImplGetWindow() const
if this is a proxy return the client, otherwise itself
css::uno::Reference< css::datatransfer::dnd::XDragSource > GetDragSource()
Point GetPointerPosPixel()
void EnableChildPointerOverwrite(bool bOverwrite)
VclPtr< vcl::Window > mpFocusWin
bool ImplCallPreNotify(NotifyEvent &rEvt)
virtual void MouseButtonDown(const MouseEvent &rMEvt)
virtual WindowHitTest ImplHitTest(const Point &rFramePos)
void InvertTracking(const tools::Rectangle &rRect, ShowTrackFlags nFlags)
SAL_DLLPRIVATE void ImplCallMouseMove(sal_uInt16 nMouseCode, bool bModChanged=false)
SAL_DLLPRIVATE Point ImplOutputToFrame(const Point &rPos)
SAL_DLLPRIVATE void ImplGrabFocus(GetFocusFlags nFlags)
SAL_DLLPRIVATE vcl::Window * ImplGetFrameWindow() const
SAL_DLLPRIVATE WindowImpl * ImplGetWindowImpl() const
tools::Long mnOutOffY
Output offset for device output in pixel (pseudo window offset within window system's frames) ...
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
Post a user event to the default window.
virtual void MouseButtonUp(const MouseEvent &rMEvt)
static css::uno::Reference< css::awt::XDisplayConnection > GetDisplayConnection()
DialogControlFlags GetDialogControlFlags() const
SAL_DLLPRIVATE bool ImplIsOverlapWindow() const
SAL_DLLPRIVATE ImplWinData * ImplGetWinData() const
const std::map< PointerStyle, OString > gaLOKPointerMap
SAL_DLLPRIVATE void ReMirror(Point &rPoint) const
VclPtr< vcl::Window > GetParentWithLOKNotifier()
Find the nearest parent with LOK Notifier; can be itself if this Window has LOK notifier set...
SAL_DLLPRIVATE void ImplStartDnd()
void EndTracking(TrackingEventFlags nFlags=TrackingEventFlags::NONE)
SAL_DLLPRIVATE void ImplGrabFocusToDocument(GetFocusFlags nFlags)
void ShowPointer(bool bVisible)
WinBits const WB_SYSTEMFLOATWIN
css::uno::Reference< css::datatransfer::dnd::XDragGestureRecognizer > GetDragGestureRecognizer()
static bool IsWindowFocused(const WindowImpl &rWinImpl)
void SetPointerPosPixel(const Point &rPos)
SAL_DLLPRIVATE PointerStyle ImplGetMousePointer() const
SalGraphics * mpGraphics
Graphics context to draw on.
PointerStyle GetPointer() const
ImplSVData * ImplGetSVData()
tools::Long mirror2(tools::Long nX, const OutputDevice &rOutDev) const
void SetLastMousePos(const Point &rPos)
Similar to SetPointerPosPixel(), but sets the frame data's last mouse position instead.
VclPtr< vcl::Window > mpCaptureWin
bool IsRTLEnabled() const
virtual bool EventNotify(NotifyEvent &rNEvt)
SAL_DLLPRIVATE bool ImplIsAntiparallel() const
css::uno::Reference< css::datatransfer::dnd::XDropTarget > GetDropTarget()
virtual bool HasMirroredGraphics() const
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
SAL_DLLPRIVATE void ImplGenerateMouseMove()
std::unique_ptr< WindowImpl > mpWindowImpl
bool IsInModalMode() const
A window is in modal mode if one of its children or subchildren is a running modal window (a modal di...
SAL_DLLPRIVATE vcl::Window * ImplGetParent() const
SAL_DLLPRIVATE bool ImplTestMousePointerSet()
bool IsMouseCaptured() const
Size GetOutputSizePixel() const
static SAL_DLLPRIVATE void ImplCallFocusChangeActivate(vcl::Window *pNewOverlapWindow, vcl::Window *pOldOverlapWindow)
vcl::Window * GetParent() const
VclPtr< vcl::Window > mpTrackWin
enumrange< T >::Iterator end(enumrange< T >)
SAL_DLLPRIVATE void ImplCallDeactivateListeners(vcl::Window *)
vcl::Window * GetWindow(GetWindowType nType) const
virtual const SystemEnvData * GetSystemData() const
bool ImplHandleMouseEvent(const VclPtr< vcl::Window > &xWindow, MouseNotifyEvent nSVEvent, bool bMouseLeave, tools::Long nX, tools::Long nY, sal_uInt64 nMsgTime, sal_uInt16 nCode, MouseEventModifiers nMode)
SAL_DLLPRIVATE vcl::Window * ImplGetFirstOverlapWindow()
void SetPointer(PointerStyle)
VclPtr< vcl::Window > mpExtTextInputWin
void SetMouseTransparent(bool bTransparent)
SAL_DLLPRIVATE bool ImplStopDnd()
tools::Rectangle GetOutputRectPixel() const
ImplSVFrameData maFrameData
::OutputDevice const * GetOutDev() const
SAL_DLLPRIVATE Point ImplFrameToOutput(const Point &rPos)
Reference< XComponentContext > getProcessComponentContext()
SAL_DLLPRIVATE void ImplInvertFocus(const tools::Rectangle &rRect)
reference_type * get() const
Get the body.
virtual void MouseMove(const MouseEvent &rMEvt)
const vcl::ILibreOfficeKitNotifier * GetLOKNotifier() const
VclPtr< vcl::Window > mpFirstFrame
tools::Long mnOutOffX
Output offset for device output in pixel (pseudo window offset within window system's frames) ...
Point GetLastPointerPosPixel()
WinBits const WB_MOVEABLE
SAL_DLLPRIVATE void ImplCallActivateListeners(vcl::Window *)
IMPL_LINK_NOARG(QuickSelectionEngine_Data, SearchStringTimeout, Timer *, void)
PointerState GetPointerState()
ImplFrameData * mpFrameData
static SAL_DLLPRIVATE void ImplNewInputContext()
ImplSVWinData * mpWinData