diff --git a/callbacks.c b/callbacks.c index e027b6b..eb4f0d5 100644 --- a/callbacks.c +++ b/callbacks.c @@ -78,3 +78,15 @@ cb_view_vadjustment_value_changed(GtkAdjustment *adjustment, gpointer data) free(offset); } } + +void +cb_pages_per_row_value_changed(girara_session_t* session, girara_setting_t* setting) +{ + int pages_per_row = setting->value.i; + zathura_t* zathura = setting->data; + + if (pages_per_row < 1) + pages_per_row = 1; + + page_view_set_mode(zathura, pages_per_row); +} diff --git a/callbacks.h b/callbacks.h index 8743be1..1d960c6 100644 --- a/callbacks.h +++ b/callbacks.h @@ -23,12 +23,20 @@ gboolean cb_destroy(GtkWidget* widget, gpointer data); void buffer_changed(girara_session_t* session); /** - * This function gets called when the the value of the vertical scrollbars + * This function gets called when the value of the vertical scrollbars * changes (e.g.: by scrolling, moving to another page) * * @param adjustment The vadjustment of the page view * @param data NULL */ void cb_view_vadjustment_value_changed(GtkAdjustment *adjustment, gpointer data); +/** + * This function gets called when the value of the "pages-per-row" + * variable changes + * + * @param session The current girara session + * @param setting The "pages-per-row" setting + */ +void cb_pages_per_row_value_changed(girara_session_t* session, girara_setting_t* setting); #endif // CALLBACKS_H diff --git a/config.c b/config.c index bf5bf99..96a9371 100644 --- a/config.c +++ b/config.c @@ -3,6 +3,7 @@ #include "config.h" #include "commands.h" #include "completion.h" +#include "callbacks.h" #include "shortcuts.h" #include "zathura.h" @@ -32,16 +33,16 @@ config_load_default(zathura_t* zathura) /* zathura settings */ int_value = 10; - girara_setting_add(gsession, "zoom-step", &int_value, INT, false, "Zoom step", NULL); + girara_setting_add(gsession, "zoom-step", &int_value, INT, false, "Zoom step", NULL, NULL); int_value = 1; - girara_setting_add(gsession, "page-padding", &int_value, INT, true, "Padding between pages", NULL); + girara_setting_add(gsession, "page-padding", &int_value, INT, true, "Padding between pages", NULL, NULL); int_value = 2; - girara_setting_add(gsession, "pages-per-row", &int_value, INT, false, "Number of pages per row", NULL); + girara_setting_add(gsession, "pages-per-row", &int_value, INT, false, "Number of pages per row", cb_pages_per_row_value_changed, zathura); string_value = "#FFFFFF"; - girara_setting_add(gsession, "recolor-dark-color", string_value, STRING, false, "Recoloring (dark color)", NULL); + girara_setting_add(gsession, "recolor-dark-color", string_value, STRING, false, "Recoloring (dark color)", NULL, NULL); string_value = "#000000"; - girara_setting_add(gsession, "recolor-light-color", string_value, STRING, false, "Recoloring (light color)", NULL); + girara_setting_add(gsession, "recolor-light-color", string_value, STRING, false, "Recoloring (light color)", NULL, NULL); /* define default shortcuts */ girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_c, NULL, sc_abort, 0, 0, NULL); diff --git a/zathura.c b/zathura.c index b8562b9..5b0bf1a 100644 --- a/zathura.c +++ b/zathura.c @@ -378,11 +378,24 @@ statusbar_page_number_update(zathura_t* zathura) void page_view_set_mode(zathura_t* zathura, unsigned int pages_per_row) { + GList* child; + /* show at least one page */ if (pages_per_row == 0) { pages_per_row = 1; } + if (zathura->document == NULL) { + return; + } + + child = gtk_container_get_children(GTK_CONTAINER(zathura->ui.page_view)); + while (child) { + g_object_ref(G_OBJECT(child->data)); + gtk_container_remove(GTK_CONTAINER(zathura->ui.page_view), GTK_WIDGET(child->data)); + child = g_list_next(child); + } + gtk_table_resize(GTK_TABLE(zathura->ui.page_view), zathura->document->number_of_pages / pages_per_row + 1, pages_per_row); for (unsigned int i = 0; i < zathura->document->number_of_pages; i++) {