DSWaylandKeyboard: sendEnter when the focused client get wl_keyboard 38/242338/1
authorSung-Jin Park <sj76.park@samsung.com>
Tue, 25 Aug 2020 09:36:54 +0000 (18:36 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Tue, 25 Aug 2020 12:40:12 +0000 (21:40 +0900)
Change-Id: I2f36a87bfbe34bda11ed91b0c197de958f09c11e
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/DSWaylandServer/DSWaylandKeyboard.cpp
src/DSWaylandServer/DSWaylandKeyboardPrivate.h

index 3ca2388..8002088 100644 (file)
@@ -211,6 +211,21 @@ void DSWaylandKeyboardPrivate::sendKey(uint32_t key, uint32_t state)
        std::for_each(resMap.begin(), resMap.end(), func);
 }
 
+void DSWaylandKeyboardPrivate::__addClient(struct ::wl_client *wlClient, uint32_t id, int version)
+{
+       wl_keyboard::add(wlClient, id, version);
+
+       if (__focusSurface && __focusSurface->hasResource())
+       {
+               DSWaylandClient *waylandClient = __focusSurface->getClient();
+               if (waylandClient && (waylandClient->wlClient() == wlClient))
+               {
+                       DSLOG_INF("DSWaylandKeyboardPrivate", "Send enter to focusSurface(%p)", __focusSurface);
+                       sendEnter(__focusSurface->getWlResource());
+               }
+       }
+}
+
 /* Begin Public Class Implementation */
 DSWaylandKeyboard::DSWaylandKeyboard(DSWaylandSeat *seat)
        : DSObject(), _d_ptr(std::make_unique<DSWaylandKeyboardPrivate>(seat, this))
@@ -264,7 +279,7 @@ void DSWaylandKeyboard::addClient(DSWaylandClient *client, uint32_t id, int vers
 
        DSLOG_INF("DSWaylandKeyboard", "addClient(dswlClient=%p, id=%u, version=%d", client, id, version);
 
-       priv->add(client->wlClient(), id, version);
+       priv->__addClient(client->wlClient(), id, version);
 }
 
 void DSWaylandKeyboard::setFocus(DSWaylandSurface *waylandSurface)
index f3be21d..48f4665 100644 (file)
@@ -64,6 +64,8 @@ protected:
        void sendModifiers(struct ::wl_resource *surface);
 
 private:
+       void __addClient(struct ::wl_client *wlClient, uint32_t id, int version);
+
        DSWaylandSeat *__seat;
        DSXkb *__xkb;
        DSWaylandCompositor *__compositor;