- var queue = jQuery.queue( elem, type ),\r
- fn = queue.shift();\r
- \r
- if( !type || type === "fx" )\r
- fn = queue[0];\r
- \r
- if( fn !== undefined )\r
- fn.call(elem);\r
+ type = type || "fx";\r
+\r
+ var queue = jQuery.queue( elem, type ), fn = queue.shift();\r
+\r
+ // If the fx queue is dequeued, always remove the progress sentinel\r
+ if( fn === "inprogress" ) fn = queue.shift();\r
+\r
+ if( fn ) {\r
+ // Add a progress sentinel to prevent the fx queue from being\r
+ // automatically dequeued\r
+ if( type == "fx" ) queue.unshift("inprogress");\r
+\r
+ fn.call(elem, function() { jQuery.dequeue(elem, type); });\r
+ }\r