[gtk+/wip/matthiasc/monitor] x11: fill in refresh rate
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/monitor] x11: fill in refresh rate
- Date: Mon, 4 Apr 2016 02:38:41 +0000 (UTC)
commit 7901fbfcf5da07933d4255187af8d5a6edf4d261
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Apr 3 20:22:54 2016 -0400
x11: fill in refresh rate
gdk/gdkmonitor.c | 1 -
gdk/x11/gdkscreen-x11.c | 33 +++++++++++++++++++++++++++++++++
2 files changed, 33 insertions(+), 1 deletions(-)
---
diff --git a/gdk/gdkmonitor.c b/gdk/gdkmonitor.c
index c7190d6..6d04e7d 100644
--- a/gdk/gdkmonitor.c
+++ b/gdk/gdkmonitor.c
@@ -30,7 +30,6 @@
* - monitor type (laptop, projector, ...)
* - consider vfuncs instead of baseclass storage
* - provide a persistent id (if the backend allows)
- * - x11: refresh rate
* - x11: hidpi scaling
* - convert win32
* - convert quartz
diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
index a022213..4dd68cc 100644
--- a/gdk/x11/gdkscreen-x11.c
+++ b/gdk/x11/gdkscreen-x11.c
@@ -525,6 +525,7 @@ init_randr15 (GdkScreen *screen, gboolean *changed)
GdkX11Monitor *monitor;
GdkRectangle geometry;
char *name;
+ int refresh_rate = 0;
gdk_x11_display_error_trap_push (display);
output_info = XRRGetOutputInfo (x11_screen->xdisplay, resources, output);
@@ -546,6 +547,24 @@ init_randr15 (GdkScreen *screen, gboolean *changed)
if (first_output == None)
first_output = output;
+ if (output_info->crtc)
+ {
+ XRRCrtcInfo *crtc = XRRGetCrtcInfo (x11_screen->xdisplay, resources, output_info->crtc);
+ int j;
+
+ for (j = 0; j < resources->nmode; j++)
+ {
+ XRRModeInfo *xmode = &resources->modes[j];
+ if (xmode->id == crtc->mode)
+ {
+ refresh_rate = (1000 * xmode->dotClock) / (xmode->hTotal *xmode->vTotal);
+ break;
+ }
+ }
+
+ XRRFreeCrtcInfo (crtc);
+ }
+
monitor = find_monitor_by_output (x11_screen, output);
if (monitor)
monitor->remove = FALSE;
@@ -582,6 +601,7 @@ init_randr15 (GdkScreen *screen, gboolean *changed)
rr_monitors[i].mheight);
gdk_monitor_set_subpixel_layout (GDK_MONITOR (monitor),
translate_subpixel_order (output_info->subpixel_order));
+ gdk_monitor_set_refresh_rate (GDK_MONITOR (monitor), refresh_rate);
gdk_monitor_set_model (GDK_MONITOR (monitor), name);
g_free (name);
@@ -708,6 +728,18 @@ init_randr13 (GdkScreen *screen, gboolean *changed)
XRRCrtcInfo *crtc = XRRGetCrtcInfo (x11_screen->xdisplay, resources, output_info->crtc);
char *name;
GdkRectangle geometry;
+ int j;
+ int refresh_rate = 0;
+
+ for (j = 0; j < resources->nmode; j++)
+ {
+ XRRModeInfo *xmode = &resources->modes[j];
+ if (xmode->id == crtc->mode)
+ {
+ refresh_rate = (1000 * xmode->dotClock) / (xmode->hTotal *xmode->vTotal);
+ break;
+ }
+ }
monitor = find_monitor_by_output (x11_screen, output);
if (monitor)
@@ -742,6 +774,7 @@ init_randr13 (GdkScreen *screen, gboolean *changed)
output_info->mm_height);
gdk_monitor_set_subpixel_layout (GDK_MONITOR (monitor),
translate_subpixel_order (output_info->subpixel_order));
+ gdk_monitor_set_refresh_rate (GDK_MONITOR (monitor), refresh_rate);
gdk_monitor_set_model (GDK_MONITOR (monitor), name);
g_free (name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]