gtkmain: add support for GTK_DEBUG=invert-text-dir
authorChristian Hergert <chergert@redhat.com>
Wed, 1 Jun 2022 18:26:44 +0000 (11:26 -0700)
committerChristian Hergert <chergert@redhat.com>
Wed, 1 Jun 2022 18:26:44 +0000 (11:26 -0700)
This allows inverting the default text-direction in an application for
debugging, testing, and QA purposes. IDEs such as Builder may automate this
to encourage more application developers to test with a text-direction
different than their own.

gtk/gtkdebug.h
gtk/gtkmain.c

index f1cad3ea59aa98513be9afc253d73b267d08462a..a5b8eff2d1bf7766edc5245df67a5ff4471e467d 100644 (file)
@@ -82,6 +82,7 @@ typedef enum {
   GTK_DEBUG_BUILDER_OBJECTS = 1 << 16,
   GTK_DEBUG_A11Y            = 1 << 17,
   GTK_DEBUG_ICONFALLBACK    = 1 << 18,
+  GTK_DEBUG_INVERT_TEXT_DIR = 1 << 19,
 } GtkDebugFlags;
 
 #ifdef G_ENABLE_DEBUG
index 7cc39c35f859a86696c6380bc2ea082580a2562e..80c7542b03ed388e10a49576c20873f32ddabf68 100644 (file)
@@ -203,6 +203,7 @@ static const GdkDebugKey gtk_debug_keys[] = {
   { "snapshot", GTK_DEBUG_SNAPSHOT, "Generate debug render nodes" },
   { "accessibility", GTK_DEBUG_A11Y, "Information about accessibility state changes" },
   { "iconfallback", GTK_DEBUG_ICONFALLBACK, "Information about icon fallback" },
+  { "invert-text-dir", GTK_DEBUG_INVERT_TEXT_DIR, "Invert the default text direction" },
 };
 
 /* This checks to see if the process is running suid or sgid
@@ -523,6 +524,7 @@ static void
 do_post_parse_initialization (void)
 {
   GdkDisplayManager *display_manager;
+  GtkTextDirection text_dir;
   gint64 before G_GNUC_UNUSED;
 
   if (gtk_initialized)
@@ -536,7 +538,16 @@ do_post_parse_initialization (void)
   signal (SIGPIPE, SIG_IGN);
 #endif
 
-  gtk_widget_set_default_direction (gtk_get_locale_direction ());
+  text_dir = gtk_get_locale_direction ();
+
+  /* We always allow inverting the text direction, even in
+   * production builds, as SDK/IDE tooling may provide the
+   * ability for developers to test rtl/ltr inverted.
+   */
+  if (gtk_get_debug_flags () & GTK_DEBUG_INVERT_TEXT_DIR)
+    text_dir = (text_dir == GTK_TEXT_DIR_LTR) ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
+
+  gtk_widget_set_default_direction (text_dir);
 
   gdk_event_init_types ();