summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorPranav Kant <pranavk@collabora.co.uk>2017-07-29 17:53:11 +0530
committerPranav Kant <pranavk@collabora.co.uk>2017-10-02 10:58:01 +0530
commit9f6bf0c0b81039760a00b3be7a80590cf2914206 (patch)
tree4ebd1a81dd2308d4c1a62e12e9dd85212b724244 /libreofficekit
parent47111c3a5a732ead4039c7c78077ac12ab0238e8 (diff)
lokdialog: Forward mouse events to vcl; enable mouse move
The current implementation works well - the mouse events are properly handled by the opened dialog changing the dialog states. However, since the uno commands (dialog IDs) are different from what is returned by LOK_CALLBACK_DIALOG_INVALIDATE, the invalidation doesn't instantaneously, so one have to make the dialog window out-of-focus and then again back to focus to trigger the paint and see the updated dialog state. The mouse coordinates are forwarded in pixels as of now. Enable mouse GDK Motion mask too for mouse move operation. Change-Id: Ia915f734e8cbf4586da2b70da5840fe1568b39bd
Diffstat (limited to 'libreofficekit')
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx48
1 files changed, 40 insertions, 8 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx
index 24773ebfc9a0..2a620b58000d 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx
@@ -34,6 +34,7 @@ struct GtvLokDialogPrivate
guint32 m_nLastButtonPressTime;
guint32 m_nLastButtonReleaseTime;
guint32 m_nKeyModifier;
+ guint32 m_nLastButtonPressed;
gchar* dialogid;
};
@@ -125,11 +126,12 @@ gtv_lok_dialog_signal_button(GtkWidget* pDialogDrawingArea, GdkEventButton* pEve
nEventButton = MOUSE_RIGHT;
break;
}
+ priv->m_nLastButtonPressed = nEventButton;
pDocument->pClass->postDialogMouseEvent(pDocument,
priv->dialogid,
LOK_MOUSEEVENT_MOUSEBUTTONDOWN,
- pixelToTwip(pEvent->x),
- pixelToTwip(pEvent->y),
+ (pEvent->x),
+ (pEvent->y),
nCount,
nEventButton,
0/* Modifier */);
@@ -155,12 +157,12 @@ gtv_lok_dialog_signal_button(GtkWidget* pDialogDrawingArea, GdkEventButton* pEve
nEventButton = MOUSE_RIGHT;
break;
}
-
+ priv->m_nLastButtonPressed = nEventButton;
pDocument->pClass->postDialogMouseEvent(pDocument,
priv->dialogid,
LOK_MOUSEEVENT_MOUSEBUTTONUP,
- pixelToTwip(pEvent->x),
- pixelToTwip(pEvent->y),
+ (pEvent->x),
+ (pEvent->y),
nCount,
nEventButton,
0/* Modifier */);
@@ -172,6 +174,33 @@ gtv_lok_dialog_signal_button(GtkWidget* pDialogDrawingArea, GdkEventButton* pEve
return FALSE;
}
+static gboolean
+gtv_lok_dialog_signal_motion(GtkWidget* pDialogDrawingArea, GdkEventButton* pEvent)
+{
+ GtvLokDialog* pDialog = GTV_LOK_DIALOG(gtk_widget_get_toplevel(pDialogDrawingArea));
+ GtvLokDialogPrivate* priv = getPrivate(pDialog);
+
+ GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_window_get_transient_for(GTK_WINDOW(pDialog)));
+ LibreOfficeKitDocument* pDocument = lok_doc_view_get_document(LOK_DOC_VIEW(window->lokdocview));
+
+ g_info("lok_dialog_signal_button: %d, %d (in twips: %d, %d)",
+ (int)pEvent->x, (int)pEvent->y,
+ (int)pixelToTwip(pEvent->x),
+ (int)pixelToTwip(pEvent->y));
+ gtk_widget_grab_focus(GTK_WIDGET(pDialog));
+
+ pDocument->pClass->postDialogMouseEvent(pDocument,
+ priv->dialogid,
+ LOK_MOUSEEVENT_MOUSEMOVE,
+ (pEvent->x),
+ (pEvent->y),
+ 1,
+ priv->m_nLastButtonPressed,
+ 0/* Modifier */);
+
+ return FALSE;
+}
+
static void
gtv_lok_dialog_init(GtvLokDialog* dialog)
{
@@ -183,14 +212,17 @@ gtv_lok_dialog_init(GtvLokDialog* dialog)
priv->m_nLastButtonPressTime = 0;
priv->m_nLastButtonReleaseTime = 0;
priv->m_nKeyModifier = 0;
+ priv->m_nLastButtonPressed = 0;
gtk_widget_add_events(GTK_WIDGET(priv->pDialogDrawingArea),
GDK_BUTTON_PRESS_MASK
- |GDK_BUTTON_RELEASE_MASK);
+ |GDK_BUTTON_RELEASE_MASK
+ |GDK_BUTTON_MOTION_MASK);
g_signal_connect(G_OBJECT(priv->pDialogDrawingArea), "draw", G_CALLBACK(gtv_lok_dialog_draw), nullptr);
- g_signal_connect(G_OBJECT(priv->pDialogDrawingArea), "button-press-event", G_CALLBACK(gtv_lok_dialog_signal_button), dialog);
- g_signal_connect(G_OBJECT(priv->pDialogDrawingArea), "button-release-event", G_CALLBACK(gtv_lok_dialog_signal_button), dialog);
+ g_signal_connect(G_OBJECT(priv->pDialogDrawingArea), "button-press-event", G_CALLBACK(gtv_lok_dialog_signal_button), nullptr);
+ g_signal_connect(G_OBJECT(priv->pDialogDrawingArea), "button-release-event", G_CALLBACK(gtv_lok_dialog_signal_button), nullptr);
+ g_signal_connect(G_OBJECT(priv->pDialogDrawingArea), "motion-notify-event", G_CALLBACK(gtv_lok_dialog_signal_motion), nullptr);
gtk_container_add(GTK_CONTAINER(pContentArea), priv->pDialogDrawingArea);
}