diff --git a/mozilla/editor/base/nsHTMLEditor.cpp b/mozilla/editor/base/nsHTMLEditor.cpp
index bdb00348d63..0b2ce1d0c0f 100644
--- a/mozilla/editor/base/nsHTMLEditor.cpp
+++ b/mozilla/editor/base/nsHTMLEditor.cpp
@@ -5484,6 +5484,15 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromDrop(nsIDOMEvent* aDropEvent)
rv = nsuiEvent->GetRangeOffset(&newSelectionOffset);
if (NS_FAILED(rv)) return rv;
+ /* Creating a range to store insert position because when
+ we delete the selection, range gravity will make sure the insertion
+ point is in the correct place */
+ nsCOMPtr destinationRange;
+ rv = CreateRange(newSelectionParent, newSelectionOffset,newSelectionParent, newSelectionOffset, getter_AddRefs(destinationRange));
+ if (NS_FAILED(rv))
+ return rv;
+ if(!destinationRange)
+ return NS_ERROR_FAILURE;
// We never have to delete if selection is already collapsed
PRBool deleteSelection = PR_FALSE;
@@ -5552,9 +5561,17 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromDrop(nsIDOMEvent* aDropEvent)
if (!(deleteSelection && srcdomdoc != destdomdoc))
{
// Move the selection to the point under the mouse cursor
+ rv = destinationRange->GetStartContainer(getter_AddRefs(newSelectionParent));
+ if (NS_FAILED(rv))
+ return rv;
+ if(!newSelectionParent)
+ return NS_ERROR_FAILURE;
+
+ rv = destinationRange->GetStartOffset(&newSelectionOffset);
+ if (NS_FAILED(rv))
+ return rv;
selection->Collapse(newSelectionParent, newSelectionOffset);
- }
-
+ }
// We have to figure out whether to delete and relocate caret only once
doPlaceCaret = PR_FALSE;
}
diff --git a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp
index bdb00348d63..0b2ce1d0c0f 100644
--- a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp
+++ b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp
@@ -5484,6 +5484,15 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromDrop(nsIDOMEvent* aDropEvent)
rv = nsuiEvent->GetRangeOffset(&newSelectionOffset);
if (NS_FAILED(rv)) return rv;
+ /* Creating a range to store insert position because when
+ we delete the selection, range gravity will make sure the insertion
+ point is in the correct place */
+ nsCOMPtr destinationRange;
+ rv = CreateRange(newSelectionParent, newSelectionOffset,newSelectionParent, newSelectionOffset, getter_AddRefs(destinationRange));
+ if (NS_FAILED(rv))
+ return rv;
+ if(!destinationRange)
+ return NS_ERROR_FAILURE;
// We never have to delete if selection is already collapsed
PRBool deleteSelection = PR_FALSE;
@@ -5552,9 +5561,17 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromDrop(nsIDOMEvent* aDropEvent)
if (!(deleteSelection && srcdomdoc != destdomdoc))
{
// Move the selection to the point under the mouse cursor
+ rv = destinationRange->GetStartContainer(getter_AddRefs(newSelectionParent));
+ if (NS_FAILED(rv))
+ return rv;
+ if(!newSelectionParent)
+ return NS_ERROR_FAILURE;
+
+ rv = destinationRange->GetStartOffset(&newSelectionOffset);
+ if (NS_FAILED(rv))
+ return rv;
selection->Collapse(newSelectionParent, newSelectionOffset);
- }
-
+ }
// We have to figure out whether to delete and relocate caret only once
doPlaceCaret = PR_FALSE;
}