diff --git a/.gitignore b/.gitignore
index c3cd3cfa..a8f12de9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,6 +24,7 @@ bii/deps/*
[Bb]in
[Dd]ebug*/
*.lib
+*.a
*.sbr
obj/
[Rr]elease*/
@@ -31,5 +32,4 @@ _ReSharper*/
[Tt]est[Rr]esult*
*.suo
*.sdf
-
-bii/.hive.db
\ No newline at end of file
+lib/
diff --git a/build/vc2013/nana.sln b/build/vc2013/nana.sln
index 6baefd4a..3d18acf9 100644
--- a/build/vc2013/nana.sln
+++ b/build/vc2013/nana.sln
@@ -1,20 +1,26 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 2013 for Windows Desktop
-VisualStudioVersion = 12.0.21005.1
+VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nana", "nana.vcxproj", "{25B21068-491B-4A9F-B99F-6C27BF31BAAD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Debug|Win32.ActiveCfg = Debug|Win32
{25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Debug|Win32.Build.0 = Debug|Win32
+ {25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Debug|x64.ActiveCfg = Debug|x64
+ {25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Debug|x64.Build.0 = Debug|x64
{25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Release|Win32.ActiveCfg = Release|Win32
{25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Release|Win32.Build.0 = Release|Win32
+ {25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Release|x64.ActiveCfg = Release|x64
+ {25B21068-491B-4A9F-B99F-6C27BF31BAAD}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/build/vc2013/nana.vcxproj b/build/vc2013/nana.vcxproj
index d6b6e976..7e216758 100644
--- a/build/vc2013/nana.vcxproj
+++ b/build/vc2013/nana.vcxproj
@@ -5,10 +5,18 @@
Debug
Win32
+
+ Debug
+ x64
+
Release
Win32
+
+ Release
+ x64
+
{25B21068-491B-4A9F-B99F-6C27BF31BAAD}
@@ -22,6 +30,12 @@
v120
Unicode
+
+ StaticLibrary
+ true
+ v120
+ Unicode
+
StaticLibrary
false
@@ -29,21 +43,48 @@
true
Unicode
+
+ StaticLibrary
+ false
+ v120
+ true
+ Unicode
+
+
+
+
+
+
+
../bin/vc2013/
+ ..\..\include;$(IncludePath)
+ ..\..\source;$(VC_SourcePath);
+
+
+ ..\..\include;$(IncludePath)
+ ..\..\source;$(VC_SourcePath);
+ ../bin/vc2013/
../bin/vc2013/
+ ..\..\include;$(IncludePath)
+ ..\..\source;$(VC_SourcePath);
+
+
+ ..\..\include;$(IncludePath)
+ ..\..\source;$(VC_SourcePath);
+ ../bin/vc2013/
@@ -52,13 +93,33 @@
Level3
Disabled
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreadedDebug
+ true
+ false
Windows
true
- $(OutDir)\nana_debug.lib
+ $(OutDir)\nana_$(ConfigurationName)_$(PlatformShortName).lib
+
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreadedDebug
+
+
+ Windows
+ true
+
+
+ $(OutDir)\nana_$(ConfigurationName)_$(PlatformShortName).lib
@@ -70,6 +131,8 @@
true
true
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreaded
+ true
Windows
@@ -78,7 +141,28 @@
true
- $(OutDir)\nana_release.lib
+ $(OutDir)\nana_$(ConfigurationName)_$(PlatformShortName).lib
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreaded
+
+
+ Windows
+ true
+ true
+ true
+
+
+ $(OutDir)\nana_$(ConfigurationName)_$(PlatformShortName).lib
diff --git a/extrlib/readme (2).txt b/extrlib/readme (2).txt
new file mode 100644
index 00000000..84359ae5
--- /dev/null
+++ b/extrlib/readme (2).txt
@@ -0,0 +1 @@
+The libpng.a is for MinGW(Not linux), and other .lib files are for VS2013
\ No newline at end of file
diff --git a/include/nana/basic_types.hpp b/include/nana/basic_types.hpp
index 9a2d85f2..a48d9ece 100644
--- a/include/nana/basic_types.hpp
+++ b/include/nana/basic_types.hpp
@@ -18,7 +18,7 @@
namespace nana
{
- //A constant value for the invalid position.
+ /// A constant value for the invalid position.
const std::size_t npos = static_cast(-1);
@@ -127,8 +127,7 @@ namespace nana
using pixel_color_t = pixel_argb_t;
- //http://www.w3.org/TR/2011/REC-css3-color-20110607/
- //4.3. Extended color keywords
+ /// See extended CSS color keywords (4.3) in http://www.w3.org/TR/2011/REC-css3-color-20110607/
enum class colors
{
alice_blue = 0xf0f8ff,
@@ -283,7 +282,7 @@ namespace nana
//temporary defintions, these will be replaced by color schema
button_face_shadow_start = 0xF5F4F2,
button_face_shadow_end = 0xD5D2CA,
- button_face = 0xD4D0C8,
+ button_face = 0xD4D0C8 , //,light_cyan
dark_border = 0x404040,
gray_border = 0x808080,
highlight = 0x1CC4F7
@@ -320,10 +319,10 @@ namespace nana
color blend(const color& bgcolor, bool ignore_bgcolor_alpha) const;
- ///< Blends two colors with the specified alpha, and the alpha values that come with these two colors are both ignored.
+ /// Blends two colors with the specified alpha, and the alpha values that come with these two colors are both ignored.
color blend(const color& bgcolor, double alpha) const;
- ///< Determines whether the color is completely transparent.
+ /// Determines whether the color is completely transparent.
bool invisible() const;
pixel_color_t px_color() const;
pixel_argb_t argb() const;
@@ -435,10 +434,10 @@ namespace nana
unsigned height;
};
- class area_rotator
+ class rectangle_rotator
{
public:
- area_rotator(bool rotated, const ::nana::rectangle& area);
+ rectangle_rotator(bool rotated, const ::nana::rectangle& area);
int x() const;
int & x_ref();
@@ -455,7 +454,7 @@ namespace nana
private:
bool rotated_;
::nana::rectangle area_;
- };//end class area_rotator
+ };//end class rectangle_rotator
enum class arrange
{
diff --git a/include/nana/config.hpp b/include/nana/config.hpp
index 9462f04c..77b9005c 100644
--- a/include/nana/config.hpp
+++ b/include/nana/config.hpp
@@ -1,7 +1,7 @@
/*
* Nana Configuration
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2014 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2015 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -20,10 +20,13 @@
#define PLATFORM_SPEC_HPP
//Test if it is MINGW
- #if defined(__MINGW32__)
+ #if defined(__MINGW32__) || defined(__MINGW64__)
#define NANA_MINGW
#define STD_CODECVT_NOT_SUPPORTED
- //#define STD_THREAD_NOT_SUPPORTED //Use this flag if MinGW version is older than 4.8.1
+ #if (__GNUC__ == 4) && ((__GNUC_MINOR__ < 8) || (__GNUC_MINOR__ == 8 && __GNUC_PATCHLEVEL__ < 1))
+ //Use this flag if MinGW version is older than 4.8.1
+ #define STD_THREAD_NOT_SUPPORTED
+ #endif
#endif
#elif (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC)
//Linux:
@@ -35,6 +38,13 @@
# static_assert(false, "Only Windows and Unix are support now");
#endif
+#if defined(NANA_MINGW) || defined(NANA_LINUX)
+ #if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) && (__GNUC_PATCHLEVEL__ <= 1)
+ //Some functions which are specified in 21.5 Numeric conversions in Strings library have not yet implemented
+ #define STD_NUMERIC_CONVERSIONS_NOT_SUPPORTED
+ #endif
+#endif
+
//Here defines some flags that tell Nana what features will be supported.
#define NANA_UNICODE
diff --git a/include/nana/deploy.hpp b/include/nana/deploy.hpp
index 3607767c..afa742cb 100644
--- a/include/nana/deploy.hpp
+++ b/include/nana/deploy.hpp
@@ -23,8 +23,8 @@
#undef NANA_WINDOWS
#endif
-//Implement workarounds for MinGW
-#if defined(NANA_MINGW) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 8)
+//Implement workarounds for GCC/MinGW which version is below 4.8.2
+#if defined(STD_NUMERIC_CONVERSIONS_NOT_SUPPORTED)
namespace std
{
//Workaround for no implemenation of std::stoi in MinGW.
diff --git a/include/nana/detail/linux_X11/msg_dispatcher.hpp b/include/nana/detail/linux_X11/msg_dispatcher.hpp
index a1ca507c..eab77f2f 100644
--- a/include/nana/detail/linux_X11/msg_dispatcher.hpp
+++ b/include/nana/detail/linux_X11/msg_dispatcher.hpp
@@ -172,7 +172,7 @@ namespace detail
{
int pending;
{
- nana::detail::platform_scope_guard psg;
+ nana::detail::platform_scope_guard lock;
pending = ::XPending(display_);
if(pending)
{
diff --git a/include/nana/gui/basis.hpp b/include/nana/gui/basis.hpp
index 4eb95c88..c0ef0aa5 100644
--- a/include/nana/gui/basis.hpp
+++ b/include/nana/gui/basis.hpp
@@ -96,7 +96,8 @@ namespace nana
//System Code for OS
os_pageup = 0x21, os_pagedown,
os_arrow_left = 0x25, os_arrow_up, os_arrow_right, os_arrow_down,
- os_insert = 0x2D, os_del
+ os_insert = 0x2D, os_del ,
+ os_end = 0x23 , os_home //Pos 1
};
};
diff --git a/include/nana/gui/detail/basic_window.hpp b/include/nana/gui/detail/basic_window.hpp
index 2834c870..659f4316 100644
--- a/include/nana/gui/detail/basic_window.hpp
+++ b/include/nana/gui/detail/basic_window.hpp
@@ -166,7 +166,8 @@ namespace detail
bool fullscreen :1; //When the window is maximizing whether it fit for fullscreen.
bool borderless :1;
bool make_bground_declared : 1; //explicitly make bground for bground effects
- unsigned Reserved :21;
+ bool ignore_menubar_focus : 1; //A flag indicates whether the menubar sets the focus.
+ unsigned Reserved :20;
unsigned char tab; //indicate a window that can receive the keyboard TAB
mouse_action action;
}flags;
@@ -175,7 +176,6 @@ namespace detail
{
caret_descriptor* caret;
std::shared_ptr events_ptr;
- general_events* attached_events;
}together;
widget_colors* scheme{ nullptr };
diff --git a/include/nana/gui/detail/bedrock.hpp b/include/nana/gui/detail/bedrock.hpp
index 71a52149..1ae2a41d 100644
--- a/include/nana/gui/detail/bedrock.hpp
+++ b/include/nana/gui/detail/bedrock.hpp
@@ -54,13 +54,14 @@ namespace detail
native_window_type root(core_window_t*);
void set_menubar_taken(core_window_t*);
- core_window_t* get_menubar_taken();
+
+ //Delay Restores focus when a menu which attached to menubar is closed
+ void delay_restore(int);
bool close_menu_if_focus_other_window(native_window_type focus);
void set_menu(native_window_type menu_window, bool is_keyboard_condition);
native_window_type get_menu(native_window_type owner, bool is_keyboard_condition);
native_window_type get_menu();
- void remove_menu();
- void empty_menu();
+ void erase_menu(bool try_destroy);
void get_key_state(arg_keyboard&);
bool set_keyboard_shortkey(bool yes);
diff --git a/include/nana/gui/detail/events_operation.hpp b/include/nana/gui/detail/events_operation.hpp
index 29c65430..418d2fa2 100644
--- a/include/nana/gui/detail/events_operation.hpp
+++ b/include/nana/gui/detail/events_operation.hpp
@@ -23,7 +23,6 @@ namespace nana
void register_evt(event_handle);
void cancel(event_handle);
void erase(event_handle);
- std::size_t size() const;
private:
mutable std::recursive_mutex mutex_;
std::unordered_set register_;
diff --git a/include/nana/gui/detail/general_events.hpp b/include/nana/gui/detail/general_events.hpp
index 20dae998..1a4bf972 100644
--- a/include/nana/gui/detail/general_events.hpp
+++ b/include/nana/gui/detail/general_events.hpp
@@ -1,4 +1,4 @@
-/*
+/**
* Definition of General Events
* Nana C++ Library(http://www.nanapro.org)
* Copyright(C) 2003-2015 Jinhao(cnjinhao@hotmail.com)
@@ -19,7 +19,6 @@
#include
#include
#include
-#include
namespace nana
{
@@ -43,11 +42,13 @@ namespace nana
void events_operation_cancel(event_handle);
}//end namespace detail
+ /// base clase for all event argument types
class event_arg
{
public:
virtual ~event_arg();
+ /// ignorable handlers behind the current one in a chain of event handlers will not get called.
void stop_propagation() const;
bool propagation_stopped() const;
private:
@@ -56,18 +57,19 @@ namespace nana
struct general_events;
+ /// the type of the members of general_events
template
class basic_event : public detail::event_interface
{
public:
- typedef const typename std::remove_reference::type & arg_reference;
+ using arg_reference = const typename std::remove_reference::type &;
private:
struct docker
: public detail::docker_interface
{
basic_event * const event_ptr;
std::function invoke;
- bool flag_entered{ false };
+
bool flag_deleted{ false };
bool unignorable{false};
@@ -89,7 +91,38 @@ namespace nana
return event_ptr;
}
};
+
+ //class emit_counter is a RAII helper for emitting count
+ //It is used for avoiding a try{}catch block which is required for some finial works when
+ //event handlers throw exceptions.
+ class emit_counter
+ {
+ public:
+ emit_counter(basic_event* evt)
+ : evt_{evt}
+ {
+ ++evt->emitting_count_;
+ }
+
+ ~emit_counter()
+ {
+ if ((0 == --evt_->emitting_count_) && evt_->deleted_flags_)
+ {
+ evt_->deleted_flags_ = false;
+ for (auto i = evt_->dockers_->begin(); i != evt_->dockers_->end();)
+ {
+ if (i->get()->flag_deleted)
+ i = evt_->dockers_->erase(i);
+ else
+ ++i;
+ }
+ }
+ }
+ private:
+ basic_event * const evt_;
+ };
public:
+ /// It will get called firstly, because it is set at the beginning of the chain.
template
event_handle connect_front(Function && fn)
{
@@ -112,6 +145,7 @@ namespace nana
});
}
+ /// It will not get called if stop_propagation() was called.
template
event_handle connect(Function && fn)
{
@@ -127,13 +161,15 @@ namespace nana
return evt;
}
- template
+ /// It will not get called if stop_propagation() was called.
+ template
event_handle operator()(Function&& fn)
{
return connect(std::forward(fn));
}
- template
+ /// It will get called because it is unignorable.
+ template
event_handle connect_unignorable(Function && fn, bool in_front = false)
{
internal_scope_guard lock;
@@ -157,54 +193,37 @@ namespace nana
return (nullptr == dockers_ ? 0 : dockers_->size());
}
- void emit(arg_reference& arg) const
+ void emit(arg_reference& arg)
{
internal_scope_guard lock;
if (nullptr == dockers_)
return;
- //Make a copy to allow create/destroy a new event handler when the call of emit in an event.
- const std::size_t fixed_size = 10;
- docker* fixed_buffer[fixed_size];
- docker** transitory = fixed_buffer;
+ emit_counter ec(this);
- std::unique_ptr variable_buffer;
auto& dockers = *dockers_;
- if (dockers.size() > fixed_size)
- {
- variable_buffer.reset(new docker*[dockers.size()]);
- transitory = variable_buffer.get();
- }
+ const auto dockers_len = dockers.size();
- auto output = transitory;
- for (auto & dck : dockers)
+ //The dockers may resize when a new event handler is created by a calling handler.
+ //Traverses with position can avaid crash error which caused by a iterator which becomes invalid.
+ for (std::size_t pos = 0; pos < dockers_len; ++pos)
{
- (*output++) = dck.get();
- }
-
- bool stop_propagation = false;
- for (; transitory != output; ++transitory)
- {
- auto docker_ptr = *transitory;
- if (stop_propagation && !docker_ptr->unignorable)
+ auto docker_ptr = dockers[pos].get();
+ if (docker_ptr->flag_deleted)
continue;
- auto i = std::find_if(dockers.begin(), dockers.end(), [docker_ptr](std::unique_ptr& p){
- return (docker_ptr == p.get());
- });
-
- if (i != dockers.end())
+ docker_ptr->invoke(arg);
+ if (arg.propagation_stopped())
{
- docker_ptr->flag_entered = true;
- docker_ptr->invoke(arg);
+ for (++pos; pos < dockers_len; ++pos)
+ {
+ auto docker_ptr = dockers[pos].get();
+ if (!docker_ptr->unignorable || docker_ptr->flag_deleted)
+ continue;
- if (arg.propagation_stopped())
- stop_propagation = true;
-
- docker_ptr->flag_entered = false;
-
- if (docker_ptr->flag_deleted)
- dockers.erase(i);
+ docker_ptr->invoke(arg);
+ }
+ break;
}
}
}
@@ -221,17 +240,20 @@ namespace nana
internal_scope_guard lock;
if (dockers_)
{
- auto i = std::find_if(dockers_->begin(), dockers_->end(), [evt](const std::unique_ptr& sp)
+ for (auto i = dockers_->begin(), end = dockers_->end(); i != end; ++i)
{
- return (reinterpret_cast(evt) == sp.get());
- });
-
- if (i != dockers_->end())
- {
- if (i->get()->flag_entered)
- i->get()->flag_deleted = true;
- else
- dockers_->erase(i);
+ if (reinterpret_cast(evt) == i->get())
+ {
+ //Checks whether this event is working now.
+ if (emitting_count_ > 1)
+ {
+ i->get()->flag_deleted = true;
+ deleted_flags_ = true;
+ }
+ else
+ dockers_->erase(i);
+ break;
+ }
}
}
}
@@ -392,22 +414,27 @@ namespace nana
}
};
private:
+ unsigned emitting_count_{ 0 };
+ bool deleted_flags_{ false };
std::unique_ptr>> dockers_;
};
struct arg_mouse
: public event_arg
{
- event_code evt_code;
- ::nana::window window_handle;
- ::nana::point pos;
- bool left_button;
- bool mid_button;
- bool right_button;
- bool shift;
- bool ctrl;
+ event_code evt_code; ///<
+ ::nana::window window_handle; ///< A handle to the event window
+ ::nana::point pos; ///< cursor position in the event window
+ bool left_button; ///< mouse left button is pressed?
+ bool mid_button; ///< mouse middle button is pressed?
+ bool right_button; ///< mouse right button is pressed?
+ bool shift; ///< keyboard Shift is pressed?
+ bool ctrl; ///< keyboard Ctrl is pressed?
};
+ /// in arg_wheel event_code is event_code::mouse_wheel
+ /// The type arg_wheel is derived from arg_mouse, a handler
+ /// with prototype void(const arg_mouse&) can be set for mouse_wheel.
struct arg_wheel : public arg_mouse
{
enum class wheel{
@@ -415,98 +442,99 @@ namespace nana
horizontal
};
- wheel which; /// files;
+ ::nana::window window_handle; ///< A handle to the event window
+ ::nana::point pos; ///< cursor position in the event window
+ std::vector files; ///< external filenames
};
struct arg_expose : public event_arg
{
- ::nana::window window_handle;
- bool exposed;
+ ::nana::window window_handle; ///< A handle to the event window
+ bool exposed; ///< the window is visible?
};
struct arg_focus : public event_arg
{
- ::nana::window window_handle;
- ::nana::native_window_type receiver;
- bool getting;
+ ::nana::window window_handle; ///< A handle to the event window
+ ::nana::native_window_type receiver; ///< it is a native window handle, and specified which window receives focus
+ bool getting; ///< the window received focus?
};
struct arg_keyboard : public event_arg
{
- event_code evt_code;
- ::nana::window window_handle;
- mutable nana::char_t key;
- mutable bool ignore;
- bool ctrl;
- bool shift;
+ event_code evt_code; ///< it is event_code::key_press in current event
+ ::nana::window window_handle; ///< A handle to the event window
+ mutable nana::char_t key; ///< the key corresponding to the key pressed
+ mutable bool ignore; ///< this member is not used
+ bool ctrl; ///< keyboard Ctrl is pressed?
+ bool shift; ///< keyboard Shift is pressed
};
struct arg_move : public event_arg
{
- ::nana::window window_handle;
- int x;
- int y;
+ ::nana::window window_handle; ///< A handle to the event window
+ int x; ///<
+ int y; ///<
};
struct arg_resized : public event_arg
{
- ::nana::window window_handle;
- unsigned width;
- unsigned height;
+ ::nana::window window_handle; ///< A handle to the event window
+ unsigned width; ///< new width in pixels.
+ unsigned height; ///< new height in pixels.
};
struct arg_resizing : public event_arg
{
- ::nana::window window_handle;
- window_border border;
- mutable unsigned width;
- mutable unsigned height;
+ ::nana::window window_handle; ///< A handle to the event window
+ window_border border; ///< the window is being resized by moving border
+ mutable unsigned width; ///< new width in pixels. If it is modified, the window's width will be the modified value
+ mutable unsigned height; ///< new height in pixels. If it is modified, the window's height will be the modified value
};
struct arg_unload : public event_arg
{
- ::nana::window window_handle;
- mutable bool cancel;
+ ::nana::window window_handle; ///< A handle to the event window
+ mutable bool cancel; ///<
};
struct arg_destroy : public event_arg
{
- ::nana::window window_handle;
+ ::nana::window window_handle; ///< A handle to the event window
};
+ /// provides some fundamental events that every widget owns.
struct general_events
{
virtual ~general_events(){}
- basic_event mouse_enter;
- basic_event mouse_move;
- basic_event mouse_leave;
- basic_event mouse_down;
- basic_event mouse_up;
- basic_event click;
- basic_event dbl_click;
- basic_event mouse_wheel;
- basic_event mouse_dropfiles;
- basic_event expose;
- basic_event focus;
- basic_event key_press;
- basic_event key_release;
- basic_event key_char;
- basic_event shortkey;
+ basic_event mouse_enter; ///< the cursor enters the window
+ basic_event mouse_move; ///< the cursor moves on the window
+ basic_event mouse_leave; ///< the cursor leaves the window
+ basic_event mouse_down; ///< the user presses the mouse button
+ basic_event mouse_up; ///< the user presses the mouse button
+ basic_event click; ///< the window is clicked, but occurs after mouse_down and before mouse_up
+ basic_event dbl_click; ///< the window is double clicked
+ basic_event mouse_wheel; ///< the mouse wheel rotates while the window has focus
+ basic_event mouse_dropfiles; ///< the mouse drops some external data while the window enable accepting files
+ basic_event expose; ///< the visibility changes
+ basic_event focus; ///< the window receives or loses keyboard focus
+ basic_event key_press; ///< a key is pressed while the window has focus. event code is event_code::key_press
+ basic_event key_release; ///< a key is released while the window has focus. event code is event_code::key_release
+ basic_event key_char; ///< a character, whitespace or backspace is pressed. event code is event_code::key_char
+ basic_event shortkey; ///< a defined short key is pressed. event code is event_code::shortkey
- basic_event move;
- basic_event resizing;
- basic_event resized;
+ basic_event move; ///< the window changes position
+ basic_event resizing; ///< the window is changing its size
+ basic_event resized; ///< the window is changing its size
- basic_event destroy;
+ basic_event destroy; ///< the window is destroyed, but occurs when all children have been destroyed
};
namespace detail
diff --git a/include/nana/gui/detail/handle_manager.hpp b/include/nana/gui/detail/handle_manager.hpp
index 33bb97a6..91ac70f1 100644
--- a/include/nana/gui/detail/handle_manager.hpp
+++ b/include/nana/gui/detail/handle_manager.hpp
@@ -25,7 +25,6 @@
#include