]> git.eshelyaron.com Git - emacs.git/commitdiff
Lower xwidget views owned by parent when lowering frame
authorPo Lu <luangruo@yahoo.com>
Tue, 16 Nov 2021 09:51:07 +0000 (17:51 +0800)
committerPo Lu <luangruo@yahoo.com>
Tue, 16 Nov 2021 09:51:07 +0000 (17:51 +0800)
* src/xterm.c (x_lower_frame): Lower parent frame's xwidget
views as well.

* src/xwidget.h (lower_frame_xwidget_views):
* src/xwidget.c (lower_frame_xwidget_views): New function.

src/xterm.c
src/xwidget.c
src/xwidget.h

index 5988d3a15fbce5c76c6951eaa7b014bdb6ed5b8c..816b6dc5a8b5540b3761ff164bb7940ea7a025f2 100644 (file)
@@ -11723,6 +11723,13 @@ x_lower_frame (struct frame *f)
       XFlush (FRAME_X_DISPLAY (f));
       unblock_input ();
     }
+#ifdef HAVE_XWIDGETS
+  /* Make sure any X windows owned by xwidget views of the parent
+     still display below the lowered frame.  */
+
+  if (FRAME_PARENT_FRAME (f))
+    lower_frame_xwidget_views (FRAME_PARENT_FRAME (f));
+#endif
 }
 
 static void
index 008eb07bcae5d8f4aa774beab0ca262670882065..650572a889682d1e3758cbc9dc2f2b6ea0af4b93 100644 (file)
@@ -2810,6 +2810,20 @@ xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix)
 }
 
 #ifdef USE_GTK
+void
+lower_frame_xwidget_views (struct frame *f)
+{
+  struct xwidget_view *xv;
+
+  for (Lisp_Object tail = internal_xwidget_view_list; CONSP (tail);
+       tail = XCDR (tail))
+    {
+      xv = XXWIDGET_VIEW (XCAR (tail));
+      if (xv->frame == f && xv->wdesc != None)
+       XLowerWindow (xv->dpy, xv->wdesc);
+    }
+}
+
 void
 kill_frame_xwidget_views (struct frame *f)
 {
index df55dacffefb08941f22d9526bc93f5d9f586c24..2f6d0442e204cb3ea55ab8c3fffe80a8267c34d3 100644 (file)
@@ -188,6 +188,7 @@ extern struct xwidget *xwidget_from_id (uint32_t id);
 #ifdef HAVE_X_WINDOWS
 struct xwidget_view *xwidget_view_from_window (Window wdesc);
 void xwidget_expose (struct xwidget_view *xv);
+extern void lower_frame_xwidget_views (struct frame *f);
 extern void kill_frame_xwidget_views (struct frame *f);
 extern void xwidget_button (struct xwidget_view *, bool, int,
                            int, int, int, Time);