gtk/popover: Flip anchoring direction in RTL
authorKhalid Abu Shawarib <khalid.shawarib@gmail.com>
Sat, 27 May 2023 13:19:28 +0000 (13:19 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 27 May 2023 13:19:28 +0000 (13:19 +0000)
gtk/gtkpopover.c

index bd3bc0c004aaed51cfc33480119a8e80216de91a..5093962aa1a5d63df42e67760dca5b4bc01ef83b 100644 (file)
@@ -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: