-/*
- * Check if gs->gs_filename or gs->gs_filename_unc is a pdf file and scan
- * pdf file if necessary.
- * Set gs->filename_dsc to the name of the dsc file or NULL.
- * Error reporting via signal 'interpreter_message'.
- */
-static gchar *
-check_pdf(PSDocument * gs)
-{
- FILE *file;
- gchar buf[1024], *filename;
- int fd;
-
- /* use uncompressed file as input if necessary */
- filename = (gs->gs_filename_unc ? gs->gs_filename_unc : gs->gs_filename);
-
- if((file = fopen(filename, "r"))
- && (fread(buf, sizeof(char), 5, file) == 5)
- && (strncmp(buf, "%PDF-", 5) == 0)) {
- /* we found a PDF file */
- gchar *fname, *filename_dsc, *filename_err, *cmd, *cmdline;
- filename_dsc = g_strconcat(g_get_tmp_dir(), "/ggvXXXXXX", NULL);
- if((fd = mkstemp(filename_dsc)) < 0) {
- return NULL;
- }
- close(fd);
- filename_err = g_strconcat(g_get_tmp_dir(), "/ggvXXXXXX", NULL);
- if((fd = mkstemp(filename_err)) < 0) {
- g_free(filename_dsc);
- return NULL;
- }
- close(fd);
- fname = g_shell_quote(filename);
- cmd = g_strdup_printf(gtk_gs_defaults_get_dsc_cmd(), filename_dsc, fname);
- g_free(fname);
- /* this command (sometimes?) prints error messages to stdout! */
- cmdline = g_strdup_printf("%s >%s 2>&1", cmd, filename_err);
- g_free(cmd);
-
- if((system(cmdline) == 0) && file_readable(filename_dsc)) {
-
- /* success */
- filename = gs->gs_filename_dsc = filename_dsc;
-
- if(file_length(filename_err) > 0) {
- gchar *err_msg = " ";
- GtkWidget *dialog;
- FILE *err;
- GdkColor color;
-
- if((err = fopen(filename_err, "r"))) {
-
- /* print the content of the file to a message box */
- while(fgets(buf, 1024, err))
- err_msg = g_strconcat(err_msg, buf, NULL);
-
- /* FIXME The dialog is not yet set to modal, difficult to
- * get the parent of the dialog box here
- */
-
- dialog = gtk_message_dialog_new(NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK,
- ("There was an error while scaning the file: %s \n%s"),
- gs->gs_filename, err_msg);
-
- gdk_color_parse("white", &color);
- gtk_widget_modify_bg(GTK_WIDGET(dialog), GTK_STATE_NORMAL, &color);
-
- g_signal_connect(G_OBJECT(dialog), "response",
- G_CALLBACK(gtk_widget_destroy), NULL);
-
- gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
- gtk_widget_show(dialog);
- g_free(err_msg);
- }
- }
-
- }
- else {
- /* report error */
- g_snprintf(buf, 1024,
- _("Error while converting pdf file %s:\n"), filename);
- ps_document_emit_error_msg(gs, buf);
-
- if(file_length(filename_err) > 0) {
- FILE *err;
- if((err = fopen(filename_err, "r"))) {
- /* print file to message window */
- while(fgets(buf, 1024, err))
- ps_document_emit_error_msg(gs, buf);
- }
- }
- unlink(filename_dsc);
- g_free(filename_dsc);
- filename = NULL;
- }
- unlink(filename_err);
- g_free(filename_err);
- g_free(cmdline);
- }
- if(NULL != file)
- fclose(file);
- return filename;
-}
-
-#ifdef BROKEN_XINERAMA_PATCH_THAT_SHOULD_NOT_BE_USED
-/* never mind this patch: a properly working X server should take care of
- calculating the proper values. */
-static float
-compute_xdpi(void)
-{
-# ifndef HAVE_XINERAMA
- return 25.4 * gdk_screen_width() / gdk_screen_width_mm();
-# else
- Display *dpy;
- dpy = (Display *) GDK_DISPLAY();
- if(XineramaIsActive(dpy)) {
- int num_heads;
- XineramaScreenInfo *head_info;
- head_info = (XineramaScreenInfo *) XineramaQueryScreens(dpy, &num_heads);
- /* fake it with dimensions of the first head for now */
- return 25.4 * head_info[0].width / gdk_screen_width_mm();
- }
- else {
- return 25.4 * gdk_screen_width() / gdk_screen_width_mm();
- }
-# endif
- /* HAVE_XINERAMA */
-}
-
-static float
-compute_ydpi(void)
-{
-# ifndef HAVE_XINERAMA
- return 25.4 * gdk_screen_height() / gdk_screen_height_mm();
-# else
- Display *dpy;
- dpy = (Display *) GDK_DISPLAY();
- if(XineramaIsActive(dpy)) {
- int num_heads;
- XineramaScreenInfo *head_info;
- head_info = (XineramaScreenInfo *) XineramaQueryScreens(dpy, &num_heads);
- /* fake it with dimensions of the first head for now */
- return 25.4 * head_info[0].height / gdk_screen_height_mm();
- }
- else {
- return 25.4 * gdk_screen_height() / gdk_screen_height_mm();
- }
-# endif
- /* HAVE_XINERAMA */
-}
-#else
-static float
-compute_xdpi(void)
-{
- return 25.4 * gdk_screen_width() / gdk_screen_width_mm();
-}
-
-static float
-compute_ydpi(void)