#pragma once #include "../../helpers/WLListener.hpp" #include "../../macros.hpp" #include "../../helpers/math/Math.hpp" #include "../../helpers/signal/Signal.hpp" #include struct wl_client; struct STextInputV1; class CTextInputV3; class CInputMethodV2; class CWLSurfaceResource; class CTextInput { public: CTextInput(WP ti); CTextInput(STextInputV1* ti); ~CTextInput(); bool isV3(); void enter(SP pSurface); void leave(); void tiV1Destroyed(); wl_client* client(); void commitStateToIME(SP ime); void updateIMEState(SP ime); void onEnabled(SP surfV1 = nullptr); void onDisabled(); void onCommit(); bool hasCursorRectangle(); CBox cursorBox(); SP focusedSurface(); private: void setFocusedSurface(SP pSurface); void initCallbacks(); WP pFocusedSurface; int enterLocks = 0; WP pV3Input; STextInputV1* pV1Input = nullptr; DYNLISTENER(textInputEnable); DYNLISTENER(textInputDisable); DYNLISTENER(textInputCommit); DYNLISTENER(textInputDestroy); struct { CHyprSignalListener enable; CHyprSignalListener disable; CHyprSignalListener commit; CHyprSignalListener destroy; CHyprSignalListener surfaceUnmap; CHyprSignalListener surfaceDestroy; } listeners; };