X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=ps%2Fps-document.c;h=fda942b25ed36d6b0c44168b56bd421ca20f95ba;hb=317e9a2524e83504db0b328b0fba3a5edb2bb5c9;hp=0e4f3693f4e2eb3b45117439d4d2d15931fc53ec;hpb=16ebda50ec3b3ab96d9bbc3c8e8522b269ef1191;p=evince.git diff --git a/ps/ps-document.c b/ps/ps-document.c index 0e4f3693..fda942b2 100644 --- a/ps/ps-document.c +++ b/ps/ps-document.c @@ -325,12 +325,12 @@ ps_document_get_property (GObject *object, } static void -ps_document_class_init(PSDocumentClass * klass) +ps_document_class_init(PSDocumentClass *klass) { GObjectClass *object_class; object_class = (GObjectClass *) klass; - parent_class = gtk_type_class(gtk_widget_get_type()); + parent_class = g_type_class_peek_parent (klass); gs_class = klass; object_class->finalize = ps_document_finalize; @@ -389,23 +389,26 @@ ps_document_cleanup(PSDocument * gs) } static void -ps_document_finalize(GObject * object) +ps_document_finalize (GObject * object) { - PSDocument *gs; + PSDocument *gs; - g_return_if_fail(object != NULL); - g_return_if_fail(GTK_IS_GS(object)); + g_return_if_fail (object != NULL); + g_return_if_fail (GTK_IS_GS (object)); - gs = PS_DOCUMENT(object); + LOG ("Finalize"); - ps_document_cleanup(gs); + gs = PS_DOCUMENT (object); - if(gs->input_buffer) { - g_free(gs->input_buffer); - gs->input_buffer = NULL; - } + ps_document_cleanup (gs); + stop_interpreter (gs); - (*G_OBJECT_CLASS(parent_class)->finalize) (object); + if(gs->input_buffer) { + g_free(gs->input_buffer); + gs->input_buffer = NULL; + } + + (*G_OBJECT_CLASS(parent_class)->finalize) (object); } static void @@ -484,7 +487,7 @@ set_up_page(PSDocument * gs) GdkColor white = { 0, 0xFFFF, 0xFFFF, 0xFFFF }; /* pixel, r, g, b */ GdkColormap *colormap; - LOG ("Setup the page") + LOG ("Setup the page"); #ifdef HAVE_LOCALE_H char *savelocale; @@ -515,7 +518,7 @@ set_up_page(PSDocument * gs) gs->bpixmap = NULL; } - LOG ("Create our internal pixmap") + LOG ("Create our internal pixmap"); gs->bpixmap = gdk_pixmap_new(gs->pstarget, gs->width, gs->height, -1); gdk_draw_rectangle(gs->bpixmap, fill, TRUE, @@ -551,6 +554,8 @@ set_up_page(PSDocument * gs) gs->left_margin, gs->bottom_margin, gs->right_margin, gs->top_margin); + LOG ("GS property %s", buf); + #ifdef HAVE_LOCALE_H setlocale(LC_NUMERIC, savelocale); #endif @@ -715,7 +720,7 @@ start_interpreter(PSDocument * gs) int std_out[2]; /* pipe from interp stdout */ int std_err[2]; /* pipe from interp stderr */ - LOG ("Start the interpreter") + LOG ("Start the interpreter"); #define NUM_ARGS 100 #define NUM_GS_ARGS (NUM_ARGS - 20) @@ -781,6 +786,12 @@ start_interpreter(PSDocument * gs) return -1; } + gv_env = g_strdup_printf("GHOSTVIEW=%ld %ld", + gdk_x11_drawable_get_xid(gs->pstarget), + gdk_x11_drawable_get_xid(gs->bpixmap)); + + LOG ("Launching ghostview with env %s", gv_env); + gs->busy = TRUE; gs->interpreter_pid = fork(); switch (gs->interpreter_pid) { @@ -816,13 +827,8 @@ start_interpreter(PSDocument * gs) } } - gv_env = g_strdup_printf("GHOSTVIEW=%ld %ld", - gdk_x11_drawable_get_xid(gs->pstarget), - gdk_x11_drawable_get_xid(gs->bpixmap)); putenv(gv_env); - LOG ("Launching ghostview with env %s", gv_env) - /* change to directory where the input file is. This helps * with postscript-files which include other files using * a relative path */ @@ -870,7 +876,7 @@ stop_interpreter(PSDocument * gs) { if(gs->interpreter_pid > 0) { int status = 0; - LOG ("Stop the interpreter") + LOG ("Stop the interpreter"); kill(gs->interpreter_pid, SIGTERM); while((wait(&status) == -1) && (errno == EINTR)) ; gs->interpreter_pid = -1; @@ -1294,7 +1300,7 @@ document_load(PSDocument * gs, const gchar * fname) g_return_val_if_fail(gs != NULL, FALSE); g_return_val_if_fail(GTK_IS_GS(gs), FALSE); - LOG ("Load the document") + LOG ("Load the document"); /* clean up previous document */ ps_document_cleanup(gs); @@ -1402,7 +1408,7 @@ ps_document_next_page(PSDocument * gs) { XEvent event; - LOG ("Make ghostscript render next page") + LOG ("Make ghostscript render next page"); g_return_val_if_fail(gs != NULL, FALSE); g_return_val_if_fail(GTK_IS_GS(gs), FALSE); @@ -1431,38 +1437,13 @@ ps_document_next_page(PSDocument * gs) return TRUE; } -static gint -ps_document_get_current_page(PSDocument * gs) -{ - g_return_val_if_fail(gs != NULL, -1); - g_return_val_if_fail(GTK_IS_GS(gs), -1); - - return gs->current_page; -} - -static gint -ps_document_get_page_count(PSDocument * gs) -{ - if(!gs->gs_filename) - return 0; - - if(gs->doc) { - if(gs->structured_doc) - return gs->doc->numpages; - else - return G_MAXINT; - } - else - return 0; -} - static gboolean ps_document_goto_page(PSDocument * gs, gint page) { g_return_val_if_fail(gs != NULL, FALSE); g_return_val_if_fail(GTK_IS_GS(gs), FALSE); - LOG ("Go to page %d", page) + LOG ("Go to page %d", page); if(!gs->gs_filename) { return FALSE; @@ -1474,7 +1455,7 @@ ps_document_goto_page(PSDocument * gs, gint page) if(gs->structured_doc && gs->doc) { - LOG ("It's a structured document, let's send one page to gs") + LOG ("It's a structured document, let's send one page to gs"); if(page >= gs->doc->numpages) page = gs->doc->numpages - 1; @@ -1517,7 +1498,7 @@ ps_document_goto_page(PSDocument * gs, gint page) case, ggv restarts GS again and the first page is displayed. */ - LOG ("It's an unstructured document, gs will just read the file") + LOG ("It's an unstructured document, gs will just read the file"); if(page == gs->current_page && !gs->changed) return TRUE; @@ -1551,7 +1532,7 @@ ps_document_set_page_size(PSDocument * gs, gint new_pagesize, gint pageid) gint new_ury = 0; GtkGSPaperSize *papersizes = gtk_gs_defaults_get_paper_sizes(); - LOG ("Set the page size") + LOG ("Set the page size"); g_return_val_if_fail(gs != NULL, FALSE); g_return_val_if_fail(GTK_IS_GS(gs), FALSE); @@ -1714,6 +1695,12 @@ ps_document_load (EvDocument *document, return FALSE; result = document_load (PS_DOCUMENT (document), filename); + if (!result) { + g_set_error (error, G_FILE_ERROR, + G_FILE_ERROR_FAILED, + "Failed to load document '%s'\n", + uri); + } g_free (filename); @@ -1732,7 +1719,15 @@ ps_document_save (EvDocument *document, static int ps_document_get_n_pages (EvDocument *document) { - return ps_document_get_page_count (PS_DOCUMENT (document)); + PSDocument *ps = PS_DOCUMENT (document); + + g_return_val_if_fail (ps != NULL, -1); + + if (!ps->gs_filename || !ps->doc) { + return -1; + } + + return ps->structured_doc ? ps->doc->numpages : 1; } static void @@ -1745,7 +1740,11 @@ ps_document_set_page (EvDocument *document, static int ps_document_get_page (EvDocument *document) { - return ps_document_get_current_page (PS_DOCUMENT (document)); + PSDocument *ps = PS_DOCUMENT (document); + + g_return_val_if_fail (ps != NULL, -1); + + return ps->current_page; } static gboolean @@ -1759,7 +1758,7 @@ ps_document_widget_event (GtkWidget *widget, GdkEvent *event, gpointer data) gs->message_window = event->client.data.l[0]; if (event->client.message_type == gs_class->page_atom) { - LOG ("GS rendered the document") + LOG ("GS rendered the document"); gs->busy = FALSE; ev_document_changed (EV_DOCUMENT (gs)); } @@ -1864,7 +1863,7 @@ ps_document_render (EvDocument *document, LOG ("Copy the internal pixmap: %d %d %d %d %d %d", draw.x - page.x, draw.y - page.y, - draw.x, draw.y, draw.width, draw.height) + draw.x, draw.y, draw.width, draw.height); g_object_unref (gc); }