Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco 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)
commitcd303522106f5ce836d426697f8ce3334d955d60 (patch)
tree4044bfb374d38d185dce942a6f73432ae5800a6b
parent41b5830e4bedb14c4db9a8ed01ccc204692eae3c (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
-rw-r--r--ChangeLog25
-rw-r--r--backend/ev-document.c30
-rw-r--r--backend/ev-document.h4
-rw-r--r--pdf/xpdf/pdf-document.cc1
-rw-r--r--ps/gtkgs.c34
-rw-r--r--shell/ev-view.c15
6 files changed, 104 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 122293c..5b7828f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+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
+
2004-12-25 Raphael Higino <raphaelh@cvs.gnome.org>
* configure.ac: Added pt_BR to ALL_LINGUAS.
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
diff --git a/pdf/xpdf/pdf-document.cc b/pdf/xpdf/pdf-document.cc
index e6e72c2..24e0b36 100644
--- a/pdf/xpdf/pdf-document.cc
+++ b/pdf/xpdf/pdf-document.cc
@@ -204,6 +204,7 @@ pdf_document_set_page (EvDocument *document,
pdf_document->page_valid = FALSE;
}
+ ev_document_changed (document);
}
static int
diff --git a/ps/gtkgs.c b/ps/gtkgs.c
index ebb29f2..74d6195 100644
--- a/ps/gtkgs.c
+++ b/ps/gtkgs.c
@@ -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);
}
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 07fdecd..bde7d33 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -596,6 +596,13 @@ ev_view_new (void)
return g_object_new (EV_TYPE_VIEW, NULL);
}
+static void
+document_changed_callback (EvDocument *document,
+ EvView *view)
+{
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
void
ev_view_set_document (EvView *view,
EvDocument *document)
@@ -624,6 +631,10 @@ ev_view_set_document (EvView *view,
"found",
G_CALLBACK (found_results_callback),
view);
+ g_signal_connect (view->document,
+ "changed",
+ G_CALLBACK (document_changed_callback),
+ view);
}
if (GTK_WIDGET_REALIZED (view))
@@ -648,9 +659,7 @@ ev_view_set_page (EvView *view,
g_signal_emit (view, page_changed_signal, 0);
view->find_percent_complete = 0.0;
- update_find_results (view);
-
- gtk_widget_queue_draw (GTK_WIDGET (view));
+ update_find_results (view);
}
}
}