2 * Copyright (C) 2005 Novell, Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Author: Anders Carlsson <andersca@imendio.com>
20 * Based on nautilus-search-engine.c
24 #include "gtksearchengine.h"
25 #include "gtksearchenginebeagle.h"
26 #include "gtksearchenginesimple.h"
27 #include "gtksearchenginetracker.h"
28 #include "gtksearchenginequartz.h"
30 #include <gdk/gdkconfig.h> /* for GDK_WINDOWING_QUARTZ */
32 #ifndef G_OS_WIN32 /* Beagle and tracker are not ported
33 * to Windows, as far as I know.
37 #define HAVE_TRACKER 1
50 static guint signals[LAST_SIGNAL];
52 G_DEFINE_ABSTRACT_TYPE (GtkSearchEngine, _gtk_search_engine, G_TYPE_OBJECT);
55 finalize (GObject *object)
57 G_OBJECT_CLASS (_gtk_search_engine_parent_class)->finalize (object);
61 _gtk_search_engine_class_init (GtkSearchEngineClass *class)
63 GObjectClass *gobject_class;
65 gobject_class = G_OBJECT_CLASS (class);
66 gobject_class->finalize = finalize;
69 g_signal_new ("hits-added",
70 G_TYPE_FROM_CLASS (class),
72 G_STRUCT_OFFSET (GtkSearchEngineClass, hits_added),
74 g_cclosure_marshal_VOID__POINTER,
78 signals[HITS_SUBTRACTED] =
79 g_signal_new ("hits-subtracted",
80 G_TYPE_FROM_CLASS (class),
82 G_STRUCT_OFFSET (GtkSearchEngineClass, hits_subtracted),
84 g_cclosure_marshal_VOID__POINTER,
89 g_signal_new ("finished",
90 G_TYPE_FROM_CLASS (class),
92 G_STRUCT_OFFSET (GtkSearchEngineClass, finished),
94 g_cclosure_marshal_VOID__VOID,
98 g_signal_new ("error",
99 G_TYPE_FROM_CLASS (class),
101 G_STRUCT_OFFSET (GtkSearchEngineClass, error),
103 g_cclosure_marshal_VOID__STRING,
109 _gtk_search_engine_init (GtkSearchEngine *engine)
114 _gtk_search_engine_new (void)
116 GtkSearchEngine *engine = NULL;
119 engine = _gtk_search_engine_tracker_new ();
125 engine = _gtk_search_engine_beagle_new ();
130 #ifdef GDK_WINDOWING_QUARTZ
131 engine = _gtk_search_engine_quartz_new ();
136 if (g_thread_supported ())
137 engine = _gtk_search_engine_simple_new ();
143 _gtk_search_engine_set_query (GtkSearchEngine *engine,
146 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
147 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query != NULL);
149 GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query (engine, query);
153 _gtk_search_engine_start (GtkSearchEngine *engine)
155 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
156 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->start != NULL);
158 GTK_SEARCH_ENGINE_GET_CLASS (engine)->start (engine);
162 _gtk_search_engine_stop (GtkSearchEngine *engine)
164 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
165 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop != NULL);
167 GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop (engine);
171 _gtk_search_engine_is_indexed (GtkSearchEngine *engine)
173 g_return_val_if_fail (GTK_IS_SEARCH_ENGINE (engine), FALSE);
174 g_return_val_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed != NULL, FALSE);
176 return GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed (engine);
180 _gtk_search_engine_hits_added (GtkSearchEngine *engine,
183 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
185 g_signal_emit (engine, signals[HITS_ADDED], 0, hits);
190 _gtk_search_engine_hits_subtracted (GtkSearchEngine *engine,
193 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
195 g_signal_emit (engine, signals[HITS_SUBTRACTED], 0, hits);
200 _gtk_search_engine_finished (GtkSearchEngine *engine)
202 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
204 g_signal_emit (engine, signals[FINISHED], 0);
208 _gtk_search_engine_error (GtkSearchEngine *engine,
209 const gchar *error_message)
211 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
213 g_signal_emit (engine, signals[ERROR], 0, error_message);