Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions WeaselIPC/WeaselClientImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,15 +126,24 @@ void ClientImpl::UpdateInputPosition(RECT const& rc) {
int height = max(0, min(127, (rc.bottom - rc.top) >> hi_res));
DWORD compressed_rect = ((hi_res & 0x01) << 31) | ((height & 0x7f) << 24) |
((top & 0xfff) << 12) | (left & 0xfff);
if (has_last_input_position && last_input_position_session == session_id &&
last_input_position_rect == compressed_rect) {
return;
}
has_last_input_position = true;
last_input_position_session = session_id;
last_input_position_rect = compressed_rect;
_SendMessage(WEASEL_IPC_UPDATE_INPUT_POS, compressed_rect, session_id);
}

void ClientImpl::FocusIn() {
has_last_input_position = false;
DWORD client_caps = 0; /* TODO */
_SendMessage(WEASEL_IPC_FOCUS_IN, client_caps, session_id);
}

void ClientImpl::FocusOut() {
has_last_input_position = false;
_SendMessage(WEASEL_IPC_FOCUS_OUT, 0, session_id);
}

Expand All @@ -149,21 +158,25 @@ void ClientImpl::StartSession() {
_WriteClientInfo();
UINT ret = _SendMessage(WEASEL_IPC_START_SESSION, 0, 0);
session_id = ret;
has_last_input_position = false;
}

void ClientImpl::EndSession() {
_SendMessage(WEASEL_IPC_END_SESSION, 0, session_id);
session_id = 0;
has_last_input_position = false;
}

void ClientImpl::StartMaintenance() {
_SendMessage(WEASEL_IPC_START_MAINTENANCE, 0, 0);
session_id = 0;
has_last_input_position = false;
}

void ClientImpl::EndMaintenance() {
_SendMessage(WEASEL_IPC_END_MAINTENANCE, 0, 0);
session_id = 0;
has_last_input_position = false;
}

bool ClientImpl::Echo() {
Expand Down
5 changes: 4 additions & 1 deletion WeaselIPC/WeaselClientImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,11 @@ class ClientImpl {
UINT session_id;
std::wstring app_name;
bool is_ime;
bool has_last_input_position = false;
UINT last_input_position_session = 0;
DWORD last_input_position_rect = 0;

PipeChannel<PipeMessage> channel;
};

} // namespace weasel
} // namespace weasel
13 changes: 13 additions & 0 deletions WeaselTSF/Composition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ STDAPI CStartCompositionEditSession::DoEditSession(TfEditCookie ec) {

void WeaselTSF::_StartComposition(com_ptr<ITfContext> pContext,
BOOL fCUASWorkaroundEnabled) {
_hasLastCompositionPosition = FALSE;
com_ptr<CStartCompositionEditSession> pStartCompositionEditSession;
pStartCompositionEditSession.Attach(new CStartCompositionEditSession(
this, pContext, fCUASWorkaroundEnabled, _cand->style().inline_preedit));
Expand Down Expand Up @@ -239,6 +240,17 @@ void WeaselTSF::_SetCompositionPosition(const RECT& rc) {
return;
}
}
BOOL same_position = _hasLastCompositionPosition &&
_lastCompositionPosition.left == rc.left &&
_lastCompositionPosition.top == rc.top &&
_lastCompositionPosition.right == rc.right &&
_lastCompositionPosition.bottom == rc.bottom;
if (same_position) {
return;
}
_lastCompositionPosition = rc;
_hasLastCompositionPosition = TRUE;

RECT _rc;
_rc.left = _rc.right = rc.left;
_rc.top = _rc.bottom = rc.bottom;
Expand Down Expand Up @@ -404,6 +416,7 @@ STDAPI WeaselTSF::OnCompositionTerminated(TfEditCookie ecWrite,
}

void WeaselTSF::_AbortComposition(bool clear) {
_hasLastCompositionPosition = FALSE;
m_client.ClearComposition();
if (_IsComposing()) {
_EndComposition(_pEditSessionContext, clear);
Expand Down
1 change: 1 addition & 0 deletions WeaselTSF/KeyEventSink.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ void WeaselTSF::_ProcessKeyEvent(WPARAM wParam, LPARAM lParam, BOOL* pfEaten) {
}

STDAPI WeaselTSF::OnSetFocus(BOOL fForeground) {
_hasLastCompositionPosition = false;
if (fForeground)
m_client.FocusIn();
else {
Expand Down
2 changes: 2 additions & 0 deletions WeaselTSF/WeaselTSF.h
Original file line number Diff line number Diff line change
Expand Up @@ -233,4 +233,6 @@ class WeaselTSF : public ITfTextInputProcessorEx,
BOOL _async_edit = false;
BOOL _committed = false;
BOOL _isToOpenClose = false;
BOOL _hasLastCompositionPosition = false;
RECT _lastCompositionPosition = {0, 0, 0, 0};
};