summaryrefslogtreecommitdiff
path: root/gdk/x11/gdkinput.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-08-01 15:28:40 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-08-01 15:28:40 +0000
commite5ae081ebea69057c9e9da5175869b87b0972ed0 (patch)
treee6be8246d4b84e8cfbe2c859de97683065211344 /gdk/x11/gdkinput.c
parentd202b55bc05460d36b759de33b93cfea0f9870c7 (diff)
downloadgdk-pixbuf-e5ae081ebea69057c9e9da5175869b87b0972ed0.tar.gz
Start implementing display/screen closing scheme; keep a flag for whether
Thu Aug 1 11:26:03 2002 Owen Taylor <otaylor@redhat.com> * gdk/gdkdisplay.[ch] gdk/gdkscreen.[ch] gdkinternals.h: Start implementing display/screen closing scheme; keep a flag for whether displays and screens are closed, call g_object_run_dispose(). Remove public gdk_screen_close(). * gdk/x11/gdkdisplay-x11.c gdk/x11/gdkscreen-x11.c: Add dispose() methods; move appropriate parts of the finalize there. * gdk/x11/gdkcolor-x11.c gdk/x11/gdkimage-x11.c gdk/x11/gdkmain-x11.c gdk/x11/gdkpango-x11.c gdk/x11/gdkpixmap-x11.c gdk/x11/gdkproperty-x11.c gdk/x11/gdkselection-x11.c gdk/x11/gdkwindow-x11.c: Start of making everything correctly ignore operations when a display has been closed. * gdk/x11/gdkwindow-x11.c (gdk_window_get_decorations): Handle decorations == NULL. * gdk/x11/gdkcolor-x11.c (gdk_colormap_remove): Remove unnecessary hash table creation. * gdk/x11/gdkinput.c gdk/x11/gdkinput-x11.c gdk/win32/gdkinput.c Fix up gdk_device_get_history - handle events, n_events == NULL, etc. * gdk/x11/gdkproperty-x11.c (gdk_property_get): Handle failure better. * gdk/x11/gdkselection-x11.c (gdk_selection_property_get): Handle failure better, handle data == NULL, move docs here, remove an excess round trip by asking for all selection data at once. * gdk/gdkselection.c gdk/win32/{x11,win32}/gdkselection-{x11,win32}.c gdk/{x11,win32}/gdkmain-{x11,win32}.c gdk/gdkdisplay.c: Move gdk_text_property_to_text_list(), gdk_string_to_compound_text(), gdk_display_set_sm_client_id() to display-independent part of GDK. * gdk/Makefile.am (gdk_c_sources): Sort gdkdisplay/screen.[ch] into the right place.
Diffstat (limited to 'gdk/x11/gdkinput.c')
-rw-r--r--gdk/x11/gdkinput.c56
1 files changed, 39 insertions, 17 deletions
diff --git a/gdk/x11/gdkinput.c b/gdk/x11/gdkinput.c
index 24c99fe03..79edd0612 100644
--- a/gdk/x11/gdkinput.c
+++ b/gdk/x11/gdkinput.c
@@ -171,6 +171,25 @@ gdk_device_set_axis_use (GdkDevice *device,
}
}
+/**
+ * gdk_device_get_history:
+ * @device: a #GdkDevice
+ * @window: the window with respect to which which the event coordinates will be reported
+ * @start: starting timestamp for range of events to return
+ * @stop: ending timestamp for the range of events to return
+ * @events: location to store a newly-allocated array of #GdkTimeCoord, or %NULL
+ * @n_events: location to store the length of @events, or %NULL
+ *
+ * Obtains the motion history for a device; given a starting and
+ * ending timestamp, return all events in the motion history for
+ * the device in the given range of time. Some windowing systems
+ * do not support motion history, in which case, %FALSE will
+ * be returned. (This is not distinguishable from the case where
+ * motion history is supported and no events were found.)
+ *
+ * Return value: %TRUE if the windowing system supports motion history and
+ * at least one event was found.
+ **/
gboolean
gdk_device_get_history (GdkDevice *device,
GdkWindow *window,
@@ -179,31 +198,26 @@ gdk_device_get_history (GdkDevice *device,
GdkTimeCoord ***events,
gint *n_events)
{
- GdkTimeCoord **coords;
+ GdkTimeCoord **coords = NULL;
+ gboolean result = FALSE;
+ int tmp_n_events = 0;
int i;
- g_return_val_if_fail (window != NULL, FALSE);
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
- g_return_val_if_fail (events != NULL, FALSE);
- g_return_val_if_fail (n_events != NULL, FALSE);
-
- *n_events = 0;
- *events = NULL;
if (GDK_WINDOW_DESTROYED (window))
- return FALSE;
-
- if (GDK_IS_CORE (device))
+ /* Nothing */ ;
+ else if (GDK_IS_CORE (device))
{
XTimeCoord *xcoords;
xcoords = XGetMotionEvents (GDK_DRAWABLE_XDISPLAY (window),
GDK_DRAWABLE_XID (window),
- start, stop, n_events);
+ start, stop, &tmp_n_events);
if (xcoords)
{
- coords = _gdk_device_allocate_history (device, *n_events);
- for (i=0; i<*n_events; i++)
+ coords = _gdk_device_allocate_history (device, tmp_n_events);
+ for (i=0; i<tmp_n_events; i++)
{
coords[i]->time = xcoords[i].time;
coords[i]->axes[0] = xcoords[i].x;
@@ -212,14 +226,22 @@ gdk_device_get_history (GdkDevice *device,
XFree (xcoords);
- *events = coords;
- return TRUE;
+ result = TRUE;
}
else
- return FALSE;
+ result = FALSE;
}
else
- return _gdk_device_get_history (device, window, start, stop, events, n_events);
+ result = _gdk_device_get_history (device, window, start, stop, &coords, &tmp_n_events);
+
+ if (n_events)
+ *n_events = tmp_n_events;
+ if (events)
+ *events = coords;
+ else if (coords)
+ gdk_device_free_history (coords, tmp_n_events);
+
+ return result;
}
GdkTimeCoord **