Add an event_compression setting to GdkWindow
Setting event compression to false will allow inter-frame mouse motion events to be delivered, which are necessary for painting applications to produce smooth strokes. https://bugzilla.gnome.org/show_bug.cgi?id=702392
This commit is contained in:
committed by
Matthias Clasen
parent
0c46807e43
commit
80dd1a851a
@ -491,6 +491,8 @@ gdk_window_get_device_events
|
|||||||
gdk_window_set_device_events
|
gdk_window_set_device_events
|
||||||
gdk_window_get_source_events
|
gdk_window_get_source_events
|
||||||
gdk_window_set_source_events
|
gdk_window_set_source_events
|
||||||
|
gdk_window_get_event_compression
|
||||||
|
gdk_window_set_event_compression
|
||||||
|
|
||||||
<SUBSECTION>
|
<SUBSECTION>
|
||||||
gdk_offscreen_window_get_surface
|
gdk_offscreen_window_get_surface
|
||||||
|
|||||||
@ -293,6 +293,9 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display)
|
|||||||
pending_motion_device != event->event.motion.device)
|
pending_motion_device != event->event.motion.device)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (!event->event.motion.window->event_compression)
|
||||||
|
break;
|
||||||
|
|
||||||
pending_motion_window = event->event.motion.window;
|
pending_motion_window = event->event.motion.window;
|
||||||
pending_motion_device = event->event.motion.device;
|
pending_motion_device = event->event.motion.device;
|
||||||
pending_motions = tmp_list;
|
pending_motions = tmp_list;
|
||||||
|
|||||||
@ -227,6 +227,7 @@ struct _GdkWindow
|
|||||||
guint applied_shape : 1;
|
guint applied_shape : 1;
|
||||||
guint in_update : 1;
|
guint in_update : 1;
|
||||||
guint geometry_dirty : 1;
|
guint geometry_dirty : 1;
|
||||||
|
guint event_compression : 1;
|
||||||
GdkFullscreenMode fullscreen_mode;
|
GdkFullscreenMode fullscreen_mode;
|
||||||
|
|
||||||
/* The GdkWindow that has the impl, ref:ed if another window.
|
/* The GdkWindow that has the impl, ref:ed if another window.
|
||||||
|
|||||||
@ -1284,6 +1284,7 @@ gdk_window_new (GdkWindow *parent,
|
|||||||
|
|
||||||
window->accept_focus = TRUE;
|
window->accept_focus = TRUE;
|
||||||
window->focus_on_map = TRUE;
|
window->focus_on_map = TRUE;
|
||||||
|
window->event_compression = TRUE;
|
||||||
|
|
||||||
if (attributes_mask & GDK_WA_X)
|
if (attributes_mask & GDK_WA_X)
|
||||||
x = attributes->x;
|
x = attributes->x;
|
||||||
@ -9711,6 +9712,49 @@ gdk_window_set_focus_on_map (GdkWindow *window,
|
|||||||
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_focus_on_map (window, focus_on_map);
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_focus_on_map (window, focus_on_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_window_set_event_compression:
|
||||||
|
* @window: a #GdkWindow
|
||||||
|
* @event_compression: %TRUE if motion events should be compressed
|
||||||
|
*
|
||||||
|
* Determines whether or not extra unprocessed motion events in
|
||||||
|
* the event queue can be discarded. If %TRUE only the most recent
|
||||||
|
* event will be delivered.
|
||||||
|
*
|
||||||
|
* Some types of applications, e.g. paint programs, need to see all
|
||||||
|
* motion events and will benefit from turning off event compression.
|
||||||
|
*
|
||||||
|
* By default, event compression is enabled.
|
||||||
|
*
|
||||||
|
* Since: 3.12
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_window_set_event_compression (GdkWindow *window,
|
||||||
|
gboolean event_compression)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
|
|
||||||
|
window->event_compression = event_compression;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_window_get_event_compression:
|
||||||
|
* @window: a #GdkWindow
|
||||||
|
*
|
||||||
|
* Get the current event compression setting for this window.
|
||||||
|
*
|
||||||
|
* Return value: %TRUE if motion events will be compressed
|
||||||
|
*
|
||||||
|
* Since: 3.12
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
gdk_window_get_event_compression (GdkWindow *window)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_WINDOW (window), TRUE);
|
||||||
|
|
||||||
|
return window->event_compression;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gdk_window_set_icon_list:
|
* gdk_window_set_icon_list:
|
||||||
* @window: The #GdkWindow toplevel window to set the icon of.
|
* @window: The #GdkWindow toplevel window to set the icon of.
|
||||||
|
|||||||
@ -1090,6 +1090,12 @@ GDK_AVAILABLE_IN_3_10
|
|||||||
void gdk_window_set_opaque_region (GdkWindow *window,
|
void gdk_window_set_opaque_region (GdkWindow *window,
|
||||||
cairo_region_t *region);
|
cairo_region_t *region);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_3_12
|
||||||
|
void gdk_window_set_event_compression (GdkWindow *window,
|
||||||
|
gboolean event_compression);
|
||||||
|
GDK_AVAILABLE_IN_3_12
|
||||||
|
gboolean gdk_window_get_event_compression (GdkWindow *window);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GDK_WINDOW_H__ */
|
#endif /* __GDK_WINDOW_H__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user