Revision | ccef6c9e26cb11b28be56e0003206cfce1eb4b27 (tree) |
---|---|
Zeit | 2017-04-28 00:47:06 |
Autor | <exeal@user...> |
fixed: TextViewer.processMessage spoiled some key events.
@@ -38,7 +38,7 @@ | ||
38 | 38 | * @return The returned value from the window |
39 | 39 | */ |
40 | 40 | LRESULT dispatch(HWND window, UINT message, WPARAM wp, LPARAM lp) { |
41 | - bool dummy; | |
41 | + bool dummy = false; | |
42 | 42 | return dispatch(window, message, wp, lp, dummy); |
43 | 43 | } |
44 | 44 |
@@ -56,7 +56,7 @@ | ||
56 | 56 | template<typename DefaultProcedure> |
57 | 57 | LRESULT dispatch(HWND window, UINT message, WPARAM wp, LPARAM lp, DefaultProcedure defaultProcedure) { |
58 | 58 | assert(defaultProcedure != nullptr); |
59 | - bool consumed; | |
59 | + bool consumed = false; | |
60 | 60 | const LRESULT result = dispatch(window, message, wp, lp, consumed); |
61 | 61 | if(consumed) |
62 | 62 | return result; |
@@ -993,8 +993,7 @@ | ||
993 | 993 | static const UINT WM_THEMECHANGED = 0x31a; |
994 | 994 | #endif |
995 | 995 | |
996 | - using namespace ascension::texteditor::commands; | |
997 | - | |
996 | + LRESULT result = 0; // should return 0 if processed almost all window messages | |
998 | 997 | switch(message) { |
999 | 998 | #ifdef ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES |
1000 | 999 | case WM_CLEAR: |
@@ -1005,25 +1004,22 @@ | ||
1005 | 1004 | texteditor::commands::CharacterDeletionCommand(*this, Direction::forward())(); |
1006 | 1005 | } |
1007 | 1006 | consumed = true; |
1008 | - return 0L; | |
1007 | + break; | |
1009 | 1008 | case WM_COPY: |
1010 | 1009 | if(auto caret = tryCaret(*this)) { |
1011 | 1010 | copySelection(*caret, true); |
1012 | 1011 | consumed = true; |
1013 | 1012 | } |
1014 | - return 0L; | |
1015 | - case WM_CREATE: { | |
1016 | - const LRESULT result = onCreate(*reinterpret_cast<CREATESTRUCTW*>(lp), consumed); | |
1017 | - if(consumed) | |
1018 | - return result; | |
1019 | 1013 | break; |
1020 | - } | |
1014 | + case WM_CREATE: | |
1015 | + result = onCreate(*reinterpret_cast<CREATESTRUCTW*>(lp), consumed); | |
1016 | + break; | |
1021 | 1017 | case WM_CUT: |
1022 | 1018 | if(auto caret = tryCaret(*this)) { |
1023 | 1019 | cutSelection(*caret, true); |
1024 | 1020 | consumed = true; |
1025 | 1021 | } |
1026 | - return 0L; | |
1022 | + break; | |
1027 | 1023 | #endif // ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES |
1028 | 1024 | #ifndef ASCENSION_NO_ACTIVE_ACCESSIBILITY |
1029 | 1025 | case WM_GETOBJECT: |
@@ -1051,7 +1047,7 @@ | ||
1051 | 1047 | case WM_PASTE: |
1052 | 1048 | texteditor::commands::PasteCommand(*this, false)(); |
1053 | 1049 | consumed = true; |
1054 | - return 0L; | |
1050 | + break; | |
1055 | 1051 | #endif // ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES |
1056 | 1052 | case WM_SETTEXT: |
1057 | 1053 | if(auto caret = tryCaret(*this)) { |
@@ -1059,17 +1055,19 @@ | ||
1059 | 1055 | caret->replaceSelection(String(reinterpret_cast<const Char*>(lp)), false); |
1060 | 1056 | consumed = true; |
1061 | 1057 | } |
1062 | - return 0L; | |
1058 | + break; | |
1063 | 1059 | #ifdef ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES |
1064 | 1060 | case WM_UNDO: |
1065 | 1061 | texteditor::commands::UndoCommand(*this, false)(); |
1066 | 1062 | consumed = true; |
1067 | - return 0L; | |
1063 | + break; | |
1068 | 1064 | #endif // ASCENSION_HANDLE_STANDARD_EDIT_CONTROL_MESSAGES |
1069 | 1065 | // dispatch message into handler |
1070 | 1066 | case WM_CAPTURECHANGED: |
1071 | 1067 | onCaptureChanged(win32::Handle<HWND>(reinterpret_cast<HWND>(lp)), consumed); |
1072 | - return consumed ? 0 : 1; | |
1068 | + if(consumed) | |
1069 | + return 0; | |
1070 | + break; | |
1073 | 1071 | case WM_CHAR: |
1074 | 1072 | case WM_SYSCHAR: |
1075 | 1073 | case WM_UNICHAR: |
@@ -1085,29 +1083,33 @@ | ||
1085 | 1083 | && ::GetWindowThreadProcessId(pointedWindow, nullptr) == ::GetWindowThreadProcessId(handle().get(), nullptr)) |
1086 | 1084 | mouseVanisher_.hideCursor(); |
1087 | 1085 | } |
1088 | - } else | |
1089 | - break; | |
1090 | - return consumed ? 0 : 1; | |
1086 | + } | |
1087 | + break; | |
1091 | 1088 | case WM_COMMAND: |
1092 | 1089 | onCommand(LOWORD(wp), HIWORD(wp), win32::Handle<HWND>(reinterpret_cast<HWND>(lp)), consumed); |
1093 | - return consumed ? 0 : 1; | |
1090 | + break; | |
1094 | 1091 | case WM_CONTEXTMENU: { |
1095 | 1092 | const widgetapi::event::LocatedUserInput input(win32::makeMouseLocation<graphics::Point>(lp), widgetapi::event::MouseButtons(), win32::makeKeyboardModifiers()); |
1096 | 1093 | MSG native; |
1097 | 1094 | nativeMessage(*this, message, wp, lp, native); |
1098 | 1095 | showContextMenu(input, &native); |
1099 | - return (consumed = true), 0; | |
1096 | + consumed = true; | |
1097 | + break; | |
1100 | 1098 | } |
1101 | 1099 | case WM_DESTROY: |
1102 | 1100 | onDestroy(consumed); |
1103 | - return consumed ? 0 : 1; | |
1101 | + break; | |
1104 | 1102 | case WM_ERASEBKGND: |
1105 | 1103 | onEraseBkgnd(win32::Handle<HDC>(reinterpret_cast<HDC>(wp)), consumed); |
1106 | 1104 | return consumed ? TRUE : FALSE; |
1107 | 1105 | case WM_GETFONT: |
1108 | - return (consumed = true), reinterpret_cast<LRESULT>(onGetFont().get()); | |
1106 | + result = reinterpret_cast<LRESULT>(onGetFont().get()); | |
1107 | + consumed = true; | |
1108 | + break; | |
1109 | 1109 | 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; | |
1111 | 1113 | // case WM_INPUTLANGCHANGE: |
1112 | 1114 | // if(auto caret = tryCaret(*this)) |
1113 | 1115 | // return static_cast<detail::InputEventHandler&>(*caret).handleInputEvent(message, wp, lp, consumed); // $friendly-access |
@@ -1149,13 +1151,23 @@ | ||
1149 | 1151 | break; |
1150 | 1152 | } |
1151 | 1153 | 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 | + } | |
1154 | 1160 | 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 | + } | |
1157 | 1167 | case WM_KILLFOCUS: |
1158 | - return (consumed = true), focusAboutToBeLost(widgetapi::event::Event()), 0; | |
1168 | + focusAboutToBeLost(widgetapi::event::Event()); | |
1169 | + consumed = true; | |
1170 | + break; | |
1159 | 1171 | case WM_LBUTTONDBLCLK: |
1160 | 1172 | fireMouseDoubleClicked(win32::makeMouseButtonInput(widgetapi::event::BUTTON1_DOWN, wp, lp)); |
1161 | 1173 | consumed = true; |
@@ -1207,7 +1219,8 @@ | ||
1207 | 1219 | const auto dc(win32::borrowed(ps.hdc)); |
1208 | 1220 | paint(graphics::PaintContext(graphics::RenderingContext2D(dc), fromNative<graphics::Rectangle>(ps.rcPaint))); |
1209 | 1221 | ::EndPaint(handle().get(), &ps); |
1210 | - return 0; | |
1222 | + consumed = true; | |
1223 | + break; | |
1211 | 1224 | } |
1212 | 1225 | case WM_RBUTTONDBLCLK: |
1213 | 1226 | fireMouseDoubleClicked(win32::makeMouseButtonInput(widgetapi::event::BUTTON3_DOWN, wp, lp)); |
@@ -1227,30 +1240,52 @@ | ||
1227 | 1240 | return TRUE; |
1228 | 1241 | break; |
1229 | 1242 | case WM_SETFOCUS: |
1230 | - return (consumed = true), focusGained(widgetapi::event::Event()), 0; | |
1243 | + focusGained(widgetapi::event::Event()); | |
1244 | + consumed = true; | |
1245 | + break; | |
1231 | 1246 | 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; | |
1233 | 1250 | 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; | |
1235 | 1254 | 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; | |
1237 | 1258 | case WM_SYSCOLORCHANGE: |
1238 | - return (consumed = true), onSysColorChange(), 0; | |
1259 | + onSysColorChange(); | |
1260 | + consumed = true; | |
1261 | + break; | |
1239 | 1262 | case WM_THEMECHANGED: |
1240 | - return (consumed = true), onThemeChanged(), 0; | |
1263 | + onThemeChanged(); | |
1264 | + consumed = true; | |
1265 | + break; | |
1241 | 1266 | 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; | |
1243 | 1270 | 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; | |
1245 | 1274 | 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; | |
1247 | 1278 | 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; | |
1249 | 1282 | 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; | |
1251 | 1286 | } |
1252 | 1287 | |
1253 | - return win32::CustomControl<TextViewer>::processMessage(message, wp, lp, consumed); | |
1288 | + return consumed ? result : win32::CustomControl<TextViewer>::processMessage(message, wp, lp, consumed); | |
1254 | 1289 | } |
1255 | 1290 | |
1256 | 1291 | namespace { |