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, see <http://www.gnu.org/licenses/>.
17 * Author: Anders Carlsson <andersca@imendio.com>
19 * Based on nautilus-search-engine.c
23 #include "gtksearchengine.h"
24 #include "gtksearchenginesimple.h"
25 #include "gtksearchenginetracker.h"
26 #include "gtksearchenginequartz.h"
28 #include <gdk/gdk.h> /* for GDK_WINDOWING_QUARTZ */
30 #ifndef G_OS_WIN32 /* No tracker on Windows */
31 #define HAVE_TRACKER 1
43 static guint signals[LAST_SIGNAL];
45 G_DEFINE_ABSTRACT_TYPE (GtkSearchEngine, _gtk_search_engine, G_TYPE_OBJECT);
48 finalize (GObject *object)
50 G_OBJECT_CLASS (_gtk_search_engine_parent_class)->finalize (object);
54 _gtk_search_engine_class_init (GtkSearchEngineClass *class)
56 GObjectClass *gobject_class;
58 gobject_class = G_OBJECT_CLASS (class);
59 gobject_class->finalize = finalize;
62 g_signal_new ("hits-added",
63 G_TYPE_FROM_CLASS (class),
65 G_STRUCT_OFFSET (GtkSearchEngineClass, hits_added),
67 g_cclosure_marshal_VOID__POINTER,
71 signals[HITS_SUBTRACTED] =
72 g_signal_new ("hits-subtracted",
73 G_TYPE_FROM_CLASS (class),
75 G_STRUCT_OFFSET (GtkSearchEngineClass, hits_subtracted),
77 g_cclosure_marshal_VOID__POINTER,
82 g_signal_new ("finished",
83 G_TYPE_FROM_CLASS (class),
85 G_STRUCT_OFFSET (GtkSearchEngineClass, finished),
87 g_cclosure_marshal_VOID__VOID,
91 g_signal_new ("error",
92 G_TYPE_FROM_CLASS (class),
94 G_STRUCT_OFFSET (GtkSearchEngineClass, error),
96 g_cclosure_marshal_VOID__STRING,
102 _gtk_search_engine_init (GtkSearchEngine *engine)
107 _gtk_search_engine_new (void)
109 GtkSearchEngine *engine = NULL;
112 engine = _gtk_search_engine_tracker_new ();
117 #ifdef GDK_WINDOWING_QUARTZ
118 engine = _gtk_search_engine_quartz_new ();
123 if (g_thread_supported ())
124 engine = _gtk_search_engine_simple_new ();
130 _gtk_search_engine_set_query (GtkSearchEngine *engine,
133 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
134 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query != NULL);
136 GTK_SEARCH_ENGINE_GET_CLASS (engine)->set_query (engine, query);
140 _gtk_search_engine_start (GtkSearchEngine *engine)
142 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
143 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->start != NULL);
145 GTK_SEARCH_ENGINE_GET_CLASS (engine)->start (engine);
149 _gtk_search_engine_stop (GtkSearchEngine *engine)
151 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
152 g_return_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop != NULL);
154 GTK_SEARCH_ENGINE_GET_CLASS (engine)->stop (engine);
158 _gtk_search_engine_is_indexed (GtkSearchEngine *engine)
160 g_return_val_if_fail (GTK_IS_SEARCH_ENGINE (engine), FALSE);
161 g_return_val_if_fail (GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed != NULL, FALSE);
163 return GTK_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed (engine);
167 _gtk_search_engine_hits_added (GtkSearchEngine *engine,
170 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
172 g_signal_emit (engine, signals[HITS_ADDED], 0, hits);
177 _gtk_search_engine_hits_subtracted (GtkSearchEngine *engine,
180 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
182 g_signal_emit (engine, signals[HITS_SUBTRACTED], 0, hits);
187 _gtk_search_engine_finished (GtkSearchEngine *engine)
189 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
191 g_signal_emit (engine, signals[FINISHED], 0);
195 _gtk_search_engine_error (GtkSearchEngine *engine,
196 const gchar *error_message)
198 g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine));
200 g_signal_emit (engine, signals[ERROR], 0, error_message);