Kaydet (Commit) 6fcc60b4 authored tarafından Maxim Monastirsky's avatar Maxim Monastirsky

gtk3: Correctly mirror popovers in rtl ui

e.g. formula prompt or fill series in Calc. The reason is that for
this particular vcl::Window, HasMirroredGraphics() != IsRTLEnabled().

Change-Id: Icd4bb2d22ba77d64c32b243d9c07745824e5e558
Reviewed-on: https://gerrit.libreoffice.org/55936
Tested-by: Jenkins
Reviewed-by: 's avatarMaxim Monastirsky <momonasmon@gmail.com>
üst bf1f49c8
...@@ -247,13 +247,13 @@ public: ...@@ -247,13 +247,13 @@ public:
} }
// return !0 to indicate popovers are shown natively, 0 otherwise // return !0 to indicate popovers are shown natively, 0 otherwise
virtual void* ShowPopover(const OUString& /*rHelpText*/, const tools::Rectangle& /*rHelpArea*/, QuickHelpFlags /*nFlags*/) virtual void* ShowPopover(const OUString& /*rHelpText*/, vcl::Window* /*pParent*/, const tools::Rectangle& /*rHelpArea*/, QuickHelpFlags /*nFlags*/)
{ {
return nullptr; return nullptr;
} }
// return true to indicate popovers are shown natively, false otherwise // return true to indicate popovers are shown natively, false otherwise
virtual bool UpdatePopover(void* /*nId*/, const OUString& /*rHelpText*/, const tools::Rectangle& /*rHelpArea*/) virtual bool UpdatePopover(void* /*nId*/, const OUString& /*rHelpText*/, vcl::Window* /*pParent*/, const tools::Rectangle& /*rHelpArea*/)
{ {
return false; return false;
} }
......
...@@ -538,8 +538,8 @@ public: ...@@ -538,8 +538,8 @@ public:
virtual void PositionByToolkit(const tools::Rectangle& rRect, FloatWinPopupFlags nFlags) override; virtual void PositionByToolkit(const tools::Rectangle& rRect, FloatWinPopupFlags nFlags) override;
virtual void SetModal(bool bModal) override; virtual void SetModal(bool bModal) override;
virtual bool ShowTooltip(const OUString& rHelpText, const tools::Rectangle& rHelpArea) override; virtual bool ShowTooltip(const OUString& rHelpText, const tools::Rectangle& rHelpArea) override;
virtual void* ShowPopover(const OUString& rHelpText, const tools::Rectangle& rHelpArea, QuickHelpFlags nFlags) override; virtual void* ShowPopover(const OUString& rHelpText, vcl::Window* pParent, const tools::Rectangle& rHelpArea, QuickHelpFlags nFlags) override;
virtual bool UpdatePopover(void* nId, const OUString& rHelpText, const tools::Rectangle& rHelpArea) override; virtual bool UpdatePopover(void* nId, const OUString& rHelpText, vcl::Window* pParent, const tools::Rectangle& rHelpArea) override;
virtual bool HidePopover(void* nId) override; virtual bool HidePopover(void* nId) override;
virtual weld::Window* GetFrameWeld() const override; virtual weld::Window* GetFrameWeld() const override;
#endif #endif
......
...@@ -198,7 +198,7 @@ void Help::HideBalloonAndQuickHelp() ...@@ -198,7 +198,7 @@ void Help::HideBalloonAndQuickHelp()
void* Help::ShowPopover(vcl::Window* pParent, const tools::Rectangle& rScreenRect, void* Help::ShowPopover(vcl::Window* pParent, const tools::Rectangle& rScreenRect,
const OUString& rText, QuickHelpFlags nStyle) const OUString& rText, QuickHelpFlags nStyle)
{ {
void* nId = pParent->ImplGetFrame()->ShowPopover(rText, rScreenRect, nStyle); void* nId = pParent->ImplGetFrame()->ShowPopover(rText, pParent, rScreenRect, nStyle);
if (nId) if (nId)
{ {
//popovers are handled natively, return early //popovers are handled natively, return early
...@@ -218,7 +218,7 @@ void* Help::ShowPopover(vcl::Window* pParent, const tools::Rectangle& rScreenRec ...@@ -218,7 +218,7 @@ void* Help::ShowPopover(vcl::Window* pParent, const tools::Rectangle& rScreenRec
void Help::UpdatePopover(void* nId, vcl::Window* pParent, const tools::Rectangle& rScreenRect, void Help::UpdatePopover(void* nId, vcl::Window* pParent, const tools::Rectangle& rScreenRect,
const OUString& rText) const OUString& rText)
{ {
if (pParent->ImplGetFrame()->UpdatePopover(nId, rText, rScreenRect)) if (pParent->ImplGetFrame()->UpdatePopover(nId, rText, pParent, rScreenRect))
{ {
//popovers are handled natively, return early //popovers are handled natively, return early
return; return;
......
...@@ -2497,10 +2497,10 @@ bool GtkSalFrame::ShowTooltip(const OUString& rHelpText, const tools::Rectangle& ...@@ -2497,10 +2497,10 @@ bool GtkSalFrame::ShowTooltip(const OUString& rHelpText, const tools::Rectangle&
namespace namespace
{ {
void set_pointing_to(GtkPopover *pPopOver, const tools::Rectangle& rHelpArea, const SalFrameGeometry& rGeometry) void set_pointing_to(GtkPopover *pPopOver, vcl::Window* pParent, const tools::Rectangle& rHelpArea, const SalFrameGeometry& rGeometry)
{ {
GdkRectangle aRect; GdkRectangle aRect;
aRect.x = rHelpArea.Left(); aRect.x = FloatingWindow::ImplConvertToAbsPos(pParent, rHelpArea).Left() - rGeometry.nX;
aRect.y = rHelpArea.Top(); aRect.y = rHelpArea.Top();
aRect.width = 1; aRect.width = 1;
aRect.height = 1; aRect.height = 1;
...@@ -2518,14 +2518,11 @@ namespace ...@@ -2518,14 +2518,11 @@ namespace
break; break;
} }
if (AllSettings::GetLayoutRTL())
aRect.x = rGeometry.nWidth-aRect.width-1-aRect.x;
gtk_popover_set_pointing_to(pPopOver, &aRect); gtk_popover_set_pointing_to(pPopOver, &aRect);
} }
} }
void* GtkSalFrame::ShowPopover(const OUString& rHelpText, const tools::Rectangle& rHelpArea, QuickHelpFlags nFlags) void* GtkSalFrame::ShowPopover(const OUString& rHelpText, vcl::Window* pParent, const tools::Rectangle& rHelpArea, QuickHelpFlags nFlags)
{ {
GtkWidget *pWidget = gtk_popover_new(getMouseEventWidget()); GtkWidget *pWidget = gtk_popover_new(getMouseEventWidget());
OString sUTF = OUStringToOString(rHelpText, RTL_TEXTENCODING_UTF8); OString sUTF = OUStringToOString(rHelpText, RTL_TEXTENCODING_UTF8);
...@@ -2541,7 +2538,7 @@ void* GtkSalFrame::ShowPopover(const OUString& rHelpText, const tools::Rectangle ...@@ -2541,7 +2538,7 @@ void* GtkSalFrame::ShowPopover(const OUString& rHelpText, const tools::Rectangle
else if (nFlags & QuickHelpFlags::Right) else if (nFlags & QuickHelpFlags::Right)
gtk_popover_set_position(GTK_POPOVER(pWidget), GTK_POS_LEFT); gtk_popover_set_position(GTK_POPOVER(pWidget), GTK_POS_LEFT);
set_pointing_to(GTK_POPOVER(pWidget), rHelpArea, maGeometry); set_pointing_to(GTK_POPOVER(pWidget), pParent, rHelpArea, maGeometry);
gtk_popover_set_modal(GTK_POPOVER(pWidget), false); gtk_popover_set_modal(GTK_POPOVER(pWidget), false);
...@@ -2550,11 +2547,11 @@ void* GtkSalFrame::ShowPopover(const OUString& rHelpText, const tools::Rectangle ...@@ -2550,11 +2547,11 @@ void* GtkSalFrame::ShowPopover(const OUString& rHelpText, const tools::Rectangle
return pWidget; return pWidget;
} }
bool GtkSalFrame::UpdatePopover(void* nId, const OUString& rHelpText, const tools::Rectangle& rHelpArea) bool GtkSalFrame::UpdatePopover(void* nId, const OUString& rHelpText, vcl::Window* pParent, const tools::Rectangle& rHelpArea)
{ {
GtkWidget *pWidget = static_cast<GtkWidget*>(nId); GtkWidget *pWidget = static_cast<GtkWidget*>(nId);
set_pointing_to(GTK_POPOVER(pWidget), rHelpArea, maGeometry); set_pointing_to(GTK_POPOVER(pWidget), pParent, rHelpArea, maGeometry);
GtkWidget *pLabel = gtk_bin_get_child(GTK_BIN(pWidget)); GtkWidget *pLabel = gtk_bin_get_child(GTK_BIN(pWidget));
OString sUTF = OUStringToOString(rHelpText, RTL_TEXTENCODING_UTF8); OString sUTF = OUStringToOString(rHelpText, RTL_TEXTENCODING_UTF8);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment