return link;
}
-static GritsObject *grits_opengl_remove(GritsViewer *_opengl, gpointer _link)
+static GritsObject *grits_opengl_remove(GritsViewer *_opengl, GritsObject *object)
{
g_assert(GRITS_IS_OPENGL(_opengl));
GritsOpenGL *opengl = GRITS_OPENGL(_opengl);
- GList *link = _link;
+ GList *link = object->ref;
g_mutex_lock(opengl->objects_lock);
- GritsObject *object = link->data;
/* Just unlink and free it, link->prev is assured */
link->prev->next = link->next;
if (link->next)
link->next->prev = link->prev;
g_mutex_unlock(opengl->objects_lock);
+ object->ref = NULL;
+ object->viewer = NULL;
g_free(link);
g_object_unref(object);
return object;
*
* Returns: the #GritsObject referenced by the handle
*/
-GritsObject *grits_viewer_remove(GritsViewer *viewer, gpointer _object)
+GritsObject *grits_viewer_remove(GritsViewer *viewer, GritsObject *object)
{
- GritsObject *object = _object;
GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer);
if (!klass->remove)
g_warning("GritsViewer: remove - Unimplemented");
- klass->remove(viewer, object->ref);
- object->ref = NULL;
- object->viewer = NULL;
+ klass->remove(viewer, object);
return object;
}
gpointer (*add) (GritsViewer *viewer, GritsObject *object,
gint level, gboolean sort);
- GritsObject *(*remove) (GritsViewer *viewer, gpointer ref);
+ GritsObject *(*remove) (GritsViewer *viewer, GritsObject *object);
};
GType grits_viewer_get_type(void);
gpointer grits_viewer_add(GritsViewer *viewer, GritsObject *object,
gint level, gboolean sort);
-GritsObject *grits_viewer_remove(GritsViewer *viewer, gpointer ref);
+GritsObject *grits_viewer_remove(GritsViewer *viewer, GritsObject *object);
#endif
if (LOAD_BIL)
grits_viewer_clear_height_func(elev->viewer);
if (LOAD_OPENGL)
- grits_viewer_remove(elev->viewer, elev->tiles);
+ grits_viewer_remove(elev->viewer, GRITS_OBJECT(elev->tiles));
g_signal_handler_disconnect(elev->viewer, elev->sigid);
g_object_unref(elev->viewer);
elev->viewer = NULL;
/* Drop references */
if (map->viewer) {
g_signal_handler_disconnect(map->viewer, map->sigid);
- grits_viewer_remove(map->viewer, map->tiles);
+ grits_viewer_remove(map->viewer, GRITS_OBJECT(map->tiles));
soup_session_abort(map->wms->http->soup);
g_thread_pool_free(map->threads, TRUE, TRUE);
while (gtk_events_pending())
/* Drop references */
if (sat->viewer) {
g_signal_handler_disconnect(sat->viewer, sat->sigid);
- grits_viewer_remove(sat->viewer, sat->tiles);
+ grits_viewer_remove(sat->viewer, GRITS_OBJECT(sat->tiles));
soup_session_abort(sat->wms->http->soup);
g_thread_pool_free(sat->threads, TRUE, TRUE);
while (gtk_events_pending())
g_debug("GritsPluginTest: dispose");
GritsPluginTest *test = GRITS_PLUGIN_TEST(_test);
if (test->viewer) {
- grits_viewer_remove(test->viewer, test->marker);
+ grits_viewer_remove(test->viewer, GRITS_OBJECT(test->marker));
g_object_unref(test->viewer);
test->viewer = NULL;
}