Popovers doesn’t allow overriding onEscapePressed

Bug #1546677 reported by Olivier Tilloy
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
ubuntu-ui-toolkit (Ubuntu)
Confirmed
Undecided
Unassigned

Bug Description

With the fix for bug #1523828, popovers are automatically closed when ESC is pressed. This is a good default behaviour, however the implementation is unfortunate: because the escapePressed handler is defined on the foreground (a child item of the root popover), app developers don’t get a chance to override it.

Here’s a concrete use case: in the browser, when bookmarking a page with Ctrl+D, a popover with bookmark options is shown. We want the Enter key to validate the options and save the bookmark, and the ESC key to remove the bookmark.

Related branches

Revision history for this message
Olivier Tilloy (osomon) wrote :

I suppose this could be fixed in at least a couple of ways:

 - implementing the escapePressed handler on the top-level Popover element, instead of on its foreground child (I just did a quick test and it seems that in this case, if overriden, both the original handler and the override are called, not sure whether that’s intended or a bug in QML, but in any case that would work for our use case)

 - adding a cancel() or escape() signal on the popover which would be emitted when ESC is pressed, thus allowing embedders to do specific processing, while keeping the default behaviour of closing the popover

Revision history for this message
Olivier Tilloy (osomon) wrote :

A third option (maybe better than the previous two) would be to keep the implementation as it is, but after calling hide() in the escapePressed handler, set event.accepted to false, so that the event bubbles up.

Revision history for this message
Andrea Bernabei (faenil) wrote :

If a component consumes a key event, my feeling is that it should not propagate it up, unless we want to make an exception. That is point of handling key events after all ;)

Just my 2 cents

Revision history for this message
Zsombor Egri (zsombi) wrote :

A Popover is closed automatically if you click outside of it. Esc and outside click is basically the same thing. In any other circumstances it is the developer who closes it, for instance when an action is selected. So there shouldn't be any difference between handling Esc or outside click. Any other closing case can be captured by the actions assigned to close the Popover.

I see the Browser's bookmarking popover has a Cancel action on the bottom. This is pretty confusing as Popovers are not Dialogs, which would need an explicit action on their layout to be able to close - Esc or outside click does the job.

But really, what si the use case you need to know the Popover was dismissed?

Revision history for this message
Olivier Tilloy (osomon) wrote :

Just filed bug #1546698 in the hope that design can comment on the current bookmark options popover in the browser. Depending on their answer, we might be able to mark this bug invalid.

Cris Dywan (kalikiana)
Changed in ubuntu-ui-toolkit (Ubuntu):
status: New → Incomplete
Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for ubuntu-ui-toolkit (Ubuntu) because there has been no activity for 60 days.]

Changed in ubuntu-ui-toolkit (Ubuntu):
status: Incomplete → Expired
Andrea Bernabei (faenil)
Changed in ubuntu-ui-toolkit (Ubuntu):
status: Expired → Confirmed
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.