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



commit 47e0f1c6f4dfc55c22c5206324e0322457bd4fff
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 | 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())
 


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