From 804c7d604511907c76b4651049b7d7902ad653a4 Mon Sep 17 00:00:00 2001 From: Jyrki Vesterinen Date: Sun, 30 Apr 2017 13:07:39 +0300 Subject: [PATCH] Make gui2::event::message noncopyable This makes it impossible to accidentally pass a message by value, which avoids problems like the crashes @Vultraz got when refactoring the event dispatcher. --- src/gui/core/event/dispatcher.cpp | 3 +-- src/gui/core/event/message.hpp | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/core/event/dispatcher.cpp b/src/gui/core/event/dispatcher.cpp index f88df493b0e9..29943469c5f4 100644 --- a/src/gui/core/event/dispatcher.cpp +++ b/src/gui/core/event/dispatcher.cpp @@ -174,8 +174,7 @@ bool dispatcher::fire(const ui_event event, widget& target, void*) bool dispatcher::fire(const ui_event event, widget& target, message& msg) { assert(find(event, event_in_set())); - // NOTE: std::ref() needed here to prevent reference decay. - return fire_event(event, this, &target, std::ref(msg)); + return fire_event(event, this, &target, msg); } void dispatcher::register_hotkey(const hotkey::HOTKEY_COMMAND id, const thotkey_function& function) diff --git a/src/gui/core/event/message.hpp b/src/gui/core/event/message.hpp index 5fe992ec298d..9410691157e6 100644 --- a/src/gui/core/event/message.hpp +++ b/src/gui/core/event/message.hpp @@ -46,6 +46,11 @@ namespace event */ struct message { + message() = default; + + // Disallow copying because constructing a copy loses the exact type. + message(const message&) = delete; + virtual ~message() { }