}
}
-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)
{
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);
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");
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 ();
}
}
- 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
/* 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 */
static gboolean
ps_document_next_page (PSDocument *gs)
{
- XEvent event;
+ XEvent event;
+ GdkScreen *screen;
+ GdkDisplay *display;
+ Display *dpy;
LOG ("Make ghostscript render next page");
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 ();
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;
}
}