[gtk/wip/damaged-but-no-frost-bite: 41/42] x11: Add back support for the damage extension



commit b92bd9fa444bb3dcc9ecbd0a0d86292031589880
Author: Ray Strode <rstrode redhat com>
Date:   Wed May 27 14:53:10 2020 -0400

    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 | 4 ++++
 gdk/x11/meson.build      | 1 +
 meson.build              | 5 +++++
 5 files changed, 21 insertions(+)
---
diff --git a/config.h.meson b/config.h.meson
index 06705aefc7..2a5bc1be8a 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -146,6 +146,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..cdf1b4cd93 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
 
+  display_x11->have_damage = FALSE;
+#ifdef HAVE_XDAMAGE
+  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..3e4fb24d63 100644
--- a/gdk/x11/gdkdisplay-x11.h
+++ b/gdk/x11/gdkdisplay-x11.h
@@ -149,6 +149,10 @@ struct _GdkX11Display
   guint has_glx_multisample : 1;
   guint has_glx_visual_rating : 1;
   guint has_glx_create_es2_context : 1;
+
+  gint damage_event_base;
+  gint damage_error_base;
+  guint have_damage;
 };
 
 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 146c54b23d..ff72ffa034 100644
--- a/meson.build
+++ b/meson.build
@@ -507,6 +507,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')
@@ -519,6 +520,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
@@ -529,6 +533,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())
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]