[anjuta] profile-manager: Add new close() function.
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] profile-manager: Add new close() function.
- Date: Sat, 1 Dec 2012 15:53:14 +0000 (UTC)
commit bf39c402b8a0236182f67039c59bb1adb2cee509
Author: Carl-Anton Ingmarsson <ca ingmarsson gmail com>
Date: Sun Nov 25 21:45:09 2012 +0100
profile-manager: Add new close() function.
/**
* anjuta_profile_manager_close:
* @profile_manager: A #AnjutaProfileManager object.
*
* Close the #AnjutaProfileManager causing "profile-descoped" to be emitted and
* all queued and previous profiles to be released. This function is to be used
* when destroying an Anjuta instance.
*/
https://bugzilla.gnome.org/show_bug.cgi?id=689054
libanjuta/anjuta-profile-manager.c | 75 +++++++++++++++++++++++++++---------
libanjuta/anjuta-profile-manager.h | 2 +
2 files changed, 58 insertions(+), 19 deletions(-)
---
diff --git a/libanjuta/anjuta-profile-manager.c b/libanjuta/anjuta-profile-manager.c
index 45fe2b7..2f61af2 100644
--- a/libanjuta/anjuta-profile-manager.c
+++ b/libanjuta/anjuta-profile-manager.c
@@ -119,20 +119,14 @@ anjuta_profile_manager_init (AnjutaProfileManager *object)
static void
anjuta_profile_manager_finalize (GObject *object)
{
- AnjutaProfileManagerPriv *priv;
- priv = ANJUTA_PROFILE_MANAGER (object)->priv;
+ AnjutaProfileManagerPriv *priv = ANJUTA_PROFILE_MANAGER (object)->priv;
+
if (priv->profiles)
- {
- g_list_foreach (priv->profiles, (GFunc)g_object_unref, NULL);
- g_list_free (priv->profiles);
- priv->profiles = NULL;
- }
+ g_list_free_full (priv->profiles, g_object_unref);
+
if (priv->profiles_queue)
- {
- g_list_foreach (priv->profiles_queue, (GFunc)g_object_unref, NULL);
- g_list_free (priv->profiles_queue);
- priv->profiles_queue = NULL;
- }
+ g_list_free_full (priv->profiles_queue, g_object_unref);
+
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -512,7 +506,7 @@ anjuta_profile_manager_push (AnjutaProfileManager *profile_manager,
AnjutaProfile *profile, GError **error)
{
g_return_val_if_fail (ANJUTA_IS_PROFILE_MANAGER (profile_manager), FALSE);
-
+
/* Emit profile push signal */
g_signal_emit_by_name (profile_manager, "profile-pushed",
profile);
@@ -541,10 +535,10 @@ anjuta_profile_manager_pop (AnjutaProfileManager *profile_manager,
{
AnjutaProfileManagerPriv *priv;
AnjutaProfile *profile;
+
g_return_val_if_fail (ANJUTA_IS_PROFILE_MANAGER (profile_manager), FALSE);
-
priv = profile_manager->priv;
-
+
/* First check in the queue */
if (priv->profiles_queue)
{
@@ -587,9 +581,7 @@ anjuta_profile_manager_pop (AnjutaProfileManager *profile_manager,
}
g_object_unref (profile);
}
-
- g_warning ("No profiles in the stack. Can not pop out any profile: %s",
- profile_name);
+
return FALSE;
}
@@ -607,6 +599,7 @@ anjuta_profile_manager_freeze (AnjutaProfileManager *profile_manager)
{
AnjutaProfileManagerPriv *priv;
g_return_if_fail (ANJUTA_IS_PROFILE_MANAGER (profile_manager));
+
priv = profile_manager->priv;
priv->freeze_count++;
}
@@ -628,8 +621,9 @@ anjuta_profile_manager_thaw (AnjutaProfileManager *profile_manager,
{
AnjutaProfileManagerPriv *priv;
g_return_val_if_fail (ANJUTA_IS_PROFILE_MANAGER (profile_manager), FALSE);
+
priv = profile_manager->priv;
-
+
if (priv->freeze_count > 0)
priv->freeze_count--;
@@ -668,6 +662,7 @@ AnjutaProfile*
anjuta_profile_manager_get_current (AnjutaProfileManager *profile_manager)
{
g_return_val_if_fail (ANJUTA_IS_PROFILE_MANAGER (profile_manager), NULL);
+
if (profile_manager->priv->profiles_queue)
return ANJUTA_PROFILE (profile_manager->priv->profiles_queue->data);
else if (profile_manager->priv->profiles)
@@ -675,3 +670,45 @@ anjuta_profile_manager_get_current (AnjutaProfileManager *profile_manager)
else
return NULL;
}
+
+/**
+ * anjuta_profile_manager_close:
+ * @profile_manager: A #AnjutaProfileManager object.
+ *
+ * Close the #AnjutaProfileManager causing "profile-descoped" to be emitted and
+ * all queued and previous profiles to be released. This function is to be used
+ * when destroying an Anjuta instance.
+ */
+void
+anjuta_profile_manager_close (AnjutaProfileManager *profile_manager)
+{
+ AnjutaProfileManagerPriv *priv;
+
+ g_return_if_fail (ANJUTA_IS_PROFILE_MANAGER (profile_manager));
+
+ priv = profile_manager->priv;
+
+ g_signal_handlers_disconnect_by_func (priv->plugin_manager,
+ on_plugin_activated, profile_manager);
+ g_signal_handlers_disconnect_by_func (priv->plugin_manager,
+ on_plugin_deactivated, profile_manager);
+
+ if (priv->profiles)
+ {
+ AnjutaProfile *profile = ANJUTA_PROFILE (priv->profiles->data);
+
+ /* Emit "profile-descoped" so that other parts of anjuta can store
+ * information about the currently loaded profile. */
+ g_signal_emit_by_name (profile_manager, "profile-descoped",
+ profile);
+
+ g_list_free_full (priv->profiles, g_object_unref);
+ priv->profiles = NULL;
+ }
+
+ if (priv->profiles_queue)
+ {
+ g_list_free_full (priv->profiles, g_object_unref);
+ priv->profiles_queue = NULL;
+ }
+}
diff --git a/libanjuta/anjuta-profile-manager.h b/libanjuta/anjuta-profile-manager.h
index db4a092..3460303 100644
--- a/libanjuta/anjuta-profile-manager.h
+++ b/libanjuta/anjuta-profile-manager.h
@@ -76,6 +76,8 @@ gboolean anjuta_profile_manager_thaw (AnjutaProfileManager *profile_manager,
GError **error);
AnjutaProfile* anjuta_profile_manager_get_current (AnjutaProfileManager *profile_manager);
+void anjuta_profile_manager_close (AnjutaProfileManager *profile_manager);
+
G_END_DECLS
#endif /* _ANJUTA_PROFILE_MANAGER_H_ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]