Index: _source/plugins/dropfile/plugin.js
===================================================================
--- _source/plugins/dropfile/plugin.js	(revision )
+++ _source/plugins/dropfile/plugin.js	(revision )
@@ -0,0 +1,62 @@
+/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add( 'dropfile',
+{
+	init : function( editor )
+	{
+		// Only works for browers that support dropping desktop file into RTE.
+		if ( !( CKEDITOR.env.gecko || CKEDITOR.env.webkit ) )
+			return;
+
+		var localImageFileRegexp = /^file:\/\/.*?\.(jpg|jpeg|png|gif)$/;
+		function handleDrop( evt )
+		{
+			var target = evt.data.getTarget(),
+					candidateUrl,
+					imageFileUrl;
+
+			candidateUrl = target.type == CKEDITOR.NODE_ELEMENT ?
+				( target.is( 'img' ) ? target.getAttribute( 'src' )
+					: target.is( 'a' )? target.getAttribute( 'href' ) : null ) : null;
+
+			if ( candidateUrl && candidateUrl.match( localImageFileRegexp ) )
+				imageFileUrl = candidateUrl;
+
+			imageFileUrl && setTimeout( function ()
+				{
+					editor.fire( 'dropDesktopImage', { url : imageFileUrl, node : target } );
+				}, 0 );
+		}
+
+		editor.on( 'contentDom', function ( evt )
+		{
+			var isDragging;
+			function removeDropListener()
+			{
+				if ( isDragging )
+				{
+					isDragging = 0;
+					doc.removeListener( 'DOMNodeInserted', handleDrop );
+				}
+			}
+		
+			function addDropListener()
+			{
+				if ( !isDragging )
+				{
+					isDragging = 1;
+					doc.on( 'DOMNodeInserted', handleDrop );
+				}
+			}
+
+			var doc =  editor.document,
+					outerDoc = CKEDITOR.document;
+			doc.on( 'dragenter', addDropListener );
+			outerDoc.on( 'mousemove', removeDropListener );
+			outerDoc.on( 'dragenter', removeDropListener );
+		});
+	}
+});
Index: _source/plugins/image/plugin.js
===================================================================
--- _source/plugins/image/plugin.js	(revision 5336)
+++ _source/plugins/image/plugin.js	(revision )
@@ -51,6 +51,32 @@
 					return { image : CKEDITOR.TRISTATE_OFF };
 				});
 		}
+
+		// Open dialog with the dropped image file path as url from desktop.
+		editor.on( 'dropDesktopImage', function( evt )
+		{
+			var url = evt.data.url,
+					node = evt.data.node;
+
+			// Remove the default node created by browser on drop.
+			var range = new CKEDITOR.dom.range( editor.document );
+			range.setStartBefore( node );
+			range.setEndAfter( node );
+			range.extractContents();
+			range.select();
+
+			editor.openDialog( 'image', function()
+			{
+				var dialog = this;
+				// Defer until dialog is shown.
+				setTimeout( function ()
+				{
+					dialog.selectPage( 'Upload' );
+					window.prompt( editor.lang.image.copyUploadUrlPrompt, url );
+				}, 1000 );
+			});
+		})
+
 	}
 } );
 
Index: _source/lang/en.js
===================================================================
--- _source/lang/en.js	(revision 5409)
+++ _source/lang/en.js	(revision )
@@ -425,7 +425,8 @@
 		validateHeight	: 'Height must be a whole number.',
 		validateBorder	: 'Border must be a whole number.',
 		validateHSpace	: 'HSpace must be a whole number.',
-		validateVSpace	: 'VSpace must be a whole number.'
+		validateVSpace	: 'VSpace must be a whole number.',
+		copyUploadUrlPrompt: 'You may want to copy the URL of image to upload.'
 	},
 
 	// Flash Dialog
