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))
openSUSE Build Service is sponsored by