diff --git a/OpenRA.Game/GameRules/Settings.cs b/OpenRA.Game/GameRules/Settings.cs index bb3d8adbc6..d5c752ee20 100644 --- a/OpenRA.Game/GameRules/Settings.cs +++ b/OpenRA.Game/GameRules/Settings.cs @@ -155,7 +155,8 @@ namespace OpenRA.GameRules public Hotkey PowerDownKey = new Hotkey(Keycode.F11, Modifiers.None); public Hotkey RepairKey = new Hotkey(Keycode.F12, Modifiers.None); - public Hotkey CycleTabsKey = new Hotkey(Keycode.TAB, Modifiers.None); + public Hotkey NextProductionTabKey = new Hotkey(Keycode.PAGEDOWN, Modifiers.None); + public Hotkey PreviousProductionTabKey = new Hotkey(Keycode.PAGEUP, Modifiers.None); public Hotkey ToggleStatusBarsKey = new Hotkey(Keycode.INSERT, Modifiers.None); diff --git a/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs b/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs old mode 100755 new mode 100644 index cf05ad0bf6..d5ea98871d --- a/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/ProductionTabsWidget.cs @@ -89,10 +89,12 @@ namespace OpenRA.Mods.Cnc.Widgets paletteWidget = Lazy.New(() => Ui.Root.Get(PaletteWidget)); } - public void SelectNextTab(bool reverse) + public bool SelectNextTab(bool reverse) { if (queueGroup == null) - return; + return true; + + Sound.PlayNotification(null, "Sounds", "ClickSound", null); // Prioritize alerted queues var queues = Groups[queueGroup].Tabs.Select(t => t.Queue) @@ -103,6 +105,8 @@ namespace OpenRA.Mods.Cnc.Widgets CurrentQueue = queues.SkipWhile(q => q != CurrentQueue) .Skip(1).FirstOrDefault() ?? queues.FirstOrDefault(); + + return true; } public string QueueGroup @@ -277,12 +281,12 @@ namespace OpenRA.Mods.Cnc.Widgets if (e.Event != KeyInputEvent.Down) return false; - if (Hotkey.FromKeyInput(e) == Game.Settings.Keys.CycleTabsKey) - { - Sound.PlayNotification(null, "Sounds", "ClickSound", null); - SelectNextTab(e.Modifiers.HasModifier(Modifiers.Shift)); - return true; - } + var hotkey = Hotkey.FromKeyInput(e); + + if (hotkey == Game.Settings.Keys.NextProductionTabKey) + return SelectNextTab(false); + else if (hotkey == Game.Settings.Keys.PreviousProductionTabKey) + return SelectNextTab(true); return false; } diff --git a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs index e6fd815b5c..02de9e4984 100755 --- a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs @@ -149,11 +149,13 @@ namespace OpenRA.Mods.RA.Widgets if (e.Event == KeyInputEvent.Up) return false; - if (Hotkey.FromKeyInput(e) == Game.Settings.Keys.CycleTabsKey) - { - TabChange(e.Modifiers.HasModifier(Modifiers.Shift)); - return true; - } + var hotkey = Hotkey.FromKeyInput(e); + + if (hotkey == Game.Settings.Keys.NextProductionTabKey) + return ChangeTab(false); + else if (hotkey == Game.Settings.Keys.PreviousProductionTabKey) + return ChangeTab(true); + return DoBuildingHotkey(e, world); } @@ -164,15 +166,10 @@ namespace OpenRA.Mods.RA.Widgets return true; if (mi.Button == MouseButton.WheelDown) - { - TabChange(false); - return true; - } + return ChangeTab(false); + if (mi.Button == MouseButton.WheelUp) - { - TabChange(true); - return true; - } + return ChangeTab(true); var action = tabs.Where(a => a.First.Contains(mi.Location)) .Select(a => a.Second).FirstOrDefault(); @@ -515,14 +512,20 @@ namespace OpenRA.Mods.RA.Widgets return false; } - void TabChange(bool shift) + // NOTE: Always return true here to prevent mouse events from passing through the sidebar and interacting with the world behind it. + bool ChangeTab(bool reverse) { var queues = VisibleQueues.Concat(VisibleQueues); - if (shift) queues = queues.Reverse(); + if (reverse) + queues = queues.Reverse(); var nextQueue = queues.SkipWhile(q => q != CurrentQueue) .ElementAtOrDefault(1); if (nextQueue != null) + { SetCurrentTab(nextQueue); + return true; + } + return true; } } } \ No newline at end of file diff --git a/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs index 9e93fe7229..44f92d9bc8 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs @@ -257,9 +257,10 @@ namespace OpenRA.Mods.RA.Widgets.Logic { "PowerDownKey", "Power-down mode" }, { "RepairKey", "Repair mode" }, - { "CycleTabsKey", "Cycle production tabs" }, + { "NextProductionTabKey", "Next production tab" }, + { "PreviousProductionTabKey", "Previous production tab" }, - { "ToggleStatusBarsKey", "Toggle status bars" } + { "ToggleStatusBarsKey", "Toggle status bars" }, }; var unitHotkeys = new Dictionary()