Notabilis has proposed merging 
lp:~widelands-dev/widelands/bug-keyboard-after-save-delete into lp:widelands.

Commit message:
Fixing keyboard navigation after "remove game" dialog has been displayed.

Requested reviews:
  Widelands Developers (widelands-dev)

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/bug-keyboard-after-save-delete/+merge/345469

When in the single player "load game" menu the "remove game" dialog has been 
displayed, keyboard navigation afterwards no longer works, e.g., selecting a 
game with the arrow keys. The problem is that the current focus isn't correctly 
set afterwards.

The focus is determined by a list of pointer over the panels of the window, 
each pointing to its child that currently has the focus: p1->p2->p3->p4->p5 
(with p5 being the game list that should be controlled). When the removal 
dialog is opened, its parent is set as p3, resulting in the focus pointer in p3 
being changed. When the game list p5 later on re-requests the focus, the 
pointer in p4 is checked before setting it. Since it is already pointing to p5, 
the modified pointer in p3 is never reached.

This branch removes this check since it seems to me that it is only a (in this 
case broken) optimization. Another possible approach would be to set the focus 
pointers of all child panels to nullptr when a pointer is changed (not tested).
-- 
Your team Widelands Developers is requested to review the proposed merge of 
lp:~widelands-dev/widelands/bug-keyboard-after-save-delete into lp:widelands.
=== modified file 'src/ui_basic/panel.cc'
--- src/ui_basic/panel.cc	2018-05-07 05:35:32 +0000
+++ src/ui_basic/panel.cc	2018-05-13 08:07:57 +0000
@@ -664,8 +664,6 @@
 	if (!parent_ || this == modal_) {
 		return;
 	}
-	if (parent_->focus_ == this)
-		return;
 
 	parent_->focus_ = this;
 	parent_->focus(false);

=== modified file 'src/wui/load_or_save_game.cc'
--- src/wui/load_or_save_game.cc	2018-05-13 07:15:39 +0000
+++ src/wui/load_or_save_game.cc	2018-05-13 08:07:57 +0000
@@ -268,6 +268,7 @@
 		   ngettext("Confirm Deleting File", "Confirm Deleting Files", no_selections), message,
 		   UI::WLMessageBox::MBoxType::kOkCancel);
 		do_delete = confirmationBox.run<UI::Panel::Returncodes>() == UI::Panel::Returncodes::kOk;
+		table_.focus();
 	}
 	if (do_delete) {
 		for (const uint32_t index : selections) {
@@ -292,7 +293,6 @@
 		// Make sure that the game details are updated
 		entry_selected();
 	}
-	// TODO(GunChleoc): When the removal dialog was open, navigation with arrow keys no longer works.
 }
 
 UI::Button* LoadOrSaveGame::delete_button() {

_______________________________________________
Mailing list: https://launchpad.net/~widelands-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~widelands-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to