From 9e05e87b5ce23ed2d748d790dde7e7d0de25560d Mon Sep 17 00:00:00 2001 From: Adel Gadllah Date: Tue, 18 Feb 2014 23:25:10 +0100 Subject: [PATCH] hdpi: Revert hacks Revert the hacks that where added in response to a bug caused by commit ba459f4d202 https://bugzilla.gnome.org/show_bug.cgi?id=705410 --- js/ui/layout.js | 20 -------------------- src/shell-global.c | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/js/ui/layout.js b/js/ui/layout.js index 59dcc0390..17073a6db 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -31,9 +31,6 @@ const MESSAGE_TRAY_PRESSURE_TIMEOUT = 1000; // ms const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms -// We scale up when the dpi is higher then this (same value used by gsd) -const HIGH_DPI_LIMIT = 192; - function isPopupMetaWindow(actor) { switch(actor.meta_window.get_window_type()) { case Meta.WindowType.DROPDOWN_MENU: @@ -487,25 +484,8 @@ const LayoutManager = new Lang.Class({ return false; }, - _updateScaling: function() { - let primary = this.monitors[this.primaryIndex]; - let width_mm = global.gdk_screen.get_monitor_width_mm(this.primaryIndex); - let height_mm = global.gdk_screen.get_monitor_height_mm(this.primaryIndex); - if (width_mm == 0 || height_mm == 0) { - St.ThemeContext.get_for_stage(global.stage).scale_factor = 1; - return; - } - let dpi_x = primary.width / (width_mm / 25.4); - let dpi_y = primary.height / (height_mm / 25.4); - if (dpi_x > HIGH_DPI_LIMIT && dpi_y > HIGH_DPI_LIMIT) - St.ThemeContext.get_for_stage(global.stage).scale_factor = 2; - else - St.ThemeContext.get_for_stage(global.stage).scale_factor = 1; - }, - _monitorsChanged: function() { this._updateMonitors(); - this._updateScaling(); this._updateBoxes(); this._updateTrayBarrier(); this._updateHotCorners(); diff --git a/src/shell-global.c b/src/shell-global.c index e711dff09..8064d3cb8 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -739,6 +739,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: * @@ -917,9 +931,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 *