[gnome-settings-daemon/gnome-3-10] xsettings: Check native resolution for scaling factor
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon/gnome-3-10] xsettings: Check native resolution for scaling factor
- Date: Fri, 14 Mar 2014 14:42:47 +0000 (UTC)
commit e03adb23e395d4023a96ba79180913d99438a115
Author: Bastien Nocera <hadess hadess net>
Date: Wed Nov 20 13:08:21 2013 +0100
xsettings: Check native resolution for scaling factor
Check whether the panel is running at its native resolution before
applying the scaling factor. We don't want hi-dpi screens running
below native resolution to have a high scaling factor.
https://bugzilla.gnome.org/show_bug.cgi?id=709859
configure.ac | 2 +-
plugins/xsettings/gsd-xsettings-manager.c | 53 +++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 1 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 9f3b7ed..05cc224 100644
--- a/configure.ac
+++ b/configure.ac
@@ -173,7 +173,7 @@ dnl ---------------------------------------------------------------------------
dnl - xsettings
dnl ---------------------------------------------------------------------------
-PKG_CHECK_MODULES(XSETTINGS, fontconfig)
+PKG_CHECK_MODULES(XSETTINGS, fontconfig gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
dnl ---------------------------------------------------------------------------
dnl - Keyboard plugin stuff
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
index 180032d..0f29a30 100644
--- a/plugins/xsettings/gsd-xsettings-manager.c
+++ b/plugins/xsettings/gsd-xsettings-manager.c
@@ -38,6 +38,12 @@
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+
+#include <libgnome-desktop/gnome-rr-config.h>
+#include <libgnome-desktop/gnome-rr.h>
+#include <libgnome-desktop/gnome-pnp-ids.h>
+
#include "gnome-settings-profile.h"
#include "gsd-enums.h"
#include "gsd-xsettings-manager.h"
@@ -424,6 +430,48 @@ get_dpi_from_gsettings (GnomeXSettingsManager *manager)
return dpi * factor;
}
+static gboolean
+primary_monitor_at_native_resolution (void)
+{
+ GnomeRRScreen *screen;
+ GnomeRROutput *primary = NULL;
+ GnomeRROutput **outputs;
+ int current_width, current_height;
+ int pref_width, pref_height;
+ gboolean native = TRUE;
+ GnomeRRMode *mode;
+ guint i;
+
+ screen = gnome_rr_screen_new (gdk_screen_get_default (), NULL);
+ if (screen == NULL)
+ goto out;
+
+ outputs = gnome_rr_screen_list_outputs (screen);
+ if (outputs == NULL || outputs[0] == NULL)
+ goto out;
+ for (i = 0; outputs[i] != NULL; i++) {
+ if (gnome_rr_output_get_is_primary (outputs[i])) {
+ primary = outputs[i];
+ break;
+ }
+ }
+ if (primary == NULL)
+ primary = outputs[0];
+
+ mode = gnome_rr_output_get_current_mode (primary);
+ current_width = gnome_rr_mode_get_width (mode);
+ current_height = gnome_rr_mode_get_height (mode);
+ mode = gnome_rr_output_get_preferred_mode (primary);
+ pref_width = gnome_rr_mode_get_width (mode);
+ pref_height = gnome_rr_mode_get_height (mode);
+ if (current_width != pref_width || current_height != pref_height)
+ native = FALSE;
+
+out:
+ g_clear_object (&screen);
+ return native;
+}
+
static int
get_window_scale (GnomeXSettingsManager *manager)
{
@@ -442,6 +490,10 @@ get_window_scale (GnomeXSettingsManager *manager)
if (window_scale == 0) {
int primary;
+ window_scale = 1;
+ if (!primary_monitor_at_native_resolution ())
+ goto out;
+
display = gdk_display_get_default ();
screen = gdk_display_get_default_screen (display);
primary = gdk_screen_get_primary_monitor (screen);
@@ -462,6 +514,7 @@ get_window_scale (GnomeXSettingsManager *manager)
}
}
+out:
return window_scale;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]