Page MenuHomeWildfire Games

Fix shiftlag and implement HotkeyDown event, change HotkeyPress event to be non-repeating
ClosedPublic

Authored by bb on Mar 17 2018, 6:59 PM.

Details

Summary

Currently the onPress hotkey action for gui elements are called repeatedly when holding a hotkey (except for special keys on linux due to #4915). However in most cases only the first press is relevant and we can save perfomance with only executing on the first such message. massbarter and batchtrain are examples of such. Some other hotkey (like tab scrolling and idle unit) still need the repeated events and get so.

Also generalize the GlobalHotkeys from rP22851 to allow different events.

Test Plan

Give warnings on the different events for different hotkeys
Make sure all hotkeys still work correctly and have the correct behaviour
This should fix the performance drain on windows when holding shift.
yell at linux for not repeating special keys

Note that all GlobalHotkey calls got a treatment.

Diff Detail

Repository
rP 0 A.D. Public Repository
Branch
/ps/trunk
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 5639
Build 9483: Vulcan BuildJenkins
Build 9482: arc lint + arc unit

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
bb marked an inline comment as done.Sep 5 2019, 1:41 PM
bb added inline comments.
binaries/data/mods/public/gui/common/tab_buttons.xml
9

One can't assume <10. A mod could very well have a use case for many more tabs, hence the scrolling can be useful

binaries/data/mods/public/gui/summary/summary.xml
25

see D1206

bb updated this revision to Diff 9690.Sep 9 2019, 8:28 PM

Notice that mouseWheel and mouseButton events are never repeated (at least that is what testing says here)

Vulcan added a comment.Sep 9 2019, 8:29 PM

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/117/display/redirect

Vulcan added a comment.Sep 9 2019, 8:36 PM

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/ps/Hotkey.h
|  64| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  64| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/626/display/redirect

bb updated this revision to Diff 10140.Oct 12 2019, 11:06 PM

Rebase

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/960/display/redirect

bb added inline comments.Oct 12 2019, 11:08 PM
source/ps/Hotkey.cpp
154–155

One could notice that this change actually doesn't do anything since a HOTKEYDOWN is always followed after a HOTKEYPRESS and stops at HOTKEUYP

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/445/display/redirect

bb updated this revision to Diff 10141.Oct 12 2019, 11:11 PM

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/961/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/446/display/redirect

Stan added inline comments.Oct 12 2019, 11:25 PM
source/graphics/CameraController.cpp
644 ↗(On Diff #10141)

Could invert that to make it early return :)

source/ps/CConsole.cpp
638 ↗(On Diff #9539)

Still missing :)

source/ps/Hotkey.h
43 ↗(On Diff #10141)

Do they need to be signed ints ?

bb updated this revision to Diff 11381.Feb 16 2020, 10:23 PM

Rebase

source/graphics/CameraController.cpp
644 ↗(On Diff #10141)

I would not neglect the odds of more (new) hotkeys being added here, and then we can't (or at least we shouldn't) invert the case.

source/ps/Hotkey.h
43 ↗(On Diff #10141)

SDL documentation appears to say: negative

bb updated this revision to Diff 11382.Feb 16 2020, 10:29 PM

Fix years

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/graphics/CameraController.cpp
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1780/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1781/display/redirect

bb added inline comments.Feb 17 2020, 12:15 AM
binaries/data/mods/public/gui/session/minimap/MiniMapIdleWorkerButton.js
9–10 ↗(On Diff #11382)

Feeling unhappy about this addition. The cpp code change in this revision only adds the keyDown for hotkey events, maybe we should also add it for other events (like clicking a button)

Freagarach updated the Trac tickets for this revision.Apr 17 2020, 9:27 PM
bb updated the Trac tickets for this revision.May 11 2020, 11:24 PM
bb updated this revision to Diff 11865.May 14 2020, 10:07 PM

Rebase, Global hotkeys caused trouble since rP22851 only allows for 1 eventType. Inlined a partial fix for this (see TODO's)

Please yell at my horrible cpp skills

bb updated this revision to Diff 11866.May 14 2020, 10:08 PM

Remove debug code

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2121/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2122/display/redirect

bb edited the summary of this revision. (Show Details)May 15 2020, 9:14 PM
bb edited the test plan for this revision. (Show Details)
bb updated this revision to Diff 11870.May 15 2020, 9:15 PM

Fix TODO's

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/gui/Scripting/JSInterface_GUIManager.h
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"

source/gui/Scripting/JSInterface_GUIManager.h
|  24| namespace·JSI_GUIManager
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_GUIManager{' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/gui/tests/test_GuiManager.h
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"

source/gui/tests/test_GuiManager.h
|  29| class·TestGuiManager·:·public·CxxTest::TestSuite
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classTestGuiManager:' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/gui/Scripting/JSInterface_GUIManager.cpp
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2124/display/redirect

Stan added inline comments.May 15 2020, 9:40 PM
binaries/data/mods/public/gui/session/minimap/MiniMapIdleWorkerButton.js
9 ↗(On Diff #11870)

Might want to rename it onKeyDown ?

bb updated this revision to Diff 11871.EditedMay 15 2020, 10:04 PM

Rename to Keydown and years

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/gui/tests/test_GuiManager.h
|  29| class·TestGuiManager·:·public·CxxTest::TestSuite
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classTestGuiManager:' is invalid C code. Use --std or --language to configure the language.

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/gui/Scripting/JSInterface_GUIManager.h
|  24| namespace·JSI_GUIManager
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_GUIManager{' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2125/display/redirect

wraitii requested changes to this revision.EditedMay 17 2020, 2:15 PM
wraitii added a subscriber: wraitii.

I am requesting changes over https://code.wildfiregames.com/D1398#inline-53440 which needs to be fixed before committing. This is otherwise in a commit-worthy state to me.

Thanks for working on this :)


This seems like a useful improvement to me. The addition of "Press" is useful to trigger something right away and not wait for "Up" (in particular for batch-training this is indeed useful). The distinction between "down" and "press" seems to follow other event handling libraries (such as .NET).

In the future, we might consider handling "repeat" ourselves.
It might also be worth considering not running some triggers more than once per simulation turn, if data hasn't changed.


I am not a huge fan of "Press". Maybe "DownOnce" would be more explicit. But TBH this seems like a rather minor thing, and I would be OK with committing "Press".

source/gui/CGUI.cpp
80

This copies the string every time, which is rather unlucky for performance.

You can either go with a double-ternary, or a function returning a constant reference.
The double-ternary is probably easier, both compile to the same code anyways:

const CStr& eventName = ev->ev.type == SDL_HOTKEYPRESS ? EventNamePress : 
    ev->ev.type == SDL_HOTKEYDOWN ? EventNameKeyDown : EventNameRelease

See https://godbolt.org/z/dI82LT

91

This isn't consistent with global hotkeys. If we are passing an event name, why is the event always GUIM_PRESSED?
It seems we should instead have GUIM_KEYDOWN/GUIM_KEYUP/GUIM_PRESSED.

source/gui/CGUI.h
140 ↗(On Diff #11871)

It seems more natural to me that eventName would go first.

611 ↗(On Diff #11871)

This is difficult to read.

I would actually suggest using clauses inside the class:

using HotkeyName = CStr;
using EventName = CStr;
// maybe not for this one.
using JSFunction = JS::PersistentRootedValue;

and then this becomes

std::map<HotkeyName, std::map<EventName, JSFunction>> m_GlobalHotkeys;

and you can almost skip the comment, which further seems kind of useless (a global hotkey, by definition, would call a global function, we aren't going to copy them for all objects in the game...)

(if you go for this, make sure to change the map above and the const CStr below).


(It might be better to do this later)

source/ps/Hotkey.cpp
154–155

This isn't necessary if you implement the change below.

321

I would trigger this after HOTKEYDOWN to be honest. This would make it possible to not handle HOTKEYPRESSED explicitly in HotkeyStateChange since we are guaranteed that HOTKEYDOWN triggers first.

source/ps/Hotkey.h
29 ↗(On Diff #11871)

Perhaps

SDL_HOTKEYPRESS is triggered once when the required keys are pushed down.
SDL_HOTKEYDOWN is also triggered, and may trigger repeatedly (based on OS setting).
Finally, SDL_HOTKEYUP is triggered once on release of any key.

The working is slightly weird for me as is.

This revision now requires changes to proceed.May 17 2020, 2:15 PM
bb updated this revision to Diff 11923.May 19 2020, 4:21 PM
bb marked an inline comment as done.

Fix comments

bb added a comment.May 19 2020, 4:21 PM

I am not a huge fan of "Press". Maybe "DownOnce" would be more explicit. But TBH this seems like a rather minor thing, and I would be OK with committing "Press".

Well DownOnce doesn't really work either, since it is also fired when we press longer. Note that renaming this needs more changes than is scoped in this patch, since one needs to consider mousebuttons and other events too, they trigger press too.

In the future, we might consider handling "repeat" ourselves.

Using platform independent SDL has benefits too.

source/gui/CGUI.cpp
91

Inconsistency with globalhotkeys not introduced in this patch

GUIM_PRESSED => I am stupid

source/gui/CGUI.h
140 ↗(On Diff #11871)

it is not, if one has several events per key, it is kind of expected that the actions are at least somewhat related (ofc technically there is no such restriction, just common use case), so one is more likely to group the events for 1 hotkey together, hence hotkey should go first.

source/ps/Hotkey.cpp
321

This is not the whole story, is it? HotkeyPress is triggered once, while HOTKEYDOWN is several times, but a Press is always triggered. So in fact it is better to leave the order this way (first press then keydown), and change the check above to Press.

wraitii added inline comments.May 19 2020, 4:24 PM
source/ps/Hotkey.cpp
321

That would work too, yes.

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/1635/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/gui/tests/test_GuiManager.h
|  29| class·TestGuiManager·:·public·CxxTest::TestSuite
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classTestGuiManager:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/gui/Scripting/JSInterface_GUIManager.h
|  24| namespace·JSI_GUIManager
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_GUIManager{' is invalid C code. Use --std or --language to configure the language.

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2161/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/747/display/redirect

wraitii added inline comments.May 19 2020, 4:46 PM
source/ps/Hotkey.cpp
329

Seems you've switched hotkeyPressNotification and hotkeyDownNotification here, buth that's certainly not why it doesn't work in tests.

bb updated this revision to Diff 11924.May 19 2020, 4:56 PM

Try to please bots

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/gui/Scripting/JSInterface_GUIManager.h
|  24| namespace·JSI_GUIManager
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_GUIManager{' is invalid C code. Use --std or --language to configure the language.

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/gui/tests/test_GuiManager.h
|  29| class·TestGuiManager·:·public·CxxTest::TestSuite
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classTestGuiManager:' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2162/display/redirect

bb updated this revision to Diff 11925.May 19 2020, 5:24 PM

Treat new global hotkey and fix naming issue

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/gui/Scripting/JSInterface_GUIManager.h
|  24| namespace·JSI_GUIManager
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_GUIManager{' is invalid C code. Use --std or --language to configure the language.

source/gui/tests/test_GuiManager.h
|  29| class·TestGuiManager·:·public·CxxTest::TestSuite
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classTestGuiManager:' is invalid C code. Use --std or --language to configure the language.

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2163/display/redirect

wraitii accepted this revision.May 19 2020, 6:09 PM
bb updated this revision to Diff 11929.May 19 2020, 8:45 PM

Happy this is not committed yet: there was a segfault due to faulty initialisation. It could be triggerd by pressing the structree hotkey repeatedly. Also the chat hotkeys appeared broken.

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/gui/tests/test_GuiManager.h
|  29| class·TestGuiManager·:·public·CxxTest::TestSuite
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classTestGuiManager:' is invalid C code. Use --std or --language to configure the language.

source/gui/CGUI.h
|  51| class·CGUI
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCGUI{' is invalid C code. Use --std or --language to configure the language.

source/gui/Scripting/JSInterface_GUIManager.h
|  24| namespace·JSI_GUIManager
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_GUIManager{' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStrW:' is invalid C code. Use --std or --language to configure the language.

source/ps/Hotkey.h
|  62| The line belonging to the following result cannot be printed because it refers to a line that doesn't seem to exist in the given file.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classCStr:' is invalid C code. Use --std or --language to configure the language.

source/main.cpp
|   0| }
|    | [NORMAL] CPPCheckBear (toomanyconfigs):
|    | Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.
Executing section JS...
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/2165/display/redirect

This revision was not accepted when it landed; it landed in state Needs Review.May 26 2020, 11:47 PM
Closed by commit rP23701: Implement keyDown event (authored by bb). · Explain Why
This revision was automatically updated to reflect the committed changes.