[Xfce4-commits] [apps/xfce4-screenshooter] 01/04: Replace deprecated 'gdk_screen_get_active_window' by Xlib functions

noreply at xfce.org noreply at xfce.org
Sun Mar 17 18:08:33 CET 2019


This is an automated email from the git hooks/post-receive script.

a   n   d   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-screenshooter.

commit 510e6f098ee184a4d37a9a0ccb7a2fda2b5e755e
Author: Olivier Duchateau <duchateau.olivier at gmail.com>
Date:   Wed Mar 13 18:12:23 2019 +0100

    Replace deprecated 'gdk_screen_get_active_window' by Xlib functions
---
 Makefile.am                 | 16 ++++++++++++
 configure.ac.in             |  2 ++
 lib/screenshooter-capture.c | 64 ++++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 78 insertions(+), 4 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 210a862..65ed875 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -41,11 +41,14 @@ lib_libscreenshooter_la_CFLAGS = \
 	-I$(top_builddir)/lib \
 	@EXO_CFLAGS@ \
 	@GTK_CFLAGS@ \
+	@GDK_CFLAGS@ \
+	@GDKX11_CFLAGS@ \
 	@GLIB_CFLAGS@ \
 	@LIBXFCE4UTIL_CFLAGS@ \
 	@LIBXFCE4UI_CFLAGS@ \
 	@LIBXML_CFLAGS@ \
 	@SOUP_CFLAGS@ \
+	@LIBX11_CFLAGS@ \
 	@XFIXES_CFLAGS@ \
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"
 
@@ -53,6 +56,8 @@ lib_libscreenshooter_la_LIBADD = \
 	-lm \
 	@EXO_LIBS@ \
 	@GTK_LIBS@ \
+	@GDK_LIBS@ \
+	@GDKX11_LIBS@ \
 	@LIBXFCE4UTIL_LIBS@ \
 	@LIBXFCE4UI_LIBS@ \
 	@GLIB_LIBS@ \
@@ -60,6 +65,7 @@ lib_libscreenshooter_la_LIBADD = \
 	@LIBXML_LIBS@ \
 	@LIBXEXT_LIBS@ \
 	@LIBX11_LIBS@ \
+	@LIBX11_LDFLAGS@ \
 	@XFIXES_LIBS@
 
 lib_libscreenshooter_built_sources = \
@@ -94,21 +100,28 @@ src_xfce4_screenshooter_CFLAGS = \
 	-I$(top_builddir)/lib \
 	@EXO_CFLAGS@ \
 	@GTK_CFLAGS@ \
+	@GDK_CFLAGS@ \
+	@GDKX11_CFLAGS@ \
 	@GLIB_CFLAGS@ \
 	@LIBXFCE4UTIL_CFLAGS@ \
 	@LIBXFCE4UI_CFLAGS@ \
 	@GTHREAD_CFLAGS@ \
 	@SOUP_CFLAGS@ \
 	@LIBXML_CFLAGS@ \
+	@LIBX11_CFLAGS@ \
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"
 
 src_xfce4_screenshooter_LDFLAGS = \
 	@EXO_LIBS@ \
 	@GTK_LIBS@ \
+	@GDK_LIBS@ \
+	@GDKX11_LIBS@ \
 	@GLIB_LIBS@ \
 	@GTHREAD_LIBS@ \
 	@SOUP_LIBS@ \
 	@LIBXML_LIBS@ \
+	@LIBX11_LIBS@ \
+	@LIBX11_LDFLAGS@ \
 	@LIBXFCE4UTIL_LIBS@ \
 	@LIBXFCE4UI_LIBS@
 
@@ -150,6 +163,7 @@ panel_plugin_libscreenshooterplugin_la_CFLAGS =	\
 	@LIBXFCE4UI_CFLAGS@ \
 	@GTHREAD_CFLAGS@ \
 	@LIBXML_CFLAGS@ \
+	@LIBX11_CFLAGS@ \
 	@SOUP_CFLAGS@
 
 panel_plugin_libscreenshooterplugin_la_LDFLAGS = \
@@ -165,6 +179,8 @@ panel_plugin_libscreenshooterplugin_la_LIBADD = \
 	@GTHREAD_LIBS@ \
 	@SOUP_LIBS@ \
 	@LIBXML_LIBS@ \
+	@LIBX11_LIBS@ \
+	@LIBX11_LDFLAGS@ \
 	@LIBXFCE4UI_LIBS@ \
 	lib/libscreenshooter.la
 
diff --git a/configure.ac.in b/configure.ac.in
index 200a45d..9af51af 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -50,6 +50,8 @@ XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.10.0])
 XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-2], [4.12.0])
 XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.16.0])
 XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [3.20.0])
+XDT_CHECK_PACKAGE([GDK], [gdk-3.0], [3.20.0])
+XDT_CHECK_PACKAGE([GDKX11], [gdk-x11-3.0], [3.20.0])
 XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.16.0])
 XDT_CHECK_PACKAGE([SOUP], [libsoup-2.4], [2.26.0])
 XDT_CHECK_PACKAGE([LIBXML], [libxml-2.0], [2.4.0])
diff --git a/lib/screenshooter-capture.c b/lib/screenshooter-capture.c
index 4e4b78e..7035e87 100644
--- a/lib/screenshooter-capture.c
+++ b/lib/screenshooter-capture.c
@@ -20,6 +20,11 @@
 #include "screenshooter-capture.h"
 #include "screenshooter-utils.h"
 
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+
 #define BACKGROUND_TRANSPARENCY 0.4
 
 enum {
@@ -63,7 +68,7 @@ typedef struct
 /* Prototypes */
 
 
-
+static Window           get_active_window_from_xlib         (void);
 static GdkWindow       *get_active_window                   (GdkScreen      *screen,
                                                              gboolean       *needs_unref,
                                                              gboolean       *border);
@@ -106,6 +111,52 @@ static GdkPixbuf       *get_rectangle_screenshot_composited (gint delay);
 
 /* Internals */
 
+static Window
+get_active_window_from_xlib (void)
+{
+  GdkDisplay *display;
+  Display *dsp;
+  Atom active_win, type;
+  int status, format;
+  unsigned long n_items, bytes_after;
+  unsigned char *prop;
+  Window window;
+
+  display = gdk_display_get_default ();
+  dsp = gdk_x11_display_get_xdisplay (display);
+
+  active_win = XInternAtom (dsp, "_NET_ACTIVE_WINDOW", True);
+  if (active_win == None)
+    return None;
+
+  gdk_x11_display_error_trap_push (display);
+
+  status = XGetWindowProperty (dsp, DefaultRootWindow (dsp),
+                               active_win, 0, G_MAXLONG, False,
+                               XA_WINDOW, &type, &format, &n_items,
+                               &bytes_after, &prop);
+  if (status != Success || type != XA_WINDOW)
+    {
+      if (prop)
+        XFree (prop);
+
+      gdk_x11_display_error_trap_pop_ignored (display);
+      return None;
+    }
+
+  if (gdk_x11_display_error_trap_pop (display) != Success)
+    {
+      if (prop)
+        XFree (prop);
+
+      return None;
+    }
+
+  window = *(Window *) prop;
+  XFree (prop);
+  return window;
+}
+
 
 
 static GdkWindow
@@ -114,12 +165,17 @@ static GdkWindow
                     gboolean  *border)
 {
   GdkWindow *window, *window2;
+  Window xwindow;
+  GdkDisplay *display;
 
   TRACE ("Get the active window");
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-  window = gdk_screen_get_active_window (screen);
-G_GNUC_END_IGNORE_DEPRECATIONS
+  display = gdk_display_get_default ();
+  xwindow = get_active_window_from_xlib ();
+  if (xwindow != None)
+    window = gdk_x11_window_foreign_new_for_display (display, xwindow);
+  else
+    window = NULL;
 
   /* If there is no active window, we fallback to the whole screen. */
   if (G_UNLIKELY (window == NULL))

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list