diff --git a/callbacks.c b/callbacks.c index 3487134..3452466 100644 --- a/callbacks.c +++ b/callbacks.c @@ -97,18 +97,25 @@ cb_view_vadjustment_value_changed(GtkAdjustment* GIRARA_UNUSED(adjustment), gpoi } void -cb_pages_per_row_value_changed(girara_session_t* UNUSED(session), const char* UNUSED(name), girara_setting_type_t UNUSED(type), void* value, void* data) +cb_pages_per_row_value_changed(girara_session_t* session, const char* UNUSED(name), girara_setting_type_t UNUSED(type), void* value, void* UNUSED(data)) { g_return_if_fail(value != NULL); + g_return_if_fail(session != NULL); + g_return_if_fail(session->global.data != NULL); + zathura_t* zathura = session->global.data; int pages_per_row = *(int*) value; - zathura_t* zathura = data; if (pages_per_row < 1) { pages_per_row = 1; } page_widget_set_mode(zathura, pages_per_row); + + if (zathura->document != NULL) { + unsigned int current_page = zathura->document->current_page_number; + page_set_delayed(zathura, current_page); + } } void @@ -281,3 +288,16 @@ error_ret: return false; } + +bool +cb_view_resized(GtkWidget* UNUSED(widget), GtkAllocation* UNUSED(allocation), zathura_t* zathura) +{ + if (zathura == NULL || zathura->document == NULL) { + return false; + } + + girara_argument_t argument = { zathura->document->adjust_mode, NULL }; + sc_adjust_window(zathura->ui.session, &argument, NULL, 0); + + return true; +} diff --git a/callbacks.h b/callbacks.h index ce08397..19630d1 100644 --- a/callbacks.h +++ b/callbacks.h @@ -87,4 +87,14 @@ void cb_file_monitor(GFileMonitor* monitor, GFile* file, GFile* other_file, */ bool cb_password_dialog(GtkEntry* entry, zathura_password_dialog_info_t* dialog); +/** + * Emitted when the view has been resized + * + * @param widget View + * @param allocation Allocation + * @param zathura Zathura session + * @return true if signal has been handled successfully + */ +bool cb_view_resized(GtkWidget* widget, GtkAllocation* allocation, zathura_t* zathura); + #endif // CALLBACKS_H diff --git a/commands.c b/commands.c index 7455326..8816b4c 100644 --- a/commands.c +++ b/commands.c @@ -332,14 +332,20 @@ cmd_export(girara_session_t* session, girara_list_t* argument_list) } const char* attachment_name = girara_list_nth(argument_list, 0); - const char* file_name = girara_list_nth(argument_list, 1); + const char* file_name = girara_list_nth(argument_list, 1); + + if (file_name == NULL || attachment_name == NULL) { + return false; + } char* file_name2 = girara_fix_path(file_name); - if (!zathura_document_attachment_save(zathura->document, attachment_name, file_name)) { + + if (zathura_document_attachment_save(zathura->document, attachment_name, file_name) == false) { girara_notify(session, GIRARA_ERROR, "Couldn't write attachment '%s' to '%s'.", attachment_name, file_name); } else { girara_notify(session, GIRARA_INFO, "Wrote attachment '%s' to '%s'.", attachment_name, file_name2); } g_free(file_name2); + return true; } diff --git a/config.c b/config.c index 9d7adff..3be28b2 100644 --- a/config.c +++ b/config.c @@ -12,6 +12,7 @@ #include #include #include +#include void config_load_default(zathura_t* zathura) @@ -45,9 +46,13 @@ config_load_default(zathura_t* zathura) int_value = 1; girara_setting_add(gsession, "page-padding", &int_value, INT, true, "Padding between pages", NULL, NULL); int_value = 1; - girara_setting_add(gsession, "pages-per-row", &int_value, INT, false, "Number of pages per row", cb_pages_per_row_value_changed, zathura); + girara_setting_add(gsession, "pages-per-row", &int_value, INT, false, "Number of pages per row", cb_pages_per_row_value_changed, NULL); float_value = 40; girara_setting_add(gsession, "scroll-step", &float_value, FLOAT, false, "Scroll step", NULL, NULL); + int_value = 10; + girara_setting_add(gsession, "zoom-min", &int_value, INT, false, "Zoom minimum", NULL, NULL); + int_value = 1000; + girara_setting_add(gsession, "zoom-max", &int_value, INT, false, "Zoom maximum", NULL, NULL); string_value = "#FFFFFF"; girara_setting_add(gsession, "recolor-darkcolor", string_value, STRING, false, "Recoloring (dark color)", NULL, NULL); @@ -55,85 +60,87 @@ config_load_default(zathura_t* zathura) girara_setting_add(gsession, "recolor-lightcolor", string_value, STRING, false, "Recoloring (light color)", NULL, NULL); string_value = "#9FBC00"; - girara_setting_add(gsession, "highlight-color", string_value, STRING, false, "Color for highlighting", NULL, NULL); + girara_setting_add(gsession, "highlight-color", string_value, STRING, false, "Color for highlighting", NULL, NULL); float_value = 0.5; - girara_setting_add(gsession, "highlight-transparency", &float_value, FLOAT, false, "Transparency for highlighting", NULL, NULL); + girara_setting_add(gsession, "highlight-transparency", &float_value, FLOAT, false, "Transparency for highlighting", NULL, NULL); bool_value = true; girara_setting_add(gsession, "render-loading", &bool_value, BOOLEAN, false, "Render 'Loading ...'", NULL, NULL); + string_value = "best-fit"; + girara_setting_add(gsession, "adjust-open", string_value, STRING, false, "Adjust to when opening file", NULL, NULL); /* define default shortcuts */ - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_c, NULL, sc_abort, 0, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_Escape, NULL, sc_abort, 0, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_a, NULL, sc_adjust_window, NORMAL, ADJUST_BESTFIT, NULL); - girara_shortcut_add(gsession, 0, GDK_s, NULL, sc_adjust_window, NORMAL, ADJUST_WIDTH, NULL); - girara_shortcut_add(gsession, 0, GDK_i, NULL, sc_change_mode, NORMAL, INSERT, NULL); - girara_shortcut_add(gsession, 0, GDK_m, NULL, sc_change_mode, NORMAL, ADD_MARKER, NULL); - girara_shortcut_add(gsession, 0, GDK_apostrophe, NULL, sc_change_mode, NORMAL, EVAL_MARKER, NULL); - girara_shortcut_add(gsession, 0, GDK_slash, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("/")); - girara_shortcut_add(gsession, GDK_SHIFT_MASK, GDK_slash, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("/")); - girara_shortcut_add(gsession, 0, GDK_question, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("?")); - girara_shortcut_add(gsession, 0, GDK_colon, NULL, girara_sc_focus_inputbar, NORMAL, 0, &(":")); - girara_shortcut_add(gsession, 0, GDK_o, NULL, girara_sc_focus_inputbar, NORMAL, 0, &(":open ")); - girara_shortcut_add(gsession, 0, GDK_O, NULL, girara_sc_focus_inputbar, NORMAL, APPEND_FILEPATH, &(":open ")); - girara_shortcut_add(gsession, 0, GDK_f, NULL, sc_follow, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, 0, "gg", sc_goto, NORMAL, TOP, NULL); - girara_shortcut_add(gsession, 0, 0, "gg", sc_goto, FULLSCREEN, TOP, NULL); - girara_shortcut_add(gsession, 0, 0, "G", sc_goto, NORMAL, BOTTOM, NULL); - girara_shortcut_add(gsession, 0, 0, "G", sc_goto, FULLSCREEN, BOTTOM, NULL); - girara_shortcut_add(gsession, 0, GDK_J, NULL, sc_navigate, NORMAL, NEXT, NULL); - girara_shortcut_add(gsession, 0, GDK_K, NULL, sc_navigate, NORMAL, PREVIOUS, NULL); - girara_shortcut_add(gsession, GDK_MOD1_MASK, GDK_Right, NULL, sc_navigate, NORMAL, NEXT, NULL); - girara_shortcut_add(gsession, GDK_MOD1_MASK, GDK_Left, NULL, sc_navigate, NORMAL, PREVIOUS, NULL); - girara_shortcut_add(gsession, 0, GDK_Left, NULL, sc_navigate, FULLSCREEN, PREVIOUS, NULL); - girara_shortcut_add(gsession, 0, GDK_Up, NULL, sc_navigate, FULLSCREEN, PREVIOUS, NULL); - girara_shortcut_add(gsession, 0, GDK_Down, NULL, sc_navigate, FULLSCREEN, NEXT, NULL); - girara_shortcut_add(gsession, 0, GDK_Right, NULL, sc_navigate, FULLSCREEN, NEXT, NULL); - girara_shortcut_add(gsession, 0, GDK_k, NULL, sc_navigate_index, INDEX, UP, NULL); - girara_shortcut_add(gsession, 0, GDK_j, NULL, sc_navigate_index, INDEX, DOWN, NULL); - girara_shortcut_add(gsession, 0, GDK_h, NULL, sc_navigate_index, INDEX, COLLAPSE, NULL); - girara_shortcut_add(gsession, 0, GDK_l, NULL, sc_navigate_index, INDEX, EXPAND, NULL); - girara_shortcut_add(gsession, 0, GDK_space, NULL, sc_navigate_index, INDEX, SELECT, NULL); - girara_shortcut_add(gsession, 0, GDK_Return, NULL, sc_navigate_index, INDEX, SELECT, NULL); - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_i, NULL, sc_recolor, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_R, NULL, sc_reload, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_r, NULL, sc_rotate, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_h, NULL, sc_scroll, NORMAL, LEFT, NULL); - girara_shortcut_add(gsession, 0, GDK_j, NULL, sc_scroll, NORMAL, DOWN, NULL); - girara_shortcut_add(gsession, 0, GDK_k, NULL, sc_scroll, NORMAL, UP, NULL); - girara_shortcut_add(gsession, 0, GDK_l, NULL, sc_scroll, NORMAL, RIGHT, NULL); - girara_shortcut_add(gsession, 0, GDK_Left, NULL, sc_scroll, NORMAL, LEFT, NULL); - girara_shortcut_add(gsession, 0, GDK_Up, NULL, sc_scroll, NORMAL, UP, NULL); - girara_shortcut_add(gsession, 0, GDK_Down, NULL, sc_scroll, NORMAL, DOWN, NULL); - girara_shortcut_add(gsession, 0, GDK_Right, NULL, sc_scroll, NORMAL, RIGHT, NULL); - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_d, NULL, sc_scroll, NORMAL, HALF_DOWN, NULL); - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_u, NULL, sc_scroll, NORMAL, HALF_UP, NULL); - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_f, NULL, sc_scroll, NORMAL, FULL_DOWN, NULL); - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_b, NULL, sc_scroll, NORMAL, FULL_UP, NULL); - girara_shortcut_add(gsession, 0, GDK_space, NULL, sc_scroll, NORMAL, FULL_DOWN, NULL); - girara_shortcut_add(gsession, GDK_SHIFT_MASK, GDK_space, NULL, sc_scroll, NORMAL, FULL_UP, NULL); - girara_shortcut_add(gsession, 0, GDK_n, NULL, sc_search, NORMAL, FORWARD, NULL); - girara_shortcut_add(gsession, 0, GDK_N, NULL, sc_search, NORMAL, BACKWARD, NULL); - girara_shortcut_add(gsession, 0, GDK_Tab, NULL, sc_toggle_index, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_Tab, NULL, sc_toggle_index, INDEX, 0, NULL); - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_m, NULL, girara_sc_toggle_inputbar, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_F5, NULL, sc_toggle_fullscreen, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_F5, NULL, sc_toggle_fullscreen, FULLSCREEN, 0, NULL); - girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_n, NULL, girara_sc_toggle_statusbar, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_q, NULL, sc_quit, NORMAL, 0, NULL); - girara_shortcut_add(gsession, 0, GDK_plus, NULL, sc_zoom, NORMAL, ZOOM_IN, NULL); - girara_shortcut_add(gsession, 0, GDK_plus, NULL, sc_zoom, FULLSCREEN, ZOOM_IN, NULL); - girara_shortcut_add(gsession, 0, GDK_minus, NULL, sc_zoom, NORMAL, ZOOM_OUT, NULL); - girara_shortcut_add(gsession, 0, GDK_minus, NULL, sc_zoom, FULLSCREEN, ZOOM_OUT, NULL); - girara_shortcut_add(gsession, 0, GDK_equal, NULL, sc_zoom, NORMAL, ZOOM_ORIGINAL, NULL); - girara_shortcut_add(gsession, 0, GDK_equal, NULL, sc_zoom, FULLSCREEN, ZOOM_ORIGINAL, NULL); - girara_shortcut_add(gsession, 0, 0, "zI", sc_zoom, NORMAL, ZOOM_IN, NULL); - girara_shortcut_add(gsession, 0, 0, "zI", sc_zoom, FULLSCREEN, ZOOM_IN, NULL); - girara_shortcut_add(gsession, 0, 0, "zO", sc_zoom, NORMAL, ZOOM_OUT, NULL); - girara_shortcut_add(gsession, 0, 0, "zO", sc_zoom, FULLSCREEN, ZOOM_OUT, NULL); - girara_shortcut_add(gsession, 0, 0, "z0", sc_zoom, NORMAL, ZOOM_ORIGINAL, NULL); - girara_shortcut_add(gsession, 0, 0, "z0", sc_zoom, FULLSCREEN, ZOOM_ORIGINAL, NULL); - girara_shortcut_add(gsession, 0, GDK_equal, NULL, sc_zoom, NORMAL, ZOOM_SPECIFIC, NULL); - girara_shortcut_add(gsession, 0, GDK_equal, NULL, sc_zoom, FULLSCREEN, ZOOM_SPECIFIC, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_c, NULL, sc_abort, 0, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Escape, NULL, sc_abort, 0, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_a, NULL, sc_adjust_window, NORMAL, ADJUST_BESTFIT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_s, NULL, sc_adjust_window, NORMAL, ADJUST_WIDTH, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_i, NULL, sc_change_mode, NORMAL, INSERT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_m, NULL, sc_change_mode, NORMAL, ADD_MARKER, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_apostrophe, NULL, sc_change_mode, NORMAL, EVAL_MARKER, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_slash, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("/")); + girara_shortcut_add(gsession, GDK_SHIFT_MASK, GDK_KEY_slash, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("/")); + girara_shortcut_add(gsession, 0, GDK_KEY_question, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("?")); + girara_shortcut_add(gsession, 0, GDK_KEY_colon, NULL, girara_sc_focus_inputbar, NORMAL, 0, &(":")); + girara_shortcut_add(gsession, 0, GDK_KEY_o, NULL, girara_sc_focus_inputbar, NORMAL, 0, &(":open ")); + girara_shortcut_add(gsession, 0, GDK_KEY_O, NULL, girara_sc_focus_inputbar, NORMAL, APPEND_FILEPATH, &(":open ")); + girara_shortcut_add(gsession, 0, GDK_KEY_f, NULL, sc_follow, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, 0, "gg", sc_goto, NORMAL, TOP, NULL); + girara_shortcut_add(gsession, 0, 0, "gg", sc_goto, FULLSCREEN, TOP, NULL); + girara_shortcut_add(gsession, 0, 0, "G", sc_goto, NORMAL, BOTTOM, NULL); + girara_shortcut_add(gsession, 0, 0, "G", sc_goto, FULLSCREEN, BOTTOM, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_J, NULL, sc_navigate, NORMAL, NEXT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_K, NULL, sc_navigate, NORMAL, PREVIOUS, NULL); + girara_shortcut_add(gsession, GDK_MOD1_MASK, GDK_KEY_Right, NULL, sc_navigate, NORMAL, NEXT, NULL); + girara_shortcut_add(gsession, GDK_MOD1_MASK, GDK_KEY_Left, NULL, sc_navigate, NORMAL, PREVIOUS, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Left, NULL, sc_navigate, FULLSCREEN, PREVIOUS, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Up, NULL, sc_navigate, FULLSCREEN, PREVIOUS, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Down, NULL, sc_navigate, FULLSCREEN, NEXT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Right, NULL, sc_navigate, FULLSCREEN, NEXT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_k, NULL, sc_navigate_index, INDEX, UP, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_j, NULL, sc_navigate_index, INDEX, DOWN, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_h, NULL, sc_navigate_index, INDEX, COLLAPSE, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_l, NULL, sc_navigate_index, INDEX, EXPAND, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_space, NULL, sc_navigate_index, INDEX, SELECT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Return, NULL, sc_navigate_index, INDEX, SELECT, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_i, NULL, sc_recolor, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_R, NULL, sc_reload, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_r, NULL, sc_rotate, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_h, NULL, sc_scroll, NORMAL, LEFT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_j, NULL, sc_scroll, NORMAL, DOWN, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_k, NULL, sc_scroll, NORMAL, UP, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_l, NULL, sc_scroll, NORMAL, RIGHT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Left, NULL, sc_scroll, NORMAL, LEFT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Up, NULL, sc_scroll, NORMAL, UP, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Down, NULL, sc_scroll, NORMAL, DOWN, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Right, NULL, sc_scroll, NORMAL, RIGHT, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_d, NULL, sc_scroll, NORMAL, HALF_DOWN, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_u, NULL, sc_scroll, NORMAL, HALF_UP, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_f, NULL, sc_scroll, NORMAL, FULL_DOWN, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_b, NULL, sc_scroll, NORMAL, FULL_UP, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_space, NULL, sc_scroll, NORMAL, FULL_DOWN, NULL); + girara_shortcut_add(gsession, GDK_SHIFT_MASK, GDK_KEY_space, NULL, sc_scroll, NORMAL, FULL_UP, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_n, NULL, sc_search, NORMAL, FORWARD, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_N, NULL, sc_search, NORMAL, BACKWARD, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Tab, NULL, sc_toggle_index, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_Tab, NULL, sc_toggle_index, INDEX, 0, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_m, NULL, girara_sc_toggle_inputbar, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_F5, NULL, sc_toggle_fullscreen, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_F5, NULL, sc_toggle_fullscreen, FULLSCREEN, 0, NULL); + girara_shortcut_add(gsession, GDK_CONTROL_MASK, GDK_KEY_n, NULL, girara_sc_toggle_statusbar, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_q, NULL, sc_quit, NORMAL, 0, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_plus, NULL, sc_zoom, NORMAL, ZOOM_IN, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_plus, NULL, sc_zoom, FULLSCREEN, ZOOM_IN, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_minus, NULL, sc_zoom, NORMAL, ZOOM_OUT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_minus, NULL, sc_zoom, FULLSCREEN, ZOOM_OUT, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_equal, NULL, sc_zoom, NORMAL, ZOOM_ORIGINAL, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_equal, NULL, sc_zoom, FULLSCREEN, ZOOM_ORIGINAL, NULL); + girara_shortcut_add(gsession, 0, 0, "zI", sc_zoom, NORMAL, ZOOM_IN, NULL); + girara_shortcut_add(gsession, 0, 0, "zI", sc_zoom, FULLSCREEN, ZOOM_IN, NULL); + girara_shortcut_add(gsession, 0, 0, "zO", sc_zoom, NORMAL, ZOOM_OUT, NULL); + girara_shortcut_add(gsession, 0, 0, "zO", sc_zoom, FULLSCREEN, ZOOM_OUT, NULL); + girara_shortcut_add(gsession, 0, 0, "z0", sc_zoom, NORMAL, ZOOM_ORIGINAL, NULL); + girara_shortcut_add(gsession, 0, 0, "z0", sc_zoom, FULLSCREEN, ZOOM_ORIGINAL, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_equal, NULL, sc_zoom, NORMAL, ZOOM_SPECIFIC, NULL); + girara_shortcut_add(gsession, 0, GDK_KEY_equal, NULL, sc_zoom, FULLSCREEN, ZOOM_SPECIFIC, NULL); /* mouse events */ girara_mouse_event_add(gsession, 0, 0, sc_mouse_scroll, NORMAL, GIRARA_EVENT_SCROLL, 0, NULL); @@ -184,10 +191,10 @@ config_load_default(zathura_t* zathura) girara_argument_mapping_add(gsession, "bottom", BOTTOM); girara_argument_mapping_add(gsession, "default", DEFAULT); girara_argument_mapping_add(gsession, "down", DOWN); - girara_argument_mapping_add(gsession, "full_down", FULL_DOWN); - girara_argument_mapping_add(gsession, "full_up", FULL_UP); - girara_argument_mapping_add(gsession, "half_down", HALF_DOWN); - girara_argument_mapping_add(gsession, "half_up", HALF_UP); + girara_argument_mapping_add(gsession, "full-down", FULL_DOWN); + girara_argument_mapping_add(gsession, "full-up", FULL_UP); + girara_argument_mapping_add(gsession, "half-down", HALF_DOWN); + girara_argument_mapping_add(gsession, "half-up", HALF_UP); girara_argument_mapping_add(gsession, "in", ZOOM_IN); girara_argument_mapping_add(gsession, "left", LEFT); girara_argument_mapping_add(gsession, "next", NEXT); @@ -197,12 +204,14 @@ config_load_default(zathura_t* zathura) girara_argument_mapping_add(gsession, "specific", ZOOM_SPECIFIC); girara_argument_mapping_add(gsession, "top", TOP); girara_argument_mapping_add(gsession, "up", UP); + girara_argument_mapping_add(gsession, "best-fit", ADJUST_BESTFIT); + girara_argument_mapping_add(gsession, "width", ADJUST_WIDTH); } void config_load_file(zathura_t* zathura, char* path) { - if (zathura == NULL) { + if (zathura == NULL || path == NULL) { return; } diff --git a/document.c b/document.c index 9b04517..e182087 100644 --- a/document.c +++ b/document.c @@ -29,6 +29,7 @@ #include #include #include +#include /** * Register document plugin @@ -345,6 +346,18 @@ zathura_document_open(zathura_t* zathura, const char* path, const char* password g_signal_connect(G_OBJECT(document->file_monitor.monitor), "changed", G_CALLBACK(cb_file_monitor), zathura->ui.session); + /* apply open adjustment */ + char* adjust_open = "best-fit"; + document->adjust_mode = ADJUST_BESTFIT; + if (girara_setting_get(zathura->ui.session, "adjust-open", &(adjust_open)) == true) { + if (g_strcmp0(adjust_open, "best-fit") == 0) { + document->adjust_mode = ADJUST_BESTFIT; + } else if (g_strcmp0(adjust_open, "width") == 0) { + document->adjust_mode = ADJUST_WIDTH; + } + g_free(adjust_open); + } + g_free(file_uri); return document; @@ -597,19 +610,19 @@ zathura_page_images_get(zathura_page_t* page, zathura_plugin_error_t* error) return page->document->functions.page_images_get(page, error); } -zathura_plugin_error_t -zathura_page_image_save(zathura_page_t* page, zathura_image_t* image, const char* file) +cairo_surface_t* +zathura_page_image_get_cairo(zathura_page_t* page, zathura_image_t* image, zathura_plugin_error_t* error) { - if (page == NULL || page->document == NULL || image == NULL || file == NULL) { + if (page == NULL || page->document == NULL || image == NULL) { return false; } - if (page->document->functions.page_image_save == NULL) { + if (page->document->functions.page_image_get_cairo == NULL) { girara_error("%s not implemented", __FUNCTION__); return false; } - return page->document->functions.page_image_save(page, image, file); + return page->document->functions.page_image_get_cairo(page, image, error); } char* zathura_page_get_text(zathura_page_t* page, zathura_rectangle_t rectangle, zathura_plugin_error_t* error) diff --git a/document.h b/document.h index 324dc66..604470b 100644 --- a/document.h +++ b/document.h @@ -211,6 +211,7 @@ struct zathura_document_s int rotate; /**< Rotation */ void* data; /**< Custom data */ zathura_t* zathura; /** Zathura object */ + int adjust_mode; /**< Adjust mode (best-fit, width) */ struct { @@ -270,9 +271,9 @@ struct zathura_document_s girara_list_t* (*page_images_get)(zathura_page_t* page, zathura_plugin_error_t* error); /** - * Save image to a file + * Get the image */ - zathura_plugin_error_t (*page_image_save)(zathura_page_t* page, zathura_image_t* image, const char* file); + cairo_surface_t* (*page_image_get_cairo)(zathura_page_t* page, zathura_image_t* image, zathura_plugin_error_t* error); /** * Get text for selection @@ -476,21 +477,21 @@ zathura_plugin_error_t zathura_page_form_fields_free(girara_list_t* list); girara_list_t* zathura_page_images_get(zathura_page_t* page, zathura_plugin_error_t* error); /** - * Save image + * Get image * * @param page Page - * @param image The image - * @param file Path to the file - * @return ZATHURA_PLUGIN_ERROR_OK when no error occured, otherwise see - * zathura_plugin_error_t + * @param image Image identifier + * @param error Set to an error value (see \ref zathura_plugin_error_t) if an + * error occured + * @return The cairo image surface or NULL if an error occured */ -zathura_plugin_error_t zathura_page_image_save(zathura_page_t* page, zathura_image_t* image, const char* file); +cairo_surface_t* zathura_page_image_get_cairo(zathura_page_t* page, zathura_image_t* image, zathura_plugin_error_t* error); /** * Get text for selection * @param page Page * @param rectangle Selection - * @error Set to an error value (see \ref zathura_plugin_error_t) if an error + * @param error Set to an error value (see \ref zathura_plugin_error_t) if an error * occured * @return The selected text (needs to be deallocated with g_free) */ diff --git a/page_widget.c b/page_widget.c index e8c7130..b0c8891 100644 --- a/page_widget.c +++ b/page_widget.c @@ -1,11 +1,13 @@ /* See LICENSE file for license and copyright information */ +#include +#include +#include + #include "page_widget.h" #include "render.h" #include "utils.h" -#include -#include -#include +#include "shortcuts.h" G_DEFINE_TYPE(ZathuraPage, zathura_page_widget, GTK_TYPE_DRAWING_AREA) @@ -389,7 +391,12 @@ redraw_rect(ZathuraPage* widget, zathura_rectangle_t* rectangle) grect.y = rectangle->y1; grect.width = rectangle->x2 - rectangle->x1; grect.height = rectangle->y2 - rectangle->y1; +#if (GTK_MAJOR_VERSION == 3) + /* gtk_widget_get_parent_window is wrong here */ + gdk_window_invalidate_rect(gtk_widget_get_parent_window(GTK_WIDGET(widget)), &grect, TRUE); +#else gdk_window_invalidate_rect(GTK_WIDGET(widget)->window, &grect, TRUE); +#endif } static void diff --git a/shortcuts.c b/shortcuts.c index 7c0dcc1..da5d386 100644 --- a/shortcuts.c +++ b/shortcuts.c @@ -56,11 +56,13 @@ sc_adjust_window(girara_session_t* session, girara_argument_t* argument, goto error_ret; } + zathura->document->adjust_mode = argument->n; + /* get window size */ - /* TODO: Get correct size of the view widget */ - gint width; - gint height; - gtk_window_get_size(GTK_WINDOW(session->gtk.window), &width, &height); + GtkAllocation allocation; + gtk_widget_get_allocation(session->gtk.view, &allocation); + gint width = allocation.width; + gint height = allocation.height; /* calculate total width and max-height */ double total_width = 0; @@ -118,7 +120,7 @@ sc_follow(girara_session_t* session, girara_argument_t* UNUSED(argument), g_return_val_if_fail(session->global.data != NULL, false); zathura_t* zathura = session->global.data; - if (zathura->document == NULL) { + if (zathura->document == NULL || zathura->ui.session == NULL) { return false; } @@ -149,7 +151,7 @@ sc_follow(girara_session_t* session, girara_argument_t* UNUSED(argument), /* ask for input */ if (show_links == true) { - girara_dialog(zathura->ui.session, "Follow link:", FALSE, NULL, (girara_callback_inputbar_activate_t) cb_sc_follow, NULL); + girara_dialog(zathura->ui.session, "Follow link:", FALSE, NULL, (girara_callback_inputbar_activate_t) cb_sc_follow, zathura->ui.session); } return false; @@ -764,6 +766,8 @@ sc_zoom(girara_session_t* session, girara_argument_t* argument, girara_event_t* g_return_val_if_fail(argument != NULL, false); g_return_val_if_fail(zathura->document != NULL, false); + zathura->document->adjust_mode = ADJUST_NONE; + /* retreive zoom step value */ int value = 1; girara_setting_get(zathura->ui.session, "zoom-step", &value); @@ -783,10 +787,18 @@ sc_zoom(girara_session_t* session, girara_argument_t* argument, girara_event_t* } /* zoom limitations */ - if (zathura->document->scale < 0.1f) { - zathura->document->scale = 0.1f; - } else if (zathura->document->scale > 10.0f) { - zathura->document->scale = 10.0f; + int zoom_min_int = 10; + int zoom_max_int = 1000; + girara_setting_get(session, "zoom-min", &zoom_min_int); + girara_setting_get(session, "zoom-max", &zoom_max_int); + + float zoom_min = zoom_min_int * 0.01f; + float zoom_max = zoom_max_int * 0.01f; + + if (zathura->document->scale < zoom_min) { + zathura->document->scale = zoom_min; + } else if (zathura->document->scale > zoom_max) { + zathura->document->scale = zoom_max; } /* keep position */ diff --git a/utils.c b/utils.c index 36c9cc1..afc88fa 100644 --- a/utils.c +++ b/utils.c @@ -7,7 +7,7 @@ #include #include #include -#include "math.h" +#include #include "utils.h" #include "zathura.h" @@ -263,7 +263,8 @@ recalc_rectangle(zathura_page_t* page, zathura_rectangle_t rectangle) void set_adjustment(GtkAdjustment* adjustment, gdouble value) { - gtk_adjustment_set_value(adjustment, MAX(adjustment->lower, MIN(adjustment->upper - adjustment->page_size, value))); + gtk_adjustment_set_value(adjustment, MAX(gtk_adjustment_get_lower(adjustment), + MIN(gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment), value))); } void diff --git a/utils.h b/utils.h index 38124ca..331ef77 100644 --- a/utils.h +++ b/utils.h @@ -74,7 +74,8 @@ void page_calculate_offset(zathura_page_t* page, page_offset_t* offset); /** * Rotate a rectangle by 0, 90, 180 or 270 degree - * @param rect the rectangle to rotate + * + * @param rectangle the rectangle to rotate * @param degree rotation degree * @param height the height of the enclosing rectangle * @param width the width of the enclosing rectangle diff --git a/zathura.c b/zathura.c index bed41be..fa16a4d 100644 --- a/zathura.c +++ b/zathura.c @@ -55,7 +55,7 @@ zathura_init(int argc, char* argv[]) g_option_context_add_main_entries(context, entries, NULL); GError* error = NULL; - if (!g_option_context_parse(context, &argc, &argv, &error)) + if (g_option_context_parse(context, &argc, &argv, &error) == false) { printf("Error parsing command line arguments: %s\n", error->message); g_option_context_free(context); @@ -86,7 +86,7 @@ zathura_init(int argc, char* argv[]) zathura->plugins.type_plugin_mapping = girara_list_new2( (girara_free_function_t)zathura_type_plugin_mapping_free); - if (config_dir) { + if (config_dir != NULL) { zathura->config.config_dir = g_strdup(config_dir); } else { gchar* path = girara_get_xdg_path(XDG_CONFIG); @@ -94,7 +94,7 @@ zathura_init(int argc, char* argv[]) g_free(path); } - if (data_dir) { + if (data_dir != NULL) { zathura->config.data_dir = g_strdup(config_dir); } else { gchar* path = girara_get_xdg_path(XDG_DATA); @@ -106,7 +106,7 @@ zathura_init(int argc, char* argv[]) g_mkdir_with_parents(zathura->config.config_dir, 0771); g_mkdir_with_parents(zathura->config.data_dir, 0771); - if (plugin_path) { + if (plugin_path != NULL) { girara_list_t* paths = girara_split_path_array(plugin_path); girara_list_merge(zathura->plugins.path, paths); girara_list_free(paths); @@ -172,10 +172,12 @@ zathura_init(int argc, char* argv[]) /* page view */ zathura->ui.page_widget = gtk_table_new(0, 0, TRUE); - if (!zathura->ui.page_widget) { + if (zathura->ui.page_widget == NULL) { goto error_free; } + g_signal_connect(G_OBJECT(zathura->ui.session->gtk.view), "size-allocate", G_CALLBACK(cb_view_resized), zathura); + /* callbacks */ GtkAdjustment* view_vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view)); g_signal_connect(G_OBJECT(view_vadjustment), "value-changed", G_CALLBACK(cb_view_vadjustment_value_changed), zathura); @@ -184,7 +186,7 @@ zathura_init(int argc, char* argv[]) /* page view alignment */ zathura->ui.page_widget_alignment = gtk_alignment_new(0.5, 0.5, 0, 0); - if (!zathura->ui.page_widget_alignment) { + if (zathura->ui.page_widget_alignment == NULL) { goto error_free; } gtk_container_add(GTK_CONTAINER(zathura->ui.page_widget_alignment), zathura->ui.page_widget); @@ -203,7 +205,7 @@ zathura_init(int argc, char* argv[]) } zathura->ui.statusbar.page_number = girara_statusbar_item_add(zathura->ui.session, FALSE, FALSE, FALSE, NULL); - if (!zathura->ui.statusbar.page_number) { + if (zathura->ui.statusbar.page_number == NULL) { goto error_free; } @@ -265,11 +267,11 @@ zathura_init(int argc, char* argv[]) error_free: - if (zathura->ui.page_widget) { + if (zathura->ui.page_widget != NULL) { g_object_unref(zathura->ui.page_widget); } - if (zathura->ui.page_widget_alignment) { + if (zathura->ui.page_widget_alignment != NULL) { g_object_unref(zathura->ui.page_widget_alignment); } @@ -306,7 +308,7 @@ zathura_free(zathura_t* zathura) zathura_db_free(zathura->database); /* free print settings */ - if(zathura->print.settings != NULL) { + if (zathura->print.settings != NULL) { g_object_unref(zathura->print.settings); } @@ -412,13 +414,13 @@ document_info_open(gpointer data) bool document_open(zathura_t* zathura, const char* path, const char* password) { - if (!path) { + if (path == NULL) { goto error_out; } zathura_document_t* document = zathura_document_open(zathura, path, password); - if (!document) { + if (document == NULL) { goto error_out; } @@ -434,7 +436,7 @@ document_open(zathura_t* zathura, const char* path, const char* password) /* threads */ zathura->sync.render_thread = render_init(zathura); - if (!zathura->sync.render_thread) { + if (zathura->sync.render_thread == NULL) { goto error_free; } @@ -445,7 +447,7 @@ document_open(zathura_t* zathura, const char* path, const char* password) } /* bookmarks */ - if (!zathura_bookmarks_load(zathura, zathura->document->file_path)) { + if (zathura_bookmarks_load(zathura, zathura->document->file_path) == false) { girara_warning("Failed to load bookmarks for %s.\n", zathura->document->file_path); } @@ -471,7 +473,7 @@ document_save(zathura_t* zathura, const char* path, bool overwrite) g_return_val_if_fail(path, false); gchar* file_path = girara_fix_path(path); - if (!overwrite && g_file_test(file_path, G_FILE_TEST_EXISTS)) + if ((overwrite == false) && g_file_test(file_path, G_FILE_TEST_EXISTS)) { girara_error("File already exists: %s. Use :write! to overwrite it.", file_path); g_free(file_path); @@ -486,17 +488,17 @@ document_save(zathura_t* zathura, const char* path, bool overwrite) static void remove_page_from_table(GtkWidget* page, gpointer permanent) { - if (!permanent) { + if (permanent == false) { g_object_ref(G_OBJECT(page)); } - gtk_container_remove(GTK_CONTAINER(page->parent), page); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(page)), page); } bool document_close(zathura_t* zathura) { - if (!zathura->document) { + if (zathura->document == NULL) { return false; } @@ -569,7 +571,7 @@ page_set(zathura_t* zathura, unsigned int page_id) /* render page */ zathura_page_t* page = zathura->document->pages[page_id]; - if (!page) { + if (page == NULL) { goto error_out; } diff --git a/zathurarc.5.rst b/zathurarc.5.rst index 7449e73..3717777 100644 --- a/zathurarc.5.rst +++ b/zathurarc.5.rst @@ -75,14 +75,14 @@ Defines the number of pages that are rendered next to each other in a row. * Value-type: Integer * Default value: 1 -recolor-dark-color +recolor-darkcolor ^^^^^^^^^^^^^^^^^^ Defines the color value that is used to represent dark colors in recoloring mode * Value-type: String * Default value: #FFFFFF -recolor-light-color +recolor-lightcolor ^^^^^^^^^^^^^^^^^^^ Defines the color value that is used to represent light colors in recoloring mode