From 36027fc87b99b8f048265f6ac470227a1c32d481 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 12 Jul 2013 14:27:09 +0300 Subject: add option for enable/disable double click support. New option: setup / misc / other / Enable double clicks --- src/defaults.cpp | 1 + src/gui/gui.cpp | 58 ++++++++++++++++++++++++++++++++----- src/gui/gui.h | 6 ++++ src/gui/setup_other.cpp | 4 +++ src/guichan/gui.cpp | 43 --------------------------- src/guichan/include/guichan/gui.hpp | 8 ----- 6 files changed, 62 insertions(+), 58 deletions(-) diff --git a/src/defaults.cpp b/src/defaults.cpp index b5a3a410b..b9a522bff 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -317,6 +317,7 @@ DefaultsData* getConfigDefaults() AddDEF("screenDensity", 0); AddDEF("cfgver", 0); AddDEF("enableDebugLog", false); + AddDEF("doubleClick", true); return configData; } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 1032e7e4e..2a838069b 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -68,11 +68,12 @@ class GuiConfigListener final : public ConfigListener void optionChanged(const std::string &name) { - if (name == "customcursor" && mGui) - { - const bool bCustomCursor = config.getBoolValue("customcursor"); - mGui->setUseCustomCursor(bCustomCursor); - } + if (!mGui) + return; + if (name == "customcursor") + mGui->setUseCustomCursor(config.getBoolValue("customcursor")); + else if (name == "doubleClick") + mGui->setDoubleClick(config.getBoolValue("doubleClick")); } private: Gui *mGui; @@ -97,7 +98,8 @@ Gui::Gui(Graphics *const graphics) : mFocusListeners(), mForegroundColor(Theme::getThemeColor(Theme::TEXT)), mForegroundColor2(Theme::getThemeColor(Theme::TEXT_OUTLINE)), - mCustomCursor(false) + mCustomCursor(false), + mDoubleClick(true) { logger->log1("Initializing GUI..."); // Set graphics @@ -236,12 +238,14 @@ Gui::Gui(Graphics *const graphics) : // Initialize mouse cursor and listen for changes to the option setUseCustomCursor(config.getBoolValue("customcursor")); + setDoubleClick(config.getBoolValue("doubleClick")); config.addListener("customcursor", mConfigListener); + config.addListener("doubleClick", mConfigListener); } Gui::~Gui() { - config.removeListener("customcursor", mConfigListener); + config.removeListeners(mConfigListener); delete mConfigListener; mConfigListener = nullptr; @@ -522,6 +526,46 @@ void Gui::handleMouseMoved(const gcn::MouseInput &mouseInput) mMouseInactivityTimer = 0; } +void Gui::handleMousePressed(const gcn::MouseInput &mouseInput) +{ + const int x = mouseInput.getX(); + const int y = mouseInput.getY(); + const unsigned int button = mouseInput.getButton(); + const int timeStamp = mouseInput.getTimeStamp(); + + gcn::Widget *sourceWidget = getMouseEventSource(x, y); + + if (mFocusHandler->getDraggedWidget()) + sourceWidget = mFocusHandler->getDraggedWidget(); + + int sourceWidgetX, sourceWidgetY; + sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY); + + if ((mFocusHandler->getModalFocused() + && sourceWidget->isModalFocused()) + || !mFocusHandler->getModalFocused()) + { + sourceWidget->requestFocus(); + } + + if (mDoubleClick && timeStamp - mLastMousePressTimeStamp < 250 + && mLastMousePressButton == button) + { + mClickCount ++; + } + else + { + mClickCount = 1; + } + + distributeMouseEvent(sourceWidget, MouseEvent::PRESSED, button, x, y); + mFocusHandler->setLastWidgetPressed(sourceWidget); + mFocusHandler->setDraggedWidget(sourceWidget); + mLastMouseDragButton = button; + mLastMousePressButton = button; + mLastMousePressTimeStamp = timeStamp; +} + void Gui::updateFonts() { const int fontSize = config.getIntValue("fontSize"); diff --git a/src/gui/gui.h b/src/gui/gui.h index 129dedfce..0b4b4a292 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -134,6 +134,9 @@ class Gui final : public gcn::Gui void setCursorType(const int index) { mCursorType = index; } + void setDoubleClick(const bool b) + { mDoubleClick = b; } + void updateFonts(); bool handleInput(); @@ -159,6 +162,8 @@ class Gui final : public gcn::Gui void handleMouseReleased(const gcn::MouseInput &mouseInput); + void handleMousePressed(const gcn::MouseInput &mouseInput); + void handleMouseInput(); void distributeMouseEvent(gcn::Widget* source, int type, int button, @@ -186,6 +191,7 @@ class Gui final : public gcn::Gui gcn::Color mForegroundColor; gcn::Color mForegroundColor2; bool mCustomCursor; /**< Show custom cursor */ + bool mDoubleClick; }; extern Gui *gui; /**< The GUI system */ diff --git a/src/gui/setup_other.cpp b/src/gui/setup_other.cpp index f26378630..ae6f6f6bb 100644 --- a/src/gui/setup_other.cpp +++ b/src/gui/setup_other.cpp @@ -322,6 +322,10 @@ Setup_Other::Setup_Other(const Widget2 *const widget) : new SetupItemCheckBox(_("Enable server side attack"), "", "serverAttack", this, "serverAttackEvent"); + // TRANSLATORS: settings option + new SetupItemCheckBox(_("Enable double clicks"), "", + "doubleClick", this, "doubleClickEvent"); + // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable bot checker"), "", "enableBotCheker", this, "enableBotChekerEvent"); diff --git a/src/guichan/gui.cpp b/src/guichan/gui.cpp index fcfe58bef..4ba60089a 100644 --- a/src/guichan/gui.cpp +++ b/src/guichan/gui.cpp @@ -337,49 +337,6 @@ namespace gcn } } - void Gui::handleMousePressed(const MouseInput& mouseInput) - { - Widget* sourceWidget = getMouseEventSource( - mouseInput.getX(), mouseInput.getY()); - - if (mFocusHandler->getDraggedWidget()) - sourceWidget = mFocusHandler->getDraggedWidget(); - - int sourceWidgetX, sourceWidgetY; - sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY); - - if ((mFocusHandler->getModalFocused() - && sourceWidget->isModalFocused()) - || !mFocusHandler->getModalFocused()) - { - sourceWidget->requestFocus(); - } - - if (mouseInput.getTimeStamp() - mLastMousePressTimeStamp < 250 - && mLastMousePressButton == mouseInput.getButton()) - { - mClickCount++; - } - else - { - mClickCount = 1; - } - - distributeMouseEvent(sourceWidget, - MouseEvent::PRESSED, - mouseInput.getButton(), - mouseInput.getX(), - mouseInput.getY()); - - mFocusHandler->setLastWidgetPressed(sourceWidget); - - mFocusHandler->setDraggedWidget(sourceWidget); - mLastMouseDragButton = mouseInput.getButton(); - - mLastMousePressButton = mouseInput.getButton(); - mLastMousePressTimeStamp = mouseInput.getTimeStamp(); - } - void Gui::handleMouseWheelMovedDown(const MouseInput& mouseInput) { Widget* sourceWidget = getMouseEventSource( diff --git a/src/guichan/include/guichan/gui.hpp b/src/guichan/include/guichan/gui.hpp index 3a30dedd0..d42a11255 100644 --- a/src/guichan/include/guichan/gui.hpp +++ b/src/guichan/include/guichan/gui.hpp @@ -264,14 +264,6 @@ namespace gcn */ virtual void handleMouseMoved(const MouseInput& mouseInput); - /** - * Handles mouse pressed input. - * - * @param mouseInput The mouse input to handle. - * @since 0.6.0 - */ - virtual void handleMousePressed(const MouseInput& mouseInput); - /** * * Handles mouse wheel moved down input. -- cgit v1.2.3-70-g09d2