summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/LibreOfficeKit/LibreOfficeKitEnums.h18
-rw-r--r--libreofficekit/source/gtk/lokdocview.cxx4
-rw-r--r--sc/source/ui/view/gridwin.cxx44
3 files changed, 55 insertions, 11 deletions
diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h
index 61bf237c1caa..a5cc4a92ae04 100644
--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -655,7 +655,23 @@ typedef enum
* Profiling tracing information single string of multiple lines
* containing <pid> <timestamp> and zone start/stop information
*/
- LOK_CALLBACK_PROFILE_FRAME = 41
+ LOK_CALLBACK_PROFILE_FRAME = 41,
+
+ /**
+ * The position and size of the cell selection area. It is used to
+ * draw the selection handles for cells in Calc documents.
+ *
+ * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
+ */
+ LOK_CALLBACK_CELL_SELECTION_AREA = 42,
+
+ /**
+ * The position and size of the cell auto fill area. It is used to
+ * trigger auto fill functionality if that area is hit.
+ *
+ * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
+ */
+ LOK_CALLBACK_CELL_AUTO_FILL_AREA = 43,
}
LibreOfficeKitCallbackType;
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index d3363c3c8976..f335a42f87e4 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -450,6 +450,10 @@ callbackTypeToString (int nType)
return "LOK_CALLBACK_SIGNATURE_STATUS";
case LOK_CALLBACK_PROFILE_FRAME:
return "LOK_CALLBACK_PROFILE_FRAME";
+ case LOK_CALLBACK_CELL_SELECTION_AREA:
+ return "LOK_CALLBACK_CELL_SELECTION_AREA";
+ case LOK_CALLBACK_CELL_AUTO_FILL_AREA:
+ return "LOK_CALLBACK_CELL_AUTO_FILL_AREA";
}
g_assert(false);
return nullptr;
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 888992712295..0830a65e6152 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -5890,23 +5890,41 @@ static void updateLibreOfficeKitSelection(const ScViewData* pViewData, const std
return;
// selection start handle
- tools::Rectangle aStart(aBoundingBox.Left() / nPPTX, aBoundingBox.Top() / nPPTY,
- aBoundingBox.Left() / nPPTX, (aBoundingBox.Top() / nPPTY) + 256);
-
- // selection end handle
- tools::Rectangle aEnd(aBoundingBox.Right() / nPPTX, (aBoundingBox.Bottom() / nPPTY) - 256,
+ tools::Rectangle aRectangle(
+ aBoundingBox.Left() / nPPTX, aBoundingBox.Top() / nPPTY,
aBoundingBox.Right() / nPPTX, aBoundingBox.Bottom() / nPPTY);
// the selection itself
OString aSelection = comphelper::string::join("; ", aRectangles).getStr();
ScTabViewShell* pViewShell = pViewData->GetViewShell();
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION_START, aStart.toString().getStr());
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION_END, aEnd.toString().getStr());
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CELL_SELECTION_AREA, aRectangle.toString().getStr());
pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, aSelection.getStr());
SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", aSelection.getStr());
}
+namespace
+{
+
+void updateLibreOfficeKitAutoFill(const ScViewData* pViewData, tools::Rectangle const & rRectangle)
+{
+ if (!comphelper::LibreOfficeKit::isActive())
+ return;
+
+ double nPPTX = pViewData->GetPPTX();
+ double nPPTY = pViewData->GetPPTY();
+
+ // selection start handle
+ tools::Rectangle aLogicRectangle(
+ rRectangle.Left() / nPPTX, rRectangle.Top() / nPPTY,
+ rRectangle.Right() / nPPTX, rRectangle.Bottom() / nPPTY);
+
+ ScTabViewShell* pViewShell = pViewData->GetViewShell();
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CELL_AUTO_FILL_AREA, aLogicRectangle.toString().getStr());
+}
+
+} //end anonymous namespace
+
void ScGridWindow::UpdateCursorOverlay()
{
ScDocument* pDoc = pViewData->GetDocument();
@@ -6147,6 +6165,7 @@ void ScGridWindow::UpdateSelectionOverlay()
{
ScTabViewShell* pViewShell = pViewData->GetViewShell();
pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, "EMPTY");
+ pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CELL_SELECTION_AREA, "EMPTY");
SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", "EMPTY");
}
@@ -6177,9 +6196,11 @@ void ScGridWindow::UpdateAutoFillOverlay()
SCCOL nX = aAutoMarkPos.Col();
SCROW nY = aAutoMarkPos.Row();
- if (!maVisibleRange.isInside(nX, nY))
+ if (!maVisibleRange.isInside(nX, nY) && !comphelper::LibreOfficeKit::isActive())
+ {
// Autofill mark is not visible. Bail out.
return;
+ }
SCTAB nTab = pViewData->GetTabNo();
ScDocument* pDoc = pViewData->GetDocument();
@@ -6212,8 +6233,11 @@ void ScGridWindow::UpdateAutoFillOverlay()
// #i70788# get the OverlayManager safely
rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager();
-
- if (xOverlayManager.is() && !comphelper::LibreOfficeKit::isActive())
+ if (comphelper::LibreOfficeKit::isActive()) // notify the LibreOfficeKit
+ {
+ updateLibreOfficeKitAutoFill(pViewData, aFillRect);
+ }
+ else if (xOverlayManager.is())
{
Color aHandleColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor );
if (pViewData->GetActivePart() != eWhich)