aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/console.c6
-rw-r--r--ui/gtk-egl.c4
-rw-r--r--ui/gtk-gl-area.c3
-rw-r--r--ui/gtk.c45
4 files changed, 29 insertions, 29 deletions
diff --git a/ui/console.c b/ui/console.c
index 36c80cd1de..9331b85203 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -160,7 +160,6 @@ static void gui_update(void *opaque)
uint64_t dcl_interval;
DisplayState *ds = opaque;
DisplayChangeListener *dcl;
- QemuConsole *con;
ds->refreshing = true;
dpy_refresh(ds);
@@ -175,11 +174,6 @@ static void gui_update(void *opaque)
}
if (ds->update_interval != interval) {
ds->update_interval = interval;
- QTAILQ_FOREACH(con, &consoles, next) {
- if (con->hw_ops->update_interval) {
- con->hw_ops->update_interval(con->hw, interval);
- }
- }
trace_console_refresh(interval);
}
ds->last_update = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index e3bd4bc274..b5bffbab25 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -140,8 +140,8 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
{
VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
- vc->gfx.dcl.update_interval = gd_monitor_update_interval(
- vc->window ? vc->window : vc->gfx.drawing_area);
+ gd_update_monitor_refresh_rate(
+ vc, vc->window ? vc->window : vc->gfx.drawing_area);
if (!vc->gfx.esurface) {
gd_egl_init(vc);
diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c
index 2e0129c28c..682638a197 100644
--- a/ui/gtk-gl-area.c
+++ b/ui/gtk-gl-area.c
@@ -121,8 +121,7 @@ void gd_gl_area_refresh(DisplayChangeListener *dcl)
{
VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
- vc->gfx.dcl.update_interval = gd_monitor_update_interval(
- vc->window ? vc->window : vc->gfx.drawing_area);
+ gd_update_monitor_refresh_rate(vc, vc->window ? vc->window : vc->gfx.drawing_area);
if (!vc->gfx.gls) {
if (!gtk_widget_get_realized(vc->gfx.drawing_area)) {
diff --git a/ui/gtk.c b/ui/gtk.c
index c57c36749e..2a791dd2aa 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -710,11 +710,20 @@ static gboolean gd_window_close(GtkWidget *widget, GdkEvent *event,
return TRUE;
}
-static void gd_set_ui_info(VirtualConsole *vc, gint width, gint height)
+static void gd_set_ui_refresh_rate(VirtualConsole *vc, int refresh_rate)
{
QemuUIInfo info;
- memset(&info, 0, sizeof(info));
+ info = *dpy_get_ui_info(vc->gfx.dcl.con);
+ info.refresh_rate = refresh_rate;
+ dpy_set_ui_info(vc->gfx.dcl.con, &info, true);
+}
+
+static void gd_set_ui_size(VirtualConsole *vc, gint width, gint height)
+{
+ QemuUIInfo info;
+
+ info = *dpy_get_ui_info(vc->gfx.dcl.con);
info.width = width;
info.height = height;
dpy_set_ui_info(vc->gfx.dcl.con, &info, true);
@@ -738,33 +747,32 @@ static void gd_resize_event(GtkGLArea *area,
{
VirtualConsole *vc = (void *)opaque;
- gd_set_ui_info(vc, width, height);
+ gd_set_ui_size(vc, width, height);
}
#endif
-/*
- * If available, return the update interval of the monitor in ms,
- * else return 0 (the default update interval).
- */
-int gd_monitor_update_interval(GtkWidget *widget)
+void gd_update_monitor_refresh_rate(VirtualConsole *vc, GtkWidget *widget)
{
#ifdef GDK_VERSION_3_22
GdkWindow *win = gtk_widget_get_window(widget);
+ int refresh_rate;
if (win) {
GdkDisplay *dpy = gtk_widget_get_display(widget);
GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
- int refresh_rate = gdk_monitor_get_refresh_rate(monitor); /* [mHz] */
-
- if (refresh_rate) {
- /* T = 1 / f = 1 [s*Hz] / f = 1000*1000 [ms*mHz] / f */
- return MIN(1000 * 1000 / refresh_rate,
- GUI_REFRESH_INTERVAL_DEFAULT);
- }
+ refresh_rate = gdk_monitor_get_refresh_rate(monitor); /* [mHz] */
+ } else {
+ refresh_rate = 0;
}
+
+ gd_set_ui_refresh_rate(vc, refresh_rate);
+
+ /* T = 1 / f = 1 [s*Hz] / f = 1000*1000 [ms*mHz] / f */
+ vc->gfx.dcl.update_interval = refresh_rate ?
+ MIN(1000 * 1000 / refresh_rate, GUI_REFRESH_INTERVAL_DEFAULT) :
+ GUI_REFRESH_INTERVAL_DEFAULT;
#endif
- return 0;
}
static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque)
@@ -801,8 +809,7 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque)
return FALSE;
}
- vc->gfx.dcl.update_interval =
- gd_monitor_update_interval(vc->window ? vc->window : s->window);
+ gd_update_monitor_refresh_rate(vc, vc->window ? vc->window : s->window);
fbw = surface_width(vc->gfx.ds);
fbh = surface_height(vc->gfx.ds);
@@ -1691,7 +1698,7 @@ static gboolean gd_configure(GtkWidget *widget,
{
VirtualConsole *vc = opaque;
- gd_set_ui_info(vc, cfg->width, cfg->height);
+ gd_set_ui_size(vc, cfg->width, cfg->height);
return FALSE;
}