chart2/source/controller/main/ChartController_Window.cxx | 14 ++++++++++++++ vcl/source/window/floatwin.cxx | 11 +++++++---- 2 files changed, 21 insertions(+), 4 deletions(-)
New commits: commit fc409bae21ff400736278294ab6a82a5f3cedfa7 Author: Marco Cecchetti <marco.cecche...@collabora.com> Date: Wed Apr 18 18:31:00 2018 +0200 lok: charts context menu was misplaced + wrong LogicToLogic conversion Chart context menu was misplaced since the context menu expects a position related to the document window not to the chart window. Moreover map mode is not enabled for chart window, that leads to use the LogicToLogic routine which unfortunately provides a wrong pixel to twips conversion. In fact we gets a 20 twips per pixel conversion since LogicToLogic uses a fixed 72 dpi value, instead of a correctly computed output device real dpi or at least the most commonly used 96 dpi value. Change-Id: Idb4220d03fddd4b6d643c1c0fb52754bafed7e36 Reviewed-on: https://gerrit.libreoffice.org/53118 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx index 58f7206554ec..6bf0446cc24c 100644 --- a/chart2/source/controller/main/ChartController_Window.cxx +++ b/chart2/source/controller/main/ChartController_Window.cxx @@ -63,6 +63,7 @@ #include <toolkit/awt/vclxmenu.hxx> #include <sfx2/viewsh.hxx> +#include <sfx2/ipclient.hxx> #include <svx/svxids.hrc> #include <svx/ActionDescriptionProvider.hxx> #include <svx/obj3d.hxx> @@ -1238,6 +1239,19 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) { PopupMenu* pPopupMenu = static_cast<PopupMenu*>(VCLXMenu::GetImplementation(xPopupMenu)->GetMenu()); pPopupMenu->SetLOKNotifier(SfxViewShell::Current()); + + // the context menu expects a position related to the document window, + // not to the chart window + SfxInPlaceClient* pIPClient = SfxViewShell::Current()->GetIPClient(); + if (pIPClient) + { + vcl::Window* pRootWin = pIPClient->GetEditWin(); + if (pRootWin) + { + Point aOffset = m_pChartWindow->GetOffsetPixelFrom(*pRootWin); + aPos += aOffset; + } + } } xPopupController->setPopupMenu( xPopupMenu ); diff --git a/vcl/source/window/floatwin.cxx b/vcl/source/window/floatwin.cxx index 2a9b7aab26cf..302703bf4e8a 100644 --- a/vcl/source/window/floatwin.cxx +++ b/vcl/source/window/floatwin.cxx @@ -445,10 +445,13 @@ Point FloatingWindow::ImplCalcPos(vcl::Window* pWindow, if (bLOKActive && pLOKTwipsPos) { - if (pW->IsMapModeEnabled()) - *pLOKTwipsPos = pW->PixelToLogic(aPos, MapMode(MapUnit::MapTwip)); - else - *pLOKTwipsPos = pW->LogicToLogic(aPos, pW->GetMapMode(), MapMode(MapUnit::MapTwip)); + // if we use pW->LogicToLogic(aPos, pW->GetMapMode(), MapMode(MapUnit::MapTwip)), + // when map mode is not enabled, we gets a 20 twips per pixel conversion + // since LogicToLogic uses a fixed 72 dpi value, instead of a correctly + // computed output device dpi or at least the most commonly used 96 dpi + // value; and anyway the following is what we already do in + // ScGridWindow::LogicInvalidate when map mode is not enabled. + *pLOKTwipsPos = pW->PixelToLogic(aPos, MapMode(MapUnit::MapTwip)); } // caller expects coordinates relative to top-level win _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits