[gtk/wip/alexl/broadway7: 82/87] broadway: Keep track of surface owner and only send input to that client
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/alexl/broadway7: 82/87] broadway: Keep track of surface owner and only send input to that client
- Date: Fri, 29 Mar 2019 13:32:46 +0000 (UTC)
commit a966fe1ed5b5e633af05c2968960dbd870e89912
Author: Alexander Larsson <alexl redhat com>
Date: Fri Mar 29 11:07:04 2019 +0100
broadway: Keep track of surface owner and only send input to that client
gdk/broadway/broadway-server.c | 42 +++++++++++++++++++++++++++++++++++++++++-
gdk/broadway/broadway-server.h | 1 +
gdk/broadway/broadwayd.c | 2 +-
3 files changed, 43 insertions(+), 2 deletions(-)
---
diff --git a/gdk/broadway/broadway-server.c b/gdk/broadway/broadway-server.c
index b8bfe8b1d0..dc6f965db0 100644
--- a/gdk/broadway/broadway-server.c
+++ b/gdk/broadway/broadway-server.c
@@ -115,6 +115,7 @@ struct BroadwayInput {
};
struct BroadwaySurface {
+ guint32 owner;
gint32 id;
gint32 x;
gint32 y;
@@ -471,9 +472,46 @@ process_input_message (BroadwayServer *server,
BroadwayInputMsg *message)
{
gint32 client;
+ BroadwaySurface *surface;
update_event_state (server, message);
- client = -1;
+
+
+ switch (message->base.type) {
+ case BROADWAY_EVENT_ENTER:
+ case BROADWAY_EVENT_LEAVE:
+ case BROADWAY_EVENT_POINTER_MOVE:
+ case BROADWAY_EVENT_BUTTON_PRESS:
+ case BROADWAY_EVENT_BUTTON_RELEASE:
+ case BROADWAY_EVENT_SCROLL:
+ case BROADWAY_EVENT_GRAB_NOTIFY:
+ case BROADWAY_EVENT_UNGRAB_NOTIFY:
+ surface = broadway_server_lookup_surface (server, message->pointer.event_surface_id);
+ break;
+ case BROADWAY_EVENT_TOUCH:
+ surface = broadway_server_lookup_surface (server, message->touch.event_surface_id);
+ break;
+ case BROADWAY_EVENT_CONFIGURE_NOTIFY:
+ surface = broadway_server_lookup_surface (server, message->configure_notify.id);
+ break;
+ case BROADWAY_EVENT_ROUNDTRIP_NOTIFY:
+ surface = broadway_server_lookup_surface (server, message->roundtrip_notify.id);
+ break;
+ case BROADWAY_EVENT_KEY_PRESS:
+ case BROADWAY_EVENT_KEY_RELEASE:
+ /* TODO: Send to keys focused clients only... */
+ case BROADWAY_EVENT_FOCUS:
+ case BROADWAY_EVENT_SCREEN_SIZE_CHANGED:
+ default:
+ surface = NULL;
+ break;
+ }
+
+ if (surface)
+ client = surface->owner;
+ else
+ client = -1;
+
if (is_pointer_event (message) &&
server->pointer_grab_surface_id != -1)
client = server->pointer_grab_client_id;
@@ -2020,6 +2058,7 @@ broadway_server_ungrab_pointer (BroadwayServer *server,
guint32
broadway_server_new_surface (BroadwayServer *server,
+ guint32 client,
int x,
int y,
int width,
@@ -2029,6 +2068,7 @@ broadway_server_new_surface (BroadwayServer *server,
BroadwaySurface *surface;
surface = g_new0 (BroadwaySurface, 1);
+ surface->owner = client;
surface->id = server->id_counter++;
surface->x = x;
surface->y = y;
diff --git a/gdk/broadway/broadway-server.h b/gdk/broadway/broadway-server.h
index 859464aa45..f11e9e872d 100644
--- a/gdk/broadway/broadway-server.h
+++ b/gdk/broadway/broadway-server.h
@@ -86,6 +86,7 @@ gint32 broadway_server_get_mouse_surface (BroadwayServer *
void broadway_server_set_show_keyboard (BroadwayServer *server,
gboolean show);
guint32 broadway_server_new_surface (BroadwayServer *server,
+ guint32 client,
int x,
int y,
int width,
diff --git a/gdk/broadway/broadwayd.c b/gdk/broadway/broadwayd.c
index a3b402f1f6..54d97c5ec1 100644
--- a/gdk/broadway/broadwayd.c
+++ b/gdk/broadway/broadwayd.c
@@ -234,7 +234,7 @@ client_handle_request (BroadwayClient *client,
{
case BROADWAY_REQUEST_NEW_SURFACE:
reply_new_surface.id =
- broadway_server_new_surface (server,
+ broadway_server_new_surface (server, client->id,
request->new_surface.x,
request->new_surface.y,
request->new_surface.width,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]