Also delay the execution of synctex_view (fixes #288)

Send the dbus response first, and then start parsing and rendering of
the synctex forward search.
This commit is contained in:
Sebastian Ramacher 2022-05-11 17:17:20 +02:00
parent 7b78b66c33
commit 2ef85e7329

View file

@ -398,19 +398,48 @@ handle_highlight_rects(zathura_t* zathura, GVariant* parameters,
g_dbus_method_invocation_return_value(invocation, result); g_dbus_method_invocation_return_value(invocation, result);
} }
typedef struct {
zathura_t* zathura;
gchar* input_file;
unsigned int line;
unsigned int column;
} view_data_t;
static gboolean
synctex_view_impl(gpointer ptr)
{
view_data_t* data = ptr;
synctex_view(data->zathura, data->input_file, data->line, data->column);
g_free(data->input_file);
g_free(data);
return false;
}
static void static void
handle_synctex_view(zathura_t* zathura, GVariant* parameters, synctex_view_idle(zathura_t* zathura, gchar* input_file, unsigned int line, unsigned int column)
GDBusMethodInvocation* invocation) {
view_data_t* data = g_try_malloc0(sizeof(view_data_t));
data->zathura = zathura;
data->input_file = input_file;
data->line = line;
data->column = column;
gdk_threads_add_idle(synctex_view_impl, data);
}
static void
handle_synctex_view(zathura_t* zathura, GVariant* parameters, GDBusMethodInvocation* invocation)
{ {
gchar* input_file = NULL; gchar* input_file = NULL;
guint line = 0; guint line = 0;
guint column = 0; guint column = 0;
g_variant_get(parameters, "(suu)", &input_file, &line, &column); g_variant_get(parameters, "(suu)", &input_file, &line, &column);
const bool ret = synctex_view(zathura, input_file, line, column); synctex_view_idle(zathura, input_file, line, column);
g_free(input_file);
GVariant* result = g_variant_new("(b)", ret); GVariant* result = g_variant_new("(b)", true);
g_dbus_method_invocation_return_value(invocation, result); g_dbus_method_invocation_return_value(invocation, result);
} }