From 2b660397950f348205e6a93bf44a46e4a72bcc81 Mon Sep 17 00:00:00 2001 From: nameoverflow Date: Sat, 7 Apr 2018 22:34:46 +0800 Subject: [PATCH] feat(tsf): enable language bar button (#170) * feat(tsf): enable language bar icon * feat(server): show deploy notification even if tray icon is disabled * feat(tsf): update language bar button on initializing * refactor(resource.h): unify resource.h * feat(tsf): switch ascii mode on language bar icon click * chore(tsf): change menu description --- RimeWithWeasel/RimeWithWeasel.cpp | 10 ++++- WeaselIPC/WeaselClientImpl.cpp | 10 +++++ WeaselIPC/WeaselClientImpl.h | 1 + WeaselIPCServer/WeaselServerImpl.cpp | 28 ++++++++++++- WeaselIPCServer/WeaselServerImpl.h | 1 + WeaselIPCServer/stdafx.h | 2 + WeaselServer/WeaselServer.vcxproj | 1 - WeaselServer/WeaselServer.vcxproj.filters | 3 -- WeaselServer/WeaselTrayIcon.cpp | 4 +- WeaselServer/resource.h | 31 -------------- WeaselTSF/EditSession.cpp | 1 + WeaselTSF/LanguageBar.cpp | 47 ++++++++++++++-------- WeaselTSF/WeaselTSF.cpp | 14 +++++-- WeaselTSF/WeaselTSF.h | 4 +- WeaselTSF/WeaselTSF.rc | Bin 6280 -> 6288 bytes WeaselTSF/WeaselTSF.vcxproj | 1 - WeaselTSF/WeaselTSF.vcxproj.filters | 3 -- WeaselUI/WeaselPanel.cpp | 2 +- include/RimeWithWeasel.h | 3 +- include/WeaselIPC.h | 6 ++- {WeaselTSF => include}/resource.h | Bin 2112 -> 2488 bytes weasel.sln | 1 + 22 files changed, 105 insertions(+), 68 deletions(-) delete mode 100644 WeaselServer/resource.h rename {WeaselTSF => include}/resource.h (84%) diff --git a/RimeWithWeasel/RimeWithWeasel.cpp b/RimeWithWeasel/RimeWithWeasel.cpp index 25b6bd0db..a2cd35ade 100644 --- a/RimeWithWeasel/RimeWithWeasel.cpp +++ b/RimeWithWeasel/RimeWithWeasel.cpp @@ -92,7 +92,7 @@ UINT RimeWithWeaselHandler::FindSession(UINT session_id) return found ? session_id : 0; } -UINT RimeWithWeaselHandler::AddSession(LPWSTR buffer) +UINT RimeWithWeaselHandler::AddSession(LPWSTR buffer, EatLine eat) { if (m_disabled) { @@ -104,6 +104,9 @@ UINT RimeWithWeaselHandler::AddSession(LPWSTR buffer) 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; @@ -297,6 +300,11 @@ void RimeWithWeaselHandler::EndMaintenance() } } +void RimeWithWeaselHandler::SetOption(UINT session_id, const std::string & opt, bool val) +{ + RimeSetOption(session_id, opt.c_str(), val); +} + void RimeWithWeaselHandler::OnUpdateUI(std::function const &cb) { _UpdateUICallback = cb; diff --git a/WeaselIPC/WeaselClientImpl.cpp b/WeaselIPC/WeaselClientImpl.cpp index 5ae942e1e..ba4f48b3e 100644 --- a/WeaselIPC/WeaselClientImpl.cpp +++ b/WeaselIPC/WeaselClientImpl.cpp @@ -130,6 +130,11 @@ void ClientImpl::FocusOut() _SendMessage(WEASEL_IPC_FOCUS_OUT, 0, session_id); } +void ClientImpl::TrayCommand(UINT menuId) +{ + _SendMessage(WEASEL_IPC_TRAY_COMMAND, menuId, session_id); +} + void ClientImpl::StartSession() { if (_Active() && Echo()) @@ -274,6 +279,11 @@ void Client::EndMaintenance() m_pImpl->EndMaintenance(); } +void Client::TrayCommand(UINT menuId) +{ + m_pImpl->TrayCommand(menuId); +} + bool Client::Echo() { return m_pImpl->Echo(); diff --git a/WeaselIPC/WeaselClientImpl.h b/WeaselIPC/WeaselClientImpl.h index ede5e7dbb..f9f931ad4 100644 --- a/WeaselIPC/WeaselClientImpl.h +++ b/WeaselIPC/WeaselClientImpl.h @@ -25,6 +25,7 @@ namespace weasel void UpdateInputPosition(RECT const& rc); void FocusIn(); void FocusOut(); + void TrayCommand(UINT menuId); bool GetResponseData(ResponseHandler const& handler); protected: diff --git a/WeaselIPCServer/WeaselServerImpl.cpp b/WeaselIPCServer/WeaselServerImpl.cpp index fffd6316e..f5733dd65 100644 --- a/WeaselIPCServer/WeaselServerImpl.cpp +++ b/WeaselIPCServer/WeaselServerImpl.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" #include "WeaselServerImpl.h" #include -#include #include +#include namespace weasel { class PipeServer : public PipeChannel @@ -89,6 +89,16 @@ LRESULT ServerImpl::OnEndSystemSession(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT ServerImpl::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { UINT uID = LOWORD(wParam); + switch (uID) { + case ID_WEASELTRAY_ENABLE_ASCII: + m_pRequestHandler->SetOption(lParam, "ascii_mode", true); + return 0; + case ID_WEASELTRAY_DISABLE_ASCII: + m_pRequestHandler->SetOption(lParam, "ascii_mode", false); + return 0; + default:; + } + std::map::iterator it = m_MenuHandlers.find(uID); if (it == m_MenuHandlers.end()) { @@ -99,6 +109,13 @@ LRESULT ServerImpl::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHa return 0; } +DWORD ServerImpl::OnCommand(WEASEL_IPC_COMMAND uMsg, DWORD wParam, DWORD lParam) +{ + BOOL handled = TRUE; + OnCommand(uMsg, wParam, lParam, handled); + return handled; +} + int ServerImpl::Start() { // assure single instance @@ -159,7 +176,13 @@ DWORD ServerImpl::OnStartSession(WEASEL_IPC_COMMAND uMsg, DWORD wParam, DWORD lP { if (!m_pRequestHandler) return 0; - return m_pRequestHandler->AddSession(reinterpret_cast(channel->ReceiveBuffer())); + return m_pRequestHandler->AddSession( + reinterpret_cast(channel->ReceiveBuffer()), + [this](std::wstring &msg) -> bool { + *channel << msg; + return true; + } + ); } DWORD ServerImpl::OnEndSession(WEASEL_IPC_COMMAND uMsg, DWORD wParam, DWORD lParam) @@ -302,6 +325,7 @@ void ServerImpl::HandlePipeMessage(PipeMessage pipe_msg, _Resp resp) PIPE_MSG_HANDLE(WEASEL_IPC_END_MAINTENANCE, OnEndMaintenance) PIPE_MSG_HANDLE(WEASEL_IPC_COMMIT_COMPOSITION, OnCommitComposition) PIPE_MSG_HANDLE(WEASEL_IPC_CLEAR_COMPOSITION, OnClearComposition); + PIPE_MSG_HANDLE(WEASEL_IPC_TRAY_COMMAND, OnCommand); END_MAP_PIPE_MSG_HANDLE(result); resp(result); diff --git a/WeaselIPCServer/WeaselServerImpl.h b/WeaselIPCServer/WeaselServerImpl.h index cc6a59d2c..09f66b6fc 100644 --- a/WeaselIPCServer/WeaselServerImpl.h +++ b/WeaselIPCServer/WeaselServerImpl.h @@ -36,6 +36,7 @@ namespace weasel LRESULT OnQueryEndSystemSession(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnEndSystemSession(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + DWORD OnCommand(WEASEL_IPC_COMMAND uMsg, DWORD wParam, DWORD lParam); DWORD OnEcho(WEASEL_IPC_COMMAND uMsg, DWORD wParam, DWORD lParam); DWORD OnStartSession(WEASEL_IPC_COMMAND uMsg, DWORD wParam, DWORD lParam); DWORD OnEndSession(WEASEL_IPC_COMMAND uMsg, DWORD wParam, DWORD lParam); diff --git a/WeaselIPCServer/stdafx.h b/WeaselIPCServer/stdafx.h index 6edf33af2..4dd90f359 100644 --- a/WeaselIPCServer/stdafx.h +++ b/WeaselIPCServer/stdafx.h @@ -16,3 +16,5 @@ #include #include + +#include diff --git a/WeaselServer/WeaselServer.vcxproj b/WeaselServer/WeaselServer.vcxproj index 9782b0216..931e0661b 100644 --- a/WeaselServer/WeaselServer.vcxproj +++ b/WeaselServer/WeaselServer.vcxproj @@ -466,7 +466,6 @@ - diff --git a/WeaselServer/WeaselServer.vcxproj.filters b/WeaselServer/WeaselServer.vcxproj.filters index e5c8cbe23..484186d7b 100644 --- a/WeaselServer/WeaselServer.vcxproj.filters +++ b/WeaselServer/WeaselServer.vcxproj.filters @@ -35,9 +35,6 @@ - - Header Files - Header Files diff --git a/WeaselServer/WeaselTrayIcon.cpp b/WeaselServer/WeaselTrayIcon.cpp index 30d176964..e14a576bb 100644 --- a/WeaselServer/WeaselTrayIcon.cpp +++ b/WeaselServer/WeaselTrayIcon.cpp @@ -2,7 +2,7 @@ #include "WeaselTrayIcon.h" // nasty -#include "../WeaselServer/resource.h" +#include static UINT mode_icon[] = { IDI_ZH, IDI_ZH, IDI_EN, IDI_RELOAD }; static const WCHAR *mode_label[] = { NULL, /*L"中文"*/ NULL, /*L"西文"*/ NULL, L"維護中" }; @@ -36,7 +36,7 @@ BOOL WeaselTrayIcon::Create(HWND hTargetWnd) void WeaselTrayIcon::Refresh() { - if (!m_style.display_tray_icon) + if (!m_style.display_tray_icon && !m_status.disabled) // display notification when deploying { if (m_mode != INITIAL) { diff --git a/WeaselServer/resource.h b/WeaselServer/resource.h deleted file mode 100644 index 722750a52..000000000 --- a/WeaselServer/resource.h +++ /dev/null @@ -1,31 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by WeaselServer.rc -// -#define IDI_WEASEL 101 -#define IDI_EN 102 -#define IDI_ZH 103 -#define IDI_RELOAD 104 -#define IDR_MENU_POPUP 105 -#define ID_WEASELTRAY_QUIT 40001 -#define ID_WEASELTRAY_DEPLOY 40002 -#define ID_WEASELTRAY_CHECKUPDATE 40003 -#define ID_WEASELTRAY_FORUM 40004 -#define ID_WEASELTRAY_HOMEPAGE 40005 -#define ID_WEASELTRAY_INSTALLDIR 40006 -#define ID_WEASELTRAY_USERCONFIG 40007 -#define ID_WEASELTRAY_SETTINGS 40008 -#define ID_WEASELTRAY_WIKI 40009 -#define ID_WEASELTRAY_DICT_MANAGEMENT 40010 -#define ID_WEASELTRAY_SYNC 40011 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 106 -#define _APS_NEXT_COMMAND_VALUE 40012 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/WeaselTSF/EditSession.cpp b/WeaselTSF/EditSession.cpp index eb9db711f..e35cdce00 100644 --- a/WeaselTSF/EditSession.cpp +++ b/WeaselTSF/EditSession.cpp @@ -15,6 +15,7 @@ STDAPI WeaselTSF::DoEditSession(TfEditCookie ec) bool ok = m_client.GetResponseData(std::ref(parser)); _UpdateUI(*context, status); + _UpdateLanguageBar(status); if (ok) { diff --git a/WeaselTSF/LanguageBar.cpp b/WeaselTSF/LanguageBar.cpp index 8a3840de1..896abb1a7 100644 --- a/WeaselTSF/LanguageBar.cpp +++ b/WeaselTSF/LanguageBar.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "resource.h" +#include #include "WeaselTSF.h" static const DWORD LANGBARITEMSINK_COOKIE = 0x42424242; @@ -59,11 +59,14 @@ class CLangBarItemButton: public ITfLangBarItemButton, public ITfSource STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie); STDMETHODIMP UnadviseSink(DWORD dwCookie); + void UpdateStatus(weasel::Status stat); + private: GUID _guid; WeaselTSF *_pTextService; ITfLangBarItemSink *_pLangBarItemSink; LONG _cRef; /* COM Reference count */ + bool ascii_mode; }; CLangBarItemButton::CLangBarItemButton(WeaselTSF *pTextService, REFGUID guid) @@ -74,6 +77,7 @@ CLangBarItemButton::CLangBarItemButton(WeaselTSF *pTextService, REFGUID guid) _cRef = 1; _pTextService = pTextService; _guid = guid; + ascii_mode = false; } CLangBarItemButton::~CLangBarItemButton() @@ -145,7 +149,11 @@ STDAPI CLangBarItemButton::OnClick(TfLBIClick click, POINT pt, const RECT *prcAr { if (click == TF_LBI_CLK_LEFT) { - /* TODO : Switch mode */ + _pTextService->_HandleLangBarMenuSelect(ascii_mode ? ID_WEASELTRAY_DISABLE_ASCII : ID_WEASELTRAY_ENABLE_ASCII); + ascii_mode = !ascii_mode; + if (_pLangBarItemSink) { + _pLangBarItemSink->OnUpdate(TF_LBI_STATUS | TF_LBI_ICON); + } } else if (click == TF_LBI_CLK_RIGHT) { @@ -180,7 +188,7 @@ STDAPI CLangBarItemButton::OnMenuSelect(UINT wID) STDAPI CLangBarItemButton::GetIcon(HICON *phIcon) { - *phIcon = (HICON) LoadImageW(g_hInst, MAKEINTRESOURCEW(IDI_ZH), IMAGE_ICON, 16, 16, LR_SHARED); + *phIcon = (HICON) LoadImageW(g_hInst, MAKEINTRESOURCEW(ascii_mode ? IDI_EN : IDI_ZH), IMAGE_ICON, 16, 16, LR_SHARED); return (*phIcon == NULL)? E_FAIL: S_OK; } @@ -215,24 +223,23 @@ STDAPI CLangBarItemButton::UnadviseSink(DWORD dwCookie) return S_OK; } -void WeaselTSF::_HandleLangBarMenuSelect(UINT wID) +void CLangBarItemButton::UpdateStatus(weasel::Status stat) { - switch (wID) - { - case ID_WEASELTRAY_QUIT: - case ID_WEASELTRAY_DEPLOY: - case ID_WEASELTRAY_SETTINGS: - case ID_WEASELTRAY_DICT_MANAGEMENT: - case ID_WEASELTRAY_WIKI: - case ID_WEASELTRAY_FORUM: - case ID_WEASELTRAY_CHECKUPDATE: - case ID_WEASELTRAY_INSTALLDIR: - case ID_WEASELTRAY_USERCONFIG: - /* TODO */ - break; + if (stat.ascii_mode != ascii_mode) { + ascii_mode = stat.ascii_mode; + if (_pLangBarItemSink) { + _pLangBarItemSink->OnUpdate(TF_LBI_STATUS | TF_LBI_ICON); + } } } + + +void WeaselTSF::_HandleLangBarMenuSelect(UINT wID) +{ + m_client.TrayCommand(wID); +} + HWND WeaselTSF::_GetFocusedContextWindow() { HWND hwnd = NULL; @@ -304,3 +311,9 @@ void WeaselTSF::_UninitLanguageBar() _pLangBarButton->Release(); _pLangBarButton = NULL; } + +void WeaselTSF::_UpdateLanguageBar(weasel::Status stat) +{ + if (!_pLangBarButton) return; + _pLangBarButton->UpdateStatus(stat); +} diff --git a/WeaselTSF/WeaselTSF.cpp b/WeaselTSF/WeaselTSF.cpp index 57088a969..ca77da240 100644 --- a/WeaselTSF/WeaselTSF.cpp +++ b/WeaselTSF/WeaselTSF.cpp @@ -3,6 +3,7 @@ #include "WeaselTSF.h" #include "WeaselCommon.h" #include "CandidateList.h" +#include "ResponseParser.h" static void error_message(const WCHAR *msg) { @@ -128,7 +129,6 @@ STDAPI WeaselTSF::Deactivate() STDAPI WeaselTSF::ActivateEx(ITfThreadMgr *pThreadMgr, TfClientId tfClientId, DWORD dwFlags) { _activateFlags = dwFlags; - _EnsureServerConnected(); _pThreadMgr = pThreadMgr; _pThreadMgr->AddRef(); @@ -152,12 +152,14 @@ STDAPI WeaselTSF::ActivateEx(ITfThreadMgr *pThreadMgr, TfClientId tfClientId, DW // TODO not yet complete _pLangBarButton = NULL; - //if (!_InitLanguageBar()) - // goto ExitError; + if (!_InitLanguageBar()) + goto ExitError; if (!_IsKeyboardOpen()) _SetKeyboardOpen(TRUE); + _EnsureServerConnected(); + return S_OK; ExitError: @@ -183,5 +185,11 @@ void WeaselTSF::_EnsureServerConnected() m_client.Disconnect(); m_client.Connect(NULL); m_client.StartSession(); + weasel::Status status; + weasel::ResponseParser parser(NULL, NULL, &status, NULL, &_cand->style()); + bool ok = m_client.GetResponseData(std::ref(parser)); + if (ok) { + _UpdateLanguageBar(status); + } } } \ No newline at end of file diff --git a/WeaselTSF/WeaselTSF.h b/WeaselTSF/WeaselTSF.h index ba53616d0..e7dcac2d0 100644 --- a/WeaselTSF/WeaselTSF.h +++ b/WeaselTSF/WeaselTSF.h @@ -7,6 +7,7 @@ namespace weasel { class CandidateList; } +class CLangBarItemButton; class WeaselTSF: public ITfTextInputProcessorEx, @@ -109,6 +110,7 @@ class WeaselTSF: BOOL _InitLanguageBar(); void _UninitLanguageBar(); + void _UpdateLanguageBar(weasel::Status stat); BOOL _InsertText(ITfContext *pContext, const std::wstring& ext); void _AbortComposition(bool clear = true); @@ -131,7 +133,7 @@ class WeaselTSF: ITfComposition *_pComposition; - ITfLangBarItemButton *_pLangBarButton; + CLangBarItemButton *_pLangBarButton; std::unique_ptr _cand; diff --git a/WeaselTSF/WeaselTSF.rc b/WeaselTSF/WeaselTSF.rc index 4150069a2865c2a3d44dbaae6bc4da54fd3f9739..a611b8231889759f6558dc9ff30b2c378f365d2c 100644 GIT binary patch delta 21 ccmeA$oM5;?hL2-<_0=5S^qWDOW%zQq09Q5#q5uE@ delta 28 jcmbPW*kQOqhL2r=L4!e!A#n0XF73$%!W^69_>8y!YF7sh diff --git a/WeaselTSF/WeaselTSF.vcxproj b/WeaselTSF/WeaselTSF.vcxproj index e329c7672..b2c2ced84 100644 --- a/WeaselTSF/WeaselTSF.vcxproj +++ b/WeaselTSF/WeaselTSF.vcxproj @@ -440,7 +440,6 @@ - diff --git a/WeaselTSF/WeaselTSF.vcxproj.filters b/WeaselTSF/WeaselTSF.vcxproj.filters index 8f9634bb9..729d0dade 100644 --- a/WeaselTSF/WeaselTSF.vcxproj.filters +++ b/WeaselTSF/WeaselTSF.vcxproj.filters @@ -83,9 +83,6 @@ Header Files - - Header Files - Header Files diff --git a/WeaselUI/WeaselPanel.cpp b/WeaselUI/WeaselPanel.cpp index 037090480..0fec48bfa 100644 --- a/WeaselUI/WeaselPanel.cpp +++ b/WeaselUI/WeaselPanel.cpp @@ -8,7 +8,7 @@ #include "FullScreenLayout.h" // for IDI_ZH, IDI_EN -#include "../WeaselServer/resource.h" +#include using namespace weasel; diff --git a/include/RimeWithWeasel.h b/include/RimeWithWeasel.h index 1c3cee8ca..57558908d 100644 --- a/include/RimeWithWeasel.h +++ b/include/RimeWithWeasel.h @@ -18,7 +18,7 @@ class RimeWithWeaselHandler : virtual void Initialize(); virtual void Finalize(); virtual UINT FindSession(UINT session_id); - virtual UINT AddSession(LPWSTR buffer); + virtual UINT AddSession(LPWSTR buffer, EatLine eat = 0); virtual UINT RemoveSession(UINT session_id); virtual BOOL ProcessKeyEvent(weasel::KeyEvent keyEvent, UINT session_id, EatLine eat); virtual void CommitComposition(UINT session_id); @@ -28,6 +28,7 @@ class RimeWithWeaselHandler : virtual void UpdateInputPosition(RECT const& rc, UINT session_id); virtual void StartMaintenance(); virtual void EndMaintenance(); + virtual void SetOption(UINT session_id, const std::string &opt, bool val); void OnUpdateUI(std::function const &cb); diff --git a/include/WeaselIPC.h b/include/WeaselIPC.h index 7f5dddecf..98766c65a 100644 --- a/include/WeaselIPC.h +++ b/include/WeaselIPC.h @@ -26,6 +26,7 @@ enum WEASEL_IPC_COMMAND WEASEL_IPC_END_MAINTENANCE, WEASEL_IPC_COMMIT_COMPOSITION, WEASEL_IPC_CLEAR_COMPOSITION, + WEASEL_IPC_TRAY_COMMAND, WEASEL_IPC_LAST_COMMAND }; @@ -69,7 +70,7 @@ namespace weasel virtual void Initialize() {} virtual void Finalize() {} virtual UINT FindSession(UINT session_id) { return 0; } - virtual UINT AddSession(LPWSTR buffer) { return 0; } + virtual UINT AddSession(LPWSTR buffer, EatLine eat = 0) { return 0; } virtual UINT RemoveSession(UINT session_id) { return 0; } virtual BOOL ProcessKeyEvent(KeyEvent keyEvent, UINT session_id, EatLine eat) { return FALSE; } virtual void CommitComposition(UINT session_id) {} @@ -79,6 +80,7 @@ namespace weasel virtual void UpdateInputPosition(RECT const& rc, UINT session_id) {} virtual void StartMaintenance() {} virtual void EndMaintenance() {} + virtual void SetOption(UINT session_id, const std::string &opt, bool val) {} }; // 處理server端回應之物件 @@ -133,6 +135,8 @@ namespace weasel void FocusIn(); // 输入窗口失去焦点 void FocusOut(); + // 托盤菜單 + void TrayCommand(UINT menuId); // 读取server返回的数据 bool GetResponseData(ResponseHandler handler); diff --git a/WeaselTSF/resource.h b/include/resource.h similarity index 84% rename from WeaselTSF/resource.h rename to include/resource.h index 606ad59ae674347a2c655bf3129dd9eb90e7d7cb..e60e2c1acea0fde863dba2ce028cf9dce08cf939 100644 GIT binary patch delta 146 zcmX>gutRu*5evTugFk~WgDXP-gCm1GgX_ePqLT|)IT%ehGqT)foXp0e!ye2K$>7J} zJozA#GP5Cr(PTyzLvdH2h$Dj&gAY(=JdhR4;LPC3;5qpslQ5&<5zFQYEUOqdhp?wG0RTId1?T_( diff --git a/weasel.sln b/weasel.sln index e00441c0d..bcd8c3482 100644 --- a/weasel.sln +++ b/weasel.sln @@ -8,6 +8,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution include\ComPtr.h = include\ComPtr.h include\PipeChannel.h = include\PipeChannel.h include\PyWeasel.h = include\PyWeasel.h + include\resource.h = include\resource.h include\ResponseParser.h = include\ResponseParser.h include\RimeWithWeasel.h = include\RimeWithWeasel.h include\StringAlgorithm.hpp = include\StringAlgorithm.hpp