浏览代码

handle double-click in Town Portal dialog

Andrey Filipenkov 2 年之前
父节点
当前提交
08b04a3527
共有 3 个文件被更改,包括 13 次插入2 次删除
  1. 6 1
      client/gui/CGuiHandler.cpp
  2. 6 1
      client/windows/GUIClasses.cpp
  3. 1 0
      client/windows/GUIClasses.h

+ 6 - 1
client/gui/CGuiHandler.cpp

@@ -284,6 +284,8 @@ void CGuiHandler::handleCurrentEvent()
 		switch(current->button.button)
 		{
 		case SDL_BUTTON_LEFT:
+		{
+			auto doubleClicked = false;
 			if(lastClick == current->motion && (SDL_GetTicks() - lastClickTime) < 300)
 			{
 				std::list<CIntObject*> hlp = doubleClickInterested;
@@ -293,6 +295,7 @@ void CGuiHandler::handleCurrentEvent()
 					if((*i)->pos.isInside(current->motion.x, current->motion.y))
 					{
 						(*i)->onDoubleClick();
+						doubleClicked = true;
 					}
 				}
 
@@ -301,8 +304,10 @@ void CGuiHandler::handleCurrentEvent()
 			lastClick = current->motion;
 			lastClickTime = SDL_GetTicks();
 
-			handleMouseButtonClick(lclickable, EIntObjMouseBtnType::LEFT, true);
+			if(!doubleClicked)
+				handleMouseButtonClick(lclickable, EIntObjMouseBtnType::LEFT, true);
 			break;
+		}
 		case SDL_BUTTON_RIGHT:
 			handleMouseButtonClick(rclickable, EIntObjMouseBtnType::RIGHT, true);
 			break;

+ 6 - 1
client/windows/GUIClasses.cpp

@@ -2039,7 +2039,7 @@ CThievesGuildWindow::CThievesGuildWindow(const CGObjectInstance * _owner):
 }
 
 CObjectListWindow::CItem::CItem(CObjectListWindow * _parent, size_t _id, std::string _text)
-	: CIntObject(LCLICK),
+	: CIntObject(LCLICK | DOUBLECLICK),
 	parent(_parent),
 	index(_id)
 {
@@ -2069,6 +2069,11 @@ void CObjectListWindow::CItem::clickLeft(tribool down, bool previousState)
 		parent->changeSelection(index);
 }
 
+void CObjectListWindow::CItem::onDoubleClick()
+{
+	parent->elementSelected();
+}
+
 CObjectListWindow::CObjectListWindow(const std::vector<int> & _items, std::shared_ptr<CIntObject> titleWidget_, std::string _title, std::string _descr, std::function<void(int)> Callback, size_t initialSelection)
 	: CWindowObject(PLAYER_COLORED, "TPGATE"),
 	onSelect(Callback),

+ 1 - 0
client/windows/GUIClasses.h

@@ -163,6 +163,7 @@ class CObjectListWindow : public CWindowObject
 
 		void select(bool on);
 		void clickLeft(tribool down, bool previousState) override;
+		void onDoubleClick() override;
 	};
 
 	std::function<void(int)> onSelect;//called when OK button is pressed, returns id of selected item.