desktop/source/lib/init.cxx | 24 ++++++++++++++++++++ include/LibreOfficeKit/LibreOfficeKit.h | 12 ++++++++++ include/LibreOfficeKit/LibreOfficeKit.hxx | 12 ++++++++++ libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 9 ------- libreofficekit/source/gtk/lokdocview.c | 24 ++++++++++++++++++-- 5 files changed, 70 insertions(+), 11 deletions(-)
New commits: commit a28584efe460813f43d552498825622b6907f976 Author: Miklos Vajna <[email protected]> Date: Tue Jan 20 10:20:24 2015 +0100 gtktiledviewer: call postMouseEvent() Again, no unit conversion yet. Change-Id: I261febd875bac5a729f449e42558b5af9d7a359b diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx index 085e3e3..ea5a273 100644 --- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx @@ -160,14 +160,6 @@ static void signalKey(GtkWidget* /*pWidget*/, GdkEventKey* pEvent, gpointer /*pD pLOKDocView->pOffice->pClass->postKeyEvent(pLOKDocView->pOffice, LOK_KEYEVENT_KEYINPUT, nCode); } -/// Receives a button press event. -static void signalButton(GtkWidget* /*pWidget*/, GdkEvent* /*pEvent*/, gpointer /*pData*/) -{ - LOKDocView* pLOKDocView = LOK_DOCVIEW(pDocView); - - lok_docview_set_edit(pLOKDocView, TRUE); -} - // GtkComboBox requires gtk 2.24 or later #if ( GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 24 ) || GTK_MAJOR_VERSION > 2 void populatePartSelector() @@ -325,7 +317,6 @@ int main( int argc, char* argv[] ) // Input handling. g_signal_connect(pWindow, "key-press-event", G_CALLBACK(signalKey), NULL); g_signal_connect(pWindow, "key-release-event", G_CALLBACK(signalKey), NULL); - g_signal_connect(pDocView, "button-press-event", G_CALLBACK(signalButton), NULL); gtk_container_add( GTK_CONTAINER(pVBox), pDocView ); diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c index b335d8b..bf8dd71 100644 --- a/libreofficekit/source/gtk/lokdocview.c +++ b/libreofficekit/source/gtk/lokdocview.c @@ -33,6 +33,26 @@ void lcl_onDestroy( LOKDocView* pDocView, gpointer pData ) pDocView->pDocument = NULL; } +/// Receives a button press event. +void lcl_signalButton(GtkWidget* pEventBox, GdkEventButton* pEvent, LOKDocView* pDocView) +{ + (void) pEventBox; + + lok_docview_set_edit(pDocView, TRUE); + + switch (pEvent->type) + { + case GDK_BUTTON_PRESS: + pDocView->pOffice->pClass->postMouseEvent(pDocView->pOffice, LOK_MOUSEEVENT_MOUSEBUTTONDOWN, pEvent->x, pEvent->y); + break; + case GDK_BUTTON_RELEASE: + pDocView->pOffice->pClass->postMouseEvent(pDocView->pOffice, LOK_MOUSEEVENT_MOUSEBUTTONUP, pEvent->x, pEvent->y); + break; + default: + break; + } +} + SAL_DLLPUBLIC_EXPORT guint lok_docview_get_type() { static guint lok_docview_type = 0; @@ -73,8 +93,8 @@ static void lok_docview_init( LOKDocView* pDocView ) gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(pDocView), pDocView->pEventBox ); - // Allow reacting to button press events. - gtk_widget_set_events(pDocView->pEventBox, GDK_BUTTON_PRESS_MASK); + gtk_signal_connect(GTK_OBJECT(pDocView->pEventBox), "button-press-event", GTK_SIGNAL_FUNC(lcl_signalButton), pDocView); + gtk_signal_connect(GTK_OBJECT(pDocView->pEventBox), "button-release-event", GTK_SIGNAL_FUNC(lcl_signalButton), pDocView); gtk_widget_show( pDocView->pEventBox ); commit cdabb94b3e4de2978a999ffda1e7cb0aa62454da Author: Miklos Vajna <[email protected]> Date: Tue Jan 20 10:17:03 2015 +0100 Add initial lok::Office::postMouseEvent() There is no unit conversion yet, most probably we want to work with doc model coordinates at an API level, while VCL works with pixel coordinates. Change-Id: I98848851fbec5253e76c997844f6339402dfac46 diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 14c1860..e8f98aa 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -253,6 +253,7 @@ static int lo_initialize (LibreOfficeKit* pThis, const ch static LibreOfficeKitDocument* lo_documentLoad (LibreOfficeKit* pThis, const char* pURL); static char * lo_getError (LibreOfficeKit* pThis); static void lo_postKeyEvent (LibreOfficeKit* pThis, int nType, int nCode); +static void lo_postMouseEvent (LibreOfficeKit* pThis, int nType, int nX, int nY); struct LibLibreOffice_Impl : public _LibreOfficeKit @@ -272,6 +273,7 @@ struct LibLibreOffice_Impl : public _LibreOfficeKit m_pOfficeClass->documentLoad = lo_documentLoad; m_pOfficeClass->getError = lo_getError; m_pOfficeClass->postKeyEvent = lo_postKeyEvent; + m_pOfficeClass->postMouseEvent = lo_postMouseEvent; gOfficeClass = m_pOfficeClass; } @@ -670,6 +672,28 @@ static void lo_postKeyEvent(LibreOfficeKit* /*pThis*/, int nType, int nCode) #endif } +static void lo_postMouseEvent(LibreOfficeKit* /*pThis*/, int nType, int nX, int nY) +{ +#if defined(UNX) && !defined(MACOSX) && !defined(ENABLE_HEADLESS) + if (SalFrame *pFocus = SvpSalFrame::GetFocusFrame()) + { + MouseEvent aEvent = MouseEvent(Point(nX, nY), 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT); + switch (nType) + { + case LOK_MOUSEEVENT_MOUSEBUTTONDOWN: + Application::PostMouseEvent(VCLEVENT_WINDOW_MOUSEBUTTONDOWN, pFocus->GetWindow(), &aEvent); + break; + case LOK_MOUSEEVENT_MOUSEBUTTONUP: + Application::PostMouseEvent(VCLEVENT_WINDOW_MOUSEBUTTONUP, pFocus->GetWindow(), &aEvent); + break; + default: + assert(false); + break; + } + } +#endif +} + static void force_c_locale(void) { // force locale (and resource files loaded) to en-US diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h index c5909ef..397d435 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.h +++ b/include/LibreOfficeKit/LibreOfficeKit.h @@ -73,6 +73,17 @@ typedef enum } LibreOfficeKitKeyEventType; +typedef enum +{ + /// A pressed gesture has started. + LOK_MOUSEEVENT_MOUSEBUTTONDOWN, + /// A pressed gesture has finished. + LOK_MOUSEEVENT_MOUSEBUTTONUP, + /// A change has happened during a press gesture. + LOK_MOUSEEVENT_MOUSEMOVE +} +LibreOfficeKitMouseEventType; + typedef void (*LibreOfficeKitCallback)(int nType, const char* pPayload, void* pData); #endif // LOK_USE_UNSTABLE_API @@ -89,6 +100,7 @@ struct _LibreOfficeKitClass LibreOfficeKitDocument* (*documentLoad) (LibreOfficeKit* pThis, const char* pURL); char* (*getError) (LibreOfficeKit* pThis); void (*postKeyEvent) (LibreOfficeKit* pThis, int nType, int nCode); + void (*postMouseEvent)(LibreOfficeKit* pThis, int nType, int nX, int nY); }; #define LIBREOFFICEKIT_DOCUMENT_HAS(pDoc,member) LIBREOFFICEKIT_HAS_MEMBER(LibreOfficeKitDocumentClass,member,(pDoc)->pClass->nSize) diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx index fdc025b..bd3ce55 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.hxx +++ b/include/LibreOfficeKit/LibreOfficeKit.hxx @@ -146,6 +146,18 @@ public: { mpThis->pClass->postKeyEvent(mpThis, nType, nCode); } + + /** + * Posts a mouse event to the focused frame. + * + * @param nType Event type, like down, move or up. + * @param nX horizontal position + * @param nY vertical position + */ + inline void postMouseEvent(int nType, int nX, int nY) + { + mpThis->pClass->postMouseEvent(mpThis, nType, nX, nY); + } }; inline Office* lok_cpp_init(const char* pInstallPath) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
