[aseprite] 21/134: Fix comparison between ui::Accelerators

Tobias Hansen thansen at moszumanska.debian.org
Sat Mar 14 17:09:56 UTC 2015


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository aseprite.

commit 8bec9be4b267b5c7a2a979fd8fa596eb933023bb
Author: David Capello <davidcapello at gmail.com>
Date:   Wed Oct 29 23:50:48 2014 -0300

    Fix comparison between ui::Accelerators
---
 src/app/ui/select_accelerator.cpp | 23 +++++++++++++++++------
 src/ui/accelerator.cpp            | 21 ++++++++++++++++++---
 src/ui/accelerator.h              |  8 +-------
 3 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/src/app/ui/select_accelerator.cpp b/src/app/ui/select_accelerator.cpp
index 1ccf33b..d483827 100644
--- a/src/app/ui/select_accelerator.cpp
+++ b/src/app/ui/select_accelerator.cpp
@@ -26,6 +26,8 @@
 #include "base/bind.h"
 #include "base/signal.h"
 
+#include <cctype>
+
 namespace app {
 
 using namespace ui;
@@ -50,11 +52,16 @@ protected:
       case kKeyDownMessage:
         if (hasFocus() && !isReadOnly()) {
           KeyMessage* keymsg = static_cast<KeyMessage*>(msg);
+          KeyModifiers modifiers = keymsg->keyModifiers();
+
+          if (keymsg->scancode() == kKeySpace)
+            modifiers = (KeyModifiers)(modifiers & ~kKeySpaceModifier);
 
           m_accel = Accelerator(
-            keymsg->keyModifiers(),
+            modifiers,
             keymsg->scancode(),
-            keymsg->unicodeChar() >= 32 ? keymsg->unicodeChar(): 0);
+            keymsg->unicodeChar() > 32 ?
+              std::tolower(keymsg->unicodeChar()): 0);
           updateText();
 
           AccelChange(&m_accel);
@@ -101,11 +108,15 @@ SelectAccelerator::SelectAccelerator(const ui::Accelerator& accel)
 void SelectAccelerator::onModifierChange(KeyModifiers modifier, CheckBox* checkbox)
 {
   bool state = (checkbox->isSelected());
+  KeyModifiers modifiers = m_accel.modifiers();
+  KeyScancode scancode = m_accel.scancode();
+  int unicodeChar = m_accel.unicodeChar();
+
+  modifiers = (KeyModifiers)((modifiers & ~modifier) | (state ? modifier : 0));
+  if (modifiers == kKeySpaceModifier && scancode == kKeySpace)
+    modifiers = kKeyNoneModifier;
 
-  m_accel = Accelerator(
-    (KeyModifiers)((m_accel.modifiers() & ~modifier) | (state ? modifier : 0)),
-    m_accel.scancode(),
-    m_accel.unicodeChar());
+  m_accel = Accelerator(modifiers, scancode, unicodeChar);
 
   m_keyField->setAccel(m_accel);
   updateAssignedTo();
diff --git a/src/ui/accelerator.cpp b/src/ui/accelerator.cpp
index bc422f5..4892d5f 100644
--- a/src/ui/accelerator.cpp
+++ b/src/ui/accelerator.cpp
@@ -15,7 +15,7 @@
 #include "base/string.h"
 
 #include <allegro/keyboard.h>
-#include <ctype.h>
+#include <cctype>
 #include <string>
 #include <vector>
 
@@ -85,7 +85,7 @@ Accelerator::Accelerator(const std::string& str)
       }
 
       if ((tok[0] >= 'a') && (tok[0] <= 'z'))
-        m_scancode = (KeyScancode)((int)kKeyA + tolower(tok[0]) - 'a');
+        m_scancode = (KeyScancode)((int)kKeyA + std::tolower(tok[0]) - 'a');
       else if ((tok[0] >= '0') && (tok[0] <= '9'))
         m_scancode = (KeyScancode)((int)kKey0 + tok[0] - '0');
       else {
@@ -179,6 +179,21 @@ Accelerator::Accelerator(const std::string& str)
   }
 }
 
+bool Accelerator::operator==(const Accelerator& other) const
+{
+  if (m_modifiers != other.m_modifiers)
+    return false;
+
+  if (m_scancode == other.m_scancode) {
+    if (m_scancode != kKeyNil)
+      return true;
+    else if (m_unicodeChar != 0)
+      return (std::tolower(m_unicodeChar) == std::tolower(other.m_unicodeChar));
+  }
+
+  return false;
+}
+
 bool Accelerator::isEmpty() const
 {
   return
@@ -364,7 +379,7 @@ bool Accelerator::check(KeyModifiers modifiers, KeyScancode scancode, int unicod
   }
   // For any other legal Unicode code
   else if (unicodeChar >= ' ') {
-    unicodeChar = tolower(unicodeChar);
+    unicodeChar = std::tolower(unicodeChar);
 
     /* without shift (because characters like '*' can be trigger with
        "Shift+8", so we don't want "Shift+*") */
diff --git a/src/ui/accelerator.h b/src/ui/accelerator.h
index fd3d992..7014374 100644
--- a/src/ui/accelerator.h
+++ b/src/ui/accelerator.h
@@ -28,13 +28,7 @@ namespace ui {
     bool check(KeyModifiers modifiers, KeyScancode scancode, int unicodeChar) const;
     bool checkFromAllegroKeyArray() const;
 
-    bool operator==(const Accelerator& other) const {
-      return
-        (m_modifiers == other.m_modifiers &&
-         m_scancode == other.m_scancode &&
-         m_unicodeChar == other.m_unicodeChar);
-    }
-
+    bool operator==(const Accelerator& other) const;
     bool operator!=(const Accelerator& other) const {
       return !operator==(other);
     }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git



More information about the Pkg-games-commits mailing list