Commit MetaInfo

Revisionccef6c9e26cb11b28be56e0003206cfce1eb4b27 (tree)
Zeit2017-04-28 00:47:06
Autor <exeal@user...>

Log Message

fixed: TextViewer.processMessage spoiled some key events.

Ändern Zusammenfassung

Diff

diff -r 794e728f61b2 -r ccef6c9e26cb ascension/ascension/win32/window/detail/message-dispatcher.hpp
--- a/ascension/ascension/win32/window/detail/message-dispatcher.hpp Thu Apr 27 23:03:51 2017 +0900
+++ b/ascension/ascension/win32/window/detail/message-dispatcher.hpp Fri Apr 28 00:47:06 2017 +0900
@@ -38,7 +38,7 @@
3838 * @return The returned value from the window
3939 */
4040 LRESULT dispatch(HWND window, UINT message, WPARAM wp, LPARAM lp) {
41- bool dummy;
41+ bool dummy = false;
4242 return dispatch(window, message, wp, lp, dummy);
4343 }
4444
@@ -56,7 +56,7 @@
5656 template<typename DefaultProcedure>
5757 LRESULT dispatch(HWND window, UINT message, WPARAM wp, LPARAM lp, DefaultProcedure defaultProcedure) {
5858 assert(defaultProcedure != nullptr);
59- bool consumed;
59+ bool consumed = false;
6060 const LRESULT result = dispatch(window, message, wp, lp, consumed);
6161 if(consumed)
6262 return result;
diff -r 794e728f61b2 -r ccef6c9e26cb ascension/src/viewer/text-viewer-windows.cpp
--- a/ascension/src/viewer/text-viewer-windows.cpp Thu Apr 27 23:03:51 2017 +0900
+++ b/ascension/src/viewer/text-viewer-windows.cpp Fri Apr 28 00:47:06 2017 +0900
@@ -993,8 +993,7 @@
993993 static const UINT WM_THEMECHANGED = 0x31a;
994994 #endif
995995
996- using namespace ascension::texteditor::commands;
997-
996+ LRESULT result = 0; // should return 0 if processed almost all window messages
998997 switch(message) {
999998 #ifdef ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES
1000999 case WM_CLEAR:
@@ -1005,25 +1004,22 @@
10051004 texteditor::commands::CharacterDeletionCommand(*this, Direction::forward())();
10061005 }
10071006 consumed = true;
1008- return 0L;
1007+ break;
10091008 case WM_COPY:
10101009 if(auto caret = tryCaret(*this)) {
10111010 copySelection(*caret, true);
10121011 consumed = true;
10131012 }
1014- return 0L;
1015- case WM_CREATE: {
1016- const LRESULT result = onCreate(*reinterpret_cast<CREATESTRUCTW*>(lp), consumed);
1017- if(consumed)
1018- return result;
10191013 break;
1020- }
1014+ case WM_CREATE:
1015+ result = onCreate(*reinterpret_cast<CREATESTRUCTW*>(lp), consumed);
1016+ break;
10211017 case WM_CUT:
10221018 if(auto caret = tryCaret(*this)) {
10231019 cutSelection(*caret, true);
10241020 consumed = true;
10251021 }
1026- return 0L;
1022+ break;
10271023 #endif // ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES
10281024 #ifndef ASCENSION_NO_ACTIVE_ACCESSIBILITY
10291025 case WM_GETOBJECT:
@@ -1051,7 +1047,7 @@
10511047 case WM_PASTE:
10521048 texteditor::commands::PasteCommand(*this, false)();
10531049 consumed = true;
1054- return 0L;
1050+ break;
10551051 #endif // ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES
10561052 case WM_SETTEXT:
10571053 if(auto caret = tryCaret(*this)) {
@@ -1059,17 +1055,19 @@
10591055 caret->replaceSelection(String(reinterpret_cast<const Char*>(lp)), false);
10601056 consumed = true;
10611057 }
1062- return 0L;
1058+ break;
10631059 #ifdef ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES
10641060 case WM_UNDO:
10651061 texteditor::commands::UndoCommand(*this, false)();
10661062 consumed = true;
1067- return 0L;
1063+ break;
10681064 #endif // ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES
10691065 // dispatch message into handler
10701066 case WM_CAPTURECHANGED:
10711067 onCaptureChanged(win32::Handle<HWND>(reinterpret_cast<HWND>(lp)), consumed);
1072- return consumed ? 0 : 1;
1068+ if(consumed)
1069+ return 0;
1070+ break;
10731071 case WM_CHAR:
10741072 case WM_SYSCHAR:
10751073 case WM_UNICHAR:
@@ -1085,29 +1083,33 @@
10851083 && ::GetWindowThreadProcessId(pointedWindow, nullptr) == ::GetWindowThreadProcessId(handle().get(), nullptr))
10861084 mouseVanisher_.hideCursor();
10871085 }
1088- } else
1089- break;
1090- return consumed ? 0 : 1;
1086+ }
1087+ break;
10911088 case WM_COMMAND:
10921089 onCommand(LOWORD(wp), HIWORD(wp), win32::Handle<HWND>(reinterpret_cast<HWND>(lp)), consumed);
1093- return consumed ? 0 : 1;
1090+ break;
10941091 case WM_CONTEXTMENU: {
10951092 const widgetapi::event::LocatedUserInput input(win32::makeMouseLocation<graphics::Point>(lp), widgetapi::event::MouseButtons(), win32::makeKeyboardModifiers());
10961093 MSG native;
10971094 nativeMessage(*this, message, wp, lp, native);
10981095 showContextMenu(input, &native);
1099- return (consumed = true), 0;
1096+ consumed = true;
1097+ break;
11001098 }
11011099 case WM_DESTROY:
11021100 onDestroy(consumed);
1103- return consumed ? 0 : 1;
1101+ break;
11041102 case WM_ERASEBKGND:
11051103 onEraseBkgnd(win32::Handle<HDC>(reinterpret_cast<HDC>(wp)), consumed);
11061104 return consumed ? TRUE : FALSE;
11071105 case WM_GETFONT:
1108- return (consumed = true), reinterpret_cast<LRESULT>(onGetFont().get());
1106+ result = reinterpret_cast<LRESULT>(onGetFont().get());
1107+ consumed = true;
1108+ break;
11091109 case WM_HSCROLL:
1110- return (consumed = true), onHScroll(LOWORD(wp), HIWORD(wp), win32::borrowed(reinterpret_cast<HWND>(lp))), 0;
1110+ onHScroll(LOWORD(wp), HIWORD(wp), win32::borrowed(reinterpret_cast<HWND>(lp)));
1111+ consumed = true;
1112+ break;
11111113 // case WM_INPUTLANGCHANGE:
11121114 // if(auto caret = tryCaret(*this))
11131115 // return static_cast<detail::InputEventHandler&>(*caret).handleInputEvent(message, wp, lp, consumed); // $friendly-access
@@ -1149,13 +1151,23 @@
11491151 break;
11501152 }
11511153 case WM_KEYDOWN:
1152- case WM_SYSKEYDOWN:
1153- return (consumed = true), keyPressed(makeKeyInput(wp, lp)), 0;
1154+ case WM_SYSKEYDOWN: {
1155+ auto e(makeKeyInput(wp, lp));
1156+ keyPressed(e);
1157+ consumed = e.isConsumed();
1158+ break;
1159+ }
11541160 case WM_KEYUP:
1155- case WM_SYSKEYUP:
1156- return (consumed = true), keyReleased(makeKeyInput(wp, lp)), 0;
1161+ case WM_SYSKEYUP: {
1162+ auto e(makeKeyInput(wp, lp));
1163+ keyReleased(e);
1164+ consumed = e.isConsumed();
1165+ break;
1166+ }
11571167 case WM_KILLFOCUS:
1158- return (consumed = true), focusAboutToBeLost(widgetapi::event::Event()), 0;
1168+ focusAboutToBeLost(widgetapi::event::Event());
1169+ consumed = true;
1170+ break;
11591171 case WM_LBUTTONDBLCLK:
11601172 fireMouseDoubleClicked(win32::makeMouseButtonInput(widgetapi::event::BUTTON1_DOWN, wp, lp));
11611173 consumed = true;
@@ -1207,7 +1219,8 @@
12071219 const auto dc(win32::borrowed(ps.hdc));
12081220 paint(graphics::PaintContext(graphics::RenderingContext2D(dc), fromNative<graphics::Rectangle>(ps.rcPaint)));
12091221 ::EndPaint(handle().get(), &ps);
1210- return 0;
1222+ consumed = true;
1223+ break;
12111224 }
12121225 case WM_RBUTTONDBLCLK:
12131226 fireMouseDoubleClicked(win32::makeMouseButtonInput(widgetapi::event::BUTTON3_DOWN, wp, lp));
@@ -1227,30 +1240,52 @@
12271240 return TRUE;
12281241 break;
12291242 case WM_SETFOCUS:
1230- return (consumed = true), focusGained(widgetapi::event::Event()), 0;
1243+ focusGained(widgetapi::event::Event());
1244+ consumed = true;
1245+ break;
12311246 case WM_SIZE:
1232- return (consumed = true), resized(graphics::Dimension(graphics::geometry::_dx = LOWORD(lp), graphics::geometry::_dy = HIWORD(lp))), 0;
1247+ resized(graphics::Dimension(graphics::geometry::_dx = LOWORD(lp), graphics::geometry::_dy = HIWORD(lp)));
1248+ consumed = true;
1249+ break;
12331250 case WM_STYLECHANGED:
1234- return (consumed = true), onStyleChanged(static_cast<int>(wp), *reinterpret_cast<STYLESTRUCT*>(lp)), 0;
1251+ onStyleChanged(static_cast<int>(wp), *reinterpret_cast<STYLESTRUCT*>(lp));
1252+ consumed = true;
1253+ break;
12351254 case WM_STYLECHANGING:
1236- return (consumed = true), onStyleChanging(static_cast<int>(wp), *reinterpret_cast<STYLESTRUCT*>(lp)), 0;
1255+ onStyleChanging(static_cast<int>(wp), *reinterpret_cast<STYLESTRUCT*>(lp));
1256+ consumed = true;
1257+ break;
12371258 case WM_SYSCOLORCHANGE:
1238- return (consumed = true), onSysColorChange(), 0;
1259+ onSysColorChange();
1260+ consumed = true;
1261+ break;
12391262 case WM_THEMECHANGED:
1240- return (consumed = true), onThemeChanged(), 0;
1263+ onThemeChanged();
1264+ consumed = true;
1265+ break;
12411266 case WM_TIMER:
1242- return (consumed = true), onTimer(static_cast<UINT_PTR>(wp), reinterpret_cast<TIMERPROC>(lp)), 0;
1267+ onTimer(static_cast<UINT_PTR>(wp), reinterpret_cast<TIMERPROC>(lp));
1268+ consumed = true;
1269+ break;
12431270 case WM_VSCROLL:
1244- return (consumed = true), onVScroll(LOWORD(wp), HIWORD(wp), win32::borrowed(reinterpret_cast<HWND>(lp))), 0;
1271+ onVScroll(LOWORD(wp), HIWORD(wp), win32::borrowed(reinterpret_cast<HWND>(lp)));
1272+ consumed = true;
1273+ break;
12451274 case WM_XBUTTONDBLCLK:
1246- return (consumed = true), fireMouseDoubleClicked(win32::makeMouseButtonInput((GET_XBUTTON_WPARAM(wp) == XBUTTON1) ? widgetapi::event::BUTTON4_DOWN : widgetapi::event::BUTTON5_DOWN, GET_KEYSTATE_WPARAM(wp), lp)), 0;
1275+ fireMouseDoubleClicked(win32::makeMouseButtonInput((GET_XBUTTON_WPARAM(wp) == XBUTTON1) ? widgetapi::event::BUTTON4_DOWN : widgetapi::event::BUTTON5_DOWN, GET_KEYSTATE_WPARAM(wp), lp));
1276+ consumed = true;
1277+ break;
12471278 case WM_XBUTTONDOWN:
1248- return (consumed = true), fireMousePressed(win32::makeMouseButtonInput((GET_XBUTTON_WPARAM(wp) == XBUTTON1) ? widgetapi::event::BUTTON4_DOWN : widgetapi::event::BUTTON5_DOWN, GET_KEYSTATE_WPARAM(wp), lp)), 0;
1279+ fireMousePressed(win32::makeMouseButtonInput((GET_XBUTTON_WPARAM(wp) == XBUTTON1) ? widgetapi::event::BUTTON4_DOWN : widgetapi::event::BUTTON5_DOWN, GET_KEYSTATE_WPARAM(wp), lp));
1280+ consumed = true;
1281+ break;
12491282 case WM_XBUTTONUP:
1250- return (consumed = true), fireMouseReleased(win32::makeMouseButtonInput((GET_XBUTTON_WPARAM(wp) == XBUTTON1) ? widgetapi::event::BUTTON4_DOWN : widgetapi::event::BUTTON5_DOWN, GET_KEYSTATE_WPARAM(wp), lp)), 0;
1283+ fireMouseReleased(win32::makeMouseButtonInput((GET_XBUTTON_WPARAM(wp) == XBUTTON1) ? widgetapi::event::BUTTON4_DOWN : widgetapi::event::BUTTON5_DOWN, GET_KEYSTATE_WPARAM(wp), lp));
1284+ consumed = true;
1285+ break;
12511286 }
12521287
1253- return win32::CustomControl<TextViewer>::processMessage(message, wp, lp, consumed);
1288+ return consumed ? result : win32::CustomControl<TextViewer>::processMessage(message, wp, lp, consumed);
12541289 }
12551290
12561291 namespace {
Show on old repository browser