Merge branch 'release/0.4.0'

This commit is contained in:
Sebastian Ramacher 2018-05-20 15:08:25 +02:00
commit 68eaadf130
19 changed files with 135 additions and 151 deletions

View file

@ -28,3 +28,4 @@ oblique
Maxime Chéramy <maxime.cheramy@gmail.com> Maxime Chéramy <maxime.cheramy@gmail.com>
Alexander Shabalin <shabalyn.a@gmail.com> Alexander Shabalin <shabalyn.a@gmail.com>
Lingzhu Xiang <lingzhu@lingzhuxiang.com> Lingzhu Xiang <lingzhu@lingzhuxiang.com>
Jeremie Knuesel

View file

@ -7,7 +7,7 @@ zathura_resources = gnome.compile_resources(
) )
install_data('org.pwmt.zathura.xml', install_dir: dbusinterfacesdir) install_data('org.pwmt.zathura.xml', install_dir: dbusinterfacesdir)
install_data('org.pwmt.zathura.png', install_dir: join_paths(datadir, 'icons', 'hicolor', '128x128')) install_data('org.pwmt.zathura.png', install_dir: join_paths(datadir, 'icons', 'hicolor', '128x128', 'apps'))
i18n = import('i18n') i18n = import('i18n')
podir = join_paths(meson.source_root(), 'po') podir = join_paths(meson.source_root(), 'po')

View file

@ -324,6 +324,8 @@ Pass arguments
Some shortcut function require or have optional arguments which influence the Some shortcut function require or have optional arguments which influence the
behaviour of them. Those can be passed as the last argument: behaviour of them. Those can be passed as the last argument:
::
map <C-i> zoom in map <C-i> zoom in
map <C-o> zoom out map <C-o> zoom out

View file

@ -1,5 +1,5 @@
project('zathura', 'c', project('zathura', 'c',
version: '0.3.9', version: '0.4.0',
meson_version: '>=0.45', meson_version: '>=0.45',
default_options: 'c_std=c11', default_options: 'c_std=c11',
) )
@ -36,15 +36,16 @@ dbusinterfacesdir = join_paths(datadir, 'dbus-1', 'interfaces')
plugindir = join_paths(get_option('libdir'), 'zathura') plugindir = join_paths(get_option('libdir'), 'zathura')
# required dependencies # required dependencies
libm = cc.find_library('libm') libm = cc.find_library('libm', required: false)
girara = dependency('girara-gtk3', version: '>=0.2.9') girara = dependency('girara-gtk3', version: '>=0.2.9')
glib = dependency('glib-2.0', version: '>=2.50') glib = dependency('glib-2.0', version: '>=2.50')
gio = dependency('gio-unix-2.0', required: host_machine.system() != 'windows')
gthread = dependency('gthread-2.0', version: '>=2.50') gthread = dependency('gthread-2.0', version: '>=2.50')
gmodule = dependency('gmodule-no-export-2.0', version: '>=2.50') gmodule = dependency('gmodule-no-export-2.0', version: '>=2.50')
gtk3 = dependency('gtk+-3.0', version: '>=3.22') gtk3 = dependency('gtk+-3.0', version: '>=3.22')
cairo = dependency('cairo') cairo = dependency('cairo')
build_dependencies = [libm, girara, glib, gthread, gmodule, gtk3, cairo] build_dependencies = [libm, girara, glib, gio, gthread, gmodule, gtk3, cairo]
# defines # defines
defines = [ defines = [
@ -81,6 +82,9 @@ endif
if get_option('enable-synctex') and synctex.found() if get_option('enable-synctex') and synctex.found()
build_dependencies += synctex build_dependencies += synctex
defines += '-DWITH_SYNCTEX' defines += '-DWITH_SYNCTEX'
if synctex.version() < '2.0.0'
defines += '-DWITH_SYNCTEX1'
endif
endif endif
if get_option('enable-magic') and magic.found() if get_option('enable-magic') and magic.found()

View file

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: zathura\n" "Project-Id-Version: zathura\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-16 01:11+0100\n" "POT-Creation-Date: 2018-03-16 01:11+0100\n"
"PO-Revision-Date: 2018-03-16 01:11+0100\n" "PO-Revision-Date: 2018-03-18 17:21+0100\n"
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n" "Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
"Language-Team: German (http://www.transifex.com/pwmt/zathura/language/de/)\n" "Language-Team: German (http://www.transifex.com/pwmt/zathura/language/de/)\n"
"Language: de\n" "Language: de\n"
@ -17,6 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.6\n"
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5 #: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
msgid "Zathura" msgid "Zathura"
@ -33,10 +34,14 @@ msgid ""
"mainly focuses on keyboard interaction. Zathura makes it possible to " "mainly focuses on keyboard interaction. Zathura makes it possible to "
"completely view and navigate through documents without using a mouse." "completely view and navigate through documents without using a mouse."
msgstr "" msgstr ""
"Zathura ist ein anpassbarer und funktionaler Dokumentenbetrachter. Er bietet "
"eine minimalistische und platzsparende Oberfläche und Verwendung ist auf "
"Tastaturinteraktionen fokussiert. Zathura ermöglicht es ein Dokument "
"gänzlich ohne der Verwendung einer Maus zu betrachten."
#: data/org.pwmt.zathura.appdata.xml.in:21 #: data/org.pwmt.zathura.appdata.xml.in:21
msgid "SyncTeX forward and backward synchronization support." msgid "SyncTeX forward and backward synchronization support."
msgstr "Unterstützung für SyncTeX-Synchronisation" msgstr "Unterstützung für SyncTeX-Synchronisation."
#: data/org.pwmt.zathura.appdata.xml.in:22 #: data/org.pwmt.zathura.appdata.xml.in:22
msgid "Quickmarks and bookmarks." msgid "Quickmarks and bookmarks."

View file

@ -20,5 +20,7 @@ if check.found()
c_args: defines + flags c_args: defines + flags
) )
test('tests', tests) test('tests', tests,
timeout: 60*60
)
endif endif

View file

@ -138,7 +138,7 @@ sqlite_db_init(ZathuraSQLDatabase* db, const char* path)
"vadj_ratio FLOAT," "vadj_ratio FLOAT,"
"PRIMARY KEY(file, id));"; "PRIMARY KEY(file, id));";
/* ceate jumplist table */ /* create jumplist table */
static const char SQL_JUMPLIST_INIT[] = static const char SQL_JUMPLIST_INIT[] =
"CREATE TABLE IF NOT EXISTS jumplist (" "CREATE TABLE IF NOT EXISTS jumplist ("
"id INTEGER PRIMARY KEY AUTOINCREMENT," "id INTEGER PRIMARY KEY AUTOINCREMENT,"

View file

@ -549,7 +549,7 @@ zathura_document_set_device_factors(zathura_document_t* document,
return; return;
} }
if (fabs(x_factor) < DBL_EPSILON || fabs(y_factor) < DBL_EPSILON) { if (fabs(x_factor) < DBL_EPSILON || fabs(y_factor) < DBL_EPSILON) {
girara_debug("Ignoring new device factors %f and %f: too small", girara_debug("Ignoring new device factors %0.2f and %0.2f: too small",
x_factor, y_factor); x_factor, y_factor);
return; return;
} }

View file

@ -269,7 +269,7 @@ register_plugin(zathura_plugin_manager_t* plugin_manager, zathura_plugin_t* plug
if (plugin_mapping_new(plugin_manager, type, plugin) == false) { if (plugin_mapping_new(plugin_manager, type, plugin) == false) {
girara_error("plugin: filetype already registered: %s", type); girara_error("plugin: filetype already registered: %s", type);
} else { } else {
girara_debug("plugin: filetype mapping addded: %s", type); girara_debug("plugin: filetype mapping added: %s", type);
at_least_one = true; at_least_one = true;
} }
); );

View file

@ -10,65 +10,6 @@
#include <girara/session.h> #include <girara/session.h>
#include <glib/gi18n.h> #include <glib/gi18n.h>
static void cb_print_draw_page(GtkPrintOperation* print_operation,
GtkPrintContext* context, gint page_number,
zathura_t* zathura);
static void cb_print_end(GtkPrintOperation* print_operation, GtkPrintContext*
context, zathura_t* zathura);
static void cb_print_request_page_setup(GtkPrintOperation* print_operation,
GtkPrintContext* context,
gint page_number, GtkPageSetup* setup,
zathura_t* zathura);
static void cb_print_done(GtkPrintOperation* operation,
GtkPrintOperationResult result, zathura_t* zathura);
void
print(zathura_t* zathura)
{
g_return_if_fail(zathura != NULL);
g_return_if_fail(zathura->document != NULL);
GtkPrintOperation* print_operation = gtk_print_operation_new();
/* print operation settings */
gtk_print_operation_set_job_name(print_operation, zathura_document_get_path(zathura->document));
gtk_print_operation_set_allow_async(print_operation, TRUE);
gtk_print_operation_set_n_pages(print_operation, zathura_document_get_number_of_pages(zathura->document));
gtk_print_operation_set_current_page(print_operation, zathura_document_get_current_page_number(zathura->document));
gtk_print_operation_set_use_full_page(print_operation, TRUE);
if (zathura->print.settings != NULL) {
gtk_print_operation_set_print_settings(print_operation,
zathura->print.settings);
}
if (zathura->print.page_setup != NULL) {
gtk_print_operation_set_default_page_setup(print_operation,
zathura->print.page_setup);
}
gtk_print_operation_set_embed_page_setup(print_operation, TRUE);
/* print operation signals */
g_signal_connect(print_operation, "draw-page", G_CALLBACK(cb_print_draw_page), zathura);
g_signal_connect(print_operation, "end-print", G_CALLBACK(cb_print_end), zathura);
g_signal_connect(print_operation, "request-page-setup", G_CALLBACK(cb_print_request_page_setup), zathura);
g_signal_connect(print_operation, "done", G_CALLBACK(cb_print_done), zathura);
/* print */
GError* error = NULL;
GtkPrintOperationResult result = gtk_print_operation_run(print_operation,
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
NULL, &error);
if (result == GTK_PRINT_OPERATION_RESULT_ERROR) {
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Printing failed: %s"),
error->message);
g_error_free(error);
}
g_object_unref(print_operation);
}
static void static void
cb_print_end(GtkPrintOperation* UNUSED(print_operation), GtkPrintContext* cb_print_end(GtkPrintOperation* UNUSED(print_operation), GtkPrintContext*
UNUSED(context), zathura_t* zathura) UNUSED(context), zathura_t* zathura)
@ -210,23 +151,55 @@ cb_print_request_page_setup(GtkPrintOperation* UNUSED(print_operation),
} }
} }
static void void
cb_print_done(GtkPrintOperation* operation, GtkPrintOperationResult result, print(zathura_t* zathura)
zathura_t* zathura)
{ {
if (result == GTK_PRINT_OPERATION_RESULT_APPLY) { g_return_if_fail(zathura != NULL);
g_return_if_fail(zathura->document != NULL);
GtkPrintOperation* print_operation = gtk_print_operation_new();
/* print operation settings */
gtk_print_operation_set_job_name(print_operation, zathura_document_get_path(zathura->document));
gtk_print_operation_set_allow_async(print_operation, TRUE);
gtk_print_operation_set_n_pages(print_operation, zathura_document_get_number_of_pages(zathura->document));
gtk_print_operation_set_current_page(print_operation, zathura_document_get_current_page_number(zathura->document));
gtk_print_operation_set_use_full_page(print_operation, TRUE);
if (zathura->print.settings != NULL) {
gtk_print_operation_set_print_settings(print_operation,
zathura->print.settings);
}
if (zathura->print.page_setup != NULL) {
gtk_print_operation_set_default_page_setup(print_operation,
zathura->print.page_setup);
}
gtk_print_operation_set_embed_page_setup(print_operation, TRUE);
/* print operation signals */
g_signal_connect(print_operation, "draw-page", G_CALLBACK(cb_print_draw_page), zathura);
g_signal_connect(print_operation, "end-print", G_CALLBACK(cb_print_end), zathura);
g_signal_connect(print_operation, "request-page-setup", G_CALLBACK(cb_print_request_page_setup), zathura);
/* print */
GError* error = NULL;
GtkPrintOperationResult result = gtk_print_operation_run(print_operation,
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
GTK_WINDOW(zathura->ui.session->gtk.window), &error);
if (result == GTK_PRINT_OPERATION_RESULT_ERROR) {
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Printing failed: %s"),
error->message);
g_error_free(error);
} else if (result == GTK_PRINT_OPERATION_RESULT_APPLY) {
g_clear_object(&zathura->print.settings); g_clear_object(&zathura->print.settings);
g_clear_object(&zathura->print.page_setup); g_clear_object(&zathura->print.page_setup);
/* save previous settings */ /* save previous settings */
zathura->print.settings = g_object_ref(gtk_print_operation_get_print_settings(operation)); zathura->print.settings = g_object_ref(gtk_print_operation_get_print_settings(print_operation));
zathura->print.page_setup = g_object_ref(gtk_print_operation_get_default_page_setup(operation)); zathura->print.page_setup = g_object_ref(gtk_print_operation_get_default_page_setup(print_operation));
} else if (result == GTK_PRINT_OPERATION_RESULT_ERROR) {
GError* error = NULL;
gtk_print_operation_get_error(operation, &error);
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Printing failed: %s"),
error->message);
g_error_free(error);
}
} }
g_object_unref(print_operation);
}

View file

@ -541,36 +541,22 @@ emit_completed_signal(void* data)
Assumes that l is in the interval l1, l2 and corrects the value to Assumes that l is in the interval l1, l2 and corrects the value to
force u=0 on l1 and l2 */ force u=0 on l1 and l2 */
static double static double
colorumax(const double* h, double l, double l1, double l2) colorumax(const double h[3], double l, double l1, double l2)
{ {
if (h[0] == 0 && h[1] == 0 && h[2] == 0) { if (fabs(h[0]) <= DBL_EPSILON && fabs(h[1]) <= DBL_EPSILON && fabs(h[2]) <= DBL_EPSILON) {
return 0; return 0;
} }
const double lv = (l - l1)/(l2 - l1); /* Remap l to the whole interval 0,1 */ const double lv = (l - l1) / (l2 - l1); /* Remap l to the whole interval [0,1] */
double u = 1000000; double u = DBL_MAX;
double v = u; double v = DBL_MAX;
for (int k = 0; k < 3; k++) { for (unsigned int k = 0; k < 3; ++k) {
if (h[k] > 0) { if (h[k] > DBL_EPSILON) {
const double uu = fabs((1-l)/h[k]); u = fmin(fabs((1-l)/h[k]), u);
const double vv = fabs((1-lv)/h[k]); v = fmin(fabs((1-lv)/h[k]), v);
} else if (h[k] < -DBL_EPSILON) {
if (uu < u) { u = fmin(fabs(l/h[k]), u);
u = uu; v = fmin(fabs(lv/h[k]), v);
}
if (vv < v) {
v = vv;
}
} else if (h[k] < 0) {
const double uu = fabs(l/h[k]);
const double vv = fabs(lv/h[k]);
if (uu < u) {
u = uu;
}
if (vv < v) {
v = vv;
}
} }
} }
@ -595,7 +581,7 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
/* TODO: split handling of image handling off /* TODO: split handling of image handling off
* Ideally we would create a mask surface for the location of the images and * Ideally we would create a mask surface for the location of the images and
* we would blit the the recolored and unmodified surfaces together to get the * we would blit the recolored and unmodified surfaces together to get the
* same effect. * same effect.
*/ */
@ -607,8 +593,9 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
/* RGB weights for computing lightness. Must sum to one */ /* RGB weights for computing lightness. Must sum to one */
static const double a[] = {0.30, 0.59, 0.11}; static const double a[] = {0.30, 0.59, 0.11};
#define rgb1 priv->recolor.dark const GdkRGBA rgb1 = priv->recolor.dark;
#define rgb2 priv->recolor.light const GdkRGBA rgb2 = priv->recolor.light;
const double l1 = a[0]*rgb1.red + a[1]*rgb1.green + a[2]*rgb1.blue; const double l1 = a[0]*rgb1.red + a[1]*rgb1.green + a[2]*rgb1.blue;
const double l2 = a[0]*rgb2.red + a[1]*rgb2.green + a[2]*rgb2.blue; const double l2 = a[0]*rgb2.red + a[1]*rgb2.green + a[2]*rgb2.blue;
@ -630,7 +617,7 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
rectangles = girara_list_new(); rectangles = girara_list_new();
if (rectangles == NULL) { if (rectangles == NULL) {
found_images = false; found_images = false;
girara_warning("Failed to retrieve images.\n"); girara_warning("Failed to retrieve images.");
} }
if (found_images == true) { if (found_images == true) {
@ -687,20 +674,17 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
/* u is the maximum possible saturation for given h and l. s is a /* u is the maximum possible saturation for given h and l. s is a
* rescaled saturation between 0 and 1 */ * rescaled saturation between 0 and 1 */
double u = colorumax(h, l, 0, 1); const double u = colorumax(h, l, 0, 1);
double s = 0; const double s = fabs(u) > DBL_EPSILON ? 1.0 / u : 0.0;
if (u != 0) {
s = 1/u;
}
/* Interpolates lightness between light and dark colors. white goes to /* Interpolates lightness between light and dark colors. white goes to
* light, and black goes to dark. */ * light, and black goes to dark. */
l = l * (l2 - l1) + l1; l = l * (l2 - l1) + l1;
u = colorumax(h, l, l1, l2);
data[2] = (unsigned char)round(255.*(l + s*u * h[0])); const double su = s * colorumax(h, l, l1, l2);
data[1] = (unsigned char)round(255.*(l + s*u * h[1])); data[2] = (unsigned char)round(255.*(l + su * h[0]));
data[0] = (unsigned char)round(255.*(l + s*u * h[2])); data[1] = (unsigned char)round(255.*(l + su * h[1]));
data[0] = (unsigned char)round(255.*(l + su * h[2]));
} else { } else {
/* linear interpolation between dark and light with color ligtness as /* linear interpolation between dark and light with color ligtness as
* a parameter */ * a parameter */
@ -719,9 +703,6 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
} }
cairo_surface_mark_dirty(surface); cairo_surface_mark_dirty(surface);
#undef rgb1
#undef rgb2
} }
static bool static bool
@ -747,7 +728,7 @@ render(render_job_t* job, ZathuraRenderRequest* request, ZathuraRenderer* render
&page_height, &page_width, &page_height, &page_width,
false); false);
zathura_device_factors_t device_factors = zathura_document_get_device_factors(document); const zathura_device_factors_t device_factors = zathura_document_get_device_factors(document);
page_width *= device_factors.x; page_width *= device_factors.x;
page_height *= device_factors.y; page_height *= device_factors.y;
@ -866,7 +847,7 @@ render_all(zathura_t* zathura)
const double width = zathura_page_get_width(page); const double width = zathura_page_get_width(page);
page_calc_height_width(zathura->document, height, width, &page_height, &page_width, true); page_calc_height_width(zathura->document, height, width, &page_height, &page_width, true);
girara_debug("Queuing resize for page %u to %u x %u (%f x %f).", page_id, page_width, page_height, width, height); girara_debug("Queuing resize for page %u to %u x %u (%0.2f x %0.2f).", page_id, page_width, page_height, width, height);
GtkWidget* widget = zathura_page_get_widget(zathura, page); GtkWidget* widget = zathura_page_get_widget(zathura, page);
if (widget != NULL) { if (widget != NULL) {
gtk_widget_set_size_request(widget, page_width, page_height); gtk_widget_set_size_request(widget, page_width, page_height);
@ -892,7 +873,7 @@ render_thread_sort(gconstpointer a, gconstpointer b, gpointer UNUSED(data))
(priv_a->last_view_time > priv_b->last_view_time ? 1 : 0); (priv_a->last_view_time > priv_b->last_view_time ? 1 : 0);
} }
/* sort aborted entries earlier so that the are thrown out of the queue */ /* sort aborted entries earlier so that they are thrown out of the queue */
return job_a->aborted ? 1 : -1; return job_a->aborted ? 1 : -1;
} }

View file

@ -155,6 +155,7 @@ seccomp_enable_strict_filter(void)
ALLOW_RULE(getresgid); ALLOW_RULE(getresgid);
ALLOW_RULE(getresuid); ALLOW_RULE(getresuid);
ALLOW_RULE(getrlimit); ALLOW_RULE(getrlimit);
ALLOW_RULE(getpeername);
/* ALLOW_RULE (getsockname); */ /* ALLOW_RULE (getsockname); */
/* ALLOW_RULE (getsockopt); needed for access to x11 socket in network namespace (without abstract sockets) */ /* ALLOW_RULE (getsockopt); needed for access to x11 socket in network namespace (without abstract sockets) */
ALLOW_RULE(inotify_add_watch); ALLOW_RULE(inotify_add_watch);

View file

@ -1383,22 +1383,22 @@ sc_zoom(girara_session_t* session, girara_argument_t* argument, girara_event_t*
/* specify new zoom value */ /* specify new zoom value */
if (argument->n == ZOOM_IN) { if (argument->n == ZOOM_IN) {
girara_debug("Increasing zoom by %f.", zoom_step - 1.0); girara_debug("Increasing zoom by %0.2f.", zoom_step - 1.0);
zathura_document_set_zoom(zathura->document, old_zoom * zoom_step); zathura_document_set_zoom(zathura->document, old_zoom * zoom_step);
} else if (argument->n == ZOOM_OUT) { } else if (argument->n == ZOOM_OUT) {
girara_debug("Decreasing zoom by %f.", zoom_step - 1.0); girara_debug("Decreasing zoom by %0.2f.", zoom_step - 1.0);
zathura_document_set_zoom(zathura->document, old_zoom / zoom_step); zathura_document_set_zoom(zathura->document, old_zoom / zoom_step);
} else if (argument->n == ZOOM_SPECIFIC) { } else if (argument->n == ZOOM_SPECIFIC) {
if (t == 0) { if (t == 0) {
girara_debug("Setting zoom to 1."); girara_debug("Setting zoom to 1.");
zathura_document_set_zoom(zathura->document, 1.0); zathura_document_set_zoom(zathura->document, 1.0);
} else { } else {
girara_debug("Setting zoom to %f.", t / 100.0); girara_debug("Setting zoom to %0.2f.", t / 100.0);
zathura_document_set_zoom(zathura->document, t / 100.0); zathura_document_set_zoom(zathura->document, t / 100.0);
} }
} else if (argument->n == ZOOM_SMOOTH) { } else if (argument->n == ZOOM_SMOOTH) {
const double dy = (event != NULL) ? event->y : 1.0; const double dy = (event != NULL) ? event->y : 1.0;
girara_debug("Increasing zoom by %f.", zoom_step * dy - 1.0); girara_debug("Increasing zoom by %0.2f.", zoom_step * dy - 1.0);
zathura_document_set_zoom(zathura->document, old_zoom + zoom_step * dy); zathura_document_set_zoom(zathura->document, old_zoom + zoom_step * dy);
} else { } else {
girara_debug("Setting zoom to 1."); girara_debug("Setting zoom to 1.");
@ -1411,11 +1411,11 @@ sc_zoom(girara_session_t* session, girara_argument_t* argument, girara_event_t*
const double new_zoom = zathura_document_get_zoom(zathura->document); const double new_zoom = zathura_document_get_zoom(zathura->document);
if (fabs(new_zoom - old_zoom) <= DBL_EPSILON) { if (fabs(new_zoom - old_zoom) <= DBL_EPSILON) {
girara_debug("New and old zoom level are too close: %f vs. %f, diff = %f", new_zoom, old_zoom, fabs(new_zoom - old_zoom)); girara_debug("New and old zoom level are too close: %0.2f vs. %0.2f", new_zoom, old_zoom);
return false; return false;
} }
girara_debug("Re-rendering with new zoom level %f.", new_zoom); girara_debug("Re-rendering with new zoom level %0.2f.", new_zoom);
render_all(zathura); render_all(zathura);
refresh_view(zathura); refresh_view(zathura);

View file

@ -16,6 +16,14 @@
#include "adjustment.h" #include "adjustment.h"
#ifdef WITH_SYNCTEX #ifdef WITH_SYNCTEX
#ifdef WITH_SYNCTEX1
typedef synctex_scanner_t synctex_scanner_p;
typedef synctex_node_t synctex_node_p;
#define synctex_scanner_next_result(scanner) synctex_next_result(scanner)
#define synctex_display_query(scanner, file, line, column, page) synctex_display_query(scanner, file, line, column)
#endif
bool bool
synctex_get_input_line_column(const char* filename, unsigned int page, int x, int y, synctex_get_input_line_column(const char* filename, unsigned int page, int x, int y,
char** input_file, unsigned int* line, unsigned int* column) char** input_file, unsigned int* line, unsigned int* column)
@ -24,13 +32,13 @@ synctex_get_input_line_column(const char* filename, unsigned int page, int x, in
return false; return false;
} }
synctex_scanner_t scanner = synctex_scanner_new_with_output_file(filename, NULL, 1); synctex_scanner_p scanner = synctex_scanner_new_with_output_file(filename, NULL, 1);
if (scanner == NULL) { if (scanner == NULL) {
girara_debug("Failed to create synctex scanner."); girara_debug("Failed to create synctex scanner.");
return false; return false;
} }
synctex_scanner_t temp = synctex_scanner_parse(scanner); synctex_scanner_p temp = synctex_scanner_parse(scanner);
if (temp == NULL) { if (temp == NULL) {
girara_debug("Failed to parse synctex file."); girara_debug("Failed to parse synctex file.");
synctex_scanner_free(scanner); synctex_scanner_free(scanner);
@ -41,7 +49,7 @@ synctex_get_input_line_column(const char* filename, unsigned int page, int x, in
if (synctex_edit_query(scanner, page + 1u, x, y) > 0) { if (synctex_edit_query(scanner, page + 1u, x, y) > 0) {
/* Assume that a backward search returns at most one result. */ /* Assume that a backward search returns at most one result. */
synctex_node_t node = synctex_next_result(scanner); synctex_node_p node = synctex_scanner_next_result(scanner);
if (node != NULL) { if (node != NULL) {
if (input_file != NULL) { if (input_file != NULL) {
*input_file = g_strdup(synctex_scanner_get_name(scanner, synctex_node_tag(node))); *input_file = g_strdup(synctex_scanner_get_name(scanner, synctex_node_tag(node)));
@ -127,13 +135,13 @@ synctex_rectangles_from_position(const char* filename, const char* input_file,
++line; ++line;
++column; ++column;
synctex_scanner_t scanner = synctex_scanner_new_with_output_file(filename, NULL, 1); synctex_scanner_p scanner = synctex_scanner_new_with_output_file(filename, NULL, 1);
if (scanner == NULL) { if (scanner == NULL) {
girara_debug("Failed to create synctex scanner."); girara_debug("Failed to create synctex scanner.");
return NULL; return NULL;
} }
synctex_scanner_t temp = synctex_scanner_parse(scanner); synctex_scanner_p temp = synctex_scanner_parse(scanner);
if (temp == NULL) { if (temp == NULL) {
girara_debug("Failed to parse synctex file."); girara_debug("Failed to parse synctex file.");
synctex_scanner_free(scanner); synctex_scanner_free(scanner);
@ -143,11 +151,11 @@ synctex_rectangles_from_position(const char* filename, const char* input_file,
girara_list_t* hitlist = girara_list_new2(g_free); girara_list_t* hitlist = girara_list_new2(g_free);
girara_list_t* other_rects = girara_list_new2(g_free); girara_list_t* other_rects = girara_list_new2(g_free);
if (synctex_display_query(scanner, input_file, line, column) > 0) { if (synctex_display_query(scanner, input_file, line, column, -1) > 0) {
synctex_node_t node = NULL; synctex_node_p node = NULL;
bool got_page = false; bool got_page = false;
while ((node = synctex_next_result (scanner)) != NULL) { while ((node = synctex_scanner_next_result(scanner)) != NULL) {
const unsigned int current_page = synctex_node_page(node) - 1; const unsigned int current_page = synctex_node_page(node) - 1;
if (got_page == false) { if (got_page == false) {
got_page = true; got_page = true;
@ -314,7 +322,7 @@ synctex_highlight_rects(zathura_t* zathura, unsigned int page,
} }
/* move to position */ /* move to position */
girara_debug("Jumping to page %u position (%f, %f).", page, pos_x, pos_y); girara_debug("Jumping to page %u position (%0.2f, %0.2f).", page, pos_x, pos_y);
zathura_jumplist_add(zathura); zathura_jumplist_add(zathura);
position_set(zathura, pos_x, pos_y); position_set(zathura, pos_x, pos_y);
zathura_jumplist_add(zathura); zathura_jumplist_add(zathura);

View file

@ -63,6 +63,13 @@ file_valid_extension(zathura_t* zathura, const char* path)
return (plugin == NULL) ? false : true; return (plugin == NULL) ? false : true;
} }
static void
index_element_free(void* data, GObject* UNUSED(object))
{
zathura_index_element_t* element = data;
zathura_index_element_free(element);
}
void void
document_index_build(GtkTreeModel* model, GtkTreeIter* parent, document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
girara_tree_node_t* tree) girara_tree_node_t* tree)
@ -70,7 +77,7 @@ document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
girara_list_t* list = girara_node_get_children(tree); girara_list_t* list = girara_node_get_children(tree);
GIRARA_LIST_FOREACH_BODY(list, girara_tree_node_t*, node, GIRARA_LIST_FOREACH_BODY(list, girara_tree_node_t*, node,
zathura_index_element_t* index_element = (zathura_index_element_t*)girara_node_get_data(node); zathura_index_element_t* index_element = girara_node_get_data(node);
zathura_link_type_t type = zathura_link_get_type(index_element->link); zathura_link_type_t type = zathura_link_get_type(index_element->link);
zathura_link_target_t target = zathura_link_get_target(index_element->link); zathura_link_target_t target = zathura_link_get_target(index_element->link);
@ -87,7 +94,7 @@ document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
gchar* markup = g_markup_escape_text(index_element->title, -1); gchar* markup = g_markup_escape_text(index_element->title, -1);
gtk_tree_store_set(GTK_TREE_STORE(model), &tree_iter, 0, markup, 1, description, 2, index_element, -1); gtk_tree_store_set(GTK_TREE_STORE(model), &tree_iter, 0, markup, 1, description, 2, index_element, -1);
g_free(markup); g_free(markup);
g_object_weak_ref(G_OBJECT(model), (GWeakNotify) zathura_index_element_free, index_element); g_object_weak_ref(G_OBJECT(model), index_element_free, index_element);
g_free(description); g_free(description);
if (girara_node_get_num_children(node) > 0) { if (girara_node_get_num_children(node) > 0) {

View file

@ -163,7 +163,7 @@ zathura_update_view_ppi(zathura_t* zathura)
} }
/* physical width of monitor */ /* physical width of monitor */
int width_mm = gdk_monitor_get_width_mm(monitor); const int width_mm = gdk_monitor_get_width_mm(monitor);
/* size of monitor in pixels */ /* size of monitor in pixels */
GdkRectangle monitor_geom; GdkRectangle monitor_geom;
@ -184,7 +184,7 @@ zathura_update_view_ppi(zathura_t* zathura)
{ {
/* not using the cached value for the scale factor here to avoid issues /* not using the cached value for the scale factor here to avoid issues
* if this function is called before the cached value is updated */ * if this function is called before the cached value is updated */
int device_factor = gtk_widget_get_scale_factor(zathura->ui.session->gtk.view); const int device_factor = gtk_widget_get_scale_factor(zathura->ui.session->gtk.view);
girara_debug("on Wayland, correcting PPI for device scale factor = %d", device_factor); girara_debug("on Wayland, correcting PPI for device scale factor = %d", device_factor);
if (device_factor != 0) { if (device_factor != 0) {
ppi /= device_factor; ppi /= device_factor;
@ -192,9 +192,9 @@ zathura_update_view_ppi(zathura_t* zathura)
} }
#endif #endif
double current_ppi = zathura_document_get_viewport_ppi(zathura->document); const double current_ppi = zathura_document_get_viewport_ppi(zathura->document);
if (fabs(ppi - current_ppi) > DBL_EPSILON) { if (fabs(ppi - current_ppi) > DBL_EPSILON) {
girara_debug("monitor width: %d mm, pixels: %d, ppi: %f", width_mm, monitor_geom.width, ppi); girara_debug("monitor width: %d mm, pixels: %d, ppi: %0.2f", width_mm, monitor_geom.width, ppi);
zathura_document_set_viewport_ppi(zathura->document, ppi); zathura_document_set_viewport_ppi(zathura->document, ppi);
render_all(zathura); render_all(zathura);
refresh_view(zathura); refresh_view(zathura);