[gimp] app: add undo_remove ability to the extension manager.



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]