From 9317aeb2e299d6fdf18dbf22b6a4707e4d149dd5 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Wed, 22 Dec 2004 04:37:26 +0000 Subject: add marshaler-generator thingy. I'm sure there's a better way to do this 2004-12-21 Havoc Pennington * 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 --- (limited to 'backend') 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 -- cgit v0.9.1