DSTextInput: Add a TextInput API to get current TextInput window 70/242770/1
authorjeon <jhyuni.kang@samsung.com>
Fri, 28 Aug 2020 07:50:55 +0000 (16:50 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Tue, 1 Sep 2020 01:29:31 +0000 (10:29 +0900)
Change-Id: If73ce8395a909588e1fbd4df39303fceb21b582a

12 files changed:
src/DSTextInput/DSTextInput.cpp
src/DSTextInput/DSTextInputPrivate.h
src/DSWaylandServer/DSWaylandInputPanel.cpp
src/DSWaylandServer/DSWaylandInputPanel.h
src/DSWaylandServer/DSWaylandInputPanelSurfacePrivate.h
src/DSWaylandServer/DSWaylandTextInput.cpp
src/DSWaylandServer/DSWaylandTextInput.h
src/DSWaylandServer/DSWaylandTextInputManager.h
src/DSWaylandServer/DSWaylandTextInputPrivate.h
tests/DSWaylandInputPanel-test.cpp
tests/DSWaylandTextInput-test.cpp
tests/DSWaylandTextInputManager-test.cpp

index 83e4eb7..9f61c9a 100644 (file)
@@ -174,6 +174,11 @@ void DSTextInputPrivate::setGeometryUpdated(bool updated)
        __wlTextInputManager->setGeometryUpdated(updated);
 }
 
+DSWaylandSurface *DSTextInputPrivate::getTextInputSurface()
+{
+       return __wlTextInputManager->getTextInputSurface();
+}
+
 
 void DSTextInputPrivate::contextCommitString(unsigned int serial, std::string text)
 {
index ae1199a..d99726a 100644 (file)
@@ -83,6 +83,7 @@ public:
        void predictionHintData(std::string key, std::string value);
        void updateTextInputPanelState(bool state);
        void setGeometryUpdated(bool updated);
+       DSWaylandSurface *getTextInputSurface();
 
        /* DSWaylandInputMethodContext request */
        void contextCommitString(unsigned int serial, std::string text);
index 51ef817..77c65a0 100644 (file)
@@ -256,6 +256,13 @@ void DSWaylandInputPanel::updateTextInputPanelState(bool state)
        __dsTextInputPrivate->updateTextInputPanelState(state);
 }
 
+DSWaylandSurface *DSWaylandInputPanel::getTextInputSurface()
+{
+       if (!__dsTextInputPrivate) return nullptr;
+
+       return __dsTextInputPrivate->getTextInputSurface();
+}
+
 void DSWaylandInputPanel::__onEventIdleEnterer(void *data)
 {
 }
@@ -274,8 +281,7 @@ DSWaylandInputPanelSurfacePrivate::~DSWaylandInputPanelSurfacePrivate()
 void DSWaylandInputPanelSurfacePrivate::createGlobal(void *client, void *inputPanelResource, unsigned int id, void *surface)
 {
        Resource *resource = add((struct ::wl_client *)client, id, 1);
-       DSWaylandInputPanelSurfaceData *data = new DSWaylandInputPanelSurfaceData(resource, inputPanelResource, surface);
-       __dataMap.insert(std::pair<Resource*, DSWaylandInputPanelSurfaceData *>(resource, data));
+       __appendSurface(resource, inputPanelResource, surface);
 }
 
 void DSWaylandInputPanelSurfacePrivate::clearGlobals(void *inputPanelResource)
@@ -571,6 +577,25 @@ void DSWaylandInputPanelSurfacePrivate::__updateSurfaceVisibility(DSWaylandInput
        }
 }
 
+void DSWaylandInputPanelSurfacePrivate::__appendSurface(Resource *resource, void *inputPanelResource, void *surface)
+{
+       DS_GET_PUB(DSWaylandInputPanelSurface);
+       DSWaylandInputPanelSurfaceData *data = new DSWaylandInputPanelSurfaceData(resource, inputPanelResource, surface);
+       __dataMap.insert(std::pair<Resource*, DSWaylandInputPanelSurfaceData *>(resource, data));
+
+       DSWaylandSurface *textInputSurface = pub->__inputPanel->getTextInputSurface();
+
+       if (textInputSurface)
+       {
+               //TODO: transparent set
+       }
+
+       if (pub->__inputPanel->getRerunPanelShow())
+       {
+               pub->__inputPanel->changeVisibility(true);
+       }
+}
+
 
 DSWaylandInputPanelSurface::DSWaylandInputPanelSurface(DSWaylandCompositor *compositor, DSWaylandInputPanel *inputPanel)
        : DSObject(), _d_ptr(std::make_unique<DSWaylandInputPanelSurfacePrivate>(this, compositor)),
index 4217502..f456580 100644 (file)
@@ -63,6 +63,7 @@ public:
        DSWaylandInputPanelFloating *getFloatingData();
        stGeometry getSurfaceGeometry(DSWaylandSurface *wlSurface);
        void updateTextInputPanelState(bool state);
+       DSWaylandSurface *getTextInputSurface();
 
 private:
        DSWaylandCompositor *__compositor;
index 6644229..4896e3c 100644 (file)
@@ -68,6 +68,7 @@ private:
        std::multimap<Resource*, DSWaylandInputPanelSurfaceData *> __dataMap;
 
        void __updateSurfaceVisibility(DSWaylandInputPanelSurfaceData *surfaceData);
+       void __appendSurface(Resource *resource, void *inputPanelResource, void *surface);
 };
 
 }
index e062cb0..743d57c 100644 (file)
@@ -25,6 +25,7 @@
 #include "DSWaylandTextInputManagerPrivate.h"
 #include "DSWaylandTextInput.h"
 #include "DSWaylandTextInputPrivate.h"
+#include "DSWaylandSurface.h"
 
 namespace display_server {
 
@@ -203,6 +204,11 @@ void DSWaylandTextInputManager::setGeometryUpdated(bool updated)
        __textInput->setGeometryUpdated(updated);
 }
 
+DSWaylandSurface* DSWaylandTextInputManager::getTextInputSurface()
+{
+       return __textInput->getClientSurface();
+}
+
 
 DSWaylandTextInputPrivate::DSWaylandTextInputPrivate(DSWaylandTextInput *p_ptr, DSWaylandCompositor *compositor)
        : DSObjectPrivate(p_ptr),
@@ -297,7 +303,7 @@ void DSWaylandTextInputPrivate::text_input_activate(Resource *resource, struct :
                pub->__dsTextInputPrivate->activateTextInput(pub, id);
 
        __activatedResource = resource;
-       __clientSurface = surface;
+       __clientSurface = DSWaylandSurface::fromWlResource(surface);
 }
 
 void DSWaylandTextInputPrivate::text_input_deactivate(Resource *resource, struct ::wl_resource *seat)
@@ -1107,4 +1113,11 @@ void DSWaylandTextInput::setGeometryUpdated(bool updated)
        __geometryUpdated = updated;
 }
 
+DSWaylandSurface* DSWaylandTextInput::getClientSurface()
+{
+       DS_GET_PRIV(DSWaylandTextInput);
+
+       return priv->__clientSurface;
+}
+
 }
index 7f56414..c6b738b 100644 (file)
@@ -33,6 +33,7 @@ namespace display_server
 
 class DSWaylandTextInputPrivate;
 class DSTextInputPrivate;
+class DSWaylandSurface;
 
 class DS_DECL_EXPORT DSWaylandTextInput : public DSObject
 {
@@ -69,6 +70,7 @@ public:
 
        void updatePanelState(bool state);
        void setGeometryUpdated(bool updated);
+       DSWaylandSurface* getClientSurface();
 
 protected:
 
index 8523e10..c19519f 100644 (file)
@@ -34,6 +34,7 @@ namespace display_server
 
 class DSWaylandTextInputManagerPrivate;
 class DSWaylandTextInput;
+class DSWaylansSurface;
 
 class DS_DECL_EXPORT DSWaylandTextInputManager : public DSObject
 {
@@ -71,6 +72,7 @@ public:
 
        void updateTextInputPanelState(bool state);
        void setGeometryUpdated(bool updated);
+       DSWaylandSurface* getTextInputSurface();
 
 protected:
 
index bf9ef9d..55fb499 100644 (file)
@@ -103,7 +103,7 @@ private:
        std::multimap<Resource*, int> __resourceIdMap;
        struct ::wl_client *__showClient;
        Resource *__activatedResource;
-       struct ::wl_resource *__clientSurface;
+       DSWaylandSurface *__clientSurface;
 };
 
 }
index 7e9b421..04d72a2 100644 (file)
@@ -204,3 +204,15 @@ TEST_F(DSWaylandInputPanelTest, UpdateTextInputPanelState)
        DSWaylandCompositor::releaseInstance();
 }
 
+TEST_F(DSWaylandInputPanelTest, GetTextInputSurface)
+{
+       DSWaylandCompositor *comp = DSWaylandCompositor::getInstance();
+       DSWaylandInputPanel *inputPanel = new DSWaylandInputPanel(comp);
+       EXPECT_TRUE(inputPanel != nullptr);
+
+       (void)inputPanel->getTextInputSurface();
+
+       delete inputPanel;
+       DSWaylandCompositor::releaseInstance();
+}
+
index 0befd84..5a3e18e 100644 (file)
@@ -389,3 +389,17 @@ TEST_F(DSWaylandTextInputTest, SetGeometryUpdated)
        DSWaylandCompositor::releaseInstance();
 }
 
+TEST_F(DSWaylandTextInputTest, GetClientSurface)
+{
+       DSWaylandCompositor *comp = DSWaylandCompositor::getInstance();
+       DSWaylandTextInputManager *textInputManager = new  DSWaylandTextInputManager(comp);
+       DSWaylandTextInput *textInput = new  DSWaylandTextInput(comp, textInputManager);
+       EXPECT_TRUE(textInput != nullptr);
+
+       (void)textInput->getClientSurface();
+
+       delete textInput;
+       delete textInputManager;
+       DSWaylandCompositor::releaseInstance();
+}
+
index 4f74e7f..abca02b 100644 (file)
@@ -338,3 +338,15 @@ TEST_F(DSWaylandTextInputManagerTest, SetGeometryUpdated)
        DSWaylandCompositor::releaseInstance();
 }
 
+TEST_F(DSWaylandTextInputManagerTest, GetTextInputSurface)
+{
+       DSWaylandCompositor *comp = DSWaylandCompositor::getInstance();
+       DSWaylandTextInputManager *textInputManager = new  DSWaylandTextInputManager(comp);
+       EXPECT_TRUE(textInputManager != nullptr);
+
+       (void)textInputManager->getTextInputSurface();
+
+       delete textInputManager;
+       DSWaylandCompositor::releaseInstance();
+}
+