diff options
| author | Po Lu | 2021-11-16 17:51:07 +0800 |
|---|---|---|
| committer | Po Lu | 2021-11-16 17:51:07 +0800 |
| commit | 8d0c19fb0c368692f4b17728c0eaf3e16e0c70f7 (patch) | |
| tree | 69c15be64cd7cb9b55b28faad6b4644035845864 /src | |
| parent | 1657e0fb177d6a107479306e17ffbb9016a9a40c (diff) | |
| download | emacs-8d0c19fb0c368692f4b17728c0eaf3e16e0c70f7.tar.gz emacs-8d0c19fb0c368692f4b17728c0eaf3e16e0c70f7.zip | |
Lower xwidget views owned by parent when lowering frame
* 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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.c | 7 | ||||
| -rw-r--r-- | src/xwidget.c | 14 | ||||
| -rw-r--r-- | src/xwidget.h | 1 |
3 files changed, 22 insertions, 0 deletions
diff --git a/src/xterm.c b/src/xterm.c index 5988d3a15fb..816b6dc5a8b 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -11723,6 +11723,13 @@ x_lower_frame (struct frame *f) | |||
| 11723 | XFlush (FRAME_X_DISPLAY (f)); | 11723 | XFlush (FRAME_X_DISPLAY (f)); |
| 11724 | unblock_input (); | 11724 | unblock_input (); |
| 11725 | } | 11725 | } |
| 11726 | #ifdef HAVE_XWIDGETS | ||
| 11727 | /* Make sure any X windows owned by xwidget views of the parent | ||
| 11728 | still display below the lowered frame. */ | ||
| 11729 | |||
| 11730 | if (FRAME_PARENT_FRAME (f)) | ||
| 11731 | lower_frame_xwidget_views (FRAME_PARENT_FRAME (f)); | ||
| 11732 | #endif | ||
| 11726 | } | 11733 | } |
| 11727 | 11734 | ||
| 11728 | static void | 11735 | static void |
diff --git a/src/xwidget.c b/src/xwidget.c index 008eb07bcae..650572a8896 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -2811,6 +2811,20 @@ xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix) | |||
| 2811 | 2811 | ||
| 2812 | #ifdef USE_GTK | 2812 | #ifdef USE_GTK |
| 2813 | void | 2813 | void |
| 2814 | lower_frame_xwidget_views (struct frame *f) | ||
| 2815 | { | ||
| 2816 | struct xwidget_view *xv; | ||
| 2817 | |||
| 2818 | for (Lisp_Object tail = internal_xwidget_view_list; CONSP (tail); | ||
| 2819 | tail = XCDR (tail)) | ||
| 2820 | { | ||
| 2821 | xv = XXWIDGET_VIEW (XCAR (tail)); | ||
| 2822 | if (xv->frame == f && xv->wdesc != None) | ||
| 2823 | XLowerWindow (xv->dpy, xv->wdesc); | ||
| 2824 | } | ||
| 2825 | } | ||
| 2826 | |||
| 2827 | void | ||
| 2814 | kill_frame_xwidget_views (struct frame *f) | 2828 | kill_frame_xwidget_views (struct frame *f) |
| 2815 | { | 2829 | { |
| 2816 | Lisp_Object rem = Qnil; | 2830 | Lisp_Object rem = Qnil; |
diff --git a/src/xwidget.h b/src/xwidget.h index df55dacffef..2f6d0442e20 100644 --- a/src/xwidget.h +++ b/src/xwidget.h | |||
| @@ -188,6 +188,7 @@ extern struct xwidget *xwidget_from_id (uint32_t id); | |||
| 188 | #ifdef HAVE_X_WINDOWS | 188 | #ifdef HAVE_X_WINDOWS |
| 189 | struct xwidget_view *xwidget_view_from_window (Window wdesc); | 189 | struct xwidget_view *xwidget_view_from_window (Window wdesc); |
| 190 | void xwidget_expose (struct xwidget_view *xv); | 190 | void xwidget_expose (struct xwidget_view *xv); |
| 191 | extern void lower_frame_xwidget_views (struct frame *f); | ||
| 191 | extern void kill_frame_xwidget_views (struct frame *f); | 192 | extern void kill_frame_xwidget_views (struct frame *f); |
| 192 | extern void xwidget_button (struct xwidget_view *, bool, int, | 193 | extern void xwidget_button (struct xwidget_view *, bool, int, |
| 193 | int, int, int, Time); | 194 | int, int, int, Time); |