File 0003-frame.c-Support-outer-window-id-with-PGTK-on-X11.patch of Package emacs
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= <bjorn.bidar@thaodan.de>
Date: Sat, 14 Oct 2023 03:11:39 +0300
Subject: [PATCH] * frame.c: Support outer-window-id with PGTK on X11
---
src/frame.c | 13 +++++++++++--
src/pgtkterm.h | 11 +++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/frame.c b/src/frame.c
index 7f4bf274ad99ba61ee0a79d3632687719a28509e..7e4ceb611a34d0cd0de4fa30d62fec9ad49f4c51 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -4627,10 +4627,19 @@ gui_report_frame_params (struct frame *f, Lisp_Object *alistptr)
#ifdef USE_X_TOOLKIT
/* Tooltip frame may not have this widget. */
if (FRAME_X_OUTPUT (f)->widget)
+#endif
+#endif
+#if defined(HAVE_X_WINDOWS) || defined(HAVE_PGTK)
+#ifdef HAVE_PGTK
+ if(strcmp(G_OBJECT_TYPE_NAME(FRAME_DISPLAY_INFO(f)->display),
+ "GdkX11Display") ==0) {
#endif
w = (uintptr_t) FRAME_OUTER_WINDOW (f);
store_in_alist (alistptr, Qouter_window_id,
make_formatted_string (buf, "%"PRIuMAX, w));
+#ifdef HAVE_PGTK
+ }
+#endif
#endif
store_in_alist (alistptr, Qicon_name, f->icon_name);
store_in_alist (alistptr, Qvisibility,
@@ -6325,7 +6334,7 @@ syms_of_frame (void)
DEFSYM (Quser_position, "user-position");
DEFSYM (Quser_size, "user-size");
DEFSYM (Qwindow_id, "window-id");
-#ifdef HAVE_X_WINDOWS
+#if defined(HAVE_X_WINDOWS) || defined (HAVE_PGTK)
DEFSYM (Qouter_window_id, "outer-window-id");
#endif
DEFSYM (Qparent_id, "parent-id");
@@ -6811,7 +6820,7 @@ focus (where a frame immediately loses focus when it's left by the mouse
DEFVAR_LISP ("frame-internal-parameters", frame_internal_parameters,
doc: /* Frame parameters specific to every frame. */);
-#ifdef HAVE_X_WINDOWS
+#if defined(HAVE_X_WINDOWS) || defined(HAVE_PGTK)
frame_internal_parameters = list4 (Qname, Qparent_id, Qwindow_id, Qouter_window_id);
#else
frame_internal_parameters = list3 (Qname, Qparent_id, Qwindow_id);
diff --git a/src/pgtkterm.h b/src/pgtkterm.h
index 90ca2aa22d43579f72331f7f7045bd230bec148a..27e51774071609b3a281cbfb27c611af827ec96d 100644
--- a/src/pgtkterm.h
+++ b/src/pgtkterm.h
@@ -488,6 +488,17 @@ #define FRAME_WIDGET(f) (FRAME_GTK_OUTER_WIDGET (f) \
#define FRAME_PGTK_VIEW(f) FRAME_GTK_WIDGET (f)
#define FRAME_X_WINDOW(f) FRAME_GTK_OUTER_WIDGET (f)
+
+extern Window gdk_x11_window_get_xid (GdkWindow *window);
+
+#define GTK_WIDGET_TO_X_WIN(w) \
+ ((w) && gtk_widget_get_window (w) \
+ ? gdk_x11_window_get_xid (gtk_widget_get_window (w)) : 0)
+
+#define FRAME_OUTER_WINDOW(f) \
+ (FRAME_GTK_OUTER_WIDGET (f) ? \
+ GTK_WIDGET_TO_X_WIN (FRAME_GTK_OUTER_WIDGET (f)) : 0)
+
#define FRAME_NATIVE_WINDOW(f) GTK_WINDOW (FRAME_X_WINDOW (f))
#define FRAME_GDK_WINDOW(f) \
gtk_widget_get_window (FRAME_GTK_WIDGET (f))