From 10c3bcbf5f43d5fc010eea504f301be31f5b76c9 Mon Sep 17 00:00:00 2001 From: Stan Date: Sat, 14 Nov 2020 18:16:24 +0000 Subject: [PATCH] Allow right-click on disabled buttons. Reviewed by: @Angen Fixes #5269 Fixes #5095 Differential Revision: https://code.wildfiregames.com/D2651 This was SVN commit r24184. --- .../public/gui/session/selection_panels.js | 24 ++++++++++++------- source/gui/ObjectBases/IGUIButtonBehavior.cpp | 2 ++ source/gui/ObjectBases/IGUIButtonBehavior.h | 1 + source/gui/SGUIMessage.h | 1 + 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/binaries/data/mods/public/gui/session/selection_panels.js b/binaries/data/mods/public/gui/session/selection_panels.js index d4a156e1ef..30f1783fa6 100644 --- a/binaries/data/mods/public/gui/session/selection_panels.js +++ b/binaries/data/mods/public/gui/session/selection_panels.js @@ -235,7 +235,9 @@ g_SelectionPanels.Construction = { }); data.button.onPress = function() { startBuildingPlacement(data.item, data.playerState); }; - data.button.onPressRight = function() { showTemplateDetails(data.item); }; + let showTemplateFunc = () => { showTemplateDetails(data.item); }; + data.button.onPressRight = showTemplateFunc; + data.button.onPressRightDisabled = showTemplateFunc; let tooltips = [ getEntityNamesFormatted, @@ -772,11 +774,14 @@ g_SelectionPanels.Research = { addResearchToQueue(data.item.researchFacilityId, t); })(tech); - button.onPressRight = (t => function() { + let showTemplateFunc = (t => function() { showTemplateDetails( t, GetTemplateData(data.unitEntStates.find(state => state.id == data.item.researchFacilityId).template).nativeCiv); - })(tech); + }); + + button.onPressRight = showTemplateFunc(tech); + button.onPressRightDisabled = showTemplateFunc(tech); if (data.item.tech.pair) { @@ -976,9 +981,10 @@ g_SelectionPanels.Training = { if (!neededResources) addTrainingToQueue(unitIds, data.item, data.playerState); }; - data.button.onPressRight = function() { - showTemplateDetails(data.item); - }; + + let showTemplateFunc = () => { showTemplateDetails(data.item); }; + data.button.onPressRight = showTemplateFunc; + data.button.onPressRightDisabled = showTemplateFunc; data.countDisplay.caption = trainNum > 1 ? trainNum : ""; @@ -1161,9 +1167,9 @@ g_SelectionPanels.Upgrade = { data.button.enabled = controlsPlayer(data.player); data.button.tooltip = tooltip; - data.button.onPressRight = function() { - showTemplateDetails(data.item.entity); - }; + let showTemplateFunc = () => { showTemplateDetails(data.item.entity); }; + data.button.onPressRight = showTemplateFunc; + data.button.onPressRightDisabled = showTemplateFunc; data.icon.sprite = modifier + "stretched:session/" + (data.item.icon || "portraits/" + template.icon); diff --git a/source/gui/ObjectBases/IGUIButtonBehavior.cpp b/source/gui/ObjectBases/IGUIButtonBehavior.cpp index db64ebda26..2b04d1e064 100644 --- a/source/gui/ObjectBases/IGUIButtonBehavior.cpp +++ b/source/gui/ObjectBases/IGUIButtonBehavior.cpp @@ -23,6 +23,7 @@ const CStr IGUIButtonBehavior::EventNamePress = "Press"; const CStr IGUIButtonBehavior::EventNamePressRight = "PressRight"; +const CStr IGUIButtonBehavior::EventNamePressRightDisabled = "PressRightDisabled"; const CStr IGUIButtonBehavior::EventNameDoublePress = "DoublePress"; const CStr IGUIButtonBehavior::EventNameDoublePressRight = "DoublePressRight"; const CStr IGUIButtonBehavior::EventNameRelease = "Release"; @@ -114,6 +115,7 @@ void IGUIButtonBehavior::HandleMessage(SGUIMessage& Message) case GUIM_MOUSE_PRESS_RIGHT: if (!m_pObject.IsEnabled()) { + m_pObject.SendEvent(GUIM_PRESSED_MOUSE_RIGHT_DISABLED, EventNamePressRightDisabled); m_pObject.PlaySound(m_SoundDisabled); break; } diff --git a/source/gui/ObjectBases/IGUIButtonBehavior.h b/source/gui/ObjectBases/IGUIButtonBehavior.h index ca6beb412a..4559a99220 100644 --- a/source/gui/ObjectBases/IGUIButtonBehavior.h +++ b/source/gui/ObjectBases/IGUIButtonBehavior.h @@ -62,6 +62,7 @@ public: protected: static const CStr EventNamePress; static const CStr EventNamePressRight; + static const CStr EventNamePressRightDisabled; static const CStr EventNameDoublePress; static const CStr EventNameDoublePressRight; static const CStr EventNameRelease; diff --git a/source/gui/SGUIMessage.h b/source/gui/SGUIMessage.h index a7b313d925..c23fb5a23b 100644 --- a/source/gui/SGUIMessage.h +++ b/source/gui/SGUIMessage.h @@ -51,6 +51,7 @@ enum EGUIMessageType GUIM_GOT_FOCUS, GUIM_LOST_FOCUS, GUIM_PRESSED_MOUSE_RIGHT, + GUIM_PRESSED_MOUSE_RIGHT_DISABLED, GUIM_DOUBLE_PRESSED_MOUSE_RIGHT, GUIM_PRESSED_MOUSE_RELEASE, GUIM_PRESSED_MOUSE_RELEASE_RIGHT,