]> www.fi.muni.cz Git - evince.git/blobdiff - ps/ps-document.c
Updated English (British) translation
[evince.git] / ps / ps-document.c
index 19800109a1834b860e0cc164f6646d365f9b014c..1500b7b4a9c806d131126c5c9a900d8a36f77c78 100644 (file)
@@ -294,18 +294,6 @@ send_ps (PSDocument *gs, long begin, unsigned int len, gboolean close)
        }
 }
 
-static float
-get_xdpi (PSDocument *gs)
-{
-       return 25.4 * gdk_screen_width() / gdk_screen_width_mm();
-}
-
-static float
-get_ydpi (PSDocument *gs)
-{
-       return 25.4 * gdk_screen_height() / gdk_screen_height_mm();
-}
-
 static void
 setup_pixmap (PSDocument *gs, int page, double scale, int rotation)
 {
@@ -447,19 +435,17 @@ static void
 setup_page (PSDocument *gs, int page, double scale, int rotation)
 {
        gchar *buf;
-       char scaled_xdpi[G_ASCII_DTOSTR_BUF_SIZE];      
-       char scaled_ydpi[G_ASCII_DTOSTR_BUF_SIZE];
+       char scaled_dpi[G_ASCII_DTOSTR_BUF_SIZE];       
        int urx, ury, llx, lly;
 
        LOG ("Setup the page");
 
        get_page_box (gs, page, &urx, &ury, &llx, &lly);
-       g_ascii_dtostr (scaled_xdpi, G_ASCII_DTOSTR_BUF_SIZE, get_xdpi (gs) * scale);
-       g_ascii_dtostr (scaled_ydpi, G_ASCII_DTOSTR_BUF_SIZE, get_ydpi (gs) * scale);
+       g_ascii_dtostr (scaled_dpi, G_ASCII_DTOSTR_BUF_SIZE, 72.0 * scale);
 
        buf = g_strdup_printf ("%ld %d %d %d %d %d %s %s %d %d %d %d",
                               0L, rotation, llx, lly, urx, ury,
-                              scaled_xdpi, scaled_ydpi,
+                              scaled_dpi, scaled_dpi,
                               0, 0, 0, 0);
        LOG ("GS property %s", buf);
 
@@ -624,6 +610,7 @@ start_interpreter (PSDocument *gs)
 
        char *argv[NUM_ARGS], *dir, *gv_env, *gs_path;
        char **gs_args, **alpha_args = NULL;
+       char **gv_env_vars = NULL;
        int argc = 0, i;
 
        LOG ("Start the interpreter");
@@ -679,9 +666,10 @@ start_interpreter (PSDocument *gs)
                return -1;
        }
 
-       gv_env = g_strdup_printf ("GHOSTVIEW=%ld %ld",
+       gv_env = g_strdup_printf ("GHOSTVIEW=%ld %ld;DISPLAY=%s",
                                  gdk_x11_drawable_get_xid (gs->pstarget),
-                                 gdk_x11_drawable_get_xid (gs->bpixmap));
+                                 gdk_x11_drawable_get_xid (gs->bpixmap),
+                                 gdk_display_get_name (gdk_drawable_get_display (gs->pstarget)));
        LOG ("Launching ghostview with env %s", gv_env);
 
        gs->interpreter_pid = fork ();
@@ -717,7 +705,11 @@ start_interpreter (PSDocument *gs)
                                }
                        }
 
-                       putenv(gv_env);
+                       gv_env_vars = g_strsplit (gv_env, ";", -1);
+                       g_free (gv_env);
+                       for (i = 0; gv_env_vars[i]; i++) {
+                               putenv (gv_env_vars[i]);
+                       }
 
                        /* change to directory where the input file is. This helps
                         * with postscript-files which include other files using
@@ -731,8 +723,8 @@ start_interpreter (PSDocument *gs)
                        /* Notify error */
                        g_critical ("Unable to execute [%s]\n", argv[0]);
                        g_strfreev (gs_args);
-                       g_free (gv_env);
                        g_strfreev (alpha_args);
+                       g_strfreev (gv_env_vars);
                        _exit (1);
                        break;
                default:                     /* parent */
@@ -990,7 +982,10 @@ document_load (PSDocument *gs, const gchar *fname)
 static gboolean
 ps_document_next_page (PSDocument *gs)
 {
-       XEvent event;
+       XEvent      event;
+       GdkScreen  *screen;
+       GdkDisplay *display;
+       Display    *dpy;
 
        LOG ("Make ghostscript render next page");
 
@@ -1000,14 +995,20 @@ ps_document_next_page (PSDocument *gs)
 
        gs->busy = TRUE;
 
+       screen = gtk_window_get_screen (GTK_WINDOW (gs->target_window));
+       display = gdk_screen_get_display (screen);
+       dpy = gdk_x11_display_get_xdisplay (display);
+
        event.xclient.type = ClientMessage;
-       event.xclient.display = gdk_display;
+       event.xclient.display = dpy;
        event.xclient.window = gs->message_window;
-       event.xclient.message_type = gdk_x11_atom_to_xatom(gs_class->next_atom);
+       event.xclient.message_type =
+               gdk_x11_atom_to_xatom_for_display (display,
+                                                  gs_class->next_atom);
        event.xclient.format = 32;
 
        gdk_error_trap_push ();
-       XSendEvent (gdk_display, gs->message_window, FALSE, 0, &event);
+       XSendEvent (dpy, gs->message_window, FALSE, 0, &event);
        gdk_flush ();
        gdk_error_trap_pop ();
 
@@ -1212,14 +1213,14 @@ ps_document_get_page_size (EvDocument   *document,
        PSDocument *gs = PS_DOCUMENT (document);
        int urx, ury, llx, lly;
 
-       get_page_box (PS_DOCUMENT (document), page, &urx, &ury, &llx, &lly);
+       get_page_box (gs, page, &urx, &ury, &llx, &lly);
 
        if (width) {
-               *width = (urx - llx) / 72.0 * get_xdpi (gs) + 0.5;
+               *width = (urx - llx) + 0.5;
        }
 
        if (height) {
-               *height = (ury - lly) / 72.0 * get_ydpi (gs) + 0.5;
+               *height = (ury - lly) + 0.5;
        }
 }