diff options
author | Marco Pesenti Gritti <marco@gnome.org> | 2004-12-31 17:10:25 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@src.gnome.org> | 2004-12-31 17:10:25 (GMT) |
commit | cd303522106f5ce836d426697f8ce3334d955d60 (patch) | |
tree | 4044bfb374d38d185dce942a6f73432ae5800a6b /ps | |
parent | 41b5830e4bedb14c4db9a8ed01ccc204692eae3c (diff) |
Add a changed event that is emitted when the page content changes. This is
2004-12-31 Marco Pesenti Gritti <marco@gnome.org>
* backend/ev-document.c: (ev_document_base_init),
(ev_document_changed):
* backend/ev-document.h:
Add a changed event that is emitted when the page content
changes. This is necessary to deal with the fact that
in ps backend rendering happen asycrounously.
This makes the ps backend mostly work.
* pdf/xpdf/pdf-document.cc:
Emit changed event
* ps/gtkgs.c: (set_up_page), (gtk_gs_widget_event),
(ps_document_set_target):
Emit changed event
* shell/ev-view.c: (document_changed_callback),
(ev_view_set_document), (ev_view_set_page):
Redraw on the changed signal
Diffstat (limited to 'ps')
-rw-r--r-- | ps/gtkgs.c | 34 |
1 files changed, 33 insertions, 1 deletions
@@ -498,6 +498,7 @@ set_up_page(GtkGS * gs) //GdkColormap *colormap; GdkGC *fill; GdkColor white = { 0, 0xFFFF, 0xFFFF, 0xFFFF }; /* pixel, r, g, b */ + GdkColormap *colormap; #ifdef HAVE_LOCALE_H char *savelocale; @@ -518,6 +519,8 @@ set_up_page(GtkGS * gs) /* clear new pixmap (set to white) */ fill = gdk_gc_new(gs->pstarget); if(fill) { + colormap = gdk_drawable_get_colormap(gs->pstarget); + gdk_color_alloc (colormap, &white); gdk_gc_set_foreground(fill, &white); if(gs->width > 0 && gs->height > 0) { @@ -2089,13 +2092,42 @@ ps_document_get_page (EvDocument *document) return gtk_gs_get_current_page (GTK_GS (document)); } +static gboolean +gtk_gs_widget_event (GtkWidget *widget, GdkEvent *event, gpointer data) +{ + GtkGS *gs = (GtkGS *) data; + + if(event->type != GDK_CLIENT_EVENT) + return FALSE; + + if (event->client.message_type == gs_class->page_atom) { + gs->busy = FALSE; + ev_document_changed (EV_DOCUMENT (gs)); + } + + return TRUE; +} + static void ps_document_set_target (EvDocument *document, - GdkDrawable *target) + GdkDrawable *target) { GtkGS *gs = GTK_GS (document); + GtkWidget *widget; + gpointer data; gs->pstarget = target; + + if (gs->pstarget) { + gdk_window_get_user_data (gs->pstarget, &data); + g_return_if_fail (GTK_IS_WIDGET (data)); + + widget = GTK_WIDGET (data); + g_signal_connect (widget, "event", + G_CALLBACK (gtk_gs_widget_event), + document); + } + gtk_gs_goto_page (gs, gs->current_page); } |