Opened 8 years ago
Last modified 15 months ago
#3870 closed defect
[PATCH]Opening team chat with key T automatically writes a t in input dialog — at Version 23
Reported by: | Imarok | Owned by: | |
---|---|---|---|
Priority: | Must Have | Milestone: | Alpha 26 |
Component: | Core engine | Keywords: | patch |
Cc: | Patch: |
Description (last modified by )
On windows, opening the team chat window with key T automatically writes a t in input dialog A Patch could be to open the team chat window not until the t key has been released.
Change History (26)
comment:1 by , 8 years ago
Cc: | added |
---|---|
Description: | modified (diff) |
comment:2 by , 8 years ago
comment:3 by , 8 years ago
Cc: | removed |
---|
comment:4 by , 8 years ago
" but only when the dialog is opened the first time": When you mean the bug only appears the first time you open team chat via "t" and after sending a message and reopen team chat with "t" the bug doesnt occur: thats wrong. The bug always appears. I'm using windows.
comment:5 by , 8 years ago
I will try it after downloading visual c++ and the source. ;) Do you mean the menu.js in: ps/trunk/binaries/data/mods/public/gui/session/menu.js?
comment:6 by , 8 years ago
There's no need to use visual C++. The changes should be done in the scripts (*.js files), so you don't have to compile those. And we offer a precompiled version of the game for windows.
So you should download the source, then modify that file in a good text editor (like notepad++), and then you can just run it from the precompiled binary (under binaries/system).
comment:7 by , 8 years ago
Seems logic :D
I changed the menu.js at binaries\data\mods\public\gui\session to
function toggleChatWindow(teamChat) { if (g_Disconnected) return; let chatWindow = Engine.GetGUIObjectByName("chatDialogPanel"); let chatInput = Engine.GetGUIObjectByName("chatInput"); let hidden = chatWindow.hidden; closeOpenDialogs(); if (hidden) { setTeamChat(teamChat); chatInput.focus(); } else { if (chatInput.caption.length) { submitChatInput(); return; } chatInput.caption = ""; } chatWindow.hidden = !hidden; chatInput.caption = ""; }
started 0ad with binaries/system/pyrogenesis.exe and the bug still remains :(
comment:9 by , 8 years ago
I installed the new alpha 20 3 hours ago :( I don't know if it happend in alpha 19
comment:10 by , 8 years ago
I reinstalled alpha 19 now. There the bug only occurs the first time in the running time of the program. In alpha 20 it occurs always.
comment:11 by , 8 years ago
Imarok, can you add a line like
warn("it works");
to that file (next to the line you added), just to assure that the modifications were read (and the game isn't reading the scripts from some other installation. You should see a yellow "It works" line appearing then every time you open the chat window.
comment:12 by , 8 years ago
I added this line, the warning came when pressing t but the bug stayed. I noticed pressing Ctrl+T opens the team chat window without writing t into the input box
comment:13 by , 8 years ago
I think the function toggleChatWindow in menu.js should consume the key event to stop its propagation/bubbling. But I don't know how (yet).
comment:14 by , 8 years ago
Another way would be to let the function wait until the key is unpressed.
comment:16 by , 8 years ago
To me this looks like CGUI.cpp
sending the press
event on SDL_HOTKEYDOWN
, while it should be SDL_HOTKEYUP
, as the latter one also waits for the button to be released.
Changing this however closes the chatbox again when typing t.
comment:17 by , 8 years ago
I suggest to only open the chat window with the hotkey on SDL_HOTKEYUP (as suggested by elexis) and close the chat window when a message is submitted or the dialog is cancelled. The second part is already implemented. The first part would mean to rename toggleChatWindow to openChatWindow and only open the chat window, if it isn't open. Additionally submitChatInput in messages.js should call closeChat in menu.js instead of toggleChatWindow.
The "else"-part in toggleChatWindow seems to be obsolete anyway, because the chat dialog in session.xml uses the function submitChatInput directly.
Do you agree? If so, I can do it.
by , 8 years ago
Attachment: | keyfix.patch added |
---|
change SDL_HOTKEYDOWN to SDL_HOTKEYUP and move the text input part
comment:19 by , 8 years ago
Keywords: | review patch added |
---|---|
Milestone: | Backlog → Alpha 21 |
Summary: | Opening team chat with key T automatically writes a t in input dialog → [PATCH]Opening team chat with key T automatically writes a t in input dialog |
comment:20 by , 8 years ago
Keywords: | simple review removed |
---|
Doesn't work fully here (linux):
- Escape doesn't close the chat dialog
- Enter sends the chat and opens it again
Also when moving code, the code should be optimized:
- operators like
||
should appear in the end of a line - those 2 ifs could be merged
Not sure if the comment would remain true after moving // else will return IN_PASS because we never used the button
But it seems that code path you moved is the one being triggered incorrectly.
by , 8 years ago
Attachment: | keyfixv2.patch added |
---|
fixes #3870 but the inserted tchat text doesn't get sended anymore
comment:21 by , 8 years ago
This patch fixes the bug but the inserted text doesn't get sent. I can't figure out why...
comment:22 by , 8 years ago
Keywords: | review added |
---|
comment:23 by , 8 years ago
Description: | modified (diff) |
---|---|
Priority: | Should Have → Must Have |
I heard this from others too, but I can't reproduce it. According to sanderd17, it has been like that since some time, but only when the dialog is opened the first time. Maybe it is a platform-dependent bug?
Can someone check if adding
chatInput.caption = "";
to the end offunction toggleChatWindow()
inmenu.js
is sufficient?If it truly is a platform-dependent bug, it might appear in other places too though...