Commit Graph

30915 Commits

Author SHA1 Message Date
Carlos Garnacho
0b796299c1 gtk,scrolledwindow: capture motions until the kinetic scrolling cancellation
If the widget which events are captured listens to motion hints, there
are situations where neither the scrolled window or the child widget
request more motions.
2012-02-18 17:48:47 +01:00
Carlos Garnacho
5d2af3e13d gtk,pah: Show a bigger press-and-hold indicator on touchscreens
On touch devices it uses a 2.5cm diameter via gdk_screen_get_width_mm()
in the hope that it'll pop out of the finger area.
2012-02-18 17:48:47 +01:00
Carlos Garnacho
15d2f1697d gtk,scrolledwindow: Unset dragging device on ::grab-notify
The child widget may still call gtk_(device_)grab_add, which left
the scrolled window in an inconsistent state.
2012-02-18 17:48:47 +01:00
Carlos Garnacho
460a54ce15 gtk,scrolledwindow: Rework physics behind kinetic scrolling
The maths being used didn't resemble much about velocities or
friction/deceleration, so reimplement it in terms of velocity
vectors and decelerations, measured in pixels/ms^2.

Overshooting is also handled within the deceleration effect,
turning into a constant acceleration vector in the opposite
direction so it returns elastically within the boundaries.
2012-02-18 17:48:47 +01:00
Carlos Garnacho
3ab0ccf643 gtk,scrolledwindow: Implement overshooting
An extra GdkWindow has been added, this window is the parent
of the child widget, and is the one getting resized/moved when
overshooting.

The unclamped adjustments' values are also stored in
GtkScrolledWindowPrivate as a separate value, overshooting is
pretty specific to GtkScrolledWindow and it isn't worth to
expose API in GtkAlignment for this single purpose.

This method allows GtkScrollable children to be blissfully
unaware of overshooting, as otherwise they'd have to handle
rather odd adjustment values themselves.
2012-02-18 17:48:47 +01:00
Carlos Garnacho
cebd79e7eb gtk,scrolledwindow: Add window for overshooting
This window is the child widget's parent window, and will
be the one that's moved when overshooting.
2012-02-18 17:48:47 +01:00
Carlos Garnacho
4e321365cf scrolledwindow: Handle nested scrolled windows in kinetic scrolling
The innermost scrolled window always gets to capture the events, all
scrolled windows above it just let the event go through. Ideally
reaching a limit on the innermost scrolled window would propagate
the dragging up the hierarchy in order to keep following the touch
coords, although that'd involve rather evil hacks just to cater
for broken UIs.
2012-02-18 17:48:47 +01:00
Carlos Garnacho
1b088606f7 gtk: Add event storing/replaying to GtkWidget::captured-event
It now returns a GtkCapturedEventFlags which tells whether the
widget captured the event, and additionally whether the event
should be stored for later replay.

gtk_widget_release_captured_events() has been added too so
all stored events are released onto the widget that was initially
to receive the events.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
7bf410f927 scrolledwindow: Use event times when calculating deceleration
Using g_get_current_time() isn't going to be realistic on lagging
events.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
5476f09d35 scrolledwindow: bypass kinetic scrolling if no scrollbars are shown 2012-02-18 17:48:46 +01:00
Carlos Garnacho
a49c9a27fb scrolledwindow: Remove priv->event_window
It looks like a leftover from pre-captured-event iterations of
the patch, it is completely unnecessary now.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
e5a3cf5a36 scrolledwindow: Don't use p-a-h for the "let event go through" timeout
Just use a timeout there, the press-and-hold feedback is undesirable
here.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
59a0f62079 gtk,pah: Hook directly into gtk_main_do_event()
Press and hold couldn't reasonably work if nested widgets
handle ::captured-event, once the widget inits press-and-hold,
it'd better also handle possible cancellation on motion and
button release, which isn't guaranteed with ::capture-event.

Also, tentatively start press-and-hold by default on the
grab_widget, and before event capturing happens, this avoids
awkward situations like the scrolled window preventing/delaying
press-and-hold to happen on the child textview for example.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
fbbd6b2c2e scrolledwindow: Enable kinetic scrolling by default 2012-02-18 17:48:46 +01:00
Carlos Garnacho
d77977aa62 scrolledwindow: add another shortcut to bypass event capture
When clicked again close to the previous button press location
(assuming it had ~0 movement), the scrolled window wil allow
the child to handle the events immediately.

This is so the user doesn't have to wait to the p-a-h timeout
in order to operate on the scrolledwindow child.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
da35350ee3 scrolledwindow: Only do kinetic scrolling on touch devices
This is sort of meaningless on pointer devices, besides it implies
a different input event handling on child widgets that's unnecessary
there.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
40996af9c1 scrolledwindow: Don't crash on 0-sized motion buffer 2012-02-18 17:48:46 +01:00
Carlos Garnacho
7e29b38bd4 scrolledwindow: Set also a GTK+ grab on p-a-h scrolling
This is so the widget is ensured to receive the events
regardless of the pointer position.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
c1b86a5eab scrolledwindow: Add GdkDevice parameter to ::press-and-hold handler 2012-02-18 17:48:46 +01:00
Carlos Garnacho
68587c203c gtk: Handle press-and-hold for touch devices
Also, only react to the first button
2012-02-18 17:48:46 +01:00
Carlos Garnacho
80e08d1b1b gtk: Add a GdkDevice parameter to ::press-and-hold
This would be useful when popping up menus, just so we
know what device to trigger it for.
2012-02-18 17:48:46 +01:00
Carlos Garnacho
0a05318277 gtk: Clean up press-and-hold code
The press and hold animation now fully relies on style context
transitions, finishing the p-a-h operation right after it
finishes. There's also no need to connect to ::drag-begin as
::grab-notify will also tell when a grab begins.
2012-02-18 17:48:45 +01:00
Carlos Garnacho
5c187245a4 tests: Add an entry to testpressandhold
Useful for checking behavior while selecting,
starting drags, subwindows...
2012-02-18 17:48:45 +01:00
Carlos Garnacho
739059cc91 entry: Handle ::grab-notify
Store the device, and unset private fields whenever the device
is shadowed by another GTK+ grab, so popping up menus while
selecting (i.e. press-and-hold) doesn't leave it in a confused
state.
2012-02-18 17:48:45 +01:00
Carlos Garnacho
86e966b944 gtk: Do not use deprecated APIs on press-and-hold 2012-02-18 17:48:45 +01:00
Carlos Garnacho
ef08d3975c tests: Update testkineticscrolling to use GtkGrid 2012-02-18 17:48:45 +01:00
Carlos Garnacho
c50007b33a gtk: connect to grab-notify for press and hold
This is so press and hold is cancelled if a click actually
causes an inner widget to do a GTK+ grab.
2012-02-18 17:48:45 +01:00
Carlos Garnacho
9f20e16683 gtk: Propagate ::captured-event up the hierarchy for crossing events 2012-02-18 17:48:45 +01:00
Carlos Garnacho
4f2ce2f7b6 gtk: emit ::captured-event starting from the GTK grab widget 2012-02-18 17:48:45 +01:00
Carlos Garcia Campos
a404a56254 scrolledwindow: Allow selections and drag-and-drop when kinetic scrolling is enabled
If the scrolling doesn't start after a long press, the scrolling is
cancelled and events are handled by child widget normally.
2012-02-18 17:48:45 +01:00
Carlos Garcia Campos
7a59b443ee Add GtkWidget::press-and-hold signal
Press-and-hold signal is emitted when the mouse button is pressed for a
given amount of time, specified in the new "press-and-hold-timeout"
GtkSetting. It's commonly used in mobile platforms to emulate a right
click to show a context menu. This patch is based on previous patches by
Kristian Rietveld and Danielle Madeley.

https://bugzilla.gnome.org/show_bug.cgi?id=315645
2012-02-18 17:48:45 +01:00
Carlos Garnacho
127bfd71d7 gtksettings: Set animation for press-and-hold through GtkStyleProvider
The "gtk-press-and-hold-timeout" setting has also been added, to control
its duration.
2012-02-18 17:48:45 +01:00
Carlos Garnacho
35341511b9 themingengine: Implement press-and-hold notification renderer
gtk_render_activity() uses it for the GTK_STYLE_CLASS_PRESS_AND_HOLD
style class.
2012-02-18 17:48:45 +01:00
Carlos Garcia Campos
65888ac515 scrolledwindow: Add auto-hide-scrollbars style property
To hide the scrollbars in kinetic mode when not scrolling.
2012-02-18 17:48:45 +01:00
Carlos Garcia Campos
313f51d1f8 tests: Add new test for kinetic scrolling 2012-02-18 17:48:44 +01:00
Carlos Garcia Campos
5ddf0f4e5f test: Add checkbox to enable/disable kinetic scrolling in scrolled window test 2012-02-18 17:48:44 +01:00
Carlos Garcia Campos
5e726db14e scrolledwindow: Initial kinetic scrolling support 2012-02-18 17:48:44 +01:00
Carlos Garcia Campos
705dde471f timeline: Add _gtk_timeline_get_elapsed_time()
To get the time in milliseconds since the last frame
2012-02-18 17:48:44 +01:00
Carlos Garcia Campos
d83640dc34 Add GtkWidget::captured-event signal
https://bugzilla.gnome.org/show_bug.cgi?id=641836
2012-02-18 17:48:44 +01:00
Carlos Garnacho
ed20c3255b gdk: Add GDK_SOURCE_TOUCH
This device source applies to touch capable devices, most
notably touchscreens.
2012-02-18 17:48:44 +01:00
Yaron Shahrabani
0a189935ad Updated Hebrew translation 2012-02-18 14:59:12 +02:00
Yaron Shahrabani
1f5681e419 Updated Hebrew translation. 2012-02-18 14:42:42 +02:00
Cosimo Cecchi
8dd4a0adf1 color-swatch: don't render our active badge if background-image is set
If the color active swatch has been set a background image from the
theme, use it as an asset, and do not draw our custom thing.
2012-02-18 09:55:45 +01:00
Cosimo Cecchi
dcec8dfdde color-swatch: render a background if the swatch doesn't have a color
We still want to call into the background rendering code, to draw the
default background.
2012-02-18 09:55:45 +01:00
Cosimo Cecchi
8e85702dca color-swatch: derive directly from GtkWidget
Instead of GtkDrawingArea, since that calls in realize
gtk_style_context_set_background(). We don't want that to happen, given
that we do all the painting ourselves in _draw().
2012-02-18 09:55:45 +01:00
Chao-Hsiung Liao
b58d50a0da Updated Traditional Chinese translation(Hong Kong and Taiwan) 2012-02-18 08:49:57 +08:00
Daniel Mustieles
1578585c08 Updated Spanish translation 2012-02-17 18:02:22 +01:00
Daniel Mustieles
a18b3f2ed4 Updated Spanish translation 2012-02-17 17:50:13 +01:00
Cosimo Cecchi
039eb8dc04 color-editor: mark the GtkColorSwatch as not selectable 2012-02-17 17:03:15 +01:00
Cosimo Cecchi
5f0c4fc20f color-swatch: add a "selectable" property to GtkColorSwatch
We don't want e.g. the swatch in GtkColorEditor to get the select badge
when it's clicked, so make this a property (on by default).
2012-02-17 17:03:15 +01:00