OSDN Git Service

Version 0.6.222, Fix the bug of X.TextRange.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 15_XEventDispatcher.js
index afa52c7..20701c3 100644 (file)
@@ -734,7 +734,8 @@ function X_EventDispatcher_actualRemoveEvent( that, type, raw, list, skip ){
 \r
 // TODO ブラウザからの呼び出しの最後に登録された関数を呼び出す機能(例えば画面の更新)\r
 var X_EventDispatcher_CURRENT_EVENTS    = [];\r
-var X_EventDispatcher_ignoreActualEvent = '';\r
+var X_EventDispatcher_ignoreActualEvent;\r
+var X_EventDispatcher_rawEvent;\r
 \r
 // handleEvent を拡張可能にするために、クロージャに移動した\r
 // Is this in regard to the Safari 1.x preventDefault bug on click/dblclick?\r
@@ -746,36 +747,48 @@ var X_EventDispatcher_actualHandleEvent =
                                elm = this[ '_rawObject' ],\r
                                ev, ret;\r
                        \r
-                       /* if( e.type === X_EventDispatcher_ignoreActualEvent ){\r
+                       if( X_EventDispatcher_ignoreActualEvent ){\r
                                e.cancelBubble = true;\r
                                return;\r
-                       }; */\r
+                       };\r
                        \r
-                       ev = new X_DomEvent( e, this, elm );\r
+                       X_EventDispatcher_rawEvent = e;\r
                        \r
+                       ev = new X_DomEvent( e, this, elm );\r
+\r
                        X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev;\r
                        \r
                        ret = this[ 'dispatch' ]( ev );\r
 \r
+                       if( X_EventDispatcher_rawEvent === e ) X_EventDispatcher_rawEvent = null;\r
+\r
                        --X_EventDispatcher_CURRENT_EVENTS.length;\r
 \r
                        if( ret & X_CALLBACK_STOP_PROPAGATION ){\r
                                e.cancelBubble = true;\r
                        };\r
+                       \r
+                       if( !X_EventDispatcher_CURRENT_EVENTS.length ) ExecuteAtEnd_onEnd();\r
+                       \r
                        if( ret & X_CALLBACK_PREVENT_DEFAULT ){\r
-                               this[ '_tag' ] === 'A' && elm.blur();\r
+                               X_EventDispatcher_ignoreActualEvent = true;\r
+                               this[ '_tag' ] === 'A' && elm.blur(); // おかしくない??\r
+                               X_EventDispatcher_ignoreActualEvent = false;\r
                                return e.returnValue = false;\r
                        };\r
                }) :\r
        //X_UA_EVENT.W3C || X_UA_EVENT.DOM0\r
                (function( e ){\r
                        var ret = X_CALLBACK_NONE,\r
+                               elm = this[ '_rawObject' ],\r
                                ev, i, l;\r
                        \r
-                       /* if( e.type === X_EventDispatcher_ignoreActualEvent ){\r
+                       if( X_EventDispatcher_ignoreActualEvent ){\r
                                e.stopPropagation();\r
                                return;\r
-                       }; */\r
+                       };\r
+\r
+                       X_EventDispatcher_rawEvent = e;\r
                        \r
                        ev  = new X_DomEvent( e, this );\r
                        X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev;\r
@@ -795,13 +808,20 @@ var X_EventDispatcher_actualHandleEvent =
                                ret = this[ 'dispatch' ]( ev );\r
                        };\r
                        \r
+                       if( X_EventDispatcher_rawEvent === e ) X_EventDispatcher_rawEvent = null;\r
+                       \r
                        --X_EventDispatcher_CURRENT_EVENTS.length;\r
                        \r
+                       if( !X_EventDispatcher_CURRENT_EVENTS.length ) ExecuteAtEnd_onEnd();\r
+                       \r
                        if( ret & X_CALLBACK_STOP_PROPAGATION ){\r
                                e.stopPropagation();\r
                        };\r
                        if( ret & X_CALLBACK_PREVENT_DEFAULT ){\r
-                               this[ '_tag' ] === 'A' && this[ '_rawObject' ].blur();\r
+                               X_EventDispatcher_ignoreActualEvent = true;\r
+                               this[ '_tag' ] === 'A' && elm.blur();\r
+                               X_EventDispatcher_ignoreActualEvent = false;\r
+                               \r
                                e.preventDefault();\r
                                if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-\r
                                        if( e.type === 'click' || e.type === 'dbclick' ){\r