[gimp] app: add undo_remove ability to the extension manager.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add undo_remove ability to the extension manager.
- Date: Wed, 1 May 2019 14:14:35 +0000 (UTC)
commit 09ca1e896297d19921c1be63b15c4ec5d5860548
Author: Jehan <jehan girinstud io>
Date: Tue Apr 30 14:33:10 2019 +0900
app: add undo_remove ability to the extension manager.
This allows an extension removal to be cancelable for a given session
(at end of session, the extension removal is definitive and you have to
reinstall it if you want it back).
app/core/gimpextensionmanager.c | 50 +++++++++++++++++++++++++++++++++++++++++
app/core/gimpextensionmanager.h | 5 +++++
2 files changed, 55 insertions(+)
---
diff --git a/app/core/gimpextensionmanager.c b/app/core/gimpextensionmanager.c
index bdd8dede31..118966919b 100644
--- a/app/core/gimpextensionmanager.c
+++ b/app/core/gimpextensionmanager.c
@@ -720,6 +720,31 @@ gimp_extension_manager_can_run (GimpExtensionManager *manager,
return TRUE;
}
+/**
+ * gimp_extension_manager_is_removed:
+ * @manager:
+ * @extension:
+ *
+ * Returns: %TRUE is @extension was installed and has been removed
+ * (hence gimp_extension_manager_undo_remove() can be used on it).
+ */
+gboolean
+gimp_extension_manager_is_removed (GimpExtensionManager *manager,
+ GimpExtension *extension)
+{
+ GList *iter;
+
+ g_return_val_if_fail (GIMP_IS_EXTENSION_MANAGER (manager), FALSE);
+ g_return_val_if_fail (GIMP_IS_EXTENSION (extension), FALSE);
+
+ iter = manager->p->uninstalled_extensions;
+ for (; iter; iter = iter->next)
+ if (gimp_extension_cmp (iter->data, extension) == 0)
+ break;
+
+ return (iter != NULL);
+}
+
/**
* gimp_extension_manager_install:
* @manager:
@@ -803,6 +828,31 @@ gimp_extension_manager_remove (GimpExtensionManager *manager,
return TRUE;
}
+gboolean
+gimp_extension_manager_undo_remove (GimpExtensionManager *manager,
+ GimpExtension *extension,
+ GError **error)
+{
+ GList *iter;
+
+ g_return_val_if_fail (GIMP_IS_EXTENSION_MANAGER (manager), FALSE);
+ g_return_val_if_fail (GIMP_IS_EXTENSION (extension), FALSE);
+
+ iter = manager->p->uninstalled_extensions;
+ for (; iter; iter = iter->next)
+ if (gimp_extension_cmp (iter->data, extension) == 0)
+ break;
+
+ /* The extension has to be in the uninstalled extension list. */
+ g_return_val_if_fail (iter != NULL, FALSE);
+
+ manager->p->uninstalled_extensions = g_list_remove (manager->p->uninstalled_extensions,
+ extension);
+ gimp_extension_manager_install (manager, extension, error);
+
+ return TRUE;
+}
+
/* Private functions. */
static void
diff --git a/app/core/gimpextensionmanager.h b/app/core/gimpextensionmanager.h
index 7aebedeaa0..39de0cb016 100644
--- a/app/core/gimpextensionmanager.h
+++ b/app/core/gimpextensionmanager.h
@@ -69,6 +69,8 @@ gboolean gimp_extension_manager_is_running (GimpExtensi
GimpExtension *extension);
gboolean gimp_extension_manager_can_run (GimpExtensionManager *manager,
GimpExtension *extension);
+gboolean gimp_extension_manager_is_removed (GimpExtensionManager *manager,
+ GimpExtension *extension);
gboolean gimp_extension_manager_install (GimpExtensionManager *manager,
GimpExtension *extension,
@@ -76,5 +78,8 @@ gboolean gimp_extension_manager_install (GimpExtensi
gboolean gimp_extension_manager_remove (GimpExtensionManager *manager,
GimpExtension *extension,
GError **error);
+gboolean gimp_extension_manager_undo_remove (GimpExtensionManager *manager,
+ GimpExtension *extension,
+ GError **error);
#endif /* __GIMP_EXTENSION_MANAGER_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]