Add a function to determine if an extension is being deactivated

This commit is contained in:
Christian Dywan 2009-04-22 20:01:10 +02:00
parent e3ce454b78
commit d7f6c7ded8
2 changed files with 33 additions and 6 deletions

View file

@ -29,7 +29,7 @@ struct _MidoriExtensionPrivate
gchar* authors; gchar* authors;
MidoriApp* app; MidoriApp* app;
gboolean active; gint active;
gchar* config_dir; gchar* config_dir;
GList* lsettings; GList* lsettings;
GHashTable* settings; GHashTable* settings;
@ -73,7 +73,7 @@ void me_setting_free (gpointer setting)
} }
#define midori_extension_can_install_setting(extension, name) \ #define midori_extension_can_install_setting(extension, name) \
if (extension->priv->active) \ if (extension->priv->active > 0) \
{ \ { \
g_critical ("%s: Settings have to be installed before " \ g_critical ("%s: Settings have to be installed before " \
"the extension is activated.", G_STRFUNC); \ "the extension is activated.", G_STRFUNC); \
@ -283,7 +283,7 @@ midori_extension_activate_cb (MidoriExtension* extension,
} }
extension->priv->app = g_object_ref (app); extension->priv->app = g_object_ref (app);
extension->priv->active = TRUE; extension->priv->active = 1;
/* FIXME: Disconnect all signal handlers */ /* FIXME: Disconnect all signal handlers */
} }
@ -294,7 +294,7 @@ midori_extension_init (MidoriExtension* extension)
MIDORI_TYPE_EXTENSION, MidoriExtensionPrivate); MIDORI_TYPE_EXTENSION, MidoriExtensionPrivate);
extension->priv->app = NULL; extension->priv->app = NULL;
extension->priv->active = FALSE; extension->priv->active = 0;
extension->priv->config_dir = NULL; extension->priv->config_dir = NULL;
extension->priv->lsettings = NULL; extension->priv->lsettings = NULL;
extension->priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal, extension->priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal,
@ -416,7 +416,30 @@ midori_extension_is_active (MidoriExtension* extension)
{ {
g_return_val_if_fail (MIDORI_IS_EXTENSION (extension), FALSE); g_return_val_if_fail (MIDORI_IS_EXTENSION (extension), FALSE);
return extension->priv->active; return extension->priv->active > 0;
}
/**
* midori_extension_is_deactivating:
* @extension: a #MidoriExtension
*
* Determines if @extension is currently in the process of
* being deactivated.
*
* Extensions remain fully functional even while being
* deactivated, so you can for instance still save settings
* but you may need to cleanup during deactivation.
*
* Return value: %TRUE if @extension is deactivating
*
* Since: 0.1.7
**/
gboolean
midori_extension_is_deactivating (MidoriExtension* extension)
{
g_return_val_if_fail (MIDORI_IS_EXTENSION (extension), FALSE);
return extension->priv->active == 2;
} }
/** /**
@ -430,8 +453,9 @@ midori_extension_deactivate (MidoriExtension* extension)
{ {
g_return_if_fail (midori_extension_is_active (extension)); g_return_if_fail (midori_extension_is_active (extension));
extension->priv->active = 2;
g_signal_emit (extension, signals[DEACTIVATE], 0); g_signal_emit (extension, signals[DEACTIVATE], 0);
extension->priv->active = FALSE; extension->priv->active = 0;
katze_object_assign (extension->priv->app, NULL); katze_object_assign (extension->priv->app, NULL);
} }

View file

@ -54,6 +54,9 @@ midori_extension_is_prepared (MidoriExtension* extension);
gboolean gboolean
midori_extension_is_active (MidoriExtension* extension); midori_extension_is_active (MidoriExtension* extension);
gboolean
midori_extension_is_deactivating (MidoriExtension* extension);
void void
midori_extension_deactivate (MidoriExtension* extension); midori_extension_deactivate (MidoriExtension* extension);