From ffe32e1bcb92b33625296e22e41b3d36474926ab Mon Sep 17 00:00:00 2001 From: Jinhao Date: Sat, 23 May 2015 08:47:12 +0800 Subject: [PATCH] remove focus_changed flag --- include/nana/gui/detail/basic_window.hpp | 8 +------- source/gui/detail/basic_window.cpp | 1 - source/gui/detail/linux_X11/bedrock.cpp | 5 ++--- source/gui/detail/win32/bedrock.cpp | 13 +------------ 4 files changed, 4 insertions(+), 23 deletions(-) diff --git a/include/nana/gui/detail/basic_window.hpp b/include/nana/gui/detail/basic_window.hpp index 5534e738..b0a5bfe7 100644 --- a/include/nana/gui/detail/basic_window.hpp +++ b/include/nana/gui/detail/basic_window.hpp @@ -76,11 +76,6 @@ namespace detail { using container = std::vector; - struct root_context - { - bool focus_changed; - }; - enum class update_state { none, lazy, refresh @@ -203,7 +198,6 @@ namespace detail std::vector effects_edge_nimbus; basic_window* focus{nullptr}; basic_window* menubar{nullptr}; - root_context context; bool ime_enabled{false}; #if defined(NANA_WINDOWS) cursor running_cursor{ nana::cursor::arrow }; @@ -211,7 +205,7 @@ namespace detail cursor state_cursor{nana::cursor::arrow}; basic_window* state_cursor_window{ nullptr }; - std::function draw_through; ///< A draw through renderer for root widgets. + std::function draw_through; // A draw through renderer for root widgets. }; const category::flags category; diff --git a/source/gui/detail/basic_window.cpp b/source/gui/detail/basic_window.cpp index 16889dff..91cb5db5 100644 --- a/source/gui/detail/basic_window.cpp +++ b/source/gui/detail/basic_window.cpp @@ -195,7 +195,6 @@ namespace nana { case category::root_tag::value: attribute.root = new attr_root_tag; - attribute.root->context.focus_changed = false; break; case category::frame_tag::value: attribute.frame = new attr_frame_tag; diff --git a/source/gui/detail/linux_X11/bedrock.cpp b/source/gui/detail/linux_X11/bedrock.cpp index 91c39612..f5bf3c14 100644 --- a/source/gui/detail/linux_X11/bedrock.cpp +++ b/source/gui/detail/linux_X11/bedrock.cpp @@ -664,7 +664,6 @@ namespace detail auto focus = msgwnd->other.attribute.root->focus; if(focus && focus->together.caret) focus->together.caret->set_active(true); - msgwnd->root_widget->other.attribute.root->context.focus_changed = true; arg_focus arg; arg.window_handle = reinterpret_cast(focus); @@ -733,8 +732,8 @@ namespace detail if(kill_focus != new_focus) brock.wd_manager.do_lazy_refresh(kill_focus, false); } + auto retain = msgwnd->together.events_ptr; - msgwnd->root_widget->other.attribute.root->context.focus_changed = false; context.event_window = msgwnd; pressed_wd = nullptr; @@ -748,7 +747,7 @@ namespace detail { pressed_wd = msgwnd; //If a root window is created during the mouse_down event, Nana.GUI will ignore the mouse_up event. - if(msgwnd->root_widget->other.attribute.root->context.focus_changed) + if (msgwnd->root != native_interface::get_focus_window()) { //call the drawer mouse up event for restoring the surface graphics msgwnd->flags.action = mouse_action::normal; diff --git a/source/gui/detail/win32/bedrock.cpp b/source/gui/detail/win32/bedrock.cpp index fc35e790..a1eb7c59 100644 --- a/source/gui/detail/win32/bedrock.cpp +++ b/source/gui/detail/win32/bedrock.cpp @@ -863,8 +863,6 @@ namespace detail if(focus && focus->together.caret) focus->together.caret->set_active(true); - msgwnd->root_widget->other.attribute.root->context.focus_changed = true; - arg_focus arg; assign_arg(arg, focus, native_window, true); if (!brock.emit(event_code::focus, focus, arg, true, &context)) @@ -888,9 +886,6 @@ namespace detail //wParam indicates a handle of window that receives the focus. brock.close_menu_if_focus_other_window(reinterpret_cast(wParam)); } - //focus_changed means that during an event procedure if the focus is changed - if(brock.wd_manager.available(msgwnd)) - msgwnd->root_widget->other.attribute.root->context.focus_changed = true; def_window_proc = true; break; @@ -909,10 +904,7 @@ namespace detail { auto killed = brock.wd_manager.set_focus(msgwnd, false); if (killed != msgwnd) - { brock.wd_manager.do_lazy_refresh(killed, false); - msgwnd->root_widget->other.attribute.root->context.focus_changed = false; - } } arg_mouse arg; @@ -946,10 +938,7 @@ namespace detail { auto kill_focus = brock.wd_manager.set_focus(new_focus, false); if(kill_focus != new_focus) - { brock.wd_manager.do_lazy_refresh(kill_focus, false); - msgwnd->root_widget->other.attribute.root->context.focus_changed = false; - } } arg_mouse arg; @@ -960,7 +949,7 @@ namespace detail if (brock.emit(event_code::mouse_down, msgwnd, arg, true, &context)) { //If a root_window is created during the mouse_down event, Nana.GUI will ignore the mouse_up event. - if(msgwnd->root_widget->other.attribute.root->context.focus_changed) + if (msgwnd->root != native_interface::get_focus_window()) { auto pos = native_interface::cursor_position(); auto rootwd = native_interface::find_window(pos.x, pos.y);