diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-05-30 21:28:22 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-05-31 10:13:15 +0200 |
commit | c1dc72e9e853a80ce0876df6958c18bb881deb85 (patch) | |
tree | 20e2d97f27e924b315f70f9fd2f531af7c6f492d | |
parent | 0ee6b72bf50337157e603d42e33b4a1e6a2ec715 (diff) |
RTL support for custom widgets
Change-Id: I34038f047c002a1ec1276f8c523db0e1c4d29065
Reviewed-on: https://gerrit.libreoffice.org/55100
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 54444d801c5c..d13cb73df419 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -1689,6 +1689,8 @@ public: { GdkRectangle aRect{static_cast<int>(rRect.Left()), static_cast<int>(rRect.Top()), static_cast<int>(rRect.GetWidth()), static_cast<int>(rRect.GetHeight())}; + if (AllSettings::GetLayoutRTL()) + aRect.x = gtk_widget_get_allocated_width(pWidget) - aRect.width - 1 - aRect.x; gtk_menu_popup_at_rect(m_pMenu, gtk_widget_get_window(pWidget), &aRect, GDK_GRAVITY_NORTH_WEST, GDK_GRAVITY_NORTH_WEST, nullptr); } else @@ -3741,7 +3743,7 @@ private: { m_aStyleUpdatedHdl.Call(*this); } - static gboolean signalQueryTooltip(GtkWidget*, gint x, gint y, + static gboolean signalQueryTooltip(GtkWidget* pGtkWidget, gint x, gint y, gboolean /*keyboard_mode*/, GtkTooltip *tooltip, gpointer widget) { @@ -3756,6 +3758,8 @@ private: aGdkHelpArea.y = aHelpArea.Top(); aGdkHelpArea.width = aHelpArea.GetWidth(); aGdkHelpArea.height = aHelpArea.GetHeight(); + if (AllSettings::GetLayoutRTL()) + aGdkHelpArea.x = gtk_widget_get_allocated_width(pGtkWidget) - aGdkHelpArea.width - 1 - aGdkHelpArea.x; gtk_tooltip_set_tip_area(tooltip, &aGdkHelpArea); return true; } @@ -3816,6 +3820,8 @@ private: } Point aPos(pEvent->x, pEvent->y); + if (AllSettings::GetLayoutRTL()) + aPos.setX(gtk_widget_get_allocated_width(m_pWidget) - 1 - aPos.X()); sal_uInt32 nModCode = GtkSalFrame::GetMouseModCode(pEvent->state); sal_uInt16 nCode = m_nLastMouseButton | (nModCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)); MouseEvent aMEvt(aPos, nClicks, ImplGetMouseButtonMode(m_nLastMouseButton, nModCode), nCode, nCode); @@ -3836,6 +3842,8 @@ private: bool signal_motion(GdkEventMotion* pEvent) { Point aPos(pEvent->x, pEvent->y); + if (AllSettings::GetLayoutRTL()) + aPos.setX(gtk_widget_get_allocated_width(m_pWidget) - 1 - aPos.X()); sal_uInt32 nModCode = GtkSalFrame::GetMouseModCode(pEvent->state); sal_uInt16 nCode = m_nLastMouseButton | (nModCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)); MouseEvent aMEvt(aPos, 0, ImplGetMouseMoveMode(nModCode), nCode, nCode); @@ -3890,6 +3898,7 @@ public: { gtk_widget_set_has_tooltip(m_pWidget, true); g_object_set_data(G_OBJECT(m_pDrawingArea), "g-lo-GtkInstanceDrawingArea", this); + m_xDevice->EnableRTL(get_direction()); } AtkObject* GetAtkObject(AtkObject* pDefaultAccessible) @@ -3903,6 +3912,12 @@ public: return m_pAccessible; } + virtual void set_direction(bool bRTL) override + { + GtkInstanceWidget::set_direction(bRTL); + m_xDevice->EnableRTL(bRTL); + } + virtual void queue_draw() override { gtk_widget_queue_draw(GTK_WIDGET(m_pDrawingArea)); |