From d329b00bda7461f6c4db738f69f00b8aaf27b6e1 Mon Sep 17 00:00:00 2001 From: Khalid Abu Shawarib Date: Sat, 27 May 2023 13:19:28 +0000 Subject: [PATCH] gtk/popover: Flip anchoring direction in RTL --- gtk/gtkpopover.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index bd3bc0c004..5093962aa1 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -483,6 +483,7 @@ create_popup_layout (GtkPopover *popover) GdkPopupLayout *layout; GtkCssStyle *style; GtkBorder shadow_width; + gboolean ltr = gtk_widget_get_direction (GTK_WIDGET (popover)) != GTK_TEXT_DIR_RTL; compute_surface_pointing_to (popover, &rect); @@ -545,13 +546,13 @@ create_popup_layout (GtkPopover *popover) switch (gtk_widget_get_halign (GTK_WIDGET (popover))) { case GTK_ALIGN_START: - parent_anchor = GDK_GRAVITY_NORTH_WEST; - surface_anchor = GDK_GRAVITY_SOUTH_WEST; + parent_anchor = ltr ? GDK_GRAVITY_NORTH_WEST : GDK_GRAVITY_NORTH_EAST; + surface_anchor = ltr ? GDK_GRAVITY_SOUTH_WEST : GDK_GRAVITY_SOUTH_EAST; break; case GTK_ALIGN_END: - parent_anchor = GDK_GRAVITY_NORTH_EAST; - surface_anchor = GDK_GRAVITY_SOUTH_EAST; + parent_anchor = ltr ? GDK_GRAVITY_NORTH_EAST : GDK_GRAVITY_NORTH_WEST; + surface_anchor = ltr ? GDK_GRAVITY_SOUTH_EAST : GDK_GRAVITY_SOUTH_WEST; break; case GTK_ALIGN_FILL: @@ -570,13 +571,13 @@ create_popup_layout (GtkPopover *popover) switch (gtk_widget_get_halign (GTK_WIDGET (popover))) { case GTK_ALIGN_START: - parent_anchor = GDK_GRAVITY_SOUTH_WEST; - surface_anchor = GDK_GRAVITY_NORTH_WEST; + parent_anchor = ltr ? GDK_GRAVITY_SOUTH_WEST : GDK_GRAVITY_SOUTH_EAST; + surface_anchor = ltr ? GDK_GRAVITY_NORTH_WEST : GDK_GRAVITY_NORTH_EAST; break; case GTK_ALIGN_END: - parent_anchor = GDK_GRAVITY_SOUTH_EAST; - surface_anchor = GDK_GRAVITY_NORTH_EAST; + parent_anchor = ltr ? GDK_GRAVITY_SOUTH_EAST : GDK_GRAVITY_SOUTH_WEST; + surface_anchor = ltr ? GDK_GRAVITY_NORTH_EAST : GDK_GRAVITY_NORTH_WEST; break; case GTK_ALIGN_FILL: -- 2.30.2