API: GtkWidget::press-and-hold GTK_PRESS_AND_HOLD_{QUERY,TRIGGER,CANCEL} GTK_STYLE_CLASS_PRESS_AND_HOLD style class GtkSettings::gtk-press-and-hold-timeout setting
This feature has a long history going back to 2005 and Hildon [1][2]. The way it works is that ::press-and-hold is emitted upon button press (only button 1), scroll or touch events with an action of GTK_PRESS_AND_HOLD_QUERY. Widgets have to opt-in to press-and-hold by handling that and returning TRUE. GTK+ then plays the press-and-hold animation (which is adapted to whether you are using a tiny cursor or a fat thumb). If you hold still until the time determined by gtk-press-and-hold-timeout has passed, ::press-and-hold is emitted again with the TRIGGER action, and widgets are expected to handle that by doing whatever action they want to tie to long presses. If the press-and-hold is canceled because the pointer was moved (beyond the drag threshold), ::press-and-hold is emitted with the CANCEL action. If the widget goes away while the press-and-hold animation is running, it gets removed and cleaned up. One interesting aspect here is that ::press-and-hold is emitted on the target widget of the event before the capture phase. There is a comment in the code that explains that this is 'so a parent capturing events doesn't delay nor prevent a child from doing the press-and-hold action'. Questions, comments: - This is almost convenience api - except for the interaction with event capture, every widget could do this itself with a timeout and a handrolled animation. But having this supported consistently across the desktop seems well worth it. The branch add press-and-hold support for the context menus in entries, labels and textviews. - I wonder what happens on a multi-touch system - if I touch and hold 2 buttons, do I get two press-and-hold animations at the same time, with 2 context menus popping up in the end ? [1] http://bugzilla.gnome.org/show_bug.cgi?id=315645 [2] http://mail.gnome.org/archives/gtk-devel-list/2006-September/msg00146.html _______________________________________________ gtk-devel-list mailing list gtk-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-devel-list