[gnome-panel/wip/muktupavels/api: 6/7] applets-manager: add panel_applets_manager_is_applet_disabled



commit 692a1d1f3e2aa8d54f11b3bac774bbd754407a3f
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Apr 14 18:55:48 2020 +0300

    applets-manager: add panel_applets_manager_is_applet_disabled

 gnome-panel/gp-applet-manager.c     | 76 +++++++++++++++++++++++++++++++++++++
 gnome-panel/gp-applet-manager.h     | 42 ++++++++++----------
 gnome-panel/panel-applets-manager.c |  9 +++++
 gnome-panel/panel-applets-manager.h | 29 +++++++-------
 4 files changed, 124 insertions(+), 32 deletions(-)
---
diff --git a/gnome-panel/gp-applet-manager.c b/gnome-panel/gp-applet-manager.c
index 6ecae9d50..6dc0dd954 100644
--- a/gnome-panel/gp-applet-manager.c
+++ b/gnome-panel/gp-applet-manager.c
@@ -17,8 +17,18 @@
 
 #include "config.h"
 
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
 #include <string.h>
 
+#ifdef GDK_WINDOWING_WAYLAND
+#include <gdk/gdkwayland.h>
+#endif
+
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
+
 #include "gp-applet-manager.h"
 #include "gp-module-manager.h"
 #include "libgnome-panel/gp-applet-info-private.h"
@@ -31,6 +41,8 @@ struct _GpAppletManager
 {
   GObject          parent;
 
+  char            *backend;
+
   GpModuleManager *manager;
 
   GHashTable      *infos;
@@ -38,6 +50,22 @@ struct _GpAppletManager
 
 G_DEFINE_TYPE (GpAppletManager, gp_applet_manager, G_TYPE_OBJECT)
 
+static char *
+get_current_backend (void)
+{
+#ifdef GDK_WINDOWING_WAYLAND
+  if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))
+    return g_strdup ("wayland");
+#endif
+
+#ifdef GDK_WINDOWING_X11
+  if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
+    return g_strdup ("x11");
+#endif
+
+  return g_strdup ("unknown");
+}
+
 static GVariant *
 get_initial_settings (PanelAppletFrameActivating *frame_act)
 {
@@ -144,6 +172,7 @@ gp_applet_manager_finalize (GObject *object)
 
   self = GP_APPLET_MANAGER (object);
 
+  g_clear_pointer (&self->backend, g_free);
   g_clear_object (&self->manager);
   g_clear_pointer (&self->infos, g_hash_table_destroy);
 
@@ -163,6 +192,8 @@ gp_applet_manager_class_init (GpAppletManagerClass *self_class)
 static void
 gp_applet_manager_init (GpAppletManager *self)
 {
+  self->backend = get_current_backend ();
+
   self->manager = gp_module_manager_new ();
 
   self->infos = g_hash_table_new_full (g_str_hash,
@@ -429,3 +460,48 @@ gp_applet_manager_get_standalone_menu (GpAppletManager *self)
 
   return menu;
 }
+
+gboolean
+gp_applet_manager_is_applet_disabled (GpAppletManager  *self,
+                                      const char       *iid,
+                                      char            **reason)
+{
+  const char *applet_id;
+  char *module_id;
+  GpModule *module;
+  GpLockdownFlags lockdowns;
+
+  g_return_val_if_fail (iid != NULL, FALSE);
+  g_return_val_if_fail (reason == NULL || *reason == NULL, FALSE);
+
+  if (panel_lockdown_is_applet_disabled (panel_lockdown_get (), iid))
+    {
+      if (reason != NULL)
+        *reason = g_strdup (_("Disabled."));
+
+      return TRUE;
+    }
+
+  applet_id = g_strrstr (iid, "::");
+  if (!applet_id)
+    {
+      g_assert_not_reached ();
+      return TRUE;
+    }
+
+  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)
+    return FALSE;
+
+  applet_id += 2;
+  lockdowns = panel_lockdown_get_flags_s (iid);
+
+  return gp_module_is_applet_disabled (module,
+                                       applet_id,
+                                       self->backend,
+                                       lockdowns,
+                                       reason);
+}
diff --git a/gnome-panel/gp-applet-manager.h b/gnome-panel/gp-applet-manager.h
index e57f0ca03..7f36662ac 100644
--- a/gnome-panel/gp-applet-manager.h
+++ b/gnome-panel/gp-applet-manager.h
@@ -28,32 +28,36 @@ 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_disabled        (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..8f2a04ccb 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_disabled (const char  *iid,
+                                          char       **reason)
+{
+       _panel_applets_managers_ensure_loaded ();
+
+       return gp_applet_manager_is_applet_disabled (manager, iid, reason);
+}
diff --git a/gnome-panel/panel-applets-manager.h b/gnome-panel/panel-applets-manager.h
index a1839d874..a5a590f4a 100644
--- a/gnome-panel/panel-applets-manager.h
+++ b/gnome-panel/panel-applets-manager.h
@@ -29,25 +29,28 @@
 
 G_BEGIN_DECLS
 
-GList            *panel_applets_manager_get_applets                 (void);
+GList           *panel_applets_manager_get_applets               (void);
 
-gboolean          panel_applets_manager_factory_activate            (const gchar     *iid);
-void              panel_applets_manager_factory_deactivate          (const gchar     *iid);
+gboolean         panel_applets_manager_factory_activate          (const gchar                 *iid);
+void             panel_applets_manager_factory_deactivate        (const gchar                 *iid);
 
-PanelAppletInfo  *panel_applets_manager_get_applet_info             (const gchar     *iid);
+PanelAppletInfo *panel_applets_manager_get_applet_info           (const gchar                 *iid);
 
-gboolean          panel_applets_manager_load_applet                 (const gchar                *iid,
-                                                                    PanelAppletFrameActivating *frame_act);
+gboolean         panel_applets_manager_load_applet               (const gchar                 *iid,
+                                                                  PanelAppletFrameActivating  *frame_act);
 
-gchar            *panel_applets_manager_get_new_iid                 (const gchar     *old_iid);
+gchar           *panel_applets_manager_get_new_iid               (const gchar                 *old_iid);
 
-gboolean          panel_applets_manager_open_initial_setup_dialog   (const gchar            *iid,
-                                                                     GtkWindow              *parent,
-                                                                     GpInitialSetupCallback  callback,
-                                                                     gpointer                user_data,
-                                                                     GDestroyNotify          free_func);
+gboolean         panel_applets_manager_open_initial_setup_dialog (const gchar                 *iid,
+                                                                  GtkWindow                   *parent,
+                                                                  GpInitialSetupCallback       callback,
+                                                                  gpointer                     user_data,
+                                                                  GDestroyNotify               free_func);
 
-GtkWidget        *panel_applets_manager_get_standalone_menu         (void);
+GtkWidget       *panel_applets_manager_get_standalone_menu       (void);
+
+gboolean         panel_applets_manager_is_applet_disabled        (const char                  *iid,
+                                                                  char                       **reason);
 
 G_END_DECLS
 


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