From 84f6cdec8666a41b00f8b3d8f6d84f0d0c9830ee Mon Sep 17 00:00:00 2001 From: TheSumm Date: Sun, 19 Apr 2015 13:56:03 +0200 Subject: [PATCH] Fix #576, PopupMenus close when leaving the game --- modules/corelib/ui/uipopupmenu.lua | 16 +++++++++++++++- modules/game_console/console.lua | 2 ++ modules/game_interface/gameinterface.lua | 3 +++ modules/game_npctrade/npctrade.lua | 1 + modules/game_viplist/viplist.lua | 2 ++ modules/gamelib/ui/uiminimap.lua | 2 ++ 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/modules/corelib/ui/uipopupmenu.lua b/modules/corelib/ui/uipopupmenu.lua index 79907023..2167b839 100644 --- a/modules/corelib/ui/uipopupmenu.lua +++ b/modules/corelib/ui/uipopupmenu.lua @@ -8,6 +8,7 @@ function UIPopupMenu.create() local layout = UIVerticalLayout.create(menu) layout:setFitChildren(true) menu:setLayout(layout) + menu.isGameMenu = false return menu end @@ -34,6 +35,7 @@ function UIPopupMenu:display(pos) rootWidget:addChild(self) self:setPosition(pos) self:grabMouse() + self:focus() --self:grabKeyboard() currentMenu = self end @@ -76,6 +78,10 @@ function UIPopupMenu:addSeparator() g_ui.createWidget(self:getStyleName() .. 'Separator', self) end +function UIPopupMenu:setGameMenu(state) + self.isGameMenu = state +end + function UIPopupMenu:onDestroy() if currentMenu == self then currentMenu = nil @@ -105,4 +111,12 @@ local function onRootGeometryUpdate() currentMenu:destroy() end end -connect(rootWidget, { onGeometryChange = onRootGeometryUpdate} ) + +local function onGameEnd() + if currentMenu and currentMenu.isGameMenu then + currentMenu:destroy() + end +end + +connect(rootWidget, { onGeometryChange = onRootGeometryUpdate }) +connect(g_game, { onGameEnd = onGameEnd } ) diff --git a/modules/game_console/console.lua b/modules/game_console/console.lua index ce9fce28..46e561f8 100644 --- a/modules/game_console/console.lua +++ b/modules/game_console/console.lua @@ -599,6 +599,7 @@ end function processChannelTabMenu(tab, mousePos, mouseButton) local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) channelName = tab:getText() if tab ~= defaultTab and tab ~= serverTab then @@ -618,6 +619,7 @@ end function processMessageMenu(mousePos, mouseButton, creatureName, text, label, tab) if mouseButton == MouseRightButton then local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) if creatureName and #creatureName > 0 then if creatureName ~= g_game.getCharacterName() then menu:addOption(tr('Message to ' .. creatureName), function () g_game.openPrivateChannel(creatureName) end) diff --git a/modules/game_interface/gameinterface.lua b/modules/game_interface/gameinterface.lua index 24e61232..248afbe8 100644 --- a/modules/game_interface/gameinterface.lua +++ b/modules/game_interface/gameinterface.lua @@ -442,7 +442,10 @@ end function createThingMenu(menuPosition, lookThing, useThing, creatureThing) if not g_game.isOnline() then return end + local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) + local classic = modules.client_options.getOption('classicControl') local shortcut = nil diff --git a/modules/game_npctrade/npctrade.lua b/modules/game_npctrade/npctrade.lua index a8d9acb6..d76be941 100644 --- a/modules/game_npctrade/npctrade.lua +++ b/modules/game_npctrade/npctrade.lua @@ -177,6 +177,7 @@ function itemPopup(self, mousePosition, mouseButton) if mouseButton == MouseRightButton then local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) menu:addOption(tr('Look'), function() return g_game.inspectNpcTrade(self:getItem()) end) menu:display(mousePosition) return true diff --git a/modules/game_viplist/viplist.lua b/modules/game_viplist/viplist.lua index 8f15a03f..38b79773 100644 --- a/modules/game_viplist/viplist.lua +++ b/modules/game_viplist/viplist.lua @@ -345,6 +345,7 @@ function onVipListMousePress(widget, mousePos, mouseButton) local vipList = vipWindow:getChildById('contentsPanel') local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) menu:addOption(tr('Add new VIP'), function() createAddWindow() end) menu:addSeparator() @@ -377,6 +378,7 @@ function onVipListLabelMousePress(widget, mousePos, mouseButton) local vipList = vipWindow:getChildById('contentsPanel') local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) menu:addOption(tr('Send Message'), function() g_game.openPrivateChannel(widget:getText()) end) menu:addOption(tr('Add new VIP'), function() createAddWindow() end) menu:addOption(tr('Edit %s', widget:getText()), function() if widget then createEditWindow(widget) end end) diff --git a/modules/gamelib/ui/uiminimap.lua b/modules/gamelib/ui/uiminimap.lua index 13b23d46..0ce93079 100644 --- a/modules/gamelib/ui/uiminimap.lua +++ b/modules/gamelib/ui/uiminimap.lua @@ -85,6 +85,7 @@ end local function onFlagMouseRelease(widget, pos, button) if button == MouseRightButton then local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) menu:addOption(tr('Delete mark'), function() widget:destroy() end) menu:display(pos) return true @@ -228,6 +229,7 @@ function UIMinimap:onMouseRelease(pos, button) return true elseif button == MouseRightButton then local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) menu:addOption(tr('Create mark'), function() self:createFlagWindow(mapPos) end) menu:display(pos) return true