Merge lp:~thenifker13-deactivatedaccount/widelands/trunk into lp:widelands

Proposed by Antonino Siena
Status: Work in progress
Proposed branch: lp:~thenifker13-deactivatedaccount/widelands/trunk
Merge into: lp:widelands
Diff against target: 265 lines (+90/-2)
15 files modified
src/editor/editorinteractive.cc (+3/-1)
src/editor/ui_menus/main_menu.cc (+16/-0)
src/editor/ui_menus/main_menu.h (+2/-0)
src/ui_basic/window.cc (+20/-0)
src/ui_basic/window.h (+1/-0)
src/ui_fsmenu/campaign_select.cc (+2/-0)
src/ui_fsmenu/loadgame.cc (+2/-0)
src/ui_fsmenu/mapselect.cc (+2/-0)
src/ui_fsmenu/scenario_select.cc (+2/-0)
src/wui/game_message_menu.cc (+4/-0)
src/wui/game_options_menu.cc (+22/-0)
src/wui/game_options_menu.h (+5/-0)
src/wui/interactive_player.cc (+3/-1)
src/wui/login_box.cc (+3/-0)
src/wui/story_message_box.cc (+3/-0)
To merge this branch: bzr merge lp:~thenifker13-deactivatedaccount/widelands/trunk
Reviewer Review Type Date Requested Status
Toni Förster Approve
Widelands Developers Pending
Review via email: mp+368235@code.launchpad.net

Description of the change

Window closing, opening OptionsMenu and exiting using the keyboard.

To post a comment you must log in.
Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5130. State: failed. Details: https://travis-ci.org/widelands/widelands/builds/540341469.
Appveyor build 4912. State: failed. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_thenifker13_widelands_trunk-4912.

9124. By Antonino Siena

Added space to comment

Revision history for this message
Toni Förster (stonerl) wrote :

When a window looses focus, it cannot be closed by ESC any more. E.g. open the stats menu and then the mini map. The mini map can be closed with ESC but not the stats menu. Instead, the main menu opens.

review: Needs Fixing
Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Is it possible to access all windows(like in a vector/array)?

Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5136. State: passed. Details: https://travis-ci.org/widelands/widelands/builds/540464281.
Appveyor build 4918. State: failed. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_thenifker13_widelands_trunk-4918.

Revision history for this message
GunChleoc (gunchleoc) wrote :

No, but you can access a Panel's children and parent internally. Have a look at Panel::do_think() to see how to iterate through a panel's children.

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Fixed it - will push it now!

9125. By Antonino Siena

When closing a window using ESCAPE will cause the next open window to gain focus

Revision history for this message
Toni Förster (stonerl) wrote :

LGTM :)

There are some menus in the game, e.g. the tutorial screen, that do not handle the ESC key. That's not part of the feature but if you'd like to tip your toes into, it would be much appreciated.

review: Approve
Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

I'm gonna look into these too, contemporary.

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

So you mean it should be implemented for 'story_message_box' too?

9126. By Antonino Siena

Allow ESCAPE to close story_message_box

9127. By Antonino Siena

Open and Close Editor menu using ESCAPE and exit from from Editor using ENTER

9128. By Antonino Siena

Added ESCAPE -> back functionality for main menu menues

Revision history for this message
GunChleoc (gunchleoc) wrote :

I have added some notes to the diff for further improvements that you can make.

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Forgot to add the binding there, thanks.

Yes I want to add a binding for GameMessageMenu too, but I didnt figure
yet out how to properly bind in this case.
I tried it previously like this:
/SDL_Keysym esc = SDL_Keysym{SDL_SCANCODE_ESCAPE, SDLK_ESCAPE,
KMOD_NONE, 0}; list->cancel.connect(boost::bind(&UI::Window::handle_key,
boost::ref(*this), _1, _2)(true, esc) );/

Ok I just removed the else case as it is not necessary because of return
in the if case.

Am 04.06.19 um 17:44 schrieb GunChleoc:
> I have added some notes to the diff for further improvements that you can make.
>
> Diff comments:
>
>> === modified file 'src/ui_fsmenu/loadgame.cc'
>> --- src/ui_fsmenu/loadgame.cc 2019-05-26 17:21:15 +0000
>> +++ src/ui_fsmenu/loadgame.cc 2019-06-04 12:56:27 +0000
>> @@ -170,6 +170,10 @@
>> }
>>
>> bool FullscreenMenuLoadGame::handle_key(bool down, SDL_Keysym code) {
>> + if (code.sym == SDLK_ESCAPE)
> You should be able to define load_or_save_.table_.cancel.connect instead.
>
>> + FullscreenMenuLoadGame::clicked_back();
>> + return true;
>> +
>> if (!down)
>> return false;
>>
>>
>> === modified file 'src/wui/game_message_menu.cc'
>> --- src/wui/game_message_menu.cc 2019-05-26 17:21:15 +0000
>> +++ src/wui/game_message_menu.cc 2019-06-04 12:56:27 +0000
>> @@ -362,6 +362,10 @@
>> * Handle message menu hotkeys.
>> */
>> bool GameMessageMenu::handle_key(bool down, SDL_Keysym code) {
>> + // Special ESCAPE handling
>> + // When ESCAPE is pressed down is false
>> + if (code.sym == SDLK_ESCAPE)
>> + return UI::Window::handle_key(true, code);
> The difference for ths function is that it has
>
>
> return list->handle_key(down, code);
>
> on the bottom. Do an if-else around that and you might not need the special handling.
>
>> if (down) {
>> switch (code.sym) {
>> // Don't forget to change the tooltips if any of these get reassigned
>>
>> === modified file 'src/wui/game_options_menu.cc'
>> --- src/wui/game_options_menu.cc 2019-03-18 07:11:02 +0000
>> +++ src/wui/game_options_menu.cc 2019-06-04 12:56:27 +0000
>> @@ -101,6 +101,28 @@
>> center_to_parent();
>> }
>>
>> +bool GameOptionsMenu::handle_key(bool down, SDL_Keysym code) {
>> + if (down) {
>> + switch (code.sym) {
>> + case SDLK_ESCAPE:
>> + die();
>> + return true;
>> + case SDLK_RETURN:
>> + if ((code.mod & (KMOD_LCTRL | KMOD_RCTRL))) {
>> + igb_.end_modal<UI::Panel::Returncodes>(UI::Panel::Returncodes::kBack);
>> + return true;
>> + }
>> + else
> We try to avoid if/else/for without {}, because leaving them out can cause bugs.
>
>> + new GameExitConfirmBox(*get_parent(), igb_);
>> + die();
>> + return true;
>> + default:
>> + break;
>> + }
>> + }
>> + return UI::Window::handle_key(down, code);
>> +}
>> +
>> GameOptionsMenu::~GameOptionsMenu() {
>> }
>>
>

9129. By Antonino Siena

Removed unnecessary else-case

9130. By Antonino Siena

Proper ESCAPE handling

Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5153. State: failed. Details: https://travis-ci.org/widelands/widelands/builds/541384195.
Appveyor build 4935. State: failed. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_thenifker13_widelands_trunk-4935.

Revision history for this message
GunChleoc (gunchleoc) wrote :

2 more comments.

This branch breaks map keyboard navigation with the arrow keys though as soon as a buildingwindow is open. So, BuildingWindow needs to check whether Window has handled the key and if not, delegate it to its parent_.

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Firstly how do I check if the sibling I get from get_next_sibling() from Panel is actually one?
And from which windows should it be possible to navigate?

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Trying in window.cc - doesnt work so far:
"
case SDLK_UP:
case SDLK_DOWN:
case SDLK_LEFT:
case SDLK_RIGHT:{
 Panel *p = get_parent();
 return p->handle_key(down, code);
}
"

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

No ideas?

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Literally no one that has any idea?

Revision history for this message
GunChleoc (gunchleoc) wrote :

Sorry I didn't get back to you earlier, I don't have much time for Widelands at the moment.

I did some digging into the code, and for some weird reason, map movement with the arrow keys is implemented in InteractiveBase::think().

This is also creating problems for me in another branch, so I think I better have a look at it in a new branch, and then retest this branch once the other branch has been merged.

Revision history for this message
GunChleoc (gunchleoc) wrote :
Revision history for this message
GunChleoc (gunchleoc) wrote :

The other branch has been merged now. Can you please merge trunk into this one so that we can retest?

9131. By Antonino Siena

Merged trunk here

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Merged trunk right now.

Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5289. State: failed. Details: https://travis-ci.org/widelands/widelands/builds/564632804.
Appveyor build 5064. State: success. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_thenifker13_widelands_trunk-5064.

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Has someone else tested it already?

Revision history for this message
GunChleoc (gunchleoc) wrote :

I'm sorry, Launchpad did not notify us on your comments. *headdesk* Can you contact me personally via https://launchpad.net/~gunchleoc next time, so I won't miss this again? We will be moving to GitHub too next weekend. If you don't want to move with us, just let me know and I'll finish up this branch over there.

The files src/editor/ui_menus/main_menu.cc/h and src/wui/game_options_menu.cc/h now don't exist any more, because we replace them with toolbar menus. So, you'll have to merge trunk again before we can finalize this branch.

I have done some testing, and it is working well now :)

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Ill do so. Id rather move to GitLab but GitHub should be fine.
When trying to merge I then got this compilation error I was unsure about:
"
../src/editor/editorinteractive.cc:844:8: error: expected type-specifier before ‘EditorMainMenu’
  844 | new EditorMainMenu(*this, mainmenu_);
      | ^~~~~~~~~~~~~~
"

Revision history for this message
GunChleoc (gunchleoc) wrote :

That's because the class EditorMainMenu does not exist any more. It has been replaced with UI::Dropdown<MainMenuEntry> mainmenu_.

Revision history for this message
Antonino Siena (thenifker13-deactivatedaccount) wrote :

Ok, good to know - Ill take a look at it the next days.

Am 08.09.19 um 17:28 schrieb GunChleoc:
> That's because the class EditorMainMenu does not exist any more. It has been replaced with UI::Dropdown<MainMenuEntry> mainmenu_.

Revision history for this message
GunChleoc (gunchleoc) wrote :

Unmerged revisions

9131. By Antonino Siena

Merged trunk here

9130. By Antonino Siena

Proper ESCAPE handling

9129. By Antonino Siena

Removed unnecessary else-case

9128. By Antonino Siena

Added ESCAPE -> back functionality for main menu menues

9127. By Antonino Siena

Open and Close Editor menu using ESCAPE and exit from from Editor using ENTER

9126. By Antonino Siena

Allow ESCAPE to close story_message_box

9125. By Antonino Siena

When closing a window using ESCAPE will cause the next open window to gain focus

9124. By Antonino Siena

Added space to comment

9123. By Antonino Siena

Instant exit using CTRL+ENTER

9122. By Antonino Siena

Removed empty line and changed special ESCAPE handling a bit

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/editor/editorinteractive.cc'
--- src/editor/editorinteractive.cc 2019-04-26 05:52:49 +0000
+++ src/editor/editorinteractive.cc 2019-07-28 13:42:36 +0000
@@ -566,7 +566,9 @@
566 case SDLK_F1:566 case SDLK_F1:
567 helpmenu_.toggle();567 helpmenu_.toggle();
568 return true;568 return true;
569569 case SDLK_ESCAPE:
570 new EditorMainMenu(*this, mainmenu_);
571 return true;
570 default:572 default:
571 break;573 break;
572 }574 }
573575
=== modified file 'src/editor/ui_menus/main_menu.cc'
--- src/editor/ui_menus/main_menu.cc 2019-02-23 11:00:49 +0000
+++ src/editor/ui_menus/main_menu.cc 2019-07-28 13:42:36 +0000
@@ -82,6 +82,22 @@
82 center_to_parent();82 center_to_parent();
83}83}
8484
85bool EditorMainMenu::handle_key(bool down, SDL_Keysym code) {
86 if (down) {
87 switch (code.sym) {
88 case SDLK_ESCAPE:
89 die();
90 return true;
91 case SDLK_RETURN:
92 exit_btn();
93 return true;
94 default:
95 break;
96 }
97 }
98 return UI::Window::handle_key(down, code);
99}
100
85void EditorMainMenu::new_map_btn() {101void EditorMainMenu::new_map_btn() {
86 new MainMenuNewMap(eia());102 new MainMenuNewMap(eia());
87 die();103 die();
88104
=== modified file 'src/editor/ui_menus/main_menu.h'
--- src/editor/ui_menus/main_menu.h 2019-02-23 11:00:49 +0000
+++ src/editor/ui_menus/main_menu.h 2019-07-28 13:42:36 +0000
@@ -32,6 +32,8 @@
32struct EditorMainMenu : public UI::UniqueWindow {32struct EditorMainMenu : public UI::UniqueWindow {
33 EditorMainMenu(EditorInteractive&, UI::UniqueWindow::Registry&);33 EditorMainMenu(EditorInteractive&, UI::UniqueWindow::Registry&);
3434
35 bool handle_key(bool down, SDL_Keysym code) override;
36
35private:37private:
36 EditorInteractive& eia();38 EditorInteractive& eia();
37 UI::Box box_;39 UI::Box box_;
3840
=== modified file 'src/ui_basic/window.cc'
--- src/ui_basic/window.cc 2019-07-27 11:20:37 +0000
+++ src/ui_basic/window.cc 2019-07-28 13:42:36 +0000
@@ -101,6 +101,7 @@
101 VT_B_PIXMAP_THICKNESS, VT_B_PIXMAP_THICKNESS, TP_B_PIXMAP_THICKNESS, BT_B_PIXMAP_THICKNESS);101 VT_B_PIXMAP_THICKNESS, VT_B_PIXMAP_THICKNESS, TP_B_PIXMAP_THICKNESS, BT_B_PIXMAP_THICKNESS);
102 set_top_on_click(true);102 set_top_on_click(true);
103 set_layout_toplevel(true);103 set_layout_toplevel(true);
104 focus();
104}105}
105106
106/**107/**
@@ -411,6 +412,25 @@
411 return true;412 return true;
412}413}
413414
415bool Window::handle_key(bool down, SDL_Keysym code) {
416 // Handles a key input and event and will close when pressing ESC
417
418 if (down) {
419 switch (code.sym) {
420 case SDLK_ESCAPE: {
421 die();
422 Panel *ch = get_next_sibling();
423 if (ch != nullptr)
424 ch->focus();
425 return true;
426 }
427 default:
428 break;
429 }
430 }
431 return UI::Panel::handle_key(down, code);
432}
433
414/**434/**
415 * Close the window. Overwrite this virtual method if you want435 * Close the window. Overwrite this virtual method if you want
416 * to take some action before the window is destroyed, or to436 * to take some action before the window is destroyed, or to
417437
=== modified file 'src/ui_basic/window.h'
--- src/ui_basic/window.h 2019-02-23 11:00:49 +0000
+++ src/ui_basic/window.h 2019-07-28 13:42:36 +0000
@@ -98,6 +98,7 @@
98 handle_mousemove(uint8_t state, int32_t mx, int32_t my, int32_t xdiff, int32_t ydiff) override;98 handle_mousemove(uint8_t state, int32_t mx, int32_t my, int32_t xdiff, int32_t ydiff) override;
99 bool handle_mousewheel(uint32_t which, int32_t x, int32_t y) override;99 bool handle_mousewheel(uint32_t which, int32_t x, int32_t y) override;
100 bool handle_tooltip() override;100 bool handle_tooltip() override;
101 bool handle_key(bool down, SDL_Keysym code) override;
101102
102protected:103protected:
103 void die() override;104 void die() override;
104105
=== modified file 'src/ui_fsmenu/campaign_select.cc'
--- src/ui_fsmenu/campaign_select.cc 2019-05-26 17:21:15 +0000
+++ src/ui_fsmenu/campaign_select.cc 2019-07-28 13:42:36 +0000
@@ -74,6 +74,8 @@
74 table_.focus();74 table_.focus();
75 fill_table();75 fill_table();
76 layout();76 layout();
77
78 table_.cancel.connect(boost::bind(&FullscreenMenuCampaignSelect::clicked_back, boost::ref(*this)));
77}79}
7880
79void FullscreenMenuCampaignSelect::layout() {81void FullscreenMenuCampaignSelect::layout() {
8082
=== modified file 'src/ui_fsmenu/loadgame.cc'
--- src/ui_fsmenu/loadgame.cc 2019-05-26 17:21:15 +0000
+++ src/ui_fsmenu/loadgame.cc 2019-07-28 13:42:36 +0000
@@ -109,6 +109,8 @@
109 if (!load_or_save_.table().empty()) {109 if (!load_or_save_.table().empty()) {
110 load_or_save_.table().select(0);110 load_or_save_.table().select(0);
111 }111 }
112
113 load_or_save_.table_.cancel.connect(boost::bind(&FullscreenMenuLoadGame::clicked_back, boost::ref(*this)));
112}114}
113115
114void FullscreenMenuLoadGame::layout() {116void FullscreenMenuLoadGame::layout() {
115117
=== modified file 'src/ui_fsmenu/mapselect.cc'
--- src/ui_fsmenu/mapselect.cc 2019-05-26 17:21:15 +0000
+++ src/ui_fsmenu/mapselect.cc 2019-07-28 13:42:36 +0000
@@ -298,6 +298,8 @@
298 table_.select(0);298 table_.select(0);
299 }299 }
300 set_has_selection();300 set_has_selection();
301
302 table_.cancel.connect(boost::bind(&FullscreenMenuMapSelect::clicked_back, boost::ref(*this)));
301}303}
302304
303/*305/*
304306
=== modified file 'src/ui_fsmenu/scenario_select.cc'
--- src/ui_fsmenu/scenario_select.cc 2019-05-26 17:21:15 +0000
+++ src/ui_fsmenu/scenario_select.cc 2019-07-28 13:42:36 +0000
@@ -118,6 +118,8 @@
118 table_.focus();118 table_.focus();
119 fill_table();119 fill_table();
120 layout();120 layout();
121
122 table_.cancel.connect(boost::bind(&FullscreenMenuScenarioSelect::clicked_back, boost::ref(*this)));
121}123}
122124
123void FullscreenMenuScenarioSelect::layout() {125void FullscreenMenuScenarioSelect::layout() {
124126
=== modified file 'src/wui/game_message_menu.cc'
--- src/wui/game_message_menu.cc 2019-06-25 07:34:58 +0000
+++ src/wui/game_message_menu.cc 2019-07-28 13:42:36 +0000
@@ -360,6 +360,10 @@
360 * Handle message menu hotkeys.360 * Handle message menu hotkeys.
361 */361 */
362bool GameMessageMenu::handle_key(bool down, SDL_Keysym code) {362bool GameMessageMenu::handle_key(bool down, SDL_Keysym code) {
363 // Special ESCAPE handling
364 // When ESCAPE is pressed down is false
365 if (code.sym == SDLK_ESCAPE)
366 return UI::Window::handle_key(true, code);
363 if (down) {367 if (down) {
364 switch (code.sym) {368 switch (code.sym) {
365 // Don't forget to change the tooltips if any of these get reassigned369 // Don't forget to change the tooltips if any of these get reassigned
366370
=== modified file 'src/wui/game_options_menu.cc'
--- src/wui/game_options_menu.cc 2019-03-18 07:11:02 +0000
+++ src/wui/game_options_menu.cc 2019-07-28 13:42:36 +0000
@@ -101,6 +101,28 @@
101 center_to_parent();101 center_to_parent();
102}102}
103103
104bool GameOptionsMenu::handle_key(bool down, SDL_Keysym code) {
105 if (down) {
106 switch (code.sym) {
107 case SDLK_ESCAPE:
108 die();
109 return true;
110 case SDLK_RETURN:
111 if ((code.mod & (KMOD_LCTRL | KMOD_RCTRL))) {
112 igb_.end_modal<UI::Panel::Returncodes>(UI::Panel::Returncodes::kBack);
113 return true;
114 }
115
116 new GameExitConfirmBox(*get_parent(), igb_);
117 die();
118 return true;
119 default:
120 break;
121 }
122 }
123 return UI::Window::handle_key(down, code);
124}
125
104GameOptionsMenu::~GameOptionsMenu() {126GameOptionsMenu::~GameOptionsMenu() {
105}127}
106128
107129
=== modified file 'src/wui/game_options_menu.h'
--- src/wui/game_options_menu.h 2019-02-23 11:00:49 +0000
+++ src/wui/game_options_menu.h 2019-07-28 13:42:36 +0000
@@ -32,8 +32,13 @@
32 GameOptionsMenu(InteractiveGameBase&,32 GameOptionsMenu(InteractiveGameBase&,
33 UI::UniqueWindow::Registry&,33 UI::UniqueWindow::Registry&,
34 InteractiveGameBase::GameMainMenuWindows&);34 InteractiveGameBase::GameMainMenuWindows&);
35
36 bool handle_key(bool down, SDL_Keysym code) override;
37
38
35 ~GameOptionsMenu();39 ~GameOptionsMenu();
3640
41
37private:42private:
38 InteractiveGameBase& igb_;43 InteractiveGameBase& igb_;
39 InteractiveGameBase::GameMainMenuWindows& windows_;44 InteractiveGameBase::GameMainMenuWindows& windows_;
4045
=== modified file 'src/wui/interactive_player.cc'
--- src/wui/interactive_player.cc 2019-05-31 19:31:45 +0000
+++ src/wui/interactive_player.cc 2019-07-28 13:42:36 +0000
@@ -487,7 +487,9 @@
487 map_view()->scroll_to_field(487 map_view()->scroll_to_field(
488 game().map().get_starting_pos(player_number_), MapView::Transition::Smooth);488 game().map().get_starting_pos(player_number_), MapView::Transition::Smooth);
489 return true;489 return true;
490490 case SDLK_ESCAPE:
491 new GameOptionsMenu(*this, options_, main_windows_);
492 return true;
491 case SDLK_KP_ENTER:493 case SDLK_KP_ENTER:
492 case SDLK_RETURN:494 case SDLK_RETURN:
493 if (chat_provider_) {495 if (chat_provider_) {
494496
=== modified file 'src/wui/login_box.cc'
--- src/wui/login_box.cc 2019-06-01 11:29:24 +0000
+++ src/wui/login_box.cc 2019-07-28 13:42:36 +0000
@@ -81,6 +81,9 @@
81 }81 }
8282
83 eb_nickname->focus();83 eb_nickname->focus();
84
85 eb_nickname->cancel.connect(boost::bind(&LoginBox::clicked_back, boost::ref(*this)));
86 eb_password->cancel.connect(boost::bind(&LoginBox::clicked_back, boost::ref(*this)));
84}87}
8588
86/// think function of the UI (main loop)89/// think function of the UI (main loop)
8790
=== modified file 'src/wui/story_message_box.cc'
--- src/wui/story_message_box.cc 2019-02-23 11:00:49 +0000
+++ src/wui/story_message_box.cc 2019-07-28 13:42:36 +0000
@@ -97,6 +97,9 @@
97 case SDLK_RETURN:97 case SDLK_RETURN:
98 clicked_ok();98 clicked_ok();
99 return true;99 return true;
100 case SDLK_ESCAPE:
101 clicked_ok();
102 return UI::Window::handle_key(down, code);
100 default:103 default:
101 break; // not handled104 break; // not handled
102 }105 }

Subscribers

People subscribed via source and target branches

to status/vote changes: