diff options
author | Dave Davenport <qball@gmpclient.org> | 2017-01-30 17:15:34 +0100 |
---|---|---|
committer | Dave Davenport <qball@gmpclient.org> | 2017-01-30 17:15:34 +0100 |
commit | 714b5968d53427cd955c009bc80cc2da4ca941e3 (patch) | |
tree | 25f30e8850691a9bbf1c5a60e6107fac38a62f39 /source/dialogs | |
parent | c9d16d2edac3052146e97df13ea4b1db7cda1d75 (diff) |
Allow user to set number of rows to pre-read async.
Diffstat (limited to 'source/dialogs')
-rw-r--r-- | source/dialogs/dmenu.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/source/dialogs/dmenu.c b/source/dialogs/dmenu.c index d53e829c..d317744e 100644 --- a/source/dialogs/dmenu.c +++ b/source/dialogs/dmenu.c @@ -168,10 +168,22 @@ static void async_read_cancel ( G_GNUC_UNUSED GCancellable *cancel, G_GNUC_UNUSE g_log ( LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Cancelled the async read." ); } -static void get_dmenu_async ( DmenuModePrivateData *pd ) +static int get_dmenu_async ( DmenuModePrivateData *pd, int sync_pre_read ) { + while(sync_pre_read-- ){ + gsize len = 0; + char *data = g_data_input_stream_read_upto ( pd->data_input_stream, &( pd->separator ), 1, &len, NULL, NULL ); + if ( data == NULL ) { + g_input_stream_close_async ( G_INPUT_STREAM ( pd->input_stream ), G_PRIORITY_LOW, pd->cancel, async_close_callback, pd ); + return FALSE; + } + g_data_input_stream_read_byte ( pd->data_input_stream, NULL, NULL ); + read_add ( pd, data, len ); + g_free ( data ); + } g_data_input_stream_read_upto_async ( pd->data_input_stream, &( pd->separator ), 1, G_PRIORITY_LOW, pd->cancel, async_read_callback, pd ); + return TRUE; } static void get_dmenu_sync ( DmenuModePrivateData *pd ) { @@ -622,7 +634,9 @@ int dmenu_switcher_dialog ( void ) async = FALSE; } if ( async ) { - get_dmenu_async ( pd ); + unsigned int pre_read = 0; + find_arg_uint("-async-pre-read", &pre_read); + async = get_dmenu_async ( pd, pre_read ); } else { get_dmenu_sync ( pd ); |