Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2004-12-22 04:37:26 (GMT)
committer Havoc Pennington <hp@src.gnome.org>2004-12-22 04:37:26 (GMT)
commit9317aeb2e299d6fdf18dbf22b6a4707e4d149dd5 (patch)
tree2142865df37b806af582578476d6820f9a891b04 /backend
parent5a7fb79a9faa64e7b877b16a220999945b54a128 (diff)
add marshaler-generator thingy. I'm sure there's a better way to do this
2004-12-21 Havoc Pennington <hp@redhat.com> * backend/ev-backend-marshal.c, backend/ev-backend-marshalers.list, backend/Makefile.am: add marshaler-generator thingy. I'm sure there's a better way to do this in the modern world. * backend/ev-document.h (struct _EvDocumentIface): add begin_find, end_find methods and "found" signal. * configure.ac: find glib-genmarshal
Diffstat (limited to 'backend')
-rw-r--r--backend/Makefile.am21
-rw-r--r--backend/ev-backend-marshal.c2
-rw-r--r--backend/ev-document.c34
-rw-r--r--backend/ev-document.h26
4 files changed, 83 insertions, 0 deletions
diff --git a/backend/Makefile.am b/backend/Makefile.am
index cc0acf4..c163aa0 100644
--- a/backend/Makefile.am
+++ b/backend/Makefile.am
@@ -10,6 +10,27 @@ INCLUDES= \
noinst_LTLIBRARIES = libevbackend.la
libevbackend_la_SOURCES= \
+ ev-backend-marshal.c \
ev-document.c \
ev-document.h \
$(NULL)
+
+ev-backend-marshalers.h: ev-backend-marshalers.list
+ cd $(srcdir) \
+ && $(GLIB_GENMARSHAL) --prefix=_ev_backend_marshal ev-backend-marshalers.list --header > xgen-emh \
+ && cp xgen-emh ev-backend-marshalers.h \
+ && rm -f xgen-emh xgen-emh~
+
+ev-backend-marshalers.c: ev-backend-marshalers.list
+ cd $(srcdir) \
+ && $(GLIB_GENMARSHAL) --prefix=_ev_backend_marshal ev-backend-marshalers.list --body > xgen-emc \
+ && cp xgen-emc ev-backend-marshalers.c \
+ && rm -f xgen-emc xgen-emc~
+
+ev-backend-marshal.c: ev-backend-marshalers.h ev-backend-marshalers.c
+
+noinst_HEADERS = \
+ ev-backend-marshalers.h
+
+EXTRA_DIST= \
+ ev-backend-marshalers.list
diff --git a/backend/ev-backend-marshal.c b/backend/ev-backend-marshal.c
new file mode 100644
index 0000000..2bc7b6a
--- /dev/null
+++ b/backend/ev-backend-marshal.c
@@ -0,0 +1,2 @@
+#include "ev-backend-marshalers.h"
+#include "ev-backend-marshalers.c"
diff --git a/backend/ev-document.c b/backend/ev-document.c
index 3ed1181..02c2442 100644
--- a/backend/ev-document.c
+++ b/backend/ev-document.c
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
/*
* Copyright (C) 2004 Marco Pesenti Gritti
*
@@ -20,6 +21,7 @@
#include "config.h"
#include "ev-document.h"
+#include "ev-backend-marshal.c"
static void ev_document_base_init (gpointer g_class);
@@ -48,6 +50,22 @@ ev_document_get_type (void)
static void
ev_document_base_init (gpointer g_class)
{
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ g_signal_new ("found",
+ EV_TYPE_DOCUMENT,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvDocumentIface, found),
+ NULL, NULL,
+ _ev_backend_marshal_VOID__POINTER_INT_DOUBLE,
+ G_TYPE_NONE, 3,
+ G_TYPE_POINTER,
+ G_TYPE_INT,
+ G_TYPE_DOUBLE);
+
+ initialized = TRUE;
+ }
}
gboolean
@@ -118,3 +136,19 @@ 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_begin_find (EvDocument *document,
+ const char *search_string,
+ gboolean case_sensitive)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+ iface->begin_find (document, search_string, case_sensitive);
+}
+
+void
+ev_document_end_find (EvDocument *document)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+ iface->end_find (document);
+}
diff --git a/backend/ev-document.h b/backend/ev-document.h
index e572fed..cc65f5c 100644
--- a/backend/ev-document.h
+++ b/backend/ev-document.h
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
/*
* Copyright (C) 2000-2003 Marco Pesenti Gritti
*
@@ -27,6 +28,12 @@
G_BEGIN_DECLS
+typedef struct
+{
+ int page_num;
+ GdkRectangle highlight_area;
+} EvFindResult;
+
#define EV_TYPE_DOCUMENT (ev_document_get_type ())
#define EV_DOCUMENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT, EvDocument))
#define EV_DOCUMENT_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT, EvDocumentIface))
@@ -63,6 +70,21 @@ struct _EvDocumentIface
int clip_y,
int clip_width,
int clip_height);
+
+ void (* begin_find) (EvDocument *document,
+ const char *search_string,
+ gboolean case_sensitive);
+ void (* end_find) (EvDocument *document);
+
+ /* Signals */
+
+ /* "found" emitted at least 1 time (possibly with n_results == 0)
+ * for any call to begin_find.
+ */
+ void (* found) (EvDocument *document,
+ const EvFindResult *results,
+ int n_results,
+ double percent_complete);
};
GType ev_document_get_type (void);
@@ -88,6 +110,10 @@ void ev_document_render (EvDocument *document,
int clip_y,
int clip_width,
int clip_height);
+void ev_document_begin_find (EvDocument *document,
+ const char *search_string,
+ gboolean case_sensitive);
+void ev_document_end_find (EvDocument *document);
G_END_DECLS