From 0d93bfb570c139387766775ddf67f7218c581be3 Mon Sep 17 00:00:00 2001 From: Moritz Lipp Date: Tue, 15 Jun 2010 10:17:38 +0200 Subject: [PATCH] Update sc_reload behaviour --- zathura.c | 209 +++++++++++++++++++++++++----------------------------- 1 file changed, 98 insertions(+), 111 deletions(-) diff --git a/zathura.c b/zathura.c index c786167..3a11000 100644 --- a/zathura.c +++ b/zathura.c @@ -228,7 +228,6 @@ struct struct { GFileMonitor* monitor; - GFile* file; } FileMonitor; struct @@ -290,6 +289,7 @@ void add_marker(int); void build_index(GtkTreeModel*, GtkTreeIter*, PopplerIndexIter*); void change_mode(int); void calculate_offset(GtkWidget*, double*, double*); +void close_file(gboolean); void enter_password(); void highlight_result(int, PopplerRectangle*); void draw(int); @@ -471,7 +471,6 @@ init_zathura() Zathura.Search.draw = FALSE; Zathura.FileMonitor.monitor = NULL; - Zathura.FileMonitor.file = NULL; /* UI */ Zathura.UI.window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); @@ -822,6 +821,96 @@ calculate_offset(GtkWidget* widget, double* offset_x, double* offset_y) *offset_y = 0; } +void +close_file(gboolean keep_monitor) +{ + if(!Zathura.PDF.document) + return; + + /* clean up pages */ + int i; + for(i = 0; i < Zathura.PDF.number_of_pages; i++) + { + Page* current_page = Zathura.PDF.pages[i]; + g_object_unref(current_page->page); + } + + /* save bookmarks */ + if(Zathura.Bookmarks.data) + { + /* set current page */ + g_key_file_set_integer(Zathura.Bookmarks.data, Zathura.PDF.file, + BM_PAGE_ENTRY, Zathura.PDF.page_number); + + /* set page offset */ + g_key_file_set_integer(Zathura.Bookmarks.data, Zathura.PDF.file, + BM_PAGE_OFFSET, Zathura.PDF.page_offset); + + /* save bookmarks */ + int i; + for(i = 0; i < Zathura.Bookmarks.number_of_bookmarks; i++) + g_key_file_set_integer(Zathura.Bookmarks.data, Zathura.PDF.file, + Zathura.Bookmarks.bookmarks[i].id, Zathura.Bookmarks.bookmarks[i].page); + + /* convert file and save it */ + gchar* bookmarks = g_key_file_to_data(Zathura.Bookmarks.data, NULL, NULL); + g_file_set_contents(Zathura.Bookmarks.file, bookmarks, -1, NULL); + g_free(bookmarks); + } + + /* inotify */ + if(!keep_monitor) + { + g_object_unref(Zathura.FileMonitor.monitor); + Zathura.FileMonitor.monitor = NULL; + } + + /* reset values */ + free(Zathura.PDF.pages); + g_object_unref(Zathura.PDF.document); + g_free(Zathura.State.pages); + gtk_window_set_title(Zathura.UI.window, "zathura"); + + Zathura.State.pages = g_strdup_printf(""); + Zathura.State.filename = (char*) DEFAULT_TEXT; + + g_static_mutex_lock(&(Zathura.Lock.pdf_obj_lock)); + Zathura.PDF.document = NULL; + if(!keep_monitor) + { + Zathura.PDF.file = NULL; + Zathura.PDF.password = NULL; + Zathura.PDF.page_number = 0; + Zathura.PDF.scale = 0; + Zathura.PDF.rotate = 0; + } + Zathura.PDF.number_of_pages = 0; + Zathura.PDF.page_offset = 0; + g_static_mutex_unlock(&(Zathura.Lock.pdf_obj_lock)); + + /* destroy index */ + if(Zathura.UI.index) + { + gtk_widget_destroy(Zathura.UI.index); + Zathura.UI.index = NULL; + } + + /* destroy information */ + if(Zathura.UI.information) + { + gtk_widget_destroy(Zathura.UI.information); + Zathura.UI.information = NULL; + } + + /* free markers */ + if(Zathura.Marker.markers) + free(Zathura.Marker.markers); + Zathura.Marker.number_of_markers = 0; + Zathura.Marker.last = -1; + + update_status(); +} + void enter_password() { @@ -937,7 +1026,7 @@ open_file(char* path, char* password) /* close old file */ g_static_mutex_unlock(&(Zathura.Lock.pdf_obj_lock)); - cmd_close(-1, NULL); + close_file(FALSE); g_static_mutex_lock(&(Zathura.Lock.pdf_obj_lock)); /* format path */ @@ -985,7 +1074,7 @@ open_file(char* path, char* password) Zathura.PDF.password = password; /* inotify */ - if(!Zathura.FileMonitor.monitor || !Zathura.FileMonitor.file) + if(!Zathura.FileMonitor.monitor) { GFile* file = g_file_new_for_uri(file_uri); @@ -1077,6 +1166,7 @@ open_file(char* path, char* password) update_status(); g_static_mutex_unlock(&(Zathura.Lock.pdf_obj_lock)); + isc_abort(NULL); return TRUE; } @@ -1551,27 +1641,7 @@ sc_recolor(Argument* argument) void sc_reload(Argument* argument) { - if(!Zathura.PDF.document) - return; - - /* check if file is damaged */ - char* file_uri = g_filename_to_uri(Zathura.PDF.file, NULL, NULL); - if(file_uri) - { - g_static_mutex_lock(&(Zathura.Lock.pdf_obj_lock)); - PopplerDocument* temporary_document = NULL; - if(!(temporary_document = poppler_document_new_from_file(file_uri, Zathura.PDF.password, NULL))) - { - g_static_mutex_unlock(&(Zathura.Lock.pdf_obj_lock)); - g_free(file_uri); - return; - } - g_static_mutex_unlock(&(Zathura.Lock.pdf_obj_lock)); - } - else - return; - - g_free(file_uri); + draw(Zathura.PDF.page_number); /* save old information */ g_static_mutex_lock(&(Zathura.Lock.pdf_obj_lock)); @@ -1583,7 +1653,7 @@ sc_reload(Argument* argument) g_static_mutex_unlock(&(Zathura.Lock.pdf_obj_lock)); /* reopen and restore settings */ - cmd_close(0, NULL); + close_file(TRUE); open_file(path, password); Zathura.PDF.scale = scale; @@ -2323,90 +2393,7 @@ cmd_open_bookmark(int argc, char** argv) gboolean cmd_close(int argc, char** argv) { - if(!Zathura.PDF.document) - { - if(argc != -1) - notify(ERROR, "No file has been opened"); - return FALSE; - } - - /* clean up pages */ - int i; - for(i = 0; i < Zathura.PDF.number_of_pages; i++) - { - Page* current_page = Zathura.PDF.pages[i]; - g_object_unref(current_page->page); - } - - /* save bookmarks */ - if(Zathura.Bookmarks.data) - { - /* set current page */ - g_key_file_set_integer(Zathura.Bookmarks.data, Zathura.PDF.file, - BM_PAGE_ENTRY, Zathura.PDF.page_number); - - /* set page offset */ - g_key_file_set_integer(Zathura.Bookmarks.data, Zathura.PDF.file, - BM_PAGE_OFFSET, Zathura.PDF.page_offset); - - /* save bookmarks */ - int i; - for(i = 0; i < Zathura.Bookmarks.number_of_bookmarks; i++) - g_key_file_set_integer(Zathura.Bookmarks.data, Zathura.PDF.file, - Zathura.Bookmarks.bookmarks[i].id, Zathura.Bookmarks.bookmarks[i].page); - - /* convert file and save it */ - gchar* bookmarks = g_key_file_to_data(Zathura.Bookmarks.data, NULL, NULL); - g_file_set_contents(Zathura.Bookmarks.file, bookmarks, -1, NULL); - g_free(bookmarks); - } - - /* inotify */ - g_object_unref(Zathura.FileMonitor.monitor); - Zathura.FileMonitor.monitor = NULL; - - /* reset values */ - free(Zathura.PDF.pages); - g_object_unref(Zathura.PDF.document); - g_free(Zathura.State.pages); - gtk_window_set_title(Zathura.UI.window, "zathura"); - - Zathura.State.pages = g_strdup_printf(""); - Zathura.State.filename = (char*) DEFAULT_TEXT; - - g_static_mutex_lock(&(Zathura.Lock.pdf_obj_lock)); - Zathura.PDF.document = NULL; - Zathura.PDF.file = NULL; - Zathura.PDF.password = NULL; - Zathura.PDF.page_number = 0; - Zathura.PDF.number_of_pages = 0; - Zathura.PDF.scale = 0; - Zathura.PDF.rotate = 0; - Zathura.PDF.page_offset = 0; - g_static_mutex_unlock(&(Zathura.Lock.pdf_obj_lock)); - - /* destroy index */ - if(Zathura.UI.index) - { - gtk_widget_destroy(Zathura.UI.index); - Zathura.UI.index = NULL; - } - - /* destroy information */ - if(Zathura.UI.information) - { - gtk_widget_destroy(Zathura.UI.information); - Zathura.UI.information = NULL; - } - - /* free markers */ - if(Zathura.Marker.markers) - free(Zathura.Marker.markers); - Zathura.Marker.number_of_markers = 0; - Zathura.Marker.last = -1; - - update_status(); - + close_file(FALSE); return TRUE; } @@ -3174,7 +3161,7 @@ cb_destroy(GtkWidget* widget, gpointer data) pango_font_description_free(Zathura.Style.font); if(Zathura.PDF.document) - cmd_close(0, NULL); + close_file(FALSE); /* clean up other variables */ g_free(Zathura.Bookmarks.file);