diff options
author | Dan Nicholson <dbn.lists@gmail.com> | 2013-02-23 21:44:34 -0800 |
---|---|---|
committer | Dan Nicholson <dbn.lists@gmail.com> | 2013-02-23 22:07:02 -0800 |
commit | a2e76b7538ee60e3b2e56ec80f5a296315067696 (patch) | |
tree | 1fe38708df255a81fb001eab13b2742792cc18f5 /src | |
parent | 17a838b9b101dae9dac0a72f81f0892ee01dadd6 (diff) |
evbp: Handle destruction appropriately
Without referencing the objects, the lifetimes of the plug and viewer
were difficult to manage and the pointers could become invalid
unexpectedly.
Diffstat (limited to 'src')
-rw-r--r-- | src/evbp.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -172,6 +172,7 @@ evbp_new(NPMIMEType pluginType, NPP instance, uint16_t mode, /* create new viewer */ priv->viewer = evbp_viewer_new(); + g_object_ref(priv->viewer); gtk_widget_show(priv->viewer); return NPERR_NO_ERROR; @@ -184,8 +185,10 @@ evbp_destroy(NPP instance, NPSavedData **save) g_debug("%s", __func__); + if (priv->viewer) + g_object_unref(priv->viewer); if (priv->plug) - gtk_widget_destroy(priv->plug); + g_object_unref(priv->plug); npn_funcs->memfree(instance->pdata); instance->pdata = NULL; @@ -215,6 +218,7 @@ evbp_set_window(NPP instance, NPWindow *window) g_debug("plugging into window id %lu", (unsigned long)id); priv->plug = evbp_plug_new(id); + g_object_ref(priv->plug); gtk_widget_set_size_request(priv->plug, window->width, window->height); gtk_container_add(GTK_CONTAINER(priv->plug), priv->viewer); |