emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 0b5d9e9d8e: Fix embedder calculation for xwidgets on PGTK


From: Po Lu
Subject: master 0b5d9e9d8e: Fix embedder calculation for xwidgets on PGTK
Date: Wed, 29 Dec 2021 00:01:03 -0500 (EST)

branch: master
commit 0b5d9e9d8e914b060e6fdc868169259080f9d7a0
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix embedder calculation for xwidgets on PGTK
    
    * src/xwidget.c (Fmake_xwidget):
    (x_draw_xwidget_glyph_string): Defer focus event synthesis on
    PGTK as well.
    (record_osr_embedder): Use view window on PGTK.
    (to_embedder):
    (from_embedder): Rectify accordingly.
---
 src/xwidget.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/xwidget.c b/src/xwidget.c
index b6f1780927..5745153548 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -341,7 +341,7 @@ fails.  */)
 
       gtk_widget_show (xw->widget_osr);
       gtk_widget_show (xw->widgetwindow_osr);
-#ifndef HAVE_XINPUT2
+#if !defined HAVE_XINPUT2 && !defined HAVE_PGTK
       synthesize_focus_in_event (xw->widgetwindow_osr);
 #endif
 
@@ -667,8 +667,11 @@ record_osr_embedder (struct xwidget_view *view)
 
   xw = XXWIDGET (view->model);
   window = gtk_widget_get_window (xw->widgetwindow_osr);
+#ifndef HAVE_PGTK
   embedder = gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET (view->frame));
-
+#else
+  embedder = gtk_widget_get_window (view->widget);
+#endif
   gdk_offscreen_window_set_embedder (window, embedder);
   xw->embedder = view->frame;
   xw->embedder_view = view;
@@ -703,6 +706,7 @@ from_embedder (GdkWindow *window, double x, double y,
 {
   double *xout = x_out_ptr;
   double *yout = y_out_ptr;
+#ifndef HAVE_PGTK
   struct xwidget *xw = find_xwidget_for_offscreen_window (window);
   struct xwidget_view *xvw;
   gint xoff, yoff;
@@ -726,6 +730,10 @@ from_embedder (GdkWindow *window, double x, double y,
       *xout = x - xvw->x - xoff;
       *yout = y - xvw->y - yoff;
     }
+#else
+  *xout = x;
+  *yout = y;
+#endif
 }
 
 static void
@@ -735,6 +743,7 @@ to_embedder (GdkWindow *window, double x, double y,
 {
   double *xout = x_out_ptr;
   double *yout = y_out_ptr;
+#ifndef HAVE_PGTK
   struct xwidget *xw = find_xwidget_for_offscreen_window (window);
   struct xwidget_view *xvw;
   gint xoff, yoff;
@@ -758,6 +767,10 @@ to_embedder (GdkWindow *window, double x, double y,
       *xout = x + xvw->x + xoff;
       *yout = y + xvw->y + yoff;
     }
+#else
+  *xout = x;
+  *yout = y;
+#endif
 }
 
 static GdkDevice *
@@ -2203,7 +2216,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
     }
 #endif
 
-#ifdef HAVE_XINPUT2
+#if defined HAVE_XINPUT2 || defined HAVE_PGTK
   record_osr_embedder (xv);
   synthesize_focus_in_event (xww->widget_osr);
 #endif



reply via email to

[Prev in Thread] Current Thread [Next in Thread]