gio: add g_async_result_is_tagged()

Rather than doing a two step first-check-the-GAsyncResult-subtype-then-
check-the-tag, add a GAsyncResult-level method so that you can do them
both at once, simplifying the code for "short-circuit" async return
values where the vmethod never gets called.

https://bugzilla.gnome.org/show_bug.cgi?id=661767
This commit is contained in:
Dan Winship
2012-05-10 11:09:52 -04:00
parent f8532a13e2
commit 82d914d808
11 changed files with 69 additions and 73 deletions

View File

@@ -400,21 +400,16 @@ g_file_enumerator_next_files_finish (GFileEnumerator *enumerator,
GError **error)
{
GFileEnumeratorClass *class;
GSimpleAsyncResult *simple;
g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
if (g_async_result_legacy_propagate_error (result, error))
return NULL;
if (G_IS_SIMPLE_ASYNC_RESULT (result))
{
simple = G_SIMPLE_ASYNC_RESULT (result);
else if (g_async_result_is_tagged (result, g_file_enumerator_next_files_async))
{
/* Special case read of 0 files */
if (g_simple_async_result_get_source_tag (simple) == g_file_enumerator_next_files_async)
return NULL;
return NULL;
}
class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);