[gnome-shell] shell-global: Set high dpi scaling factor



commit ba459f4d202e6b0656994bea16edac00359edb1f
Author: Adel Gadllah <adel gadllah gmail com>
Date:   Wed Feb 12 19:18:37 2014 +0100

    shell-global: Set high dpi scaling factor
    
    Set the scaling factor based on the xsetting.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705410

 src/shell-global.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/src/shell-global.c b/src/shell-global.c
index cc82566..b2b6e52 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -746,6 +746,20 @@ global_stage_after_paint (gpointer data)
   return TRUE;
 }
 
+
+static void
+update_scale_factor (gpointer data)
+{
+  ShellGlobal *global = SHELL_GLOBAL (data);
+  ClutterStage *stage = CLUTTER_STAGE (global->stage);
+  StThemeContext *context = st_theme_context_get_for_stage (stage);
+  GValue value = G_VALUE_INIT;
+
+  g_value_init (&value, G_TYPE_INT);
+  gdk_screen_get_setting (global->gdk_screen, "gdk-window-scaling-factor", &value);
+  g_object_set (context, "scale-factor", g_value_get_int (&value), NULL);
+}
+
 /* This is an IBus workaround. The flow of events with IBus is that every time
  * it gets gets a key event, it:
  *
@@ -924,9 +938,19 @@ _shell_global_set_plugin (ShellGlobal *global,
   g_signal_connect (global->meta_display, "notify::focus-window",
                     G_CALLBACK (focus_window_changed), global);
 
+  /*
+   * We connect to GdkScreen's monitors-changed here to avoid
+   * a race condition. GdkScreen's monitors-changed signal is
+   * emitted *after* the xsetting has been updated.
+   */
+  g_signal_connect (global->gdk_screen, "monitors-changed",
+                    G_CALLBACK (update_scale_factor), global);
+
   gdk_event_handler_set (gnome_shell_gdk_event_handler, global, NULL);
 
   global->focus_manager = st_focus_manager_get_for_stage (global->stage);
+
+  update_scale_factor (global);
 }
 
 GjsContext *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]