[gnome-panel/wip/muktupavels/more-api: 3/4] applets-manager: add panel_applets_manager_is_applet_available



commit 3810455d0b40d4b1865b93b2a7ea067a7522139b
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Apr 14 01:44:38 2020 +0300

    applets-manager: add panel_applets_manager_is_applet_available

 gnome-panel/gp-applet-manager.c     | 39 +++++++++++++++++++++++++++++++++
 gnome-panel/gp-applet-manager.h     | 43 +++++++++++++++++++++----------------
 gnome-panel/panel-applets-manager.c |  9 ++++++++
 gnome-panel/panel-applets-manager.h |  3 +++
 4 files changed, 75 insertions(+), 19 deletions(-)
---
diff --git a/gnome-panel/gp-applet-manager.c b/gnome-panel/gp-applet-manager.c
index 6ecae9d50..4d425df71 100644
--- a/gnome-panel/gp-applet-manager.c
+++ b/gnome-panel/gp-applet-manager.c
@@ -429,3 +429,42 @@ gp_applet_manager_get_standalone_menu (GpAppletManager *self)
 
   return menu;
 }
+
+gboolean
+gp_applet_manager_is_applet_available (GpAppletManager  *self,
+                                       const char       *iid,
+                                       char            **reason)
+{
+  const gchar *applet_id;
+  gchar *module_id;
+  GpModule *module;
+  GpLockdownFlags lockdown_flags;
+
+  g_return_val_if_fail (iid != NULL, FALSE);
+  g_return_val_if_fail (reason == NULL || *reason == NULL, FALSE);
+
+  applet_id = g_strrstr (iid, "::");
+  if (!applet_id)
+    {
+      g_assert_not_reached ();
+      return FALSE;
+    }
+
+  module_id = g_strndup (iid, strlen (iid) - strlen (applet_id));
+  module = gp_module_manager_get_module (self->manager, module_id);
+  g_free (module_id);
+
+  if (!module)
+    {
+      g_assert_not_reached ();
+      return FALSE;
+    }
+
+  applet_id += 2;
+  lockdown_flags = panel_lockdown_get_lockdown_flags_s ();
+
+  return gp_module_is_applet_available (module,
+                                        applet_id,
+                                        lockdown_flags,
+                                        reason);
+}
diff --git a/gnome-panel/gp-applet-manager.h b/gnome-panel/gp-applet-manager.h
index e57f0ca03..cd7382456 100644
--- a/gnome-panel/gp-applet-manager.h
+++ b/gnome-panel/gp-applet-manager.h
@@ -28,32 +28,37 @@ G_DECLARE_FINAL_TYPE (GpAppletManager, gp_applet_manager,
 
 GpAppletManager *gp_applet_manager_new                       (void);
 
-GList           *gp_applet_manager_get_applets               (GpAppletManager            *self);
+GList           *gp_applet_manager_get_applets               (GpAppletManager             *self);
 
-gboolean         gp_applet_manager_factory_activate          (GpAppletManager            *self,
-                                                              const char                 *iid);
+gboolean         gp_applet_manager_factory_activate          (GpAppletManager             *self,
+                                                              const char                  *iid);
 
-void             gp_applet_manager_factory_deactivate        (GpAppletManager            *self,
-                                                              const char                 *iid);
+void             gp_applet_manager_factory_deactivate        (GpAppletManager             *self,
+                                                              const char                  *iid);
 
-PanelAppletInfo *gp_applet_manager_get_applet_info           (GpAppletManager            *self,
-                                                              const char                 *iid);
+PanelAppletInfo *gp_applet_manager_get_applet_info           (GpAppletManager             *self,
+                                                              const char                  *iid);
 
-gboolean         gp_applet_manager_load_applet               (GpAppletManager            *self,
-                                                              const char                 *iid,
-                                                              PanelAppletFrameActivating *frame_act);
+gboolean         gp_applet_manager_load_applet               (GpAppletManager             *self,
+                                                              const char                  *iid,
+                                                              PanelAppletFrameActivating  *frame_act);
 
-char            *gp_applet_manager_get_new_iid               (GpAppletManager            *self,
-                                                              const char                 *old_iid);
+char            *gp_applet_manager_get_new_iid               (GpAppletManager             *self,
+                                                              const char                  *old_iid);
 
-gboolean         gp_applet_manager_open_initial_setup_dialog (GpAppletManager            *self,
-                                                              const char                 *iid,
-                                                              GtkWindow                  *parent,
-                                                              GpInitialSetupCallback      callback,
-                                                              gpointer                    user_data,
-                                                              GDestroyNotify              free_func);
+gboolean         gp_applet_manager_open_initial_setup_dialog (GpAppletManager             *self,
+                                                              const char                  *iid,
+                                                              GtkWindow                   *parent,
+                                                              GpInitialSetupCallback       callback,
+                                                              gpointer                     user_data,
+                                                              GDestroyNotify               free_func);
 
-GtkWidget       *gp_applet_manager_get_standalone_menu       (GpAppletManager            *self);
+GtkWidget       *gp_applet_manager_get_standalone_menu       (GpAppletManager             *self);
+
+
+gboolean         gp_applet_manager_is_applet_available       (GpAppletManager             *self,
+                                                              const char                  *iid,
+                                                              char                       **reason);
 
 G_END_DECLS
 
diff --git a/gnome-panel/panel-applets-manager.c b/gnome-panel/panel-applets-manager.c
index 99c2610a4..1d4d8879a 100644
--- a/gnome-panel/panel-applets-manager.c
+++ b/gnome-panel/panel-applets-manager.c
@@ -126,3 +126,12 @@ panel_applets_manager_get_standalone_menu (void)
 
        return gp_applet_manager_get_standalone_menu (manager);
 }
+
+gboolean
+panel_applets_manager_is_applet_available (const char  *iid,
+                                           char       **reason)
+{
+       _panel_applets_managers_ensure_loaded ();
+
+       return gp_applet_manager_is_applet_available (manager, iid, reason);
+}
diff --git a/gnome-panel/panel-applets-manager.h b/gnome-panel/panel-applets-manager.h
index a1839d874..42efd3e7a 100644
--- a/gnome-panel/panel-applets-manager.h
+++ b/gnome-panel/panel-applets-manager.h
@@ -49,6 +49,9 @@ gboolean          panel_applets_manager_open_initial_setup_dialog   (const gchar
 
 GtkWidget        *panel_applets_manager_get_standalone_menu         (void);
 
+gboolean          panel_applets_manager_is_applet_available         (const char      *iid,
+                                                                     char           **reason);
+
 G_END_DECLS
 
 #endif /* __PANEL_APPLETS_MANAGER_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]