[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