[gnumeric] Introspection fixes
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Introspection fixes
- Date: Tue, 15 May 2018 11:40:02 +0000 (UTC)
commit 34dac1b36800512f12af4ae2c711a3d77242d3a3
Author: Morten Welinder <terra gnome org>
Date: Mon May 14 11:31:41 2018 -0400
Introspection fixes
src/gnm-plugin.c | 14 +++++++++-----
src/tools/ChangeLog | 12 ++++++++++--
src/tools/gnm-solver.c | 33 +++++++++++++++++++++------------
src/tools/gnm-solver.h | 13 ++++++++++---
4 files changed, 50 insertions(+), 22 deletions(-)
---
diff --git a/src/gnm-plugin.c b/src/gnm-plugin.c
index 127795b..d178191 100644
--- a/src/gnm-plugin.c
+++ b/src/gnm-plugin.c
@@ -547,7 +547,8 @@ struct GnmPluginServiceSolver_ {
};
static GnmSolver *
-cb_load_and_create (GnmSolverFactory *factory, GnmSolverParameters *param)
+cb_load_and_create (GnmSolverFactory *factory, GnmSolverParameters *param,
+ gpointer data)
{
PluginServiceSolver *ssol =
g_object_get_data (G_OBJECT (factory), "ssol");
@@ -562,7 +563,7 @@ cb_load_and_create (GnmSolverFactory *factory, GnmSolverParameters *param)
return NULL;
}
- res = ssol->cbs.creator (factory, param);
+ res = ssol->cbs.creator (factory, param, data);
if (res) {
go_plugin_use_ref (service->plugin);
g_object_set_data_full (G_OBJECT (res),
@@ -575,7 +576,8 @@ cb_load_and_create (GnmSolverFactory *factory, GnmSolverParameters *param)
static gboolean
cb_load_and_functional (GnmSolverFactory *factory,
- WBCGtk *wbcg)
+ WBCGtk *wbcg,
+ gpointer data)
{
PluginServiceSolver *ssol =
g_object_get_data (G_OBJECT (factory), "ssol");
@@ -591,7 +593,7 @@ cb_load_and_functional (GnmSolverFactory *factory,
}
functional = ssol->cbs.functional;
- return (functional == NULL || functional (factory, wbcg));
+ return (functional == NULL || functional (factory, wbcg, data));
}
static void
@@ -659,7 +661,9 @@ plugin_service_solver_read_xml (GOPluginService *service, xmlNode *tree,
CXML2C (s_name),
type,
cb_load_and_create,
- cb_load_and_functional);
+ cb_load_and_functional,
+ NULL,
+ NULL);
g_object_set_data (G_OBJECT (ssol->factory), "ssol", ssol);
}
xmlFree (s_id);
diff --git a/src/tools/ChangeLog b/src/tools/ChangeLog
index 7634f93..9c1af2a 100644
--- a/src/tools/ChangeLog
+++ b/src/tools/ChangeLog
@@ -1,3 +1,11 @@
+2018-05-14 Morten Welinder <terra gnome org>
+
+ * gnm-solver.c (gnm_solver_factory_finalize): Renamed from
+ gnm_solver_factory_dispose and hooked up according. Call notify
+ as needed.
+ (gnm_solver_factory_new): Add data and notify arguments for the
+ benefit of introspection.
+
2018-05-07 Morten Welinder <terra gnome org>
* Release 1.12.41
@@ -8,8 +16,8 @@
2018-04-24 Andreas J. Guelzow <aguelzow pyrshep ca>
- * analysis-histogram.c (analysis_tool_histogram_engine_run): shorten the source only
- in the presence of labels
+ * analysis-histogram.c (analysis_tool_histogram_engine_run):
+ shorten the source only in the presence of labels
2018-03-13 Morten Welinder <terra gnome org>
diff --git a/src/tools/gnm-solver.c b/src/tools/gnm-solver.c
index 0c942e6..c144672 100644
--- a/src/tools/gnm-solver.c
+++ b/src/tools/gnm-solver.c
@@ -3729,14 +3729,17 @@ GSF_CLASS (GnmIterSolver, gnm_iter_solver,
static GObjectClass *gnm_solver_factory_parent_class;
static void
-gnm_solver_factory_dispose (GObject *obj)
+gnm_solver_factory_finalize (GObject *obj)
{
GnmSolverFactory *factory = GNM_SOLVER_FACTORY (obj);
+ if (factory->notify)
+ factory->notify (factory->data);
+
g_free (factory->id);
g_free (factory->name);
- gnm_solver_factory_parent_class->dispose (obj);
+ gnm_solver_factory_parent_class->finalize (obj);
}
static void
@@ -3745,7 +3748,7 @@ gnm_solver_factory_class_init (GObjectClass *object_class)
gnm_solver_factory_parent_class =
g_type_class_peek_parent (object_class);
- object_class->dispose = gnm_solver_factory_dispose;
+ object_class->finalize = gnm_solver_factory_finalize;
}
GSF_CLASS (GnmSolverFactory, gnm_solver_factory,
@@ -3767,12 +3770,14 @@ gnm_solver_db_get (void)
}
/**
- * gnm_solver_factory_new: (skip)
- * @id:
- * @name:
- * @type:
- * @creator: xxx(scope forever)
- * @functional: xxx(scope forever)
+ * gnm_solver_factory_new:
+ * @id: Unique identifier
+ * @name: Translated name for UI purposes
+ * @type: Model type created by factory
+ * @creator: (scope notified): callback for creating a solver
+ * @functional: (scope notified): callback for checking if factory is functional
+ * @data: User pointer for @creator and @functional
+ * @notify: Destroy notification for @data.
*
* Returns: (transfer full): a new #GnmSolverFactory
*/
@@ -3781,7 +3786,9 @@ gnm_solver_factory_new (const char *id,
const char *name,
GnmSolverModelType type,
GnmSolverCreator creator,
- GnmSolverFactoryFunctional functional)
+ GnmSolverFactoryFunctional functional,
+ gpointer data,
+ GDestroyNotify notify)
{
GnmSolverFactory *res;
@@ -3795,6 +3802,8 @@ gnm_solver_factory_new (const char *id,
res->type = type;
res->creator = creator;
res->functional = functional;
+ res->data = data;
+ res->notify = notify;
return res;
}
@@ -3810,7 +3819,7 @@ gnm_solver_factory_create (GnmSolverFactory *factory,
GnmSolverParameters *param)
{
g_return_val_if_fail (GNM_IS_SOLVER_FACTORY (factory), NULL);
- return factory->creator (factory, param);
+ return factory->creator (factory, param, factory->data);
}
gboolean
@@ -3821,7 +3830,7 @@ gnm_solver_factory_functional (GnmSolverFactory *factory,
return FALSE;
return (factory->functional == NULL ||
- factory->functional (factory, wbcg));
+ factory->functional (factory, wbcg, factory->data));
}
static int
diff --git a/src/tools/gnm-solver.h b/src/tools/gnm-solver.h
index 621468a..802acf6 100644
--- a/src/tools/gnm-solver.h
+++ b/src/tools/gnm-solver.h
@@ -484,18 +484,23 @@ void gnm_iter_solver_set_solution (GnmIterSolver *isol);
#define GNM_IS_SOLVER_FACTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_SOLVER_FACTORY_TYPE))
typedef GnmSolver * (*GnmSolverCreator) (GnmSolverFactory *factory,
- GnmSolverParameters *param);
+ GnmSolverParameters *param,
+ gpointer data);
typedef gboolean (*GnmSolverFactoryFunctional) (GnmSolverFactory *factory,
- WBCGtk *wbcg);
+ WBCGtk *wbcg,
+ gpointer data);
struct GnmSolverFactory_ {
GObject parent;
+ /* <private> */
char *id;
char *name; /* Already translated */
GnmSolverModelType type;
GnmSolverCreator creator;
GnmSolverFactoryFunctional functional;
+ gpointer data;
+ GDestroyNotify notify;
};
typedef struct {
@@ -508,7 +513,9 @@ GnmSolverFactory *gnm_solver_factory_new (const char *id,
const char *name,
GnmSolverModelType type,
GnmSolverCreator creator,
- GnmSolverFactoryFunctional functional);
+ GnmSolverFactoryFunctional functional,
+ gpointer data,
+ GDestroyNotify notify);
GnmSolver *gnm_solver_factory_create (GnmSolverFactory *factory,
GnmSolverParameters *param);
gboolean gnm_solver_factory_functional (GnmSolverFactory *factory,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]