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 "gtksearchenginesimple.h"
26 #include "gtksearchenginetracker.h"
27 #include "gtksearchenginequartz.h"
29 #include <gdk/gdk.h> /* for GDK_WINDOWING_QUARTZ */
31 #ifndef G_OS_WIN32 /* No tracker on Windows */
32 #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 ();
118 #ifdef GDK_WINDOWING_QUARTZ
119 engine = _gtk_search_engine_quartz_new ();
124 if (g_thread_supported ())
125 engine = _gtk_search_engine_simple_new ();
131 _gtk_search_engine_set_query (GtkSearchEngine *engine,
134 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
135 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query != NULL);
137 GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query (engine, query);
141 _gtk_search_engine_start (GtkSearchEngine *engine)
143 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
144 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->start != NULL);
146 GTK_SEARCH_ENGINE_GET_CLASS (engine)->start (engine);
150 _gtk_search_engine_stop (GtkSearchEngine *engine)
152 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
153 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop != NULL);
155 GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop (engine);
159 _gtk_search_engine_is_indexed (GtkSearchEngine *engine)
161 g_return_val_if_fail (GTK_IS_SEARCH_ENGINE (engine), FALSE);
162 g_return_val_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed != NULL, FALSE);
164 return GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed (engine);
168 _gtk_search_engine_hits_added (GtkSearchEngine *engine,
171 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
173 g_signal_emit (engine, signals[HITS_ADDED], 0, hits);
178 _gtk_search_engine_hits_subtracted (GtkSearchEngine *engine,
181 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
183 g_signal_emit (engine, signals[HITS_SUBTRACTED], 0, hits);
188 _gtk_search_engine_finished (GtkSearchEngine *engine)
190 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
192 g_signal_emit (engine, signals[FINISHED], 0);
196 _gtk_search_engine_error (GtkSearchEngine *engine,
197 const gchar *error_message)
199 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
201 g_signal_emit (engine, signals[ERROR], 0, error_message);