Skip to content
  • Philippe Mathieu-Daudé's avatar
    28b58f19
    ui/gtk: Get display refresh rate with GDK version 3.22 or later · 28b58f19
    Philippe Mathieu-Daudé authored
    Commit c4c00922 introduced the use of the GdkMonitor API, which
    was introduced in GTK+ 3.22:
    https://developer.gnome.org/gdk3/stable/api-index-3-22.html#api-index-3.22
    
    Unfortunately this break building with older versions, as on Ubuntu
    Xenial which provides GTK+ 3.18:
    
      $ lsb_release -cd
      Description:    Ubuntu 16.04.5 LTS
      Codename:       xenial
    
      $ ./configure && make
      GTK support       yes (3.18.9)
      GTK GL support    no
      [...]
        CC      ui/gtk.o
      qemu/ui/gtk.c: In function ‘gd_vc_gfx_init’:
      qemu/ui/gtk.c:1973:5: error: unknown type name ‘GdkMonitor’
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
           ^
      qemu/ui/gtk.c:1973:27: error: implicit declaration of function ‘gdk_display_get_monitor_at_window’ [-Werror=implicit-function-declaration]
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
                                 ^
      qemu/ui/gtk.c:1973:5: error: nested extern declaration of ‘gdk_display_get_monitor_at_window’ [-Werror=nested-externs]
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
           ^
      qemu/ui/gtk.c:1973:27: error: initialization makes pointer from integer without a cast [-Werror=int-conversion]
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
                                 ^
      qemu/ui/gtk.c:2035:28: error: implicit declaration of function ‘gdk_monitor_get_refresh_rate’ [-Werror=implicit-function-declaration]
           refresh_rate_millihz = gdk_monitor_get_refresh_rate(monitor);
                                  ^
      qemu/ui/gtk.c:2035:5: error: nested extern declaration of ‘gdk_monitor_get_refresh_rate’ [-Werror=nested-externs]
           refresh_rate_millihz = gdk_monitor_get_refresh_rate(monitor);
           ^
      cc1: all warnings being treated as errors
      qemu/rules.mak:69: recipe for target 'ui/gtk.o' failed
      make: *** [ui/gtk.o] Error 1
    
    GTK+ provides convenient definition in <gdk/gdkversionmacros.h>
    (already include by <gdk/gdk.h>) to check which API are available.
    
    We only use the GdkMonitor API to get the monitor refresh rate.
    
    Extract this code as a new gd_refresh_rate_millihz() function,
    and check GDK_VERSION_3_22 is defined before calling its API.
    If it is not defined, return 0. This is safe and fixes our build
    failure (see https://travis-ci.org/qemu/qemu/builds/636992508
    
    ).
    
    Reported-by: Travis-CI
    Reviewed-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Message-id: 20200116115413.31650-1-philmd@redhat.com
    Fixes: c4c00922 (display/gtk: get proper refreshrate)
    Reviewed-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    28b58f19
    ui/gtk: Get display refresh rate with GDK version 3.22 or later
    Philippe Mathieu-Daudé authored
    Commit c4c00922 introduced the use of the GdkMonitor API, which
    was introduced in GTK+ 3.22:
    https://developer.gnome.org/gdk3/stable/api-index-3-22.html#api-index-3.22
    
    Unfortunately this break building with older versions, as on Ubuntu
    Xenial which provides GTK+ 3.18:
    
      $ lsb_release -cd
      Description:    Ubuntu 16.04.5 LTS
      Codename:       xenial
    
      $ ./configure && make
      GTK support       yes (3.18.9)
      GTK GL support    no
      [...]
        CC      ui/gtk.o
      qemu/ui/gtk.c: In function ‘gd_vc_gfx_init’:
      qemu/ui/gtk.c:1973:5: error: unknown type name ‘GdkMonitor’
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
           ^
      qemu/ui/gtk.c:1973:27: error: implicit declaration of function ‘gdk_display_get_monitor_at_window’ [-Werror=implicit-function-declaration]
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
                                 ^
      qemu/ui/gtk.c:1973:5: error: nested extern declaration of ‘gdk_display_get_monitor_at_window’ [-Werror=nested-externs]
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
           ^
      qemu/ui/gtk.c:1973:27: error: initialization makes pointer from integer without a cast [-Werror=int-conversion]
           GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
                                 ^
      qemu/ui/gtk.c:2035:28: error: implicit declaration of function ‘gdk_monitor_get_refresh_rate’ [-Werror=implicit-function-declaration]
           refresh_rate_millihz = gdk_monitor_get_refresh_rate(monitor);
                                  ^
      qemu/ui/gtk.c:2035:5: error: nested extern declaration of ‘gdk_monitor_get_refresh_rate’ [-Werror=nested-externs]
           refresh_rate_millihz = gdk_monitor_get_refresh_rate(monitor);
           ^
      cc1: all warnings being treated as errors
      qemu/rules.mak:69: recipe for target 'ui/gtk.o' failed
      make: *** [ui/gtk.o] Error 1
    
    GTK+ provides convenient definition in <gdk/gdkversionmacros.h>
    (already include by <gdk/gdk.h>) to check which API are available.
    
    We only use the GdkMonitor API to get the monitor refresh rate.
    
    Extract this code as a new gd_refresh_rate_millihz() function,
    and check GDK_VERSION_3_22 is defined before calling its API.
    If it is not defined, return 0. This is safe and fixes our build
    failure (see https://travis-ci.org/qemu/qemu/builds/636992508
    
    ).
    
    Reported-by: Travis-CI
    Reviewed-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Message-id: 20200116115413.31650-1-philmd@redhat.com
    Fixes: c4c00922 (display/gtk: get proper refreshrate)
    Reviewed-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Loading