[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master f094120: Implement `pick_embedded_child' for offscreen xwidgets
From: |
Po Lu |
Subject: |
master f094120: Implement `pick_embedded_child' for offscreen xwidgets |
Date: |
Sun, 21 Nov 2021 04:39:52 -0500 (EST) |
branch: master
commit f094120360b4cfbb104496c0b3e21b26f88547a6
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Implement `pick_embedded_child' for offscreen xwidgets
* src/xwidget.c (pick_embedded_child): New function.
(Fmake_xwidget): Connect `pick-embedded-child' signal
to offscreen window.
---
src/xwidget.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/src/xwidget.c b/src/xwidget.c
index b0ff142..d88270d 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -64,6 +64,7 @@ static gboolean webkit_script_dialog_cb (WebKitWebView *,
WebKitScriptDialog *,
static void record_osr_embedder (struct xwidget_view *);
static void from_embedder (GdkWindow *, double, double, gpointer, gpointer,
gpointer);
static void to_embedder (GdkWindow *, double, double, gpointer, gpointer,
gpointer);
+static GdkWindow *pick_embedded_child (GdkWindow *, double, double, gpointer);
#endif
static struct xwidget *
@@ -243,6 +244,8 @@ fails. */)
"from-embedder", G_CALLBACK (from_embedder), NULL);
g_signal_connect (G_OBJECT (gtk_widget_get_window
(xw->widgetwindow_osr)),
"to-embedder", G_CALLBACK (to_embedder), NULL);
+ g_signal_connect (G_OBJECT (gtk_widget_get_window
(xw->widgetwindow_osr)),
+ "pick-embedded-child", G_CALLBACK
(pick_embedded_child), NULL);
/* Store some xwidget data in the gtk widgets for convenient
retrieval in the event handlers. */
@@ -510,6 +513,32 @@ xwidget_from_id (uint32_t id)
}
#ifdef USE_GTK
+static GdkWindow *
+pick_embedded_child (GdkWindow *window, double x, double y,
+ gpointer user_data)
+{
+ GtkWidget *widget;
+ GtkWidget *child;
+ GdkEvent event;
+ int xout, yout;
+
+ event.any.window = window;
+ event.any.type = GDK_NOTHING;
+
+ widget = gtk_get_event_widget (&event);
+
+ if (!widget)
+ return NULL;
+
+ child = find_widget_at_pos (widget, lrint (x), lrint (y),
+ &xout, &yout);
+
+ if (!child)
+ return NULL;
+
+ return gtk_widget_get_window (child);
+}
+
static void
record_osr_embedder (struct xwidget_view *view)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master f094120: Implement `pick_embedded_child' for offscreen xwidgets,
Po Lu <=