diff options
author | Federico Mena Quintero <federico@ximian.com> | 2001-04-03 13:35:48 +0800 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2001-04-03 13:35:48 +0800 |
commit | 7a4bd61930f826ceabf144bf1d4ca06592565e90 (patch) | |
tree | e05e3a2e25f54c8b7015c33311b121131ffb7777 /calendar/cal-client/query-listener.c | |
parent | 44882da7a7193185f7b593ac3799758c5065f6e4 (diff) | |
download | gsoc2013-evolution-7a4bd61930f826ceabf144bf1d4ca06592565e90.tar gsoc2013-evolution-7a4bd61930f826ceabf144bf1d4ca06592565e90.tar.gz gsoc2013-evolution-7a4bd61930f826ceabf144bf1d4ca06592565e90.tar.bz2 gsoc2013-evolution-7a4bd61930f826ceabf144bf1d4ca06592565e90.tar.lz gsoc2013-evolution-7a4bd61930f826ceabf144bf1d4ca06592565e90.tar.xz gsoc2013-evolution-7a4bd61930f826ceabf144bf1d4ca06592565e90.tar.zst gsoc2013-evolution-7a4bd61930f826ceabf144bf1d4ca06592565e90.zip |
Plug leak.
2001-04-02 Federico Mena Quintero <federico@ximian.com>
* gui/e-tasks.c (e_tasks_setup_menus): Plug leak.
* gui/event-editor.c (obj_updated_cb): Do nothing for now until we
think of something sensible to do.
(obj_removed_cb): Likewise.
* gui/dialogs/task-editor.c (obj_updated_cb): Likewise.
(obj_removed_cb): Likewise.
* gui/event-editor.c (dialog_to_comp_object): Plug leak.
svn path=/trunk/; revision=9124
Diffstat (limited to 'calendar/cal-client/query-listener.c')
-rw-r--r-- | calendar/cal-client/query-listener.c | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/calendar/cal-client/query-listener.c b/calendar/cal-client/query-listener.c new file mode 100644 index 0000000000..980b0a1ece --- /dev/null +++ b/calendar/cal-client/query-listener.c @@ -0,0 +1,281 @@ +/* Evolution calendar - Live search query listener convenience object + * + * Copyright (C) 2001 Ximian, Inc. + * + * Author: Federico Mena-Quintero <federico@ximian.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "query-listener.h" + + + +/* Private part of the QueryListener structure */ + +struct _QueryListenerPrivate { + /* Callbacks for notification and their closure data */ + QueryListenerObjUpdatedFn obj_updated_fn; + QueryListenerObjRemovedFn obj_removed_fn; + QueryListenerQueryDoneFn query_done_fn; + QueryListenerEvalErrorFn eval_error_fn; + gpointer fn_data; +}; + + + +static void query_listener_class_init (QueryListenerClass *class); +static void query_listener_init (QueryListener *ql); +static void query_listener_destroy (GtkObject *object); + +static void impl_notifyObjUpdated (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjUID uid, + CORBA_boolean query_in_progress, + CORBA_long n_scanned, + CORBA_long total, + CORBA_Environment *ev); + +static void impl_notifyObjRemoved (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjUID uid, + CORBA_Environment *ev); + +static void impl_notifyQueryDone (PortableServer_Servant servant, + GNOME_Evolution_Calendar_QueryListener_QueryDoneStatus corba_status, + const CORBA_char *error_str, + CORBA_Environment *ev); + +static void impl_notifyEvalError (PortableServer_Servant servant, + const CORBA_char *error_str, + CORBA_Environment *ev); + +static BonoboXObjectClass *parent_class; + + + +BONOBO_X_TYPE_FUNC_FULL (QueryListener, + GNOME_Evolution_Calendar_QueryListener, + BONOBO_X_OBJECT_TYPE, + query_listener); + +/* Class initialization function for the live search query listener */ +static void +query_listener_class_init (QueryListenerClass *class) +{ + GtkObjectClass *object_class; + + object_class = (GtkObjectClass *) class; + + parent_class = gtk_type_class (BONOBO_X_OBJECT_TYPE); + + object_class->destroy = query_listener_destroy; + + class->epv.notifyObjUpdated = impl_notifyObjUpdated; + class->epv.notifyObjRemoved = impl_notifyObjRemoved; + class->epv.notifyQueryDone = impl_notifyQueryDone; + class->epv.notifyEvalError = impl_notifyEvalError; +} + +/* Object initialization function for the live search query listener */ +static void +query_listener_init (QueryListener *ql) +{ + QueryListenerPrivate *priv; + + priv = g_new0 (QueryListenerPrivate, 1); + ql->priv = priv; + + priv->obj_updated_fn = NULL; + priv->obj_removed_fn = NULL; + priv->query_done_fn = NULL; + priv->eval_error_fn = NULL; + priv->fn_data = NULL; +} + +/* Destroy handler for the live search query listener */ +static void +query_listener_destroy (GtkObject *object) +{ + QueryListener *ql; + QueryListenerPrivate *priv; + + g_return_if_fail (object != NULL); + g_return_if_fail (IS_QUERY_LISTENER (object)); + + ql = QUERY_LISTENER (object); + priv = ql->priv; + + priv->obj_updated_fn = NULL; + priv->obj_removed_fn = NULL; + priv->query_done_fn = NULL; + priv->eval_error_fn = NULL; + priv->fn_data = NULL; + + g_free (priv); + ql->priv = NULL; + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + + + +/* CORBA method implementations */ + +/* ::notifyObjUpdated() method */ +static void +impl_notifyObjUpdated (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjUID uid, + CORBA_boolean query_in_progress, + CORBA_long n_scanned, + CORBA_long total, + CORBA_Environment *ev) +{ + QueryListener *ql; + QueryListenerPrivate *priv; + + ql = QUERY_LISTENER (bonobo_object_from_servant (servant)); + priv = ql->priv; + + g_assert (priv->obj_updated_fn != NULL); + (* priv->obj_updated_fn) (ql, uid, query_in_progress, n_scanned, total, priv->fn_data); +} + +/* ::notifyObjRemoved() method */ +static void +impl_notifyObjRemoved (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjUID uid, + CORBA_Environment *ev) +{ + QueryListener *ql; + QueryListenerPrivate *priv; + + ql = QUERY_LISTENER (bonobo_object_from_servant (servant)); + priv = ql->priv; + + g_assert (priv->obj_removed_fn != NULL); + (* priv->obj_removed_fn) (ql, uid, priv->fn_data); +} + +/* ::notifyQueryDone() method */ +static void +impl_notifyQueryDone (PortableServer_Servant servant, + GNOME_Evolution_Calendar_QueryListener_QueryDoneStatus corba_status, + const CORBA_char *error_str, + CORBA_Environment *ev) +{ + QueryListener *ql; + QueryListenerPrivate *priv; + + ql = QUERY_LISTENER (bonobo_object_from_servant (servant)); + priv = ql->priv; + + g_assert (priv->query_done_fn != NULL); + (* priv->query_done_fn) (ql, corba_status, error_str, priv->fn_data); +} + +/* ::notifyEvalError() method */ +static void +impl_notifyEvalError (PortableServer_Servant servant, + const CORBA_char *error_str, + CORBA_Environment *ev) +{ + QueryListener *ql; + QueryListenerPrivate *priv; + + ql = QUERY_LISTENER (bonobo_object_from_servant (servant)); + priv = ql->priv; + + g_assert (priv->eval_error_fn != NULL); + (* priv->eval_error_fn) (ql, error_str, priv->fn_data); +} + + + +/** + * query_listener_construct: + * @ql: A query listener. + * @obj_updated_fn: Callback to use when a component is updated in the query. + * @obj_removed_fn: Callback to use when a component is removed from the query. + * @query_done_fn: Callback to use when a query is done. + * @eval_error_fn: Callback to use when an evaluation error happens during a query. + * @fn_data: Closure data to pass to the callbacks. + * + * Constructs a query listener by setting the callbacks it will use for + * notification from the calendar server. + * + * Return value: The same value as @ql. + **/ +QueryListener * +query_listener_construct (QueryListener *ql, + QueryListenerObjUpdatedFn obj_updated_fn, + QueryListenerObjRemovedFn obj_removed_fn, + QueryListenerQueryDoneFn query_done_fn, + QueryListenerEvalErrorFn eval_error_fn, + gpointer fn_data) +{ + QueryListenerPrivate *priv; + + g_return_val_if_fail (ql != NULL, NULL); + g_return_val_if_fail (IS_QUERY_LISTENER (ql), NULL); + g_return_val_if_fail (obj_updated_fn != NULL, NULL); + g_return_val_if_fail (obj_removed_fn != NULL, NULL); + g_return_val_if_fail (query_done_fn != NULL, NULL); + g_return_val_if_fail (eval_error_fn != NULL, NULL); + + priv = ql->priv; + + priv->obj_updated_fn = obj_updated_fn; + priv->obj_removed_fn = obj_removed_fn; + priv->query_done_fn = query_done_fn; + priv->eval_error_fn = eval_error_fn; + priv->fn_data = fn_data; + + return ql; +} + +/** + * query_listener_new: + * @obj_updated_fn: Callback to use when a component is updated in the query. + * @obj_removed_fn: Callback to use when a component is removed from the query. + * @query_done_fn: Callback to use when a query is done. + * @eval_error_fn: Callback to use when an evaluation error happens during a query. + * @fn_data: Closure data to pass to the callbacks. + * + * Creates a new query listener object. + * + * Return value: A newly-created query listener object. + **/ +QueryListener * +query_listener_new (QueryListenerObjUpdatedFn obj_updated_fn, + QueryListenerObjRemovedFn obj_removed_fn, + QueryListenerQueryDoneFn query_done_fn, + QueryListenerEvalErrorFn eval_error_fn, + gpointer fn_data) +{ + QueryListener *ql; + + ql = gtk_type_new (QUERY_LISTENER_TYPE); + + return query_listener_construct (ql, + obj_updated_fn, + obj_removed_fn, + query_done_fn, + eval_error_fn, + fn_data); +} |