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 /backend | |
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 'backend')
-rw-r--r-- | backend/ev-document.c | 30 | ||||
-rw-r--r-- | backend/ev-document.h | 4 |
2 files changed, 33 insertions, 1 deletions
diff --git a/backend/ev-document.c b/backend/ev-document.c index 59697bd..dcc6204 100644 --- a/backend/ev-document.c +++ b/backend/ev-document.c @@ -25,6 +25,14 @@ static void ev_document_base_init (gpointer g_class); +enum +{ + CHANGED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + GType ev_document_get_type (void) { @@ -50,7 +58,22 @@ ev_document_get_type (void) static void ev_document_base_init (gpointer g_class) { + static gboolean initialized = FALSE; + if (!initialized) + { + signals[CHANGED] = + g_signal_new ("changed", + EV_TYPE_DOCUMENT, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EvDocumentIface, changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + initialized = TRUE; + } } gboolean @@ -128,4 +151,9 @@ ev_document_render (EvDocument *document, EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); iface->render (document, clip_x, clip_y, clip_width, clip_height); } - + +void +ev_document_changed (EvDocument *document) +{ + g_signal_emit (G_OBJECT (document), signals[CHANGED], 0); +} diff --git a/backend/ev-document.h b/backend/ev-document.h index 083bd1a..0059fd4 100644 --- a/backend/ev-document.h +++ b/backend/ev-document.h @@ -42,6 +42,9 @@ struct _EvDocumentIface { GTypeInterface base_iface; + /* Signals */ + void (* changed) (EvDocument *document); + /* Methods */ gboolean (* load) (EvDocument *document, const char *uri, @@ -91,6 +94,7 @@ void ev_document_render (EvDocument *document, int clip_y, int clip_width, int clip_height); +void ev_document_changed (EvDocument *document); G_END_DECLS |