|
 |
135360 |
From 74730e13d8ebee67a1c235ef203a9b56a8097593 Mon Sep 17 00:00:00 2001
|
|
 |
135360 |
From: Pranav Kant <pranavk@libreoffice.org>
|
|
 |
135360 |
Date: Wed, 9 Dec 2015 01:03:02 +0530
|
|
 |
135360 |
Subject: [PATCH 367/398] tdf#96316: Decouple view-only/editable modes
|
|
 |
135360 |
|
|
 |
135360 |
- Move text selection and graphic selection tasks into functions
|
|
 |
135360 |
- Merge GDK_BUTTON_PRESS, GDK_BUTTON_RELEASE conditional code
|
|
 |
135360 |
- Do not change to 'move' cursor in view-only mode
|
|
 |
135360 |
- Ignore LOK_POST_COMMAND, LOK_SET_GRAPHIC_SELECTION in view-only
|
|
 |
135360 |
|
|
 |
135360 |
As a consequence this commit also allows dragging handles during text
|
|
 |
135360 |
selection in view-only mode which was earlier not possible.
|
|
 |
135360 |
|
|
 |
135360 |
Change-Id: Iffb668d5447dd646a1e40237dee8d8d3fa3314b6
|
|
 |
135360 |
Reviewed-on: https://gerrit.libreoffice.org/20487
|
|
 |
135360 |
Reviewed-by: David Tardon <dtardon@redhat.com>
|
|
 |
135360 |
Tested-by: David Tardon <dtardon@redhat.com>
|
|
 |
135360 |
(cherry picked from commit b3bfc26d0863b074bb990725718f2ab23d05425d)
|
|
 |
135360 |
(cherry picked from commit 0a28049853ce84aa8ef4f871065970c1220ae855)
|
|
 |
135360 |
---
|
|
 |
135360 |
libreofficekit/source/gtk/lokdocview.cxx | 312 ++++++++++++++++++-------------
|
|
 |
135360 |
1 file changed, 180 insertions(+), 132 deletions(-)
|
|
 |
135360 |
|
|
 |
135360 |
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
135360 |
index 464348d95f1c..5e985d4a8c2f 100644
|
|
 |
135360 |
--- a/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
135360 |
+++ b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
135360 |
@@ -312,6 +312,153 @@ isEmptyRectangle(const GdkRectangle& rRectangle)
|
|
 |
135360 |
return rRectangle.x == 0 && rRectangle.y == 0 && rRectangle.width == 0 && rRectangle.height == 0;
|
|
 |
135360 |
}
|
|
 |
135360 |
|
|
 |
135360 |
+/// if handled, returns TRUE else FALSE
|
|
 |
135360 |
+static bool
|
|
 |
135360 |
+handleTextSelectionOnButtonPress(GdkRectangle& aClick, LOKDocView* pDocView) {
|
|
 |
135360 |
+ LOKDocViewPrivate& priv = getPrivate(pDocView);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ if (gdk_rectangle_intersect(&aClick, &priv->m_aHandleStartRect, nullptr))
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: start of drag start handle");
|
|
 |
135360 |
+ priv->m_bInDragStartHandle = true;
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ else if (gdk_rectangle_intersect(&aClick, &priv->m_aHandleMiddleRect, nullptr))
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: start of drag middle handle");
|
|
 |
135360 |
+ priv->m_bInDragMiddleHandle = true;
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ else if (gdk_rectangle_intersect(&aClick, &priv->m_aHandleEndRect, nullptr))
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: start of drag end handle");
|
|
 |
135360 |
+ priv->m_bInDragEndHandle = true;
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
+}
|
|
 |
135360 |
+
|
|
 |
135360 |
+/// if handled, returns TRUE else FALSE
|
|
 |
135360 |
+static bool
|
|
 |
135360 |
+handleGraphicSelectionOnButtonPress(GdkRectangle& aClick, LOKDocView* pDocView) {
|
|
 |
135360 |
+ LOKDocViewPrivate& priv = getPrivate(pDocView);
|
|
 |
135360 |
+ GError* error = nullptr;
|
|
 |
135360 |
+
|
|
 |
135360 |
+ for (int i = 0; i < GRAPHIC_HANDLE_COUNT; ++i)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ if (gdk_rectangle_intersect(&aClick, &priv->m_aGraphicHandleRects[i], nullptr))
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: start of drag graphic handle #%d", i);
|
|
 |
135360 |
+ priv->m_bInDragGraphicHandles[i] = true;
|
|
 |
135360 |
+
|
|
 |
135360 |
+ GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
|
|
 |
135360 |
+ LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_START;
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(priv->m_aGraphicHandleRects[i].x + priv->m_aGraphicHandleRects[i].width / 2, priv->m_fZoom);
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(priv->m_aGraphicHandleRects[i].y + priv->m_aGraphicHandleRects[i].height / 2, priv->m_fZoom);
|
|
 |
135360 |
+ g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ g_thread_pool_push(priv->lokThreadPool, g_object_ref(task), &error);
|
|
 |
135360 |
+ if (error != nullptr)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_warning("Unable to call LOK_SET_GRAPHIC_SELECTION: %s", error->message);
|
|
 |
135360 |
+ g_clear_error(&error);
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ g_object_unref(task);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
+}
|
|
 |
135360 |
+
|
|
 |
135360 |
+/// if handled, returns TRUE else FALSE
|
|
 |
135360 |
+static bool
|
|
 |
135360 |
+handleTextSelectionOnButtonRelease(LOKDocView* pDocView) {
|
|
 |
135360 |
+ LOKDocViewPrivate& priv = getPrivate(pDocView);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ if (priv->m_bInDragStartHandle)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: end of drag start handle");
|
|
 |
135360 |
+ priv->m_bInDragStartHandle = false;
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ else if (priv->m_bInDragMiddleHandle)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: end of drag middle handle");
|
|
 |
135360 |
+ priv->m_bInDragMiddleHandle = false;
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ else if (priv->m_bInDragEndHandle)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: end of drag end handle");
|
|
 |
135360 |
+ priv->m_bInDragEndHandle = false;
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
+}
|
|
 |
135360 |
+
|
|
 |
135360 |
+/// if handled, returns TRUE else FALSE
|
|
 |
135360 |
+static bool
|
|
 |
135360 |
+handleGraphicSelectionOnButtonRelease(LOKDocView* pDocView, GdkEventButton* pEvent) {
|
|
 |
135360 |
+ LOKDocViewPrivate& priv = getPrivate(pDocView);
|
|
 |
135360 |
+ GError* error = nullptr;
|
|
 |
135360 |
+
|
|
 |
135360 |
+ for (int i = 0; i < GRAPHIC_HANDLE_COUNT; ++i)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ if (priv->m_bInDragGraphicHandles[i])
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: end of drag graphic handle #%d", i);
|
|
 |
135360 |
+ priv->m_bInDragGraphicHandles[i] = false;
|
|
 |
135360 |
+
|
|
 |
135360 |
+ GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
|
|
 |
135360 |
+ LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_END;
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(pEvent->x, priv->m_fZoom);
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(pEvent->y, priv->m_fZoom);
|
|
 |
135360 |
+ g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ g_thread_pool_push(priv->lokThreadPool, g_object_ref(task), &error);
|
|
 |
135360 |
+ if (error != nullptr)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_warning("Unable to call LOK_SET_GRAPHIC_SELECTION: %s", error->message);
|
|
 |
135360 |
+ g_clear_error(&error);
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ g_object_unref(task);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+
|
|
 |
135360 |
+ if (priv->m_bInDragGraphicSelection)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_info("LOKDocView_Impl::signalButton: end of drag graphic selection");
|
|
 |
135360 |
+ priv->m_bInDragGraphicSelection = false;
|
|
 |
135360 |
+
|
|
 |
135360 |
+ GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
|
|
 |
135360 |
+ LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_END;
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(pEvent->x, priv->m_fZoom);
|
|
 |
135360 |
+ pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(pEvent->y, priv->m_fZoom);
|
|
 |
135360 |
+ g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ g_thread_pool_push(priv->lokThreadPool, g_object_ref(task), &error);
|
|
 |
135360 |
+ if (error != nullptr)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ g_warning("Unable to call LOK_SET_GRAPHIC_SELECTION: %s", error->message);
|
|
 |
135360 |
+ g_clear_error(&error);
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+ g_object_unref(task);
|
|
 |
135360 |
+
|
|
 |
135360 |
+ return TRUE;
|
|
 |
135360 |
+ }
|
|
 |
135360 |
+
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
+}
|
|
 |
135360 |
+
|
|
 |
135360 |
static void
|
|
 |
135360 |
postKeyEventInThread(gpointer data)
|
|
 |
135360 |
{
|
|
 |
135360 |
@@ -747,11 +894,17 @@ callback (gpointer pData)
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_CALLBACK_MOUSE_POINTER:
|
|
 |
135360 |
{
|
|
 |
135360 |
- // The gtk docs claim that most css cursors should be supported, however
|
|
 |
135360 |
- // on my system at least this is not true and many cursors are unsupported.
|
|
 |
135360 |
- // In this case pCursor = null, which results in the default cursor being set.
|
|
 |
135360 |
- GdkCursor* pCursor = gdk_cursor_new_from_name(gtk_widget_get_display(GTK_WIDGET(pDocView)), pCallback->m_aPayload.c_str());
|
|
 |
135360 |
- gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(pDocView)), pCursor);
|
|
 |
135360 |
+ // We do not want the cursor to get changed in view-only mode
|
|
 |
135360 |
+ if (priv->m_bEdit)
|
|
 |
135360 |
+ {
|
|
 |
135360 |
+ // The gtk docs claim that most css cursors should be supported, however
|
|
 |
135360 |
+ // on my system at least this is not true and many cursors are unsupported.
|
|
 |
135360 |
+ // In this case pCursor = null, which results in the default cursor
|
|
 |
135360 |
+ // being set.
|
|
 |
135360 |
+ GdkCursor* pCursor = gdk_cursor_new_from_name(gtk_widget_get_display(GTK_WIDGET(pDocView)),
|
|
 |
135360 |
+ pCallback->m_aPayload.c_str());
|
|
 |
135360 |
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(pDocView)), pCursor);
|
|
 |
135360 |
+ }
|
|
 |
135360 |
}
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_CALLBACK_GRAPHIC_SELECTION:
|
|
 |
135360 |
@@ -1176,140 +1329,21 @@ lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
|
|
 |
135360 |
(int)pixelToTwip(pEvent->y, priv->m_fZoom));
|
|
 |
135360 |
gtk_widget_grab_focus(GTK_WIDGET(pDocView));
|
|
 |
135360 |
|
|
 |
135360 |
- if (pEvent->type == GDK_BUTTON_RELEASE)
|
|
 |
135360 |
+ switch (pEvent->type)
|
|
 |
135360 |
{
|
|
 |
135360 |
- if (priv->m_bInDragStartHandle)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: end of drag start handle");
|
|
 |
135360 |
- priv->m_bInDragStartHandle = false;
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
- else if (priv->m_bInDragMiddleHandle)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: end of drag middle handle");
|
|
 |
135360 |
- priv->m_bInDragMiddleHandle = false;
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
- else if (priv->m_bInDragEndHandle)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: end of drag end handle");
|
|
 |
135360 |
- priv->m_bInDragEndHandle = false;
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
-
|
|
 |
135360 |
- for (int i = 0; i < GRAPHIC_HANDLE_COUNT; ++i)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- if (priv->m_bInDragGraphicHandles[i])
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: end of drag graphic handle #%d", i);
|
|
 |
135360 |
- priv->m_bInDragGraphicHandles[i] = false;
|
|
 |
135360 |
-
|
|
 |
135360 |
- GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
|
|
 |
135360 |
- LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_END;
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(pEvent->x, priv->m_fZoom);
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(pEvent->y, priv->m_fZoom);
|
|
 |
135360 |
- g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
|
|
 |
135360 |
-
|
|
 |
135360 |
- g_thread_pool_push(priv->lokThreadPool, g_object_ref(task), &error);
|
|
 |
135360 |
- if (error != nullptr)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_warning("Unable to call LOK_SET_GRAPHIC_SELECTION: %s", error->message);
|
|
 |
135360 |
- g_clear_error(&error);
|
|
 |
135360 |
- }
|
|
 |
135360 |
- g_object_unref(task);
|
|
 |
135360 |
-
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
- }
|
|
 |
135360 |
-
|
|
 |
135360 |
- if (priv->m_bInDragGraphicSelection)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: end of drag graphic selection");
|
|
 |
135360 |
- priv->m_bInDragGraphicSelection = false;
|
|
 |
135360 |
-
|
|
 |
135360 |
- GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
|
|
 |
135360 |
- LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_END;
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(pEvent->x, priv->m_fZoom);
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(pEvent->y, priv->m_fZoom);
|
|
 |
135360 |
- g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
|
|
 |
135360 |
-
|
|
 |
135360 |
- g_thread_pool_push(priv->lokThreadPool, g_object_ref(task), &error);
|
|
 |
135360 |
- if (error != nullptr)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_warning("Unable to call LOK_SET_GRAPHIC_SELECTION: %s", error->message);
|
|
 |
135360 |
- g_clear_error(&error);
|
|
 |
135360 |
- }
|
|
 |
135360 |
- g_object_unref(task);
|
|
 |
135360 |
-
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
- }
|
|
 |
135360 |
-
|
|
 |
135360 |
- if (priv->m_bEdit)
|
|
 |
135360 |
+ case GDK_BUTTON_PRESS:
|
|
 |
135360 |
{
|
|
 |
135360 |
GdkRectangle aClick;
|
|
 |
135360 |
aClick.x = pEvent->x;
|
|
 |
135360 |
aClick.y = pEvent->y;
|
|
 |
135360 |
aClick.width = 1;
|
|
 |
135360 |
aClick.height = 1;
|
|
 |
135360 |
- if (pEvent->type == GDK_BUTTON_PRESS)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- if (gdk_rectangle_intersect(&aClick, &priv->m_aHandleStartRect, nullptr))
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: start of drag start handle");
|
|
 |
135360 |
- priv->m_bInDragStartHandle = true;
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
- else if (gdk_rectangle_intersect(&aClick, &priv->m_aHandleMiddleRect, nullptr))
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: start of drag middle handle");
|
|
 |
135360 |
- priv->m_bInDragMiddleHandle = true;
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
- else if (gdk_rectangle_intersect(&aClick, &priv->m_aHandleEndRect, nullptr))
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: start of drag end handle");
|
|
 |
135360 |
- priv->m_bInDragEndHandle = true;
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
|
|
 |
135360 |
- for (int i = 0; i < GRAPHIC_HANDLE_COUNT; ++i)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- if (gdk_rectangle_intersect(&aClick, &priv->m_aGraphicHandleRects[i], nullptr))
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_info("LOKDocView_Impl::signalButton: start of drag graphic handle #%d", i);
|
|
 |
135360 |
- priv->m_bInDragGraphicHandles[i] = true;
|
|
 |
135360 |
-
|
|
 |
135360 |
- GTask* task = g_task_new(pDocView, nullptr, nullptr, nullptr);
|
|
 |
135360 |
- LOEvent* pLOEvent = new LOEvent(LOK_SET_GRAPHIC_SELECTION);
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionType = LOK_SETGRAPHICSELECTION_START;
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionX = pixelToTwip(priv->m_aGraphicHandleRects[i].x + priv->m_aGraphicHandleRects[i].width / 2, priv->m_fZoom);
|
|
 |
135360 |
- pLOEvent->m_nSetGraphicSelectionY = pixelToTwip(priv->m_aGraphicHandleRects[i].y + priv->m_aGraphicHandleRects[i].height / 2, priv->m_fZoom);
|
|
 |
135360 |
- g_task_set_task_data(task, pLOEvent, LOEvent::destroy);
|
|
 |
135360 |
-
|
|
 |
135360 |
- g_thread_pool_push(priv->lokThreadPool, g_object_ref(task), &error);
|
|
 |
135360 |
- if (error != nullptr)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- g_warning("Unable to call LOK_SET_GRAPHIC_SELECTION: %s", error->message);
|
|
 |
135360 |
- g_clear_error(&error);
|
|
 |
135360 |
- }
|
|
 |
135360 |
- g_object_unref(task);
|
|
 |
135360 |
-
|
|
 |
135360 |
- return FALSE;
|
|
 |
135360 |
- }
|
|
 |
135360 |
- }
|
|
 |
135360 |
- }
|
|
 |
135360 |
- }
|
|
 |
135360 |
-
|
|
 |
135360 |
- if (!priv->m_bEdit)
|
|
 |
135360 |
- lok_doc_view_set_edit(pDocView, TRUE);
|
|
 |
135360 |
+ if (handleTextSelectionOnButtonPress(aClick, pDocView))
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
+ if (handleGraphicSelectionOnButtonPress(aClick, pDocView))
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
|
|
 |
135360 |
- switch (pEvent->type)
|
|
 |
135360 |
- {
|
|
 |
135360 |
- case GDK_BUTTON_PRESS:
|
|
 |
135360 |
- {
|
|
 |
135360 |
int nCount = 1;
|
|
 |
135360 |
if ((pEvent->time - priv->m_nLastButtonPressTime) < 250)
|
|
 |
135360 |
nCount++;
|
|
 |
135360 |
@@ -1347,6 +1381,11 @@ lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
|
|
 |
135360 |
}
|
|
 |
135360 |
case GDK_BUTTON_RELEASE:
|
|
 |
135360 |
{
|
|
 |
135360 |
+ if (handleTextSelectionOnButtonRelease(pDocView))
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
+ if (handleGraphicSelectionOnButtonRelease(pDocView, pEvent))
|
|
 |
135360 |
+ return FALSE;
|
|
 |
135360 |
+
|
|
 |
135360 |
int nCount = 1;
|
|
 |
135360 |
if ((pEvent->time - priv->m_nLastButtonReleaseTime) < 250)
|
|
 |
135360 |
nCount++;
|
|
 |
135360 |
@@ -1720,6 +1759,8 @@ lokThreadFunc(gpointer data, gpointer /*user_data*/)
|
|
 |
135360 |
{
|
|
 |
135360 |
GTask* task = G_TASK(data);
|
|
 |
135360 |
LOEvent* pLOEvent = static_cast<LOEvent*>(g_task_get_task_data(task));
|
|
 |
135360 |
+ LOKDocView* pDocView = LOK_DOC_VIEW(g_task_get_source_object(task));
|
|
 |
135360 |
+ LOKDocViewPrivate& priv = getPrivate(pDocView);
|
|
 |
135360 |
|
|
 |
135360 |
switch (pLOEvent->m_nType)
|
|
 |
135360 |
{
|
|
 |
135360 |
@@ -1727,7 +1768,10 @@ lokThreadFunc(gpointer data, gpointer /*user_data*/)
|
|
 |
135360 |
openDocumentInThread(task);
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_POST_COMMAND:
|
|
 |
135360 |
- postCommandInThread(task);
|
|
 |
135360 |
+ if (priv->m_bEdit)
|
|
 |
135360 |
+ postCommandInThread(task);
|
|
 |
135360 |
+ else
|
|
 |
135360 |
+ g_info ("LOK_POST_COMMAND: ignoring commands in view-only mode");
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_SET_EDIT:
|
|
 |
135360 |
setEditInThread(task);
|
|
 |
135360 |
@@ -1739,6 +1783,7 @@ lokThreadFunc(gpointer data, gpointer /*user_data*/)
|
|
 |
135360 |
setPartmodeInThread(task);
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_POST_KEY:
|
|
 |
135360 |
+ // view-only/editable mode already checked during signal key signal emission
|
|
 |
135360 |
postKeyEventInThread(task);
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_PAINT_TILE:
|
|
 |
135360 |
@@ -1748,7 +1793,10 @@ lokThreadFunc(gpointer data, gpointer /*user_data*/)
|
|
 |
135360 |
postMouseEventInThread(task);
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_SET_GRAPHIC_SELECTION:
|
|
 |
135360 |
- setGraphicSelectionInThread(task);
|
|
 |
135360 |
+ if (priv->m_bEdit)
|
|
 |
135360 |
+ setGraphicSelectionInThread(task);
|
|
 |
135360 |
+ else
|
|
 |
135360 |
+ g_info ("LOK_SET_GRAPHIC_SELECTION: skipping graphical operation in view-only mode");
|
|
 |
135360 |
break;
|
|
 |
135360 |
case LOK_SET_CLIENT_ZOOM:
|
|
 |
135360 |
setClientZoomInThread(task);
|
|
 |
135360 |
--
|
|
 |
135360 |
2.12.0
|
|
 |
135360 |
|