before starting a selection, make sure we aren't in a link because we don't want to usurp the DnD code. r=mjudge, bug# 52541.

This commit is contained in:
pinkerton@netscape.com
2000-09-14 08:47:46 +00:00
parent ecadfff25b
commit b20e9152aa
4 changed files with 68 additions and 28 deletions

View File

@@ -1102,7 +1102,6 @@ nsGenericHTMLElement::HandleDOMEventForAnchors(nsIContent* aOuter,
NS_RELEASE(stateManager);
}
NS_RELEASE(handler);
*aEventStatus = nsEventStatus_eConsumeNoDefault;
}
}
break;

View File

@@ -53,6 +53,7 @@
#include "nsIFrameSelection.h"
#include "nsHTMLParts.h"
#include "nsLayoutAtoms.h"
#include "nsHTMLAtoms.h"
#include "nsFrameTraversal.h"
#include "nsCOMPtr.h"
@@ -1007,15 +1008,44 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
if (nsEventStatus_eConsumeNoDefault == *aEventStatus) {
return NS_OK;
}
// check whether style allows selection
// if not, don't tell selection the mouse event even occured.
nsresult rv;
nsCOMPtr<nsIPresShell> shell;
aPresContext->GetShell(getter_AddRefs(shell));
if (!shell)
return NS_ERROR_FAILURE;
// if we are in Navigator and the click is in a link, we don't want to start
// selection because we don't want to interfere with a potential drag of said
// link and steal all its glory.
PRBool isEditor = PR_FALSE;
shell->GetDisplayNonTextSelection ( &isEditor );
if ( !isEditor ) {
nsCOMPtr<nsIContent> content;
GetContent ( getter_AddRefs(content) );
if ( content ) {
do {
// are we an anchor? If so, bail out now!
nsCOMPtr<nsIAtom> tag;
content->GetTag(*getter_AddRefs(tag));
if ( tag == nsHTMLAtoms::a )
return NS_OK;
// now try the parent
nsIContent* parent;
content->GetParent(parent);
content = dont_AddRef(parent);
} while ( content );
}
} // if browser, not editor
// check whether style allows selection
// if not, don't tell selection the mouse event even occured.
PRBool selectable;
PRUint8 selectStyle;
rv = IsSelectable(&selectable, &selectStyle);
if (NS_FAILED(rv)) return rv;
// check for select: none
if (!selectable)
return NS_OK;
@@ -1040,15 +1070,6 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
//get the frame selection from sel controller
nsCOMPtr<nsIPresShell> shell;
rv = aPresContext->GetShell(getter_AddRefs(shell));
if (NS_FAILED(rv))
return rv;
if (!shell)
return NS_ERROR_FAILURE;
// nsFrameState state;
// GetFrameState(&state);
// if (state & NS_FRAME_INDEPENDENT_SELECTION)

View File

@@ -53,6 +53,7 @@
#include "nsIFrameSelection.h"
#include "nsHTMLParts.h"
#include "nsLayoutAtoms.h"
#include "nsHTMLAtoms.h"
#include "nsFrameTraversal.h"
#include "nsCOMPtr.h"
@@ -1007,15 +1008,44 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
if (nsEventStatus_eConsumeNoDefault == *aEventStatus) {
return NS_OK;
}
// check whether style allows selection
// if not, don't tell selection the mouse event even occured.
nsresult rv;
nsCOMPtr<nsIPresShell> shell;
aPresContext->GetShell(getter_AddRefs(shell));
if (!shell)
return NS_ERROR_FAILURE;
// if we are in Navigator and the click is in a link, we don't want to start
// selection because we don't want to interfere with a potential drag of said
// link and steal all its glory.
PRBool isEditor = PR_FALSE;
shell->GetDisplayNonTextSelection ( &isEditor );
if ( !isEditor ) {
nsCOMPtr<nsIContent> content;
GetContent ( getter_AddRefs(content) );
if ( content ) {
do {
// are we an anchor? If so, bail out now!
nsCOMPtr<nsIAtom> tag;
content->GetTag(*getter_AddRefs(tag));
if ( tag == nsHTMLAtoms::a )
return NS_OK;
// now try the parent
nsIContent* parent;
content->GetParent(parent);
content = dont_AddRef(parent);
} while ( content );
}
} // if browser, not editor
// check whether style allows selection
// if not, don't tell selection the mouse event even occured.
PRBool selectable;
PRUint8 selectStyle;
rv = IsSelectable(&selectable, &selectStyle);
if (NS_FAILED(rv)) return rv;
// check for select: none
if (!selectable)
return NS_OK;
@@ -1040,15 +1070,6 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
//get the frame selection from sel controller
nsCOMPtr<nsIPresShell> shell;
rv = aPresContext->GetShell(getter_AddRefs(shell));
if (NS_FAILED(rv))
return rv;
if (!shell)
return NS_ERROR_FAILURE;
// nsFrameState state;
// GetFrameState(&state);
// if (state & NS_FRAME_INDEPENDENT_SELECTION)

View File

@@ -1102,7 +1102,6 @@ nsGenericHTMLElement::HandleDOMEventForAnchors(nsIContent* aOuter,
NS_RELEASE(stateManager);
}
NS_RELEASE(handler);
*aEventStatus = nsEventStatus_eConsumeNoDefault;
}
}
break;