From 10f2b11fda3cd3d92d8333babbeb4e8ca2dbea16 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 27 May 2020 14:53:10 -0400 Subject: [PATCH] x11: Add back support for the damage extension commit 14bf58ec5dfdf19e3ca603b977626608dafc729b dropped support for using the DAMAGE extension since there was no code that needed it. We're going to need it again, however, to address an NVidia vendor driver issue. This commit does the plumbing to add it back. --- config.h.meson | 3 +++ gdk/x11/gdkdisplay-x11.c | 8 ++++++++ gdk/x11/gdkdisplay-x11.h | 6 ++++++ gdk/x11/meson.build | 1 + meson.build | 5 +++++ 5 files changed, 23 insertions(+) diff --git a/config.h.meson b/config.h.meson index ee5ddbf7b3..d8d5228693 100644 --- a/config.h.meson +++ b/config.h.meson @@ -123,6 +123,9 @@ /* Have the Xcursor library */ #mesondefine HAVE_XCURSOR +/* Have the XDAMAGE X extension */ +#mesondefine HAVE_XDAMAGE + /* Have the XFIXES X extension */ #mesondefine HAVE_XFIXES diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c index 700ffb2d28..6acf25c37d 100644 --- a/gdk/x11/gdkdisplay-x11.c +++ b/gdk/x11/gdkdisplay-x11.c @@ -1603,6 +1603,14 @@ gdk_x11_display_open (const gchar *display_name) } #endif +#ifdef HAVE_XDAMAGE + display_x11->have_damage = FALSE; + if (XDamageQueryExtension (display_x11->xdisplay, + &display_x11->damage_event_base, + &display_x11->damage_error_base)) + display_x11->have_damage = TRUE; +#endif + display->clipboard = gdk_x11_clipboard_new (display, "CLIPBOARD"); display->primary_clipboard = gdk_x11_clipboard_new (display, "PRIMARY"); diff --git a/gdk/x11/gdkdisplay-x11.h b/gdk/x11/gdkdisplay-x11.h index 272646b65f..38ddda5d60 100644 --- a/gdk/x11/gdkdisplay-x11.h +++ b/gdk/x11/gdkdisplay-x11.h @@ -149,6 +149,12 @@ struct _GdkX11Display guint has_glx_multisample : 1; guint has_glx_visual_rating : 1; guint has_glx_create_es2_context : 1; + +#ifdef HAVE_XDAMAGE + gint damage_event_base; + gint damage_error_base; + guint have_damage; +#endif }; struct _GdkX11DisplayClass diff --git a/gdk/x11/meson.build b/gdk/x11/meson.build index c3f2c54b73..f846450c3b 100644 --- a/gdk/x11/meson.build +++ b/gdk/x11/meson.build @@ -65,6 +65,7 @@ gdk_x11_deps = [ xext_dep, x11_dep, xcursor_dep, + xdamage_dep, xfixes_dep, xcomposite_dep, xrandr_dep, diff --git a/meson.build b/meson.build index 9295163603..a8a3c7cdbe 100644 --- a/meson.build +++ b/meson.build @@ -501,6 +501,7 @@ if x11_enabled xi_dep = dependency('xi') xext_dep = dependency('xext') xcursor_dep = dependency('xcursor', required: false) + xdamage_dep = dependency('xdamage', required: false) xfixes_dep = dependency('xfixes', required: false) xcomposite_dep = dependency('xcomposite', required: false) fontconfig_dep = dependency('fontconfig') @@ -513,6 +514,9 @@ if x11_enabled if xcursor_dep.found() x11_pkgs += ['xcursor'] endif + if xdamage_dep.found() + x11_pkgs += ['xdamage'] + endif if xfixes_dep.found() x11_pkgs += ['xfixes'] endif @@ -523,6 +527,7 @@ if x11_enabled atk_pkgs += ['atk-bridge-2.0'] cdata.set('HAVE_XCURSOR', xcursor_dep.found()) + cdata.set('HAVE_XDAMAGE', xdamage_dep.found()) cdata.set('HAVE_XCOMPOSITE', xcomposite_dep.found()) cdata.set('HAVE_XFIXES', xfixes_dep.found())