diff options
| -rw-r--r-- | logic/shortcuts.cpp | 35 | ||||
| -rw-r--r-- | logic/shortcuts.h | 3 | 
2 files changed, 23 insertions, 15 deletions
| diff --git a/logic/shortcuts.cpp b/logic/shortcuts.cpp index 494af30e..27d47c8b 100644 --- a/logic/shortcuts.cpp +++ b/logic/shortcuts.cpp @@ -11,15 +11,17 @@  #include <QString> +#include <tuple> +  void Shortcuts::free_binding(K& key)  {  #ifndef _WIN32      if (key)      { -        key->setEnabled(false); -        key->setShortcut(QKeySequence::UnknownKey); -        std::shared_ptr<QxtGlobalShortcut> tmp(nullptr); -        key.swap(tmp); +        //key->setEnabled(false); +        //key->setShortcut(QKeySequence()); +        delete key; +        key = nullptr;      }  #else      key.keycode = 0; @@ -36,7 +38,7 @@ void Shortcuts::bind_shortcut(K &key, const key_opts& k, unused_on_unix(bool, he          free_binding(key);      } -    key = std::make_shared<sh>(); +    key = new sh;      if (k.keycode != "")      { @@ -107,6 +109,14 @@ void Shortcuts::receiver(const Key& k)  void Shortcuts::reload(const t_keys& keys_)  {      const unsigned sz = keys_.size(); +#ifndef _WIN32 +    for (tt& tuple : keys) +    { +        K k; +        std::tie(k, std::ignore, std::ignore) = tuple; +        delete k; +    } +#endif      keys = std::vector<tt>();      for (unsigned i = 0; i < sz; i++) @@ -115,22 +125,19 @@ void Shortcuts::reload(const t_keys& keys_)          const key_opts& opts = std::get<0>(kk);          const bool held = std::get<2>(kk);          auto fun = std::get<1>(kk); -        K k; -        bind_shortcut(k, opts, held); -        keys.push_back(tt(k, [=](unused_on_unix(bool, flag)) -> void -        {  #ifdef _WIN32 -            fun(flag); +        K k;  #else -            fun(true); +        K k(nullptr);  #endif -        }, -        held)); +        bind_shortcut(k, opts, held); +        keys.push_back(tt(k, [=](bool flag) { fun(flag); }, held)); +  #ifndef _WIN32          const int idx = keys.size() - 1;          tt& kk_ = keys[idx];          auto& fn = std::get<1>(kk_); -        connect(k.get(), &QxtGlobalShortcut::activated, [=]() -> void { fn(true); }); +        connect(k, &QxtGlobalShortcut::activated, [=]() { fn(true); });  #endif      }  } diff --git a/logic/shortcuts.h b/logic/shortcuts.h index 1f57a8fb..4ddc5b34 100644 --- a/logic/shortcuts.h +++ b/logic/shortcuts.h @@ -11,6 +11,7 @@  #include "options/options.hpp"  #include "main-settings.hpp" +#include "compat/util.hpp"  #ifdef _WIN32  #   include "dinput/keybinding-worker.hpp" @@ -33,7 +34,7 @@ struct OPENTRACK_LOGIC_EXPORT Shortcuts final : public QObject  public:      using K =  #ifndef _WIN32 -    mem<QxtGlobalShortcut> +    QxtGlobalShortcut*  #else      Key  #endif | 
