[gnome-panel/wip/muktupavels/api: 6/7] applets-manager: add panel_applets_manager_is_applet_disabled
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel/wip/muktupavels/api: 6/7] applets-manager: add panel_applets_manager_is_applet_disabled
- Date: Tue, 14 Apr 2020 16:15:52 +0000 (UTC)
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]