From c1c44ed3920723fef60574d96ccec3ad7276827e Mon Sep 17 00:00:00 2001 From: jeon Date: Fri, 21 Aug 2020 17:10:09 +0900 Subject: [PATCH] DSTextInput: change argument DSWindow to DSWaylandSurface Change-Id: I20ba8de29a83fe39d130dcbc005126e053a496fe --- src/DSTextInput/DSTextInput.cpp | 2 +- src/DSTextInput/DSTextInputPrivate.h | 3 +- src/DSWaylandServer/DSWaylandInputPanel.cpp | 90 +++++++++++----------- src/DSWaylandServer/DSWaylandInputPanel.h | 6 +- src/DSWaylandServer/DSWaylandInputPanelSurface.h | 8 +- .../DSWaylandInputPanelSurfacePrivate.h | 2 +- 6 files changed, 54 insertions(+), 57 deletions(-) diff --git a/src/DSTextInput/DSTextInput.cpp b/src/DSTextInput/DSTextInput.cpp index b418406..59d5c73 100644 --- a/src/DSTextInput/DSTextInput.cpp +++ b/src/DSTextInput/DSTextInput.cpp @@ -280,7 +280,7 @@ void DSTextInputPrivate::updateInputPanelState(bool waitUpdate) __wlInputPanel->updateInputPanelState(waitUpdate); } -void DSTextInputPrivate::setInputPanelTransientFor(DSWindow *window) +void DSTextInputPrivate::setInputPanelTransientFor(DSWaylandSurface *window) { __wlInputPanel->setTransientFor(window); } diff --git a/src/DSTextInput/DSTextInputPrivate.h b/src/DSTextInput/DSTextInputPrivate.h index 969bf14..c187846 100644 --- a/src/DSTextInput/DSTextInputPrivate.h +++ b/src/DSTextInput/DSTextInputPrivate.h @@ -37,6 +37,7 @@ class DSWaylandInputMethod; class DSWaylandInputMethodContext; class DSWaylandInputPanel; class DSWaylandInputPanelSurface; +class DSWaylandSurface; class DSTextInputPrivate : public DSObjectPrivate { @@ -106,7 +107,7 @@ public: /* DSWaylandInputPanel */ void updateInputPanelState(bool waitUpdate); - void setInputPanelTransientFor(DSWindow *window); + void setInputPanelTransientFor(DSWaylandSurface *window); void changeInputPanelVisibility(bool visible); private: diff --git a/src/DSWaylandServer/DSWaylandInputPanel.cpp b/src/DSWaylandServer/DSWaylandInputPanel.cpp index dc35b73..82e2570 100644 --- a/src/DSWaylandServer/DSWaylandInputPanel.cpp +++ b/src/DSWaylandServer/DSWaylandInputPanel.cpp @@ -25,7 +25,9 @@ #include "DSWaylandInputPanelPrivate.h" #include "DSWaylandInputPanelSurface.h" #include "DSWaylandInputPanelSurfacePrivate.h" +#include "DSWaylandSurface.h" #include "DSStruct.h" +#include "DSWindowManager.h" namespace display_server { @@ -55,13 +57,18 @@ private: class DSWaylandInputPanelSurfaceData { public: + DSWaylandInputPanelSurfaceData(DSWaylandServer::wl_input_panel_surface::Resource *resource, void *inputPanelResource) + : panel(false), showing(false), needShow(false), resizing(false), + __resource(resource), + __inputPanelResource(inputPanelResource), __wlSurface(nullptr) {} DSWaylandInputPanelSurfaceData(DSWaylandServer::wl_input_panel_surface::Resource *resource, void *inputPanelResource, void *surfaceResource) : panel(false), showing(false), needShow(false), resizing(false), - __resource(resource), __inputPanelResource(inputPanelResource), __surfaceResource(surfaceResource) {} + __resource(resource), + __inputPanelResource(inputPanelResource) { __wlSurface = DSWaylandSurface::fromWlResource((struct ::wl_resource *)surfaceResource); } ~DSWaylandInputPanelSurfaceData() {} void *getInputPanelResource() {return __inputPanelResource;} - void *getSurfaceResource() {return __surfaceResource;} + DSWaylandSurface* getWlSurface() {return __wlSurface;} bool panel; bool showing; @@ -71,32 +78,9 @@ public: private: DSWaylandServer::wl_input_panel_surface::Resource *__resource; void *__inputPanelResource; - void *__surfaceResource; + DSWaylandSurface *__wlSurface; }; -#if 0 -DSWaylandInputPanelSurfaceData::DSWaylandInputPanelSurfaceData(DSWaylandServer::wl_input_panel_surface::Resource *resource, void *inputPanelResource, void *surfaceResource) - : __resource(resource), - __inputPanelResource(inputPanelResource), - __surfaceResource(surfaceResource) -{ -} - -DSWaylandInputPanelSurfaceData::~DSWaylandInputPanelSurfaceData() -{ -} - -void *DSWaylandInputPanelSurfaceData::getInputPanelResource() -{ - return __inputPanelResource; -} - -void *DSWaylandInputPanelSurfaceData::getSurfaceResource() -{ - return __surfaceResource; -} -#endif - DSWaylandInputPanelPrivate::DSWaylandInputPanelPrivate(DSWaylandInputPanel *p_ptr, DSWaylandCompositor *compositor) : DSObjectPrivate(p_ptr), __p_ptr(p_ptr), __compositor(compositor) @@ -219,9 +203,9 @@ void DSWaylandInputPanel::setFloatingMovingRequest(bool enabled) __inputPanelFloating->movingRequest = enabled; } -void DSWaylandInputPanel::setTransientFor(DSWindow *parent) +void DSWaylandInputPanel::setTransientFor(DSWaylandSurface *parent) { - DSWindow *curParent = parent; + DSWaylandSurface *curParent = parent; if (curParent) { /* TODO: @@ -241,7 +225,7 @@ void DSWaylandInputPanel::changeVisibility(bool visible) /* TODO: delete waitTimer */ } -bool DSWaylandInputPanel::isEffectRunning(DSWindow *window) +bool DSWaylandInputPanel::isEffectRunning(DSWaylandSurface *window) { /* TODO: * if window is animating @@ -301,7 +285,7 @@ void DSWaylandInputPanelSurfacePrivate::flushFrame() for (auto it = __dataMap.begin(); it != __dataMap.end(); it++) { DSWaylandInputPanelSurfaceData *_surfaceData = (*it).second; - if (_surfaceData->getSurfaceResource()) + if (_surfaceData->getWlSurface()) { /* TODO: clear pixmap image */ } @@ -312,29 +296,37 @@ void DSWaylandInputPanelSurfacePrivate::show(DSWaylandInputPanelSurfaceData *sur { DS_GET_PUB(DSWaylandInputPanelSurface); +#if false if (!surfaceData) { for (auto it = __dataMap.begin(); it != __dataMap.end(); it++) { - //DSWaylandInputPanelSurfaceData *_surfaceData = (*it).second; - /* TODO: - * surfaceData = _surfaceData->getSurfaceResource(); - * if surfaceData is focused - * surfaceData = _surfaceData; - * break; - */ + DSWaylandInputPanelSurfaceData *data = (*it).second; + if (!data) continue; + + DSWaylandSurface *wlSurface = data->getWlSurface(); + if (wlSurface->parent == DSKeyboard::getFocus()) + { + surfaceData = data; + break; + } } } +#endif if (!surfaceData) return; if (pub->__inputPanel->getWaitUpdate()) { + pub->__inputPanel->setWaitUpdate(false); + pub->__inputPanel->changeVisibility(true); + pub->__inputPanel->updateInputPanelState(true); // temporary code /* TODO: - * if (getfocus(surfaceData->getSurfaceResource())->parent) + * if (getfocus(surfaceData->getWlSurface())->parent) * { - * if (getfocus(surfaceData->getSurfaceResource())->parent == focused) + * if (getfocus(surfaceData->getWlSurface())->parent == focused) * { + * pub->__inputPanel->visibilityChange(true); * pub->__inputPanel->updateInputPanelState(true); * } * else @@ -351,17 +343,21 @@ void DSWaylandInputPanelSurfacePrivate::directShow(DSWaylandInputPanelSurfaceDat DS_GET_PUB(DSWaylandInputPanelSurface); pub->setPosition(nullptr, 0, 0); /* FIXME: set correct value */ + DSWindowManager *windowManager = DSWindowManager::getInstance(); + windowManager->activateWindow(surfaceData->getWlSurface()); + + windowManager->releaseInstance(); /* TODO: change window geometry */ } -void DSWaylandInputPanelSurfacePrivate::setTransientForSurface(DSWindow *parent) +void DSWaylandInputPanelSurfacePrivate::setTransientForSurface(DSWaylandSurface *parent) { for (auto it = __dataMap.begin(); it != __dataMap.end(); it++) { //DSWaylandInputPanelSurfaceData *surfaceData = (*it).second; /* TODO: - * child = surfaceData->getSurfaceResource(); + * child = surfaceData->getWlSurface(); * if child->parent * { * if child->parent != parent @@ -497,7 +493,7 @@ void DSWaylandInputPanelSurfacePrivate::input_panel_surface_set_ready(Resource * if (it != __dataMap.end()) { DSWaylandInputPanelSurfaceData *surfaceData = (*it).second; - /* TODO: find DSWindow and update base_output resolution */ + /* TODO: find DSWaylandSurface and update base_output resolution */ show(surfaceData); } } @@ -505,7 +501,7 @@ void DSWaylandInputPanelSurfacePrivate::input_panel_surface_set_ready(Resource * void DSWaylandInputPanelSurfacePrivate::input_panel_surface_set_floating_panel(Resource *resource, uint32_t state) { /* TODO: - * set DSWindow's vkbd.floating = !!state + * set DSWaylandSurface's vkbd.floating = !!state * if true * policy_conformant_part_del * else @@ -528,7 +524,7 @@ void DSWaylandInputPanelSurfacePrivate::__updateSurfaceVisibility(DSWaylandInput { if (pub->__inputPanel->getRerunPanelShow()) pub->__inputPanel->setRerunPanelShow(false); - if (pub->isEffectRunning(nullptr)) // FIXME: change this to get window surfaceData->getDSWindow() + if (pub->isEffectRunning(nullptr)) // FIXME: change this to get window surfaceData->getDSWaylandSurface() surfaceData->needShow = true; else if (surfaceData->resizing) surfaceData->needShow = true; @@ -584,7 +580,7 @@ void DSWaylandInputPanelSurface::flushFrame() priv->flushFrame(); } -void DSWaylandInputPanelSurface::setTransientForSurface(DSWindow *parent) +void DSWaylandInputPanelSurface::setTransientForSurface(DSWaylandSurface *parent) { DS_GET_PRIV(DSWaylandInputPanelSurface); @@ -598,12 +594,12 @@ void DSWaylandInputPanelSurface::updateSurfaceVisibility(bool visible) priv->updateSurfaceVisibility(visible); } -bool DSWaylandInputPanelSurface::isEffectRunning(DSWindow *window) +bool DSWaylandInputPanelSurface::isEffectRunning(DSWaylandSurface *window) { return __inputPanel->isEffectRunning(window); } -void DSWaylandInputPanelSurface::setPosition(DSWindow *window, int width, int height) +void DSWaylandInputPanelSurface::setPosition(DSWaylandSurface *window, int width, int height) { } diff --git a/src/DSWaylandServer/DSWaylandInputPanel.h b/src/DSWaylandServer/DSWaylandInputPanel.h index a8d0378..ab2f8bb 100644 --- a/src/DSWaylandServer/DSWaylandInputPanel.h +++ b/src/DSWaylandServer/DSWaylandInputPanel.h @@ -29,7 +29,6 @@ #include "DSWaylandCompositor.h" #include "DSEventLoop.h" #include "DSTextInputPrivate.h" -#include "DSWindow.h" namespace display_server { @@ -37,6 +36,7 @@ namespace display_server class DSWaylandInputPanelPrivate; class DSWaylandInputPanelSurface; class DSWaylandInputPanelFloating; +class DSWaylandSurface; class DS_DECL_EXPORT DSWaylandInputPanel : public DSObject { @@ -55,9 +55,9 @@ public: void setRerunPanelShow(bool needShow); void setFloatingMovingRequest(bool enabled); - void setTransientFor(DSWindow *parent); + void setTransientFor(DSWaylandSurface *parent); void changeVisibility(bool visible); - bool isEffectRunning(DSWindow *window); + bool isEffectRunning(DSWaylandSurface *window); void setFloatingPosition(int x, int y); DSWaylandInputPanelFloating *getFloatingData(); diff --git a/src/DSWaylandServer/DSWaylandInputPanelSurface.h b/src/DSWaylandServer/DSWaylandInputPanelSurface.h index 2f036ac..becea30 100644 --- a/src/DSWaylandServer/DSWaylandInputPanelSurface.h +++ b/src/DSWaylandServer/DSWaylandInputPanelSurface.h @@ -27,12 +27,12 @@ #include "DSCore.h" #include "DSObject.h" #include "DSWaylandInputPanel.h" -#include "DSWindow.h" namespace display_server { class DSWaylandInputPanelSurfacePrivate; +class DSWaylandSurface; class DS_DECL_EXPORT DSWaylandInputPanelSurface : public DSObject { @@ -44,10 +44,10 @@ public: void createGlobal(void *client, void *inputPanelResource, unsigned int id, void *surface); void clearGlobals(void *inputPanelResource); void flushFrame(); - void setTransientForSurface(DSWindow *parent); + void setTransientForSurface(DSWaylandSurface *parent); void updateSurfaceVisibility(bool visible); - bool isEffectRunning(DSWindow *window); - void setPosition(DSWindow *window, int width, int height); + bool isEffectRunning(DSWaylandSurface *window); + void setPosition(DSWaylandSurface *window, int width, int height); void setFloatingPosition(int x, int y); protected: diff --git a/src/DSWaylandServer/DSWaylandInputPanelSurfacePrivate.h b/src/DSWaylandServer/DSWaylandInputPanelSurfacePrivate.h index 5989bed..03300df 100644 --- a/src/DSWaylandServer/DSWaylandInputPanelSurfacePrivate.h +++ b/src/DSWaylandServer/DSWaylandInputPanelSurfacePrivate.h @@ -48,7 +48,7 @@ public: void show(DSWaylandInputPanelSurfaceData *surfaceData); void directShow(DSWaylandInputPanelSurfaceData *surfaceData); void flushFrame(); - void setTransientForSurface(DSWindow *parent); + void setTransientForSurface(DSWaylandSurface *parent); void updateSurfaceVisibility(bool visible); void setFloatingPosition(int x, int y); -- 2.7.4