improve stability of event
This commit is contained in:
parent
88b9149f54
commit
07b5b19545
@ -3,8 +3,6 @@
|
|||||||
|
|
||||||
#include <nana/gui/detail/general_events.hpp>
|
#include <nana/gui/detail/general_events.hpp>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <unordered_map>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#if defined(STD_THREAD_NOT_SUPPORTED)
|
#if defined(STD_THREAD_NOT_SUPPORTED)
|
||||||
#include <nana/std_mutex.hpp>
|
#include <nana/std_mutex.hpp>
|
||||||
@ -19,15 +17,12 @@ namespace nana
|
|||||||
class events_operation
|
class events_operation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void make(window, const std::shared_ptr<general_events> &);
|
|
||||||
void umake(window);
|
|
||||||
void register_evt(event_handle);
|
void register_evt(event_handle);
|
||||||
void cancel(event_handle);
|
void cancel(event_handle);
|
||||||
void erase(event_handle);
|
void erase(event_handle);
|
||||||
private:
|
private:
|
||||||
std::recursive_mutex mutex_;
|
std::recursive_mutex mutex_;
|
||||||
std::unordered_set<event_handle> handles_;
|
std::unordered_set<event_handle> handles_;
|
||||||
std::unordered_map<window, std::shared_ptr<general_events>> evt_table_;
|
|
||||||
};
|
};
|
||||||
}//end namespace detail
|
}//end namespace detail
|
||||||
}//end namespace nana
|
}//end namespace nana
|
||||||
|
|||||||
@ -23,8 +23,8 @@ namespace nana
|
|||||||
{
|
{
|
||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
bool check_window(window);
|
||||||
void events_operation_register(event_handle);
|
void events_operation_register(event_handle);
|
||||||
void events_operation_cancel(event_handle);
|
|
||||||
|
|
||||||
class event_interface
|
class event_interface
|
||||||
{
|
{
|
||||||
@ -161,7 +161,7 @@ namespace nana
|
|||||||
return _m_emplace(new docker(this, factory<prototype, std::is_bind_expression<prototype>::value>::build(std::forward<Function>(fn)), true), in_front);
|
return _m_emplace(new docker(this, factory<prototype, std::is_bind_expression<prototype>::value>::build(std::forward<Function>(fn)), true), in_front);
|
||||||
}
|
}
|
||||||
|
|
||||||
void emit(arg_reference& arg)
|
void emit(arg_reference& arg, window window_handle)
|
||||||
{
|
{
|
||||||
internal_scope_guard lock;
|
internal_scope_guard lock;
|
||||||
if (nullptr == dockers_)
|
if (nullptr == dockers_)
|
||||||
@ -181,6 +181,10 @@ namespace nana
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
static_cast<docker*>(*i)->invoke(arg);
|
static_cast<docker*>(*i)->invoke(arg);
|
||||||
|
|
||||||
|
if (window_handle && (!detail::check_window(window_handle)))
|
||||||
|
break;
|
||||||
|
|
||||||
if (arg.propagation_stopped())
|
if (arg.propagation_stopped())
|
||||||
{
|
{
|
||||||
for (++i; i != end; ++i)
|
for (++i; i != end; ++i)
|
||||||
@ -189,6 +193,9 @@ namespace nana
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
static_cast<docker*>(*i)->invoke(arg);
|
static_cast<docker*>(*i)->invoke(arg);
|
||||||
|
|
||||||
|
if (window_handle && (!detail::check_window(window_handle)))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,7 +66,7 @@ namespace nana
|
|||||||
|
|
||||||
T null_val;
|
T null_val;
|
||||||
arg_categorize<T> arg(widget_, vp ? *vp : null_val);
|
arg_categorize<T> arg(widget_, vp ? *vp : null_val);
|
||||||
widget_.events().selected.emit(arg);
|
widget_.events().selected.emit(arg, widget_.handle());
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
::nana::categorize<T> & widget_;
|
::nana::categorize<T> & widget_;
|
||||||
|
|||||||
@ -314,7 +314,7 @@ namespace nana
|
|||||||
private:
|
private:
|
||||||
void _m_emit_value_changed()
|
void _m_emit_value_changed()
|
||||||
{
|
{
|
||||||
widget_->events().value_changed.emit({ widget_->handle() });
|
widget_->events().value_changed.emit({ widget_->handle() }, widget_->handle());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _m_tick()
|
void _m_tick()
|
||||||
|
|||||||
@ -111,14 +111,14 @@ namespace nana
|
|||||||
if(pos != npos)
|
if(pos != npos)
|
||||||
{
|
{
|
||||||
drawer_trigger_.at_no_bound_check(pos) = T();
|
drawer_trigger_.at_no_bound_check(pos) = T();
|
||||||
tabbar_.events().added.emit(arg_tabbar({ tabbar_, tabbar_[pos] }));
|
tabbar_.events().added.emit(arg_tabbar({ tabbar_, tabbar_[pos] }), tabbar_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void activated(std::size_t pos) override
|
void activated(std::size_t pos) override
|
||||||
{
|
{
|
||||||
if(pos != npos)
|
if(pos != npos)
|
||||||
tabbar_.events().activated.emit(arg_tabbar({ tabbar_, tabbar_[pos]}));
|
tabbar_.events().activated.emit(arg_tabbar({ tabbar_, tabbar_[pos]}), tabbar_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool removed(std::size_t pos, bool & close_attach) override
|
bool removed(std::size_t pos, bool & close_attach) override
|
||||||
@ -126,7 +126,7 @@ namespace nana
|
|||||||
if (pos != npos)
|
if (pos != npos)
|
||||||
{
|
{
|
||||||
::nana::arg_tabbar_removed<T> arg(tabbar_, tabbar_[pos]);
|
::nana::arg_tabbar_removed<T> arg(tabbar_, tabbar_[pos]);
|
||||||
tabbar_.events().removed.emit(arg);
|
tabbar_.events().removed.emit(arg, tabbar_);
|
||||||
close_attach = arg.close_attach_window;
|
close_attach = arg.close_attach_window;
|
||||||
return arg.remove;
|
return arg.remove;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,16 +51,16 @@ namespace nana
|
|||||||
|
|
||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
bool check_window(window wd)
|
||||||
|
{
|
||||||
|
return bedrock::instance().wd_manager().available(reinterpret_cast<window_manager::core_window_t*>(wd));
|
||||||
|
}
|
||||||
|
|
||||||
void events_operation_register(event_handle evt)
|
void events_operation_register(event_handle evt)
|
||||||
{
|
{
|
||||||
bedrock::instance().evt_operation().register_evt(evt);
|
bedrock::instance().evt_operation().register_evt(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void events_operation_cancel(event_handle evt)
|
|
||||||
{
|
|
||||||
bedrock::instance().evt_operation().cancel(evt);
|
|
||||||
}
|
|
||||||
|
|
||||||
class bedrock::flag_guard
|
class bedrock::flag_guard
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -213,21 +213,21 @@ namespace nana
|
|||||||
auto retain = wd->together.events_ptr;
|
auto retain = wd->together.events_ptr;
|
||||||
auto evts_ptr = retain.get();
|
auto evts_ptr = retain.get();
|
||||||
|
|
||||||
|
|
||||||
switch (evt_code)
|
switch (evt_code)
|
||||||
{
|
{
|
||||||
case event_code::click:
|
case event_code::click:
|
||||||
{
|
{
|
||||||
auto arg = dynamic_cast<const arg_click*>(&event_arg);
|
auto arg = dynamic_cast<const arg_click*>(&event_arg);
|
||||||
if (nullptr == arg)
|
if (arg)
|
||||||
return;
|
|
||||||
{
|
{
|
||||||
//enable refreshing flag, this is a RAII class for exception-safe
|
{
|
||||||
flag_guard fguard(this, wd);
|
//enable refreshing flag, this is a RAII class for exception-safe
|
||||||
wd->drawer.click(*arg);
|
flag_guard fguard(this, wd);
|
||||||
|
wd->drawer.click(*arg);
|
||||||
|
}
|
||||||
|
if (!draw_only)
|
||||||
|
evts_ptr->click.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
if (!draw_only)
|
|
||||||
evts_ptr->click.emit(*arg);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case event_code::dbl_click:
|
case event_code::dbl_click:
|
||||||
@ -281,7 +281,7 @@ namespace nana
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!draw_only)
|
if (!draw_only)
|
||||||
evt_addr->emit(*arg);
|
evt_addr->emit(*arg, reinterpret_cast<window>(wd));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case event_code::mouse_wheel:
|
case event_code::mouse_wheel:
|
||||||
@ -296,7 +296,7 @@ namespace nana
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!draw_only)
|
if (!draw_only)
|
||||||
evts_ptr->mouse_wheel.emit(*arg);
|
evts_ptr->mouse_wheel.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -340,7 +340,7 @@ namespace nana
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!draw_only)
|
if (!draw_only)
|
||||||
evt_addr->emit(*arg);
|
evt_addr->emit(*arg, reinterpret_cast<window>(wd));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case event_code::expose:
|
case event_code::expose:
|
||||||
@ -348,7 +348,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
auto arg = dynamic_cast<const arg_expose*>(&event_arg);
|
auto arg = dynamic_cast<const arg_expose*>(&event_arg);
|
||||||
if (arg)
|
if (arg)
|
||||||
evts_ptr->expose.emit(*arg);
|
evts_ptr->expose.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case event_code::focus:
|
case event_code::focus:
|
||||||
@ -362,7 +362,7 @@ namespace nana
|
|||||||
wd->drawer.focus(*arg);
|
wd->drawer.focus(*arg);
|
||||||
}
|
}
|
||||||
if (!draw_only)
|
if (!draw_only)
|
||||||
evts_ptr->focus.emit(*arg);
|
evts_ptr->focus.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -377,7 +377,7 @@ namespace nana
|
|||||||
wd->drawer.move(*arg);
|
wd->drawer.move(*arg);
|
||||||
}
|
}
|
||||||
if (!draw_only)
|
if (!draw_only)
|
||||||
evts_ptr->move.emit(*arg);
|
evts_ptr->move.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -392,7 +392,7 @@ namespace nana
|
|||||||
wd->drawer.resizing(*arg);
|
wd->drawer.resizing(*arg);
|
||||||
}
|
}
|
||||||
if (!draw_only)
|
if (!draw_only)
|
||||||
evts_ptr->resizing.emit(*arg);
|
evts_ptr->resizing.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -407,7 +407,7 @@ namespace nana
|
|||||||
wd->drawer.resized(*arg);
|
wd->drawer.resized(*arg);
|
||||||
}
|
}
|
||||||
if (!draw_only)
|
if (!draw_only)
|
||||||
evts_ptr->resized.emit(*arg);
|
evts_ptr->resized.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -419,7 +419,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
auto evt_root = dynamic_cast<events_root_extension*>(evts_ptr);
|
auto evt_root = dynamic_cast<events_root_extension*>(evts_ptr);
|
||||||
if (evt_root)
|
if (evt_root)
|
||||||
evt_root->unload.emit(*arg);
|
evt_root->unload.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -428,7 +428,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
auto arg = dynamic_cast<const arg_destroy*>(&event_arg);
|
auto arg = dynamic_cast<const arg_destroy*>(&event_arg);
|
||||||
if (arg)
|
if (arg)
|
||||||
evts_ptr->destroy.emit(*arg);
|
evts_ptr->destroy.emit(*arg, reinterpret_cast<window>(wd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -520,7 +520,7 @@ namespace detail
|
|||||||
delete msg.u.mouse_drop.files;
|
delete msg.u.mouse_drop.files;
|
||||||
arg.pos.x = msg.u.mouse_drop.x - msgwd->pos_root.x;
|
arg.pos.x = msg.u.mouse_drop.x - msgwd->pos_root.x;
|
||||||
arg.pos.y = msg.u.mouse_drop.y - msgwd->pos_root.y;
|
arg.pos.y = msg.u.mouse_drop.y - msgwd->pos_root.y;
|
||||||
msgwd->together.events_ptr->mouse_dropfiles.emit(arg);
|
msgwd->together.events_ptr->mouse_dropfiles.emit(arg, reinterpret_cast<window>(msgwd));
|
||||||
brock.wd_manager().do_lazy_refresh(msgwd, false);
|
brock.wd_manager().do_lazy_refresh(msgwd, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -842,16 +842,16 @@ namespace detail
|
|||||||
draw_invoker(&drawer::mouse_up, msgwnd, arg, &context);
|
draw_invoker(&drawer::mouse_up, msgwnd, arg, &context);
|
||||||
|
|
||||||
if(click_arg.window_handle)
|
if(click_arg.window_handle)
|
||||||
evt_ptr->click.emit(click_arg);
|
evt_ptr->click.emit(click_arg, reinterpret_cast<window>(msgwnd));
|
||||||
|
|
||||||
if (brock.wd_manager().available(msgwnd))
|
if (brock.wd_manager().available(msgwnd))
|
||||||
{
|
{
|
||||||
arg.evt_code = event_code::mouse_up;
|
arg.evt_code = event_code::mouse_up;
|
||||||
evt_ptr->mouse_up.emit(arg);
|
evt_ptr->mouse_up.emit(arg, reinterpret_cast<window>(msgwnd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(click_arg.window_handle)
|
else if(click_arg.window_handle)
|
||||||
msgwnd->together.events_ptr->click.emit(click_arg);
|
msgwnd->together.events_ptr->click.emit(click_arg, reinterpret_cast<window>(msgwnd));
|
||||||
|
|
||||||
brock.wd_manager().do_lazy_refresh(msgwnd, false);
|
brock.wd_manager().do_lazy_refresh(msgwnd, false);
|
||||||
}
|
}
|
||||||
@ -1143,7 +1143,7 @@ namespace detail
|
|||||||
arg.evt_code = event_code::key_char;
|
arg.evt_code = event_code::key_char;
|
||||||
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
||||||
brock.get_key_state(arg);
|
brock.get_key_state(arg);
|
||||||
msgwnd->together.events_ptr->key_char.emit(arg);
|
msgwnd->together.events_ptr->key_char.emit(arg, reinterpret_cast<window>(msgwnd));
|
||||||
if(arg.ignore == false && wd_manager.available(msgwnd))
|
if(arg.ignore == false && wd_manager.available(msgwnd))
|
||||||
draw_invoker(&drawer::key_char, msgwnd, arg, &context);
|
draw_invoker(&drawer::key_char, msgwnd, arg, &context);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -931,10 +931,7 @@ namespace detail
|
|||||||
arg_mouse arg;
|
arg_mouse arg;
|
||||||
assign_arg(arg, msgwnd, message, pmdec);
|
assign_arg(arg, msgwnd, message, pmdec);
|
||||||
if (brock.emit(arg.evt_code, msgwnd, arg, true, &context))
|
if (brock.emit(arg.evt_code, msgwnd, arg, true, &context))
|
||||||
{
|
pressed_wd = msgwnd;
|
||||||
if (brock.wd_manager().available(msgwnd))
|
|
||||||
pressed_wd = msgwnd;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_NCLBUTTONDOWN: case WM_NCMBUTTONDOWN: case WM_NCRBUTTONDOWN:
|
case WM_NCLBUTTONDOWN: case WM_NCMBUTTONDOWN: case WM_NCRBUTTONDOWN:
|
||||||
@ -1042,16 +1039,16 @@ namespace detail
|
|||||||
draw_invoker(&drawer::mouse_up, msgwnd, arg, &context);
|
draw_invoker(&drawer::mouse_up, msgwnd, arg, &context);
|
||||||
|
|
||||||
if (click_arg.window_handle)
|
if (click_arg.window_handle)
|
||||||
retain->click.emit(click_arg);
|
retain->click.emit(click_arg, reinterpret_cast<window>(msgwnd));
|
||||||
|
|
||||||
if (brock.wd_manager().available(msgwnd))
|
if (brock.wd_manager().available(msgwnd))
|
||||||
{
|
{
|
||||||
arg.evt_code = event_code::mouse_up;
|
arg.evt_code = event_code::mouse_up;
|
||||||
retain->mouse_up.emit(arg);
|
retain->mouse_up.emit(arg, reinterpret_cast<window>(msgwnd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (click_arg.window_handle)
|
else if (click_arg.window_handle)
|
||||||
retain->click.emit(click_arg);
|
retain->click.emit(click_arg, reinterpret_cast<window>(msgwnd));
|
||||||
|
|
||||||
brock.wd_manager().do_lazy_refresh(msgwnd, false);
|
brock.wd_manager().do_lazy_refresh(msgwnd, false);
|
||||||
}
|
}
|
||||||
@ -1119,8 +1116,11 @@ namespace detail
|
|||||||
brock.emit(event_code::mouse_enter, msgwnd, arg, true, &context);
|
brock.emit(event_code::mouse_enter, msgwnd, arg, true, &context);
|
||||||
}
|
}
|
||||||
|
|
||||||
arg.evt_code = event_code::mouse_move;
|
if (hovered_wd)
|
||||||
brock.emit(event_code::mouse_move, msgwnd, arg, true, &context);
|
{
|
||||||
|
arg.evt_code = event_code::mouse_move;
|
||||||
|
brock.emit(event_code::mouse_move, msgwnd, arg, true, &context);
|
||||||
|
}
|
||||||
track.hwndTrack = native_window;
|
track.hwndTrack = native_window;
|
||||||
restrict::track_mouse_event(&track);
|
restrict::track_mouse_event(&track);
|
||||||
}
|
}
|
||||||
@ -1223,7 +1223,7 @@ namespace detail
|
|||||||
brock.wd_manager().calc_window_point(msgwnd, dropfiles.pos);
|
brock.wd_manager().calc_window_point(msgwnd, dropfiles.pos);
|
||||||
dropfiles.window_handle = reinterpret_cast<window>(msgwnd);
|
dropfiles.window_handle = reinterpret_cast<window>(msgwnd);
|
||||||
|
|
||||||
msgwnd->together.events_ptr->mouse_dropfiles.emit(dropfiles);
|
msgwnd->together.events_ptr->mouse_dropfiles.emit(dropfiles, reinterpret_cast<window>(msgwnd));
|
||||||
brock.wd_manager().do_lazy_refresh(msgwnd, false);
|
brock.wd_manager().do_lazy_refresh(msgwnd, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1495,7 +1495,7 @@ namespace detail
|
|||||||
brock.get_key_state(arg);
|
brock.get_key_state(arg);
|
||||||
arg.ignore = false;
|
arg.ignore = false;
|
||||||
|
|
||||||
msgwnd->together.events_ptr->key_char.emit(arg);
|
msgwnd->together.events_ptr->key_char.emit(arg, reinterpret_cast<window>(msgwnd));
|
||||||
if ((false == arg.ignore) && wd_manager.available(msgwnd))
|
if ((false == arg.ignore) && wd_manager.available(msgwnd))
|
||||||
draw_invoker(&drawer::key_char, msgwnd, arg, &context);
|
draw_invoker(&drawer::key_char, msgwnd, arg, &context);
|
||||||
|
|
||||||
@ -1785,13 +1785,19 @@ namespace detail
|
|||||||
|
|
||||||
_m_emit_core(evt_code, wd, false, arg);
|
_m_emit_core(evt_code, wd, false, arg);
|
||||||
|
|
||||||
if (ask_update)
|
bool good_wd = false;
|
||||||
wd_manager().do_lazy_refresh(wd, false);
|
if (wd_manager().available(wd))
|
||||||
else if (wd_manager().available(wd))
|
{
|
||||||
wd->other.upd_state = basic_window::update_state::none;
|
if (ask_update)
|
||||||
|
wd_manager().do_lazy_refresh(wd, false);
|
||||||
|
else
|
||||||
|
wd->other.upd_state = basic_window::update_state::none;
|
||||||
|
|
||||||
|
good_wd = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (thrd) thrd->event_window = prev_event_wd;
|
if (thrd) thrd->event_window = prev_event_wd;
|
||||||
return true;
|
return good_wd;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wchar_t* translate(cursor id)
|
const wchar_t* translate(cursor id)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
#include <nana/gui/detail/events_operation.hpp>
|
#include <nana/gui/detail/events_operation.hpp>
|
||||||
|
#include <nana/gui/detail/bedrock.hpp>
|
||||||
|
|
||||||
namespace nana
|
namespace nana
|
||||||
{
|
{
|
||||||
@ -7,18 +8,6 @@ namespace nana
|
|||||||
//class events_operation
|
//class events_operation
|
||||||
using lock_guard = std::lock_guard<std::recursive_mutex>;
|
using lock_guard = std::lock_guard<std::recursive_mutex>;
|
||||||
|
|
||||||
void events_operation::make(window wd, const std::shared_ptr<general_events>& sp)
|
|
||||||
{
|
|
||||||
lock_guard lock(mutex_);
|
|
||||||
evt_table_[wd] = sp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void events_operation::umake(window wd)
|
|
||||||
{
|
|
||||||
lock_guard lock(mutex_);
|
|
||||||
evt_table_.erase(wd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void events_operation::register_evt(event_handle evt)
|
void events_operation::register_evt(event_handle evt)
|
||||||
{
|
{
|
||||||
lock_guard lock(mutex_);
|
lock_guard lock(mutex_);
|
||||||
@ -72,9 +61,11 @@ namespace nana
|
|||||||
internal_scope_guard lock;
|
internal_scope_guard lock;
|
||||||
if (dockers_)
|
if (dockers_)
|
||||||
{
|
{
|
||||||
|
auto & evt_operation = bedrock::instance().evt_operation();
|
||||||
|
|
||||||
for (auto p : *dockers_)
|
for (auto p : *dockers_)
|
||||||
{
|
{
|
||||||
detail::events_operation_cancel(reinterpret_cast<event_handle>(p));
|
evt_operation.cancel(reinterpret_cast<event_handle>(p));
|
||||||
delete p;
|
delete p;
|
||||||
}
|
}
|
||||||
dockers_->clear();
|
dockers_->clear();
|
||||||
|
|||||||
@ -86,13 +86,12 @@ namespace detail
|
|||||||
private:
|
private:
|
||||||
std::vector<key_value_rep> table_;
|
std::vector<key_value_rep> table_;
|
||||||
};
|
};
|
||||||
//class window_manager
|
|
||||||
|
|
||||||
|
//class window_manager
|
||||||
struct window_handle_deleter
|
struct window_handle_deleter
|
||||||
{
|
{
|
||||||
void operator()(basic_window* wd) const
|
void operator()(basic_window* wd) const
|
||||||
{
|
{
|
||||||
bedrock::instance().evt_operation().umake(reinterpret_cast<window>(wd));
|
|
||||||
delete wd;
|
delete wd;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -399,7 +398,7 @@ namespace detail
|
|||||||
if (wd->flags.destroying)
|
if (wd->flags.destroying)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(wd->other.category == category::root_tag::value)
|
if(category::flags::root == wd->other.category)
|
||||||
{
|
{
|
||||||
auto &brock = bedrock::instance();
|
auto &brock = bedrock::instance();
|
||||||
arg_unload arg;
|
arg_unload arg;
|
||||||
@ -844,10 +843,10 @@ namespace detail
|
|||||||
//Thread-Safe Required!
|
//Thread-Safe Required!
|
||||||
std::lock_guard<decltype(mutex_)> lock(mutex_);
|
std::lock_guard<decltype(mutex_)> lock(mutex_);
|
||||||
|
|
||||||
//It's not worthy to redraw if visible is false
|
|
||||||
if (false == impl_->wd_register.available(wd))
|
if (false == impl_->wd_register.available(wd))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
//It's not worthy to redraw if visible is false
|
||||||
if(wd->visible && (!wd->is_draw_through()))
|
if(wd->visible && (!wd->is_draw_through()))
|
||||||
{
|
{
|
||||||
if (wd->visible_parents())
|
if (wd->visible_parents())
|
||||||
@ -1573,7 +1572,7 @@ namespace detail
|
|||||||
wd->drawer.detached();
|
wd->drawer.detached();
|
||||||
wd->widget_notifier->destroy();
|
wd->widget_notifier->destroy();
|
||||||
|
|
||||||
if(wd->other.category == category::frame_tag::value)
|
if(category::flags::frame == wd->other.category)
|
||||||
{
|
{
|
||||||
//The frame widget does not have an owner, and close their element windows without activating owner.
|
//The frame widget does not have an owner, and close their element windows without activating owner.
|
||||||
//close the frame container window, it's a native window.
|
//close the frame container window, it's a native window.
|
||||||
|
|||||||
@ -169,19 +169,19 @@ namespace nana
|
|||||||
switch (arg.evt_code)
|
switch (arg.evt_code)
|
||||||
{
|
{
|
||||||
case event_code::mouse_down:
|
case event_code::mouse_down:
|
||||||
evt_ptr->mouse_down.emit(arg);
|
evt_ptr->mouse_down.emit(arg, nullptr);
|
||||||
break;
|
break;
|
||||||
case event_code::mouse_up:
|
case event_code::mouse_up:
|
||||||
evt_ptr->mouse_up.emit(arg);
|
evt_ptr->mouse_up.emit(arg, nullptr);
|
||||||
break;
|
break;
|
||||||
case event_code::mouse_leave:
|
case event_code::mouse_leave:
|
||||||
evt_ptr->mouse_leave.emit(arg);
|
evt_ptr->mouse_leave.emit(arg, nullptr);
|
||||||
break;
|
break;
|
||||||
case event_code::mouse_move:
|
case event_code::mouse_move:
|
||||||
evt_ptr->mouse_move.emit(arg);
|
evt_ptr->mouse_move.emit(arg, nullptr);
|
||||||
break;
|
break;
|
||||||
case event_code::dbl_click:
|
case event_code::dbl_click:
|
||||||
evt_ptr->dbl_click.emit(arg);
|
evt_ptr->dbl_click.emit(arg, nullptr);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -184,12 +184,11 @@ namespace API
|
|||||||
{
|
{
|
||||||
auto iwd = reinterpret_cast<basic_window*>(wd);
|
auto iwd = reinterpret_cast<basic_window*>(wd);
|
||||||
internal_scope_guard lock;
|
internal_scope_guard lock;
|
||||||
if (restrict::wd_manager().available(iwd) && iwd->set_events(gep))
|
|
||||||
{
|
if (restrict::wd_manager().available(iwd))
|
||||||
restrict::bedrock.evt_operation().make(wd, gep);
|
iwd->set_events(gep);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_scheme(window wd, widget_colors* wdg_colors)
|
void set_scheme(window wd, widget_colors* wdg_colors)
|
||||||
|
|||||||
@ -135,7 +135,7 @@ namespace nana
|
|||||||
|
|
||||||
void emit(const arg_elapse& arg)
|
void emit(const arg_elapse& arg)
|
||||||
{
|
{
|
||||||
evt_elapse_.emit(arg);
|
evt_elapse_.emit(arg, nullptr);
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
const timer_identifier timer_;
|
const timer_identifier timer_;
|
||||||
|
|||||||
@ -94,7 +94,7 @@ namespace nana{ namespace drawerbase
|
|||||||
{
|
{
|
||||||
impl_->crook.reverse();
|
impl_->crook.reverse();
|
||||||
arg_checkbox arg{ static_cast<nana::checkbox*>(impl_->widget_ptr) };
|
arg_checkbox arg{ static_cast<nana::checkbox*>(impl_->widget_ptr) };
|
||||||
API::events<nana::checkbox>(impl_->widget_ptr->handle()).checked.emit(arg);
|
API::events<nana::checkbox>(impl_->widget_ptr->handle()).checked.emit(arg, impl_->widget_ptr->handle());
|
||||||
}
|
}
|
||||||
refresh(graph);
|
refresh(graph);
|
||||||
API::lazy_refresh();
|
API::lazy_refresh();
|
||||||
@ -172,7 +172,7 @@ namespace nana{ namespace drawerbase
|
|||||||
API::refresh_window(handle());
|
API::refresh_window(handle());
|
||||||
|
|
||||||
arg_checkbox arg(this);
|
arg_checkbox arg(this);
|
||||||
this->events().checked.emit(arg);
|
this->events().checked.emit(arg, this->handle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,7 @@ namespace nana
|
|||||||
|
|
||||||
void text_changed() override
|
void text_changed() override
|
||||||
{
|
{
|
||||||
widget_.events().text_changed.emit(::nana::arg_combox{ widget_ });
|
widget_.events().text_changed.emit(::nana::arg_combox{ widget_ }, widget_);
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
::nana::combox & widget_;
|
::nana::combox & widget_;
|
||||||
@ -355,7 +355,7 @@ namespace nana
|
|||||||
_m_draw_push_button(widget_->enabled());
|
_m_draw_push_button(widget_->enabled());
|
||||||
_m_draw_image();
|
_m_draw_image();
|
||||||
|
|
||||||
widget_->events().selected.emit(::nana::arg_combox(*widget_));
|
widget_->events().selected.emit(::nana::arg_combox(*widget_), widget_->handle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -480,7 +480,7 @@ namespace nana
|
|||||||
chose_ = true;
|
chose_ = true;
|
||||||
|
|
||||||
arg_datechooser evt_arg{ static_cast<nana::date_chooser*>(API::get_widget(window_handle)) };
|
arg_datechooser evt_arg{ static_cast<nana::date_chooser*>(API::get_widget(window_handle)) };
|
||||||
API::events<nana::date_chooser>(window_handle).date_changed.emit(evt_arg);
|
API::events<nana::date_chooser>(window_handle).date_changed.emit(evt_arg, window_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool chose() const
|
bool chose() const
|
||||||
|
|||||||
@ -1208,7 +1208,7 @@ namespace nana
|
|||||||
m.flags.checked = ck;
|
m.flags.checked = ck;
|
||||||
|
|
||||||
arg_listbox arg{ item_proxy{ess_, pos}, ck};
|
arg_listbox arg{ item_proxy{ess_, pos}, ck};
|
||||||
wd_ptr()->events().checked.emit(arg);
|
wd_ptr()->events().checked.emit(arg, wd_ptr()->handle());
|
||||||
}
|
}
|
||||||
++pos.item;
|
++pos.item;
|
||||||
}
|
}
|
||||||
@ -1279,7 +1279,7 @@ namespace nana
|
|||||||
m.flags.selected = sel;
|
m.flags.selected = sel;
|
||||||
|
|
||||||
arg_listbox arg{ item_proxy(ess_, i), sel };
|
arg_listbox arg{ item_proxy(ess_, i), sel };
|
||||||
wd_ptr()->events().selected.emit(arg);
|
wd_ptr()->events().selected.emit(arg, wd_ptr()->handle());
|
||||||
|
|
||||||
if (m.flags.selected)
|
if (m.flags.selected)
|
||||||
last_selected_abs = i;
|
last_selected_abs = i;
|
||||||
@ -1371,12 +1371,12 @@ namespace nana
|
|||||||
if (for_selection)
|
if (for_selection)
|
||||||
{
|
{
|
||||||
m.flags.selected = false;
|
m.flags.selected = false;
|
||||||
widget_->events().selected.emit(arg);
|
widget_->events().selected.emit(arg, widget_->handle());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m.flags.checked = false;
|
m.flags.checked = false;
|
||||||
widget_->events().checked.emit(arg);
|
widget_->events().checked.emit(arg, widget_->handle());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1454,12 +1454,12 @@ namespace nana
|
|||||||
if (for_selection)
|
if (for_selection)
|
||||||
{
|
{
|
||||||
m.flags.selected = false;
|
m.flags.selected = false;
|
||||||
widget_->events().selected.emit(arg);
|
widget_->events().selected.emit(arg, widget_->handle());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m.flags.checked = false;
|
m.flags.checked = false;
|
||||||
widget_->events().checked.emit(arg);
|
widget_->events().checked.emit(arg, widget_->handle());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1554,7 +1554,7 @@ namespace nana
|
|||||||
m.flags.checked = ck;
|
m.flags.checked = ck;
|
||||||
|
|
||||||
arg_listbox arg{ item_proxy(ess_, index_pair(cat, index)), ck};
|
arg_listbox arg{ item_proxy(ess_, index_pair(cat, index)), ck};
|
||||||
wd_ptr()->events().checked.emit(arg);
|
wd_ptr()->events().checked.emit(arg, widget_->handle());
|
||||||
|
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
@ -3456,7 +3456,7 @@ namespace nana
|
|||||||
index_pair last_selected(item_pos.cat, lister.absolute(item_pos));
|
index_pair last_selected(item_pos.cat, lister.absolute(item_pos));
|
||||||
|
|
||||||
arg_listbox arg{item_proxy{essence_, last_selected}, sel};
|
arg_listbox arg{item_proxy{essence_, last_selected}, sel};
|
||||||
lister.wd_ptr()->events().selected.emit(arg);
|
lister.wd_ptr()->events().selected.emit(arg, lister.wd_ptr()->handle());
|
||||||
|
|
||||||
if (item_ptr->flags.selected)
|
if (item_ptr->flags.selected)
|
||||||
{
|
{
|
||||||
@ -3478,7 +3478,7 @@ namespace nana
|
|||||||
|
|
||||||
index_pair abs_pos{ item_pos.cat, lister.absolute(item_pos) };
|
index_pair abs_pos{ item_pos.cat, lister.absolute(item_pos) };
|
||||||
arg_listbox arg{ item_proxy{ essence_, abs_pos }, item_ptr->flags.checked };
|
arg_listbox arg{ item_proxy{ essence_, abs_pos }, item_ptr->flags.checked };
|
||||||
lister.wd_ptr()->events().checked.emit(arg);
|
lister.wd_ptr()->events().checked.emit(arg, lister.wd_ptr()->handle());
|
||||||
|
|
||||||
if (item_ptr->flags.checked)
|
if (item_ptr->flags.checked)
|
||||||
lister.cancel_others_if_single_enabled(false, abs_pos);
|
lister.cancel_others_if_single_enabled(false, abs_pos);
|
||||||
@ -3572,7 +3572,7 @@ namespace nana
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
arg_listbox_category arg_cat(cat_proxy(essence_, item_pos.cat));
|
arg_listbox_category arg_cat(cat_proxy(essence_, item_pos.cat));
|
||||||
lister.wd_ptr()->events().category_dbl_click.emit(arg_cat);
|
lister.wd_ptr()->events().category_dbl_click.emit(arg_cat, lister.wd_ptr()->handle());
|
||||||
|
|
||||||
if (!arg_cat.category_change_blocked()){
|
if (!arg_cat.category_change_blocked()){
|
||||||
bool do_expand = (lister.expand(item_pos.cat) == false);
|
bool do_expand = (lister.expand(item_pos.cat) == false);
|
||||||
@ -3741,7 +3741,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
m.flags.checked = ck;
|
m.flags.checked = ck;
|
||||||
arg_listbox arg{*this, ck};
|
arg_listbox arg{*this, ck};
|
||||||
ess_->lister.wd_ptr()->events().checked.emit(arg);
|
ess_->lister.wd_ptr()->events().checked.emit(arg, ess_->lister.wd_ptr()->handle());
|
||||||
ess_->update();
|
ess_->update();
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
@ -3760,7 +3760,7 @@ namespace nana
|
|||||||
m.flags.selected = s; // actually change selection
|
m.flags.selected = s; // actually change selection
|
||||||
|
|
||||||
arg_listbox arg{*this, s};
|
arg_listbox arg{*this, s};
|
||||||
ess_->lister.wd_ptr()->events().selected.emit(arg);
|
ess_->lister.wd_ptr()->events().selected.emit(arg, ess_->lister.wd_ptr()->handle());
|
||||||
|
|
||||||
if (m.flags.selected)
|
if (m.flags.selected)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -385,7 +385,7 @@ namespace nana
|
|||||||
private:
|
private:
|
||||||
void _m_emit_value_changed() const
|
void _m_emit_value_changed() const
|
||||||
{
|
{
|
||||||
other_.widget->events().value_changed.emit(::nana::arg_slider{ *other_.widget });
|
other_.widget->events().value_changed.emit(::nana::arg_slider{ *other_.widget }, other_.widget->handle());
|
||||||
}
|
}
|
||||||
|
|
||||||
nana::rectangle _m_bar_area() const
|
nana::rectangle _m_bar_area() const
|
||||||
|
|||||||
@ -38,7 +38,7 @@ namespace nana
|
|||||||
|
|
||||||
void text_changed() override
|
void text_changed() override
|
||||||
{
|
{
|
||||||
widget_.events().text_changed.emit(::nana::arg_spinbox{ widget_ });
|
widget_.events().text_changed.emit(::nana::arg_spinbox{ widget_ }, widget_.handle());
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
::nana::spinbox & widget_;
|
::nana::spinbox & widget_;
|
||||||
|
|||||||
@ -1562,7 +1562,7 @@ namespace nana
|
|||||||
API::lazy_refresh();
|
API::lazy_refresh();
|
||||||
|
|
||||||
event_arg arg;
|
event_arg arg;
|
||||||
model_->widget_ptr()->events().selected.emit(arg);
|
model_->widget_ptr()->events().selected.emit(arg, model_->widget_ptr()->handle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//end class driver
|
//end class driver
|
||||||
@ -1701,7 +1701,7 @@ namespace nana
|
|||||||
if (selection_changed && (active_pos != npos))
|
if (selection_changed && (active_pos != npos))
|
||||||
{
|
{
|
||||||
event_arg arg;
|
event_arg arg;
|
||||||
events().selected.emit(arg);
|
events().selected.emit(arg, handle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//end class tabbar
|
//end class tabbar
|
||||||
|
|||||||
@ -30,18 +30,18 @@ namespace drawerbase {
|
|||||||
|
|
||||||
void event_agent::first_change()
|
void event_agent::first_change()
|
||||||
{
|
{
|
||||||
widget_.events().first_change.emit(::nana::arg_textbox{ widget_, text_position_ });
|
widget_.events().first_change.emit(::nana::arg_textbox{ widget_, text_position_ }, widget_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void event_agent::text_changed()
|
void event_agent::text_changed()
|
||||||
{
|
{
|
||||||
widget_.events().text_changed.emit(::nana::arg_textbox{ widget_, text_position_ });
|
widget_.events().text_changed.emit(::nana::arg_textbox{ widget_, text_position_ }, widget_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void event_agent::text_exposed(const std::vector<upoint>& text_pos)
|
void event_agent::text_exposed(const std::vector<upoint>& text_pos)
|
||||||
{
|
{
|
||||||
::nana::arg_textbox arg(widget_, text_pos);
|
::nana::arg_textbox arg(widget_, text_pos);
|
||||||
widget_.events().text_exposed.emit(arg);
|
widget_.events().text_exposed.emit(arg, widget_);
|
||||||
}
|
}
|
||||||
//end class event_agent
|
//end class event_agent
|
||||||
|
|
||||||
|
|||||||
@ -308,7 +308,7 @@ namespace nana
|
|||||||
if (impl_->which != npos && container.at(impl_->which)->enable)
|
if (impl_->which != npos && container.at(impl_->which)->enable)
|
||||||
{
|
{
|
||||||
::nana::arg_toolbar arg{ *widget_, impl_->which };
|
::nana::arg_toolbar arg{ *widget_, impl_->which };
|
||||||
widget_->events().leave.emit(arg);
|
widget_->events().leave.emit(arg, widget_->handle());
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_->which = which;
|
impl_->which = which;
|
||||||
@ -322,7 +322,7 @@ namespace nana
|
|||||||
if (impl_->state == item_renderer::state_t::highlighted)
|
if (impl_->state == item_renderer::state_t::highlighted)
|
||||||
{
|
{
|
||||||
::nana::arg_toolbar arg{ *widget_, which };
|
::nana::arg_toolbar arg{ *widget_, which };
|
||||||
widget_->events().enter.emit(arg);
|
widget_->events().enter.emit(arg, widget_->handle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,7 +346,7 @@ namespace nana
|
|||||||
if (which != npos && impl_->items.at(which)->enable)
|
if (which != npos && impl_->items.at(which)->enable)
|
||||||
{
|
{
|
||||||
::nana::arg_toolbar arg{ *widget_, which };
|
::nana::arg_toolbar arg{ *widget_, which };
|
||||||
widget_->events().leave.emit(arg);
|
widget_->events().leave.emit(arg, widget_->handle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl_->tooltip.close();
|
impl_->tooltip.close();
|
||||||
@ -371,7 +371,7 @@ namespace nana
|
|||||||
if(impl_->which == which)
|
if(impl_->which == which)
|
||||||
{
|
{
|
||||||
::nana::arg_toolbar arg{ *widget_, which };
|
::nana::arg_toolbar arg{ *widget_, which };
|
||||||
widget_->events().selected.emit(arg);
|
widget_->events().selected.emit(arg, widget_->handle());
|
||||||
|
|
||||||
impl_->state = item_renderer::state_t::highlighted;
|
impl_->state = item_renderer::state_t::highlighted;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -496,7 +496,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
data.stop_drawing = true;
|
data.stop_drawing = true;
|
||||||
item_proxy iprx(data.trigger_ptr, node);
|
item_proxy iprx(data.trigger_ptr, node);
|
||||||
data.widget_ptr->events().checked.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, (checkstate::unchecked != cs) });
|
data.widget_ptr->events().checked.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, (checkstate::unchecked != cs) }, data.widget_ptr->handle());
|
||||||
data.stop_drawing = false;
|
data.stop_drawing = false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -512,14 +512,14 @@ namespace nana
|
|||||||
if (node_state.selected)
|
if (node_state.selected)
|
||||||
{
|
{
|
||||||
item_proxy iprx(data.trigger_ptr, node_state.selected);
|
item_proxy iprx(data.trigger_ptr, node_state.selected);
|
||||||
data.widget_ptr->events().selected.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, false });
|
data.widget_ptr->events().selected.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, false }, data.widget_ptr->handle());
|
||||||
}
|
}
|
||||||
|
|
||||||
node_state.selected = node;
|
node_state.selected = node;
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
item_proxy iprx(data.trigger_ptr, node_state.selected);
|
item_proxy iprx(data.trigger_ptr, node_state.selected);
|
||||||
data.widget_ptr->events().selected.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, true });
|
data.widget_ptr->events().selected.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, true }, data.widget_ptr->handle());
|
||||||
}
|
}
|
||||||
data.stop_drawing = false;
|
data.stop_drawing = false;
|
||||||
return true;
|
return true;
|
||||||
@ -544,7 +544,7 @@ namespace nana
|
|||||||
data.stop_drawing = true;
|
data.stop_drawing = true;
|
||||||
//attr.ext_event.expand(data.widget_ptr->handle(), item_proxy(data.trigger_ptr, node), value);
|
//attr.ext_event.expand(data.widget_ptr->handle(), item_proxy(data.trigger_ptr, node), value);
|
||||||
item_proxy iprx(data.trigger_ptr, node);
|
item_proxy iprx(data.trigger_ptr, node);
|
||||||
data.widget_ptr->events().expanded.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, value });
|
data.widget_ptr->events().expanded.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, value }, data.widget_ptr->handle());
|
||||||
data.stop_drawing = false;
|
data.stop_drawing = false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -682,7 +682,7 @@ namespace nana
|
|||||||
if (node_state.pointed)
|
if (node_state.pointed)
|
||||||
{
|
{
|
||||||
item_proxy iprx(data.trigger_ptr, node_state.pointed);
|
item_proxy iprx(data.trigger_ptr, node_state.pointed);
|
||||||
data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, false });
|
data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, false }, data.widget_ptr->handle());
|
||||||
|
|
||||||
if (nl.node() != node_state.pointed)
|
if (nl.node() != node_state.pointed)
|
||||||
close_tooltip_window();
|
close_tooltip_window();
|
||||||
@ -691,7 +691,7 @@ namespace nana
|
|||||||
|
|
||||||
node_state.pointed = nl.node();
|
node_state.pointed = nl.node();
|
||||||
item_proxy iprx(data.trigger_ptr, node_state.pointed);
|
item_proxy iprx(data.trigger_ptr, node_state.pointed);
|
||||||
data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, true });
|
data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, true }, data.widget_ptr->handle());
|
||||||
|
|
||||||
redraw = (node_state.comp_pointed != component::end);
|
redraw = (node_state.comp_pointed != component::end);
|
||||||
|
|
||||||
@ -709,7 +709,7 @@ namespace nana
|
|||||||
redraw = true;
|
redraw = true;
|
||||||
node_state.comp_pointed = component::end;
|
node_state.comp_pointed = component::end;
|
||||||
item_proxy iprx(data.trigger_ptr, node_state.pointed);
|
item_proxy iprx(data.trigger_ptr, node_state.pointed);
|
||||||
data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, false });
|
data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *data.widget_ptr, iprx, false }, data.widget_ptr->handle());
|
||||||
|
|
||||||
close_tooltip_window();
|
close_tooltip_window();
|
||||||
node_state.pointed = nullptr;
|
node_state.pointed = nullptr;
|
||||||
@ -1995,7 +1995,7 @@ namespace nana
|
|||||||
if (impl_->node_state.pointed && (!impl_->node_state.tooltip))
|
if (impl_->node_state.pointed && (!impl_->node_state.tooltip))
|
||||||
{
|
{
|
||||||
item_proxy iprx(impl_->data.trigger_ptr, impl_->node_state.pointed);
|
item_proxy iprx(impl_->data.trigger_ptr, impl_->node_state.pointed);
|
||||||
impl_->data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *impl_->data.widget_ptr, iprx, false });
|
impl_->data.widget_ptr->events().hovered.emit(::nana::arg_treebox{ *impl_->data.widget_ptr, iprx, false }, impl_->data.widget_ptr->handle());
|
||||||
impl_->node_state.pointed = nullptr;
|
impl_->node_state.pointed = nullptr;
|
||||||
impl_->draw(false);
|
impl_->draw(false);
|
||||||
API::lazy_refresh();
|
API::lazy_refresh();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user