UINT PyWeaselHandler::AddSession(LPWSTR buffer) { UINT id = 0; try { id = python::extract<UINT>(m_service.attr("create_session")()); if (!id) { return 0; } python::object session = m_service.attr("get_session")(id); if (session.is_none()) { return 0; } wstring resp = python::extract<wstring>(session.attr("get_response")()); _Respond(buffer, resp); } catch (python::error_already_set e) { return 0; } return id; }
int respond(void *v) { int *msgvec = v; if (value("Replyall") == NULL) return(_respond(msgvec)); else return(_Respond(msgvec)); }
BOOL RimeWithWeaselHandler::ProcessKeyEvent(weasel::KeyEvent keyEvent, UINT session_id, LPWSTR buffer) { DLOG(INFO) << "Process key event: keycode = " << keyEvent.keycode << ", mask = " << keyEvent.mask << ", session_id = " << session_id; if (m_disabled) return FALSE; Bool handled = RimeProcessKey(session_id, keyEvent.keycode, expand_ibus_modifier(keyEvent.mask)); _Respond(session_id, buffer); _UpdateUI(session_id); m_active_session = session_id; return (BOOL)handled; }
UINT RimeWithWeaselHandler::AddSession(LPWSTR buffer, EatLine eat) { if (m_disabled) { DLOG(INFO) << "Trying to resume service."; EndMaintenance(); if (m_disabled) return 0; } UINT session_id = RimeCreateSession(); DLOG(INFO) << "Add session: created session_id = " << session_id; _ReadClientInfo(session_id, buffer); // show session's welcome message :-) if any if (eat) { _Respond(session_id, eat); } _UpdateUI(session_id); m_active_session = session_id; return session_id; }
BOOL PyWeaselHandler::ProcessKeyEvent(weasel::KeyEvent keyEvent, UINT session_id, LPWSTR buffer) { bool taken = false; try { python::object session = m_service.attr("get_session")(session_id); if (session.is_none()) { return FALSE; } taken = python::extract<bool>(session.attr("process_key_event")(keyEvent.keycode, keyEvent.mask)); wstring resp = python::extract<wstring>(session.attr("get_response")()); _Respond(buffer, resp); } catch (python::error_already_set e) { return FALSE; } return (BOOL)taken; }