Closed Bug 28583 Opened 25 years ago Closed 22 years ago

Focusing text widget (except on click) should select widget contents [also form <input> field]

Categories

(Core :: XUL, defect, P3)

defect

Tracking

()

VERIFIED FIXED
mozilla1.0

People

(Reporter: mpt, Assigned: aaronlev)

References

Details

(Keywords: access, polish, Whiteboard: [behavior])

Attachments

(1 file, 13 obsolete files)

(deleted), patch
aaronlev
: review+
sfraser_bugs
: superreview+
Details | Diff | Splinter Review
Build: 2000021608, MacOS 8.6 To reproduce: * Open the Bookmarks window. * Open the Properties window for a bookmark. * If there is nothing in the Location field for the bookmark (it doesn't seem to be hooked up yet), type some text into it. * Place the cursor in the Name field. * Press Tab. Or: * Open the prefs window, and navigate to Advanced > Proxies. * Select the `Manual proxy configuration' radio button. * Place the cursor in the FTP proxy server name field. * Press Tab. What should happen (on all platforms): * The next widget, which is a text field, is given focus and its entire contents is selected (so that any new typing will overwrite the existing contents). What actually happens: * The text field is given focus, but its contents are not selected.
Keywords: 4xp
reproduced in recent verification build on Win98. reassigning to pollmann. Eric, is this part of the tab mgr work I hear you are doing?
Assignee: trudelle → pollmann
*** Bug 23276 has been marked as a duplicate of this bug. ***
to qa: when this bug is fixed, pls notify esther or lchiang so we can try our dup bug case. Thanks.
*** Bug 25458 has been marked as a duplicate of this bug. ***
*** Bug 30230 has been marked as a duplicate of this bug. ***
Status: NEW → ASSIGNED
Target Milestone: --- → M20
Minor usability issue, scheduling for M20!
QA Contact: paulmac → sujay
Not so minor, IMO. And it's all the little "minor" details that make a product feel good. Skip the minor details and you wind up with a rather frustrating product. Why do you think MS IE 4.5 and 5 did so well on the Mac? It wasn't because they had Microsoft's name behind them... Just registering my UI vote so these things don't slip through the cracks.
This bug is probably a duplicate of or at least related to bug 36278 (which has been incorrectly classified as a duplicate of 31809 and 33069). See also 29086
*** Bug 37769 has been marked as a duplicate of this bug. ***
Reassigning to you Steve - this looks like it's more your area. I tried a first pass at implementing this a while back and ran into lots of focus issue and other problems. (will attach patch, which was only a few line change to nsGfxTextControlFrame.cpp) 1) The text was selected only the first time the widget received focus 2) The text was not deselected when the widget lost focus. 3) Clicking on an empty widget caused asserts to fire 4) Peformance of clicking on a widget dropped significantly.
Assignee: pollmann → buster
Severity: normal → enhancement
Status: ASSIGNED → NEW
OS: Mac System 8.6 → All
Hardware: Macintosh → All
Target Milestone: M20 → ---
Attached patch rough patch (obsolete) (deleted) — Splinter Review
*** Bug 36278 has been marked as a duplicate of this bug. ***
The reason for problem 2) is that nsGfxTextControlFrame::SetFocus() never gets called with aOn false - meaning, we're never notified when the text control looses focus. This could be fixed by just moving the Deselect() call to wherever we get that notification.
Reassigning to beppe (editor).
Assignee: buster → beppe
assigning to Kin for review
Assignee: beppe → kin
Summary: Tabbing to text widget should select widget contents → [RFE]Tabbing to text widget should select widget contents
Target Milestone: --- → Future
Accepting bug.
Status: NEW → ASSIGNED
Hey, I protest. This isn't an RFE, it's a Bug with a capital B. W.r.t. Eric's comments -- the widget contents should only be selected when the widget is tabbed to, *not* when it is clicked in. Clicking should just position the caret, as it would if the widget already had focus.
Tabbing into a textfield in WinNt Nav 4.x doesn't select the content, but the textfield does remember where the cursor was (that could be a bug)
I'd like to add that this behavior should *not* be enabled on Linux and other X11-using platforms, as it interferes with the X selection/paste mechanism.
Decklin, does GTK really not do this when you tab to a text widget? If so, that means pp. I think it's possible that resetting the X selection when tabbing to a text widget is actually desirable behavior anyway. Raising severity to Minor after rereading <http://bugzilla.mozilla.org/bug_status.html#severity>. Nominating for RTM, as I can't believe that a commercial product would go out the door with this unfixed.
Severity: enhancement → minor
Keywords: pp, rtm
*doublechecks* Yes, GTK really does not do it. I probably would have complained already if it did ;-)
adding help wanted keyword
Keywords: helpwanted
Keywords: 4xp, pp, rtm
Not an RFE --> removing `[RFE]' from summary. Given the number of times it happens in normal usage, not a minor issue either --> normal.
Severity: minor → normal
Summary: [RFE]Tabbing to text widget should select widget contents → Tabbing to text widget should select widget contents
Blocks: 37587
*** Bug 60610 has been marked as a duplicate of this bug. ***
Ok, refining summary based on comments in bug 63705. The contents of a text field should be selected if the field receives focus by any method *except* clicking in it (clicking in it should just place the caret). This includes tabbing to the field, and setting focus to the field when the dialog is created.
Summary: Tabbing to text widget should select widget contents → Focusing text widget (except on click) should select widget contents
*** Bug 66284 has been marked as a duplicate of this bug. ***
*** Bug 74003 has been marked as a duplicate of this bug. ***
No longer blocks: 37587
*** Bug 69310 has been marked as a duplicate of this bug. ***
remove milestone for reconsideration, add some keywords note: on Linux, the correct behavior seems to be to place the caret at the end of the edit field. Macintosh and Windows expects the fields to be selected. As for 4.x behavior on Windows, 4.x is inconsisent (if I recall correctly). In Composer dialogs, the tabbing among the various edit fields does a select all.
Keywords: nsbeta1, nsCatFood, pp
Target Milestone: Future → ---
Set to mozilla0.9.1 for now. Cc'ing cmanske who had the dup of this bug.
Target Milestone: --- → mozilla0.9.1
We probably need an nsILookAndFeel entry for this. I so wish it would work on Mac.
Target Milestone: mozilla0.9.1 → mozilla0.9.2
*** Bug 79344 has been marked as a duplicate of this bug. ***
Whiteboard: [behavior]
Depends on: 83496
11 dups. marking mostfreq.
Keywords: mostfreq
*** Bug 73078 has been marked as a duplicate of this bug. ***
*** Bug 81377 has been marked as a duplicate of this bug. ***
*** Bug 83588 has been marked as a duplicate of this bug. ***
well, we would like to get this in for 9.2, but until bug 83496 gets resolved, this one can't. Moving over to 1.0 but will gladly move in once that otehr bug gets fixed
Target Milestone: mozilla0.9.2 → mozilla1.0
*** Bug 89339 has been marked as a duplicate of this bug. ***
*** Bug 62880 has been marked as a duplicate of this bug. ***
*** Bug 96652 has been marked as a duplicate of this bug. ***
*** Bug 62880 has been marked as a duplicate of this bug. ***
Blocks: 104166
Blocks: 49574
Removing pp keyword. I discussed this bug with someone whose specialty is the X selection mechanism, and his response was basically `RTFICCCM'. (You can do so at <http://tronche.com/gui/x/icccm/>.) There's nothing wrong with selecting the contents of a text field on X when tabbing to it or programmatically focusing it, as long as it is made the SECONDARY selection, not the PRIMARY one. The bug where tabbing to a GTK+ text field doesn't select its contents is fixed in GTK+ 2.0 <http://bugzilla.gnome.org/show_bug.cgi?id=57743>.
Keywords: pp
Blocks: 89689
Bulk move of mozilla1.0 bugs to mozilla.1.0.1. I will try to pull some of these back in if I can.
Target Milestone: mozilla1.0 → mozilla1.0.1
nominating for nsbeta1, adding access keyword
Keywords: access, nsbeta1
Marking nsbeta1+
Target Milestone: mozilla1.0.1 → mozilla1.0
Rod, can you take a look at this?
Assignee: kin → rods
Status: ASSIGNED → NEW
Keywords: nsbeta1nsbeta1+
nsbeta1-. Engineers are overloaded with higher priority bugs.
Keywords: nsbeta1+nsbeta1-
cc marlon for UE input. Is there anyone else who could take this? It seems like fundamental usability correctness, and may be important for accessibility too, especially IE compatibility.
Depends on: 127272
Kin and Rod think the editor changes should be easy to implement once bug 83496 is fixed. Marking this bug nsbeta1+ and nominating bug 83496 for nsbeta1
Keywords: nsbeta1-nsbeta1+
I would know how to do this without a fix for bug 83496. It would require a modification to nsEventStateManager::ShiftFocus(). It would simply check to see if the user had moved onto something with it's own caret, if so it would select the contents. If people don't think that's too much of a hack I can take this one.
"had moved onto something with it's own caret" Can you explain?
textfields and textareas are editable, and as such have their own caret/selection that is separate from the document's caret/selection.
Be sure you test any fix with the urlbar (which does some funky things (imo) to selection. Can we also use ShiftFocusInternal in the case where the window just opens? Lastly, this should be a hidden preference or similar. Unix users expect a caret (current behavior), not a selection while Macintosh and Windows users expect there to be a selection.
Aaron: how can you use the 'thing has caret' information to decide whether the user just focussed it with a tab key or a click (which is what this bug is about)?
Depends on: atfmeta
No longer depends on: atfmeta
Blocks: atfmeta
Attached patch SelectAll When ShiftFocus (obsolete) (deleted) — Splinter Review
Aaron, I propose the patch according to your suggestion before. Function ShiftFocus will only be called when Tab is used. So the patches can solve the problem in Bookmark property dialog and the preference dialog etc. Of course I have tested the patch, and it works.
Comment on attachment 72569 [details] [diff] [review] SelectAll When ShiftFocus One problem with this patch is that it appears to be always doing the select-all behavior. This needs to be platform-specific (Linux expects to have a caret at the end of the text rather than the selectAll behavior expected on Macintosh). jim.song@sun.com--do you need help revising this patch to account for that? I envision the patch will make use of a hidden preference which Linux will set differently from other platforms. Let me know.
Attachment #72569 - Flags: needs-work+
A few other notes/comments about the patch: * please use consistent code style for the code you are editing (put spaces in the same places as surrounding code) * add a comment about what the block of code (which you are adding) is doing * it seems to work great (hurray!) except I don't see a caret when I tab to an empty textarea. * Also, occasionally when I click I see a flash where the text seems to select and then the caret is placed and the selection is removed. steps to reproduce "flicker": * load this bug in a browser window * click in the QA context text field * tab until you get to the textarea for Additional Comments (notice there isn't a caret) * click in a textfield which has text in it (such as blocker list) (watch carefully for flicker) * click in other textfields that have text in them; see flicker Subsequent clicks have no flicker unless the field has a selection in it prior to blur. The flicker is NOT a regression introduced by this patch. I'm not sure about the lack of a caret in a textarea; I think that should be addressed (as well as the preference for Linux).
Couple of notes: Jim, Looks like great progress! Please emember to remove the comment with your name in the final patch. Patches that checked in shouldn't have personal notes left in them. Be aware there may be a conflict with a patch I am checking in for bug 66597. That patch will be checked in this week (hopefully tonight).
I'm somewhat uneasy about this patch: my feeling is that the ESM is not the right place to be putting SelectAll() behaviour, preffed or not.
Hi, Thanks! No Caret if blank: My fault. Will give patch tomorrow. Flicker: Not introduced by this patches. So need another bug? No Selection on Linux: As Mattew said before, Gtk2.0 require Selection when tabbing. http://bugzilla.gnome.org/show_bug.cgi?id=57743
Attached patch New Patch (obsolete) (deleted) — Splinter Review
I have added code to show the cursor if the content is empty. Please review.
Attachment #8221 - Attachment is obsolete: true
Attachment #72569 - Attachment is obsolete: true
Comment on attachment 73178 [details] [diff] [review] New Patch Like sfraser, I'm a bit uneasy about placing this in ESM. When I look at this patch, I'm wondering to myself, what happens if mCurrentTarget isn't a text widget, what selection controller is returned? The one for outer document? If so, will the select all cause the entire outer doc to get selected? Also does getting the "value" attribute on a TextArea really work? Getting the value of a text widget as a string is not cheap. If we could just distinguish how we got focus, nsGfxTextControlFrame or the editor could just peak at the number of children underneath the root node.
removing myself from the cc list
Hi, Kin, >If mCurrentTarget isn't a text widget, what selection controller is >returned? The one for outer document? Do you think it's right to return the document's selection controller for a widget? I think we can check whether it is a text widget if it is needed, but if there is the case to tab to a document as a whole?
Sorry for my upper unclear comments. For Kin's uneasy, I wonder if there is the case that, a control is tabbed into, and its selection control is from the outer document(as Kin said)? If tabbing and select only apply to text widget, I also wonder if we can check the frame type, if it is text widget, then select it?
// The following code is a generic way to check if we're in a text field nsCOMPtr<nsIFrameSelection> frameSelection, docFrameSelection; GetSelection(mCurrentTarget, mPresContext, getter_AddRefs(frameSelection)); mPresShell->GetFrameSelection(getter_AddRefs(docFrameSelection)); if (docFrameSelection && (frameSelection != docFrameSelection)) { // If we get here we are in a textfield or textarea, // because they have their own frame selection, separate from the document's }
Attached patch Patches with Checking Text Widgets (obsolete) (deleted) — Splinter Review
Add Aaron's codes to check if it's a text field. A small change from Aaron's is: if( frameSelection && ... )
Mozilla should handle single-line inputs and textareas differently. Here are some situations where selecting the entire contents of a textarea on focus would be a bad idea: Situation 1 1. Log in to http://slashdot.org/ or http://www.kuro5hin.org/ 2. Open a story 3. Click "Reply to This" under a comment 4. Compose a reply 5. Click Preview 6. Tab to field Situation 2 1. Log in to http://www.wikipedia.com/ 2. Click "Recent Changes" to get a list of articles 3. Find an article that looks interesting and click its title 4. Click "Edit this page" 5. Tab to the edit box containing the article's data Situation 3 1. Fill in the Bugzilla Helper form 2. Submit the form to create a new bug report 3. Tab to the textarea Selecting the entire contents of a textarea on focus would be roughly equivalent to selecting the entire contents of a newly opened Composer page. I see no reason why the user would want to replace the entire contents of a textarea with one keystroke. If the user really wants to do that, it's as easy as Accel+A.
Yes, Danmian, I think you are quite right.
Yes, Damian, I think you are quite right.
I agree. Opera selects the contents of textareas you tab into, which seems wrong, even though it is what you expect in a textfield. IE6 and NS4.x both put a caret at the end of the text, which IMO is what mozilla should do too.
Best Solution: 1. Single-line inputs - entire text is selected 2. Multi-line textareas - curser placed at end of existing text 1. Allows to quickly select/replace small (default) entries. Accidental deletes are quickly repaired (few text). 2. Allows to edit text without the risk of accidentally deleting (and then having to rewrite) large amounts of text.
Hi, Does selection only apply to widget with localname as: text and input? If so, we can only select content with such names.
nc4 remembers where in an input widget your cursor was. Eg if I click the a in the status whiteboard [beh_avior] then tab out and shift tab back in, my cursor is placed at beh_avior, which is what I expect. The same applies for textareas.
The CSS "display:" attribute can be used to make any element display as a text input, so checking the frame type is the best way.
I agree with timeless. We should be able to remember where the selection was in a textarea.
Mozilla does currently remember position and selection state when tabbing through textboxes.
*** Bug 131185 has been marked as a duplicate of this bug. ***
I think we should deal it more easier. Select all if it is a singel-line text field, and do nothing but leave it's old selection and cursor position if it is a textarea. Just like what IE does.
Just add SelectAll(aPresContext); to nsHTMLInputElement.cpp Because it is the text field and xul input element's implementation. I tested it on windows with pref and html form element. This select action is only for text and password, and it will not effect the textarea element
Attachment #73178 - Attachment is obsolete: true
Attachment #73621 - Attachment is obsolete: true
talking to petez on #mozilla the current patch behaves like selecting with the mouse on X. That's bad. The mouse selection (X clipboard?) is holy, don't mess with it without an explicit user request. On windows, an explicit action is needed to move the selection to the clipboard. On X, the selection is automatically copied to the clipboard. That must not happen as a side effect of moving focus.
Comment on attachment 74933 [details] [diff] [review] Patch just add SelectAll in nsHTMLInputElement.cpp This patch needs a lot more work. At a minimum *any* fix for this bug MUST have a preference (hidden). It must default to on for Macintosh and Windows users and off for Linux users. I expect to see a preference added to all.js as well as the linux-specific file. The other big problem with this patch (maybe I just need more context?) is that it is ALWAYS does a SelectAll. That is NOT the correct behavior if one clicks in the field (tabbing should do SelectAll; clicking should position caret).
Attachment #74933 - Flags: needs-work+
I agree with brade. We must NOT do this on all setfocus events, i.e., when user clicks in an input field. I would have fixed it years ago if it were that simple! The tricky part when I first investigated this problem was how to figure out when focus was set just by tabbing into a text input. That is the only time we should select. And even that behavior is platform specific, as brade points out. A pref would also be good so users could change the behavior -- many don't like it to select at all, even if it is the default platform behavior.
I believe I have the right fix for this bug, by implementing bug 83496. Taking.
Assignee: rods → aaronl
-> Pete Zha We discussed the correct fix on IRC.
Assignee: aaronl → pete.zha
As described in comment 42 and comment 60, this bug is *not* platform-specific. That it didn't work properly in GTK 1.x was a bug which has been fixed. Like any other selection, this selection should be copied to PRIMARY, but *not* to CLIPBOARD.
I would like to note that the behaviour of selection and clipboard is platform dependent. At least on solaris, you have to learn by heart which app puts it's stuff where. As far as clipboard goes, X is not really *one* platform. Whatever patch comes, this should get rich QA on as many X-servers as possible, and check out different toolkits. (Adding Roland for the xlib port)
There is actually one behaviour preferred on X11 - that one of Motif2 (not the old Motif1 one (e.g. NS4.x is Motif1.x-based)). Ignore the rest - just implement it like Motif2/CDE2.x does the job.
> on solaris, you have to learn by heart which app puts it's stuff where. That's not platform-dependent, that's some apps being broken. For example, xchat still incorrectly sets CLIPBOARD on selection, while OpenOffice incorrectly does nothing on selection and sets PRIMARY on Copy. Most other common apps in active development have been fixed.
note: the current gtk requirements are 1.2.*, don't change that without separate approval. I suggest making the fix for win and mac only if we can't fix this without changing the requirements.
No, this has nothing to do with our gtk requirements. It's a bug in *Mozilla's* text controls, which should be fixed no matter what version of gtk is underneath. As an analogy, the Windows 95/98 native text controls have line- -wrapping bugs which are not present in Windows 2000; that does *not* mean that Mozilla's own text controls should emulate those bugs when on Windows 95/98.
So, Matthew: you're saying that because gtk is planning to change their behavior in an upcoming release, which very few people have actually tried running (do any distros ship with it yet? Redhat 7.2 uses gtk 1.2), and which mozilla itself is not using, we should completely change the selection behavior of text fields, making it incompatible with the ICCCM (see comment 42, where you yourself mention that the ICCCM says tabbing into text fields should not make the contents the primary selection). If we changed the code accordingly, selecting the text field contents but NOT autocopying it to the clipboard, we become compatible with the ICCCM but become very confusing for Unix users to use, since now to get the contents into the primary selection to make it available to paste, users will have to select it again, which isn't visually obvious since it looks like it's already selected, and which can't be done by the usual drag-select method since dragging inside a mozilla selection invokes drag-and-drop code rather than selection code. (BTW, does gtk 2.0 copy this selected text to the X primary selection? You haven't mentioned that.) Imposing this sort of confusion, which is seen in no other currently shipping Unix app or toolkit, upon all Unix users for mozilla 1.0, with no prior warning so that users have a chance to complain (which they will, I assure you) is wrong.
Ok, I made a mistake in comment 42. Sorry. `as long as it is made the SECONDARY selection, not the PRIMARY one' should be `as long as it is made the PRIMARY selection, not the CLIPBOARD one' To address your other points: 1. The GTK+ developers have already fixed this bug in GTK+ 2.0. There are *no* plans to `change their behavior in an upcoming release'. 2. As I already said, which version of GTK Mozilla itself requires is irrelevant to this bug, since Mozilla rolls its own UI controls, and shouldn't replicate bugs in old versions of other toolkits. 3. Fixing this bug does not `completely change the selection behavior of text fields', just what happens when you tab into them. 4. `Selecting the text field contents but NOT autocopying it to the clipboard' should not be `very confusing for Unix users to use', because no app should *ever* autocopy selected text to the clipboard. As I said, xchat is the only major app still broken in that particular fashion. 5. Given that Mozilla 1.0 and GNOME 2.0 are likely to be released within a couple of months of each other, and therefore distributed together in Linux distributions, the number of people using Mozilla 1.x with GNOME 2.x will probably be several times greater than the number of people using it with GNOME 1.x. > does gtk 2.0 copy this selected text to the X primary selection? Yes it does.
Perhaps I should submit another bug report on this, but it relates rather closely to this discussion. On MacOS X when you drag select in the URL area it does a select-all instead of selecting the region dragged. In other words, if I have: http://bugzilla.mozilla.org/show_bug.cgi?id=28583 and I want to change the id to something else, so I try and drag select it, I end up selecting the whole thing. The behavior in forms is correct, it's only in the URL area that it's wrong. Double click behavior on the other hand, which should select a word, behaves very oddly with URLs (whether in the URL entry area, or a text region like this one. It seems to select from the click point back to the first space or beginning of line, and it doesn't treat punctuation as a word delimiter. (There are also some pending delete bugs in textareas, but I'll check and see if they've been reported already.) If I should submit a separate report feel free to yell at me and tell me so.
gtk 2.0 is an upcoming release to most users, since no distro is actually shipping apps which behave this way yet. We have no idea what user reaction to this move will be. Most users will download mozilla 1.0 long before they reinstall linux and see gtk 2.0, so mozilla will be where they first see this behavior, and mozilla will appear to be broken in comparison with everything else on their system. > 3. Fixing this bug does not `completely change the selection behavior of text > fields', just what happens when you tab into them. It "completely changes the selection behavior of text fields when you tab into them." Clearer? > because no app should *ever* autocopy selected text to the clipboard. I was referring to the mozilla clipboard, nsClipboard, which is the class used for copying selections to PRIMARY as well as CLIPBOARD. Your earlier ICCCM quote had said we shouldn't autocopy to PRIMARY, and I was responding to that.
With regard to the argument that GTK+ 1.2's behavior (no select-on-tab) is a bug: http://www.gtk.org/gtk-2.0.0-notes.html The new default 2.0 behavior of select-on-tab is described as a way to "improve usability", not a bugfix. Note also that the instructions to reconfigure GTK+ back to the 1.2 behavior are included on the first page of the GTK+ 2.0 release notes. Summary: The "old" behavior is NOT a bug or broken. Making select-on-tab the default behavior is fine as long as there is an obvious way to reconfigure it to have the "old" behavior.
Depends on: 90587
*** Bug 141869 has been marked as a duplicate of this bug. ***
Keywords: polish
*** Bug 155683 has been marked as a duplicate of this bug. ***
Yay! So glad I found this bug...drives me bonkers every day. There's something related. When focusing a text field, the cursor's flashing should start with the cursor /visible/. At the moment, when tabbing into a text field, not only is the content not highlighted, the cursor isn't even showing. So I don't know if I've hit tab enough times to get where I'm going. It's only a second to wait, but if I'm tabbingn through to the next widget, there should be visual feedback for every widget I tab to. Does that need a separate bug...?
Mozilla@strangemonkey - I think in most programs the cursor starts as visible right after any key is pressed,not just tab. That would be a separate bug, but check to see if one already exists before filing a new one.
*** Bug 163232 has been marked as a duplicate of this bug. ***
Attached patch Basic XBL-based patch (obsolete) (deleted) — Splinter Review
Note that this only affects XUL textboxes, not editable menulists or HTML.
Comment on attachment 96297 [details] [diff] [review] Basic XBL-based patch brade@netscape.com commented on irc so here is some explaination: > this.inputField.setSelectionRange(0, 0); This stops d&d on a non-focused field which is annoys me because I can't see what the selection is when then field isn't focused. > if (!/Linux/.test(navigator.platform) && I put this test in quickly because apparently a .select() sets the clipboard in Linux, but I'm not claiming that it's perfect code :-)
clarification: I was asking why we check for Linux before checking this.mIgnoreFocus. For example, why not: + if (!this.mIgnoreFocus && !/Linux/.test(navigator.platform))
I'm not claiming perfect code (for once :-) You might want to have a field so you can change the setting at run time: <field name="autoSelect">!/Linux/.test(navigator.appName)</field> And you'd probably want this in C++ to affect all users of <html:input> anyway.
Can we please also fix this for editable menulist?
Wait a minute. Doesn't this patch do exactly the wrong thing, i.e., select everything when mouse is clicked inside input? It is supposed to select when receiving focus by tabbing into it, but NOT when you click in the input widget.
Recent versions of gtk on linux do select all the text when you give focus to a widget.
Do they also copy the text to the SELECTION buffer? (or whatever the buffer is called that gets pasted on middle-click)
See comment 97, though: it's turnaffable in gtk2, it's not the default in the gtk shipped in any currently shipping distro (i.e. real users haven't seen this behavior yet), and it's only for tabbing in, not clicking.
"whatever the buffer is called" You are thinking of the PRIMARY selection and it isn't a buffer, no data is sent anywhere until you *paste* a selection. The other popular selection is the CLIPBOARD selection which is used for the metaphor of copying / cutting / pasting to and from an invisible clipboard. PRIMARY is automatically asserted by the GTK+ code that deals with text selections, so I would guess (not having ever used a GTK+2 installation where this is enabled) that unless someone thought about this and went out of their way to avoid it, the PRIMARY selection is changed as soon as the text appears "selected" in the widget.
> Wait a minute. Doesn't this patch do exactly the wrong thing, i.e., select > everything when mouse is clicked inside input? It is supposed to select when > receiving focus by tabbing into it, but NOT when you click in the input widget. No, the mousedown event sets the mIgnoreFocus flag so that the subsequent focus event gets ignored. Similar code can be seen in navigator.js to handle the URL bar (although that case has extra code to handle the click selects all pref). Just a thought: does this have to be done in C++, or will it in fact work in platformHTMLBindings.xml?
Attached patch Proposed patch (obsolete) (deleted) — Splinter Review
Patch to platformHTMLBindings.xml (Windows only, becuase that's my OS) which fixes it for web pages, textboxes and editable menulists. I'll leave it to the owners of the different OSes to implement it if they so desire.
Attachment #96297 - Attachment is obsolete: true
*** Bug 170576 has been marked as a duplicate of this bug. ***
Summary: Focusing text widget (except on click) should select widget contents → Focusing text widget (except on click) should select widget contents [also form <input> field]
Neil, your patch seems to work really well, for both HTML and XUL. * It doesn't select text in text area, which is good. * It selects text in textfields and XUL editable combo boxes, which is good. * It doesn't select text on mouse click to focus, which is good. I can't find anything wrong it -- however, I once heard hyatt say that the htmlbindings files shouldn't have any javascript in them -- they should only have command="foo". He said it would cause performance problems. Hyatt, could you elucidate?
You can't add <implementation>s to common input fields without messing up the prototype chain in JS. I've taken a policy of avoiding using <implementation> with any standard HTML elements in order to keep their prototype chains unaffected.
Another problem with my patch and Pete Zha's patch: focus events caused by window activate or (over-eager?) use of .focus() also select all. So it looks as if we still need bug 83496 fixed first.
Can we leverage MoveCaretToFocus to do this?
This gets everything correct that I know has been mentioned: * It doesnt' select textareas * It does select text in editable XUL comboboxes, such as used in the form manager * It doesn't select text from mouse clicks. * It takes affect when a script focuses the textfield, or the user presses a key (tab or accesskey) to get there. * It selects text without putting it in the clipboard (because nsAutoCopy.cpp's selection listener gets reason == nsISelectionListener::NO_REASON, and exits early) * It does the right thing for each platform. I used nsILookAndFeel for this, instead of prefs because gtk2. I filed bug 172203 for this.
Attachment #74933 - Attachment is obsolete: true
Attachment #96422 - Attachment is obsolete: true
Depends on: 172203
Seeking r=/sr= Neil, thanks for the idea to leverege MoveCaretToFocus -- that worked great.
taking
Assignee: pete.zha → aaronl
Still seeking r=/sr=
Attachment #101443 - Attachment is obsolete: true
Comment on attachment 101484 [details] [diff] [review] Same thing, but with one more null check on mCurrentFocus >+ // First, select text fields when focused via keyboard (tab or accesskey) >+ if (sTextfieldSelectModel == eTextfieldSelect_auto && >+ mCurrentFocus && >+ mCurrentFocus->IsContentOfType(nsIContent::eHTML_FORM_CONTROL)) { >+ nsCOMPtr<nsIFormControl> formControl(do_QueryInterface(mCurrentFocus)); >+ PRInt32 controlType; >+ formControl->GetType(&controlType); >+ if (controlType == NS_FORM_INPUT_TEXT || >+ controlType == NS_FORM_INPUT_PASSWORD) { >+ nsCOMPtr<nsIDOMHTMLInputElement> inputElement = >+ do_QueryInterface(mCurrentFocus); >+ if (inputElement) { >+ inputElement->Select(); >+ } >+ } >+ } >+ I'm not a C++ guru so I was just wondering whether you're being careful or you can't just try QI to nsIDOMHTMLInputElement and call select regardless?
Neil, that would work -- but this is more performant, because QI's are more expensive than a getter. In most cases the QI will fail, and a failing QI can be somewhat expensive.
Comment on attachment 101484 [details] [diff] [review] Same thing, but with one more null check on mCurrentFocus r=brade but please switch Mac and Cocoa to do the selecting also
Attachment #101484 - Flags: review+
Attached patch New patch with brade's changes (obsolete) (deleted) — Splinter Review
Seeking sr=
Attachment #101484 - Attachment is obsolete: true
Comment on attachment 101562 [details] [diff] [review] New patch with brade's changes Carrying r= forward
Attachment #101562 - Flags: review+
Attachment #101562 - Attachment is obsolete: true
Attachment #101564 - Flags: review+
Please comment in the various nsLookAndFeel impls on what the mysterious 1 and 0 values mean, referring the reader to the nsTextfieldSelectModel enum in nsEventStateManager.h.
Attachment #101564 - Attachment is obsolete: true
Attachment #101567 - Flags: review+
Attached patch Better comments (obsolete) (deleted) — Splinter Review
Attachment #101567 - Attachment is obsolete: true
Attached patch Better comments (deleted) — Splinter Review
Attachment #101571 - Attachment is obsolete: true
Blocks: 172203
No longer depends on: 172203
Attachment #101573 - Flags: review+
Comment on attachment 101573 [details] [diff] [review] Better comments sr=sfraser
Attachment #101573 - Flags: superreview+
Comment on attachment 101573 [details] [diff] [review] Better comments >+ nsCOMPtr<nsIFormControl> formControl(do_QueryInterface(mCurrentFocus)); >+ PRInt32 controlType; >+ formControl->GetType(&controlType); >+ if (controlType == NS_FORM_INPUT_TEXT || >+ controlType == NS_FORM_INPUT_PASSWORD) { >+ nsCOMPtr<nsIDOMHTMLInputElement> inputElement = >+ do_QueryInterface(mCurrentFocus); >+ if (inputElement) { >+ inputElement->Select(); >+ } >+ } I just thought that you could cut it down from 2 to 1 QIs, I don't understand the benefit in the "extra" QI to nsIFormControl to check the control type.
checked in
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
This patch has been checked into the CHIMERA_M1_0_1_BRANCH also.
verified - tried a number of cases (current win2k nightly) and they all seem to work as desired.
Status: RESOLVED → VERIFIED
Keywords: helpwanted
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: