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 */
33 #define HAVE_TRACKER 1
44 static guint signals[LAST_SIGNAL];
46 G_DEFINE_ABSTRACT_TYPE (GtkSearchEngine, _gtk_search_engine, G_TYPE_OBJECT);
49 finalize (GObject *object)
51 G_OBJECT_CLASS (_gtk_search_engine_parent_class)->finalize (object);
55 _gtk_search_engine_class_init (GtkSearchEngineClass *class)
57 GObjectClass *gobject_class;
59 gobject_class = G_OBJECT_CLASS (class);
60 gobject_class->finalize = finalize;
63 g_signal_new ("hits-added",
64 G_TYPE_FROM_CLASS (class),
66 G_STRUCT_OFFSET (GtkSearchEngineClass, hits_added),
68 g_cclosure_marshal_VOID__POINTER,
72 signals[HITS_SUBTRACTED] =
73 g_signal_new ("hits-subtracted",
74 G_TYPE_FROM_CLASS (class),
76 G_STRUCT_OFFSET (GtkSearchEngineClass, hits_subtracted),
78 g_cclosure_marshal_VOID__POINTER,
83 g_signal_new ("finished",
84 G_TYPE_FROM_CLASS (class),
86 G_STRUCT_OFFSET (GtkSearchEngineClass, finished),
88 g_cclosure_marshal_VOID__VOID,
92 g_signal_new ("error",
93 G_TYPE_FROM_CLASS (class),
95 G_STRUCT_OFFSET (GtkSearchEngineClass, error),
97 g_cclosure_marshal_VOID__STRING,
103 _gtk_search_engine_init (GtkSearchEngine *engine)
108 _gtk_search_engine_new (void)
110 GtkSearchEngine *engine = NULL;
113 engine = _gtk_search_engine_tracker_new ();
119 engine = _gtk_search_engine_beagle_new ();
124 #ifdef GDK_WINDOWING_QUARTZ
125 engine = _gtk_search_engine_quartz_new ();
130 if (g_thread_supported ())
131 engine = _gtk_search_engine_simple_new ();
137 _gtk_search_engine_set_query (GtkSearchEngine *engine,
140 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
141 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query != NULL);
143 GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query (engine, query);
147 _gtk_search_engine_start (GtkSearchEngine *engine)
149 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
150 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->start != NULL);
152 GTK_SEARCH_ENGINE_GET_CLASS (engine)->start (engine);
156 _gtk_search_engine_stop (GtkSearchEngine *engine)
158 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
159 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop != NULL);
161 GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop (engine);
165 _gtk_search_engine_is_indexed (GtkSearchEngine *engine)
167 g_return_val_if_fail (GTK_IS_SEARCH_ENGINE (engine), FALSE);
168 g_return_val_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed != NULL, FALSE);
170 return GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed (engine);
174 _gtk_search_engine_hits_added (GtkSearchEngine *engine,
177 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
179 g_signal_emit (engine, signals[HITS_ADDED], 0, hits);
184 _gtk_search_engine_hits_subtracted (GtkSearchEngine *engine,
187 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
189 g_signal_emit (engine, signals[HITS_SUBTRACTED], 0, hits);
194 _gtk_search_engine_finished (GtkSearchEngine *engine)
196 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
198 g_signal_emit (engine, signals[FINISHED], 0);
202 _gtk_search_engine_error (GtkSearchEngine *engine,
203 const gchar *error_message)
205 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
207 g_signal_emit (engine, signals[ERROR], 0, error_message);