Closed Bug 511534 Opened 15 years ago Closed 15 years ago

Poor interaction with the software keyboard

Categories

(Core :: Widget: Gtk, defect)

All
Linux
defect
Not set
critical

Tracking

()

RESOLVED FIXED
Tracking Status
status1.9.2 --- beta1-fixed

People

(Reporter: dougt, Assigned: dougt)

References

Details

(Keywords: regression)

Attachments

(1 file, 1 obsolete file)

When the software keyboard is enabled on the n810 (or on the n800), the software keyboard commonly does not interact as expected in Fenenc.

For example, if you click on the URL bar, you will see the software keyboard appear.  However, dismissing the software keyboard does not happen even if you press the "return" software key or the the "dismiss" software key.

Pressing the "return" key correctly puts the entered text in the text area of the browser, but the software keyboard is displayed again because focus remains in the text area. 

Pressing the "dismiss" key correctly dismisses the keyboard, but it is displayed again because focus remains in the text area.
Depends on: 511535
Attached patch patch v.1 (obsolete) — Splinter Review
This seems to fix the problem.
Assignee: nobody → doug.turner
Attachment #396777 - Flags: review?(masayuki)
Attachment #396777 - Flags: review?(masayuki)
Attachment #396777 - Flags: review?(enndeakin)
Attachment #396777 - Flags: review+
Comment on attachment 396777 [details] [diff] [review]
patch v.1

I'm a owner of nsIMEStateManager, but I cannot review nsFocusManager, so, Enn should review this too.

Enn:

nsIMEStateManager::OnChangeFocus shouldn't be called at deactivating all our windows. I.e., when non-our window gets the focus, we shouldn't change the IME state of the last focused window.

Before the focus refactoring, the method did nothing when we are deactive. But the method cannot know whether we are active or not now. Therefore, we shouldn't call the method at that time.

I couldn't find this meaning change at the focus refactoring, sorry.

And this bug should be major bug on some Linux environments which use some Window Managers which moves the focus to a popuped panel. On such environments, IME cannot use correctly because when IMEs open a popup panel (e.g., a candidate window or a reading window), we are deactivated by the panel gets focus. Then, we commit the current composition. Of course, it shouldn't be so.
(In reply to comment #2)
> nsIMEStateManager::OnChangeFocus shouldn't be called at deactivating all our
> windows. I.e., when non-our window gets the focus, we shouldn't change the IME
> state of the last focused window.

Can you list the situations when OnChangeFocus should not be called? Is it only when Blur() is called from WindowLowered()? If so, comparing mActiveWindow to null is the way to do that.
(In reply to comment #3)
> (In reply to comment #2)
> > nsIMEStateManager::OnChangeFocus shouldn't be called at deactivating all our
> > windows. I.e., when non-our window gets the focus, we shouldn't change the IME
> > state of the last focused window.
> 
> Can you list the situations when OnChangeFocus should not be called? Is it only
> when Blur() is called from WindowLowered()? If so, comparing mActiveWindow to
> null is the way to do that.

I cannot list up the negative situations because it wanted to be called only when following situations:

* when the focus is unset from the focused element when we are active.
* when a element gets focus.

So, in other words, it shouldn't be called when the active element in focused window is not changed.
(In reply to comment #4)
> I cannot list up the negative situations because it wanted to be called only
> when following situations:
> 
> * when the focus is unset from the focused element when we are active.
> * when a element gets focus.

Ah, sorry. This is correct:

* when the focus is unset in active window.
* when an element gets focus in active window.
* when a window is activated.
(In reply to comment #5)
> * when the focus is unset in active window.

So it sounds like you just want to check mActiveWindow again.

For instance, the two arguments to Blur() could both be null when switching from one subframe to another as well.
(In reply to comment #6)
> (In reply to comment #5)
> > * when the focus is unset in active window.
> 
> So it sounds like you just want to check mActiveWindow again.

Sounds ok for me, I checked the nsFocusManager briefly.

Doug:

Would you create a new patch? I'll sleep soon, unfortunately. You can carry over the my r+ if you only change the if statement to |if (mActiveWindow)|.

Thank you.
Attached patch patch v.2Splinter Review
what Masayuki suggested.
Attachment #396777 - Attachment is obsolete: true
Attachment #396827 - Flags: review?(enndeakin)
Attachment #396777 - Flags: review?(enndeakin)
Attachment #396827 - Flags: review?(enndeakin) → review+
http://hg.mozilla.org/mozilla-central/rev/62fb8747c8a9
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Assignee: doug.turner → nobody
Component: Linux/Maemo → Widget: Gtk
Product: Fennec → Core
QA Contact: maemo-linux → gtk
Attachment #396827 - Flags: approval1.9.2?
Assignee: nobody → doug.turner
Attachment #396827 - Flags: approval1.9.2? → approval1.9.2+
Thank you, Doug!
Blocks: 178324
Keywords: regression
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: