summaryrefslogtreecommitdiff
path: root/mate-panel/libmate-panel-applet-private
diff options
context:
space:
mode:
authorlukefromdc <[email protected]>2017-07-14 15:25:37 -0400
committerlukefromdc <[email protected]>2017-08-13 14:37:24 -0400
commit2f5fb35954021ba1fbd71aa3c6304394d2d67bdd (patch)
treef028d1577bc57f48e3622b825aad0b8d0cdae9b0 /mate-panel/libmate-panel-applet-private
parent788cde808151c8b4f06ee343f1e7006341c2d0ee (diff)
downloadmate-panel-2f5fb35954021ba1fbd71aa3c6304394d2d67bdd.tar.bz2
mate-panel-2f5fb35954021ba1fbd71aa3c6304394d2d67bdd.tar.xz
make it possible to get applet widget
We will use this to get applet widget from factory. This will allow to bypass GtkPlug/GtkSocket. Based on https://github.com/GNOME/gnome-panel/commit/408bab094d1fad471b342548dabc58410a3dc327
Diffstat (limited to 'mate-panel/libmate-panel-applet-private')
-rw-r--r--mate-panel/libmate-panel-applet-private/panel-applets-manager-dbus.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/mate-panel/libmate-panel-applet-private/panel-applets-manager-dbus.c b/mate-panel/libmate-panel-applet-private/panel-applets-manager-dbus.c
index 695f66fb..43263dae 100644
--- a/mate-panel/libmate-panel-applet-private/panel-applets-manager-dbus.c
+++ b/mate-panel/libmate-panel-applet-private/panel-applets-manager-dbus.c
@@ -46,6 +46,8 @@ struct _MatePanelAppletsManagerDBusPrivate
};
typedef gint (* ActivateAppletFunc) (void);
+typedef GtkWidget * (* GetAppletWidgetFunc) (const gchar *factory_id,
+ guint uid);
typedef struct _MatePanelAppletFactoryInfo {
gchar *id;
@@ -53,6 +55,7 @@ typedef struct _MatePanelAppletFactoryInfo {
gboolean in_process;
GModule *module;
ActivateAppletFunc activate_applet;
+ GetAppletWidgetFunc get_applet_widget;
guint n_applets;
gchar *srcdir;
@@ -395,6 +398,7 @@ mate_panel_applets_manager_dbus_factory_activate (MatePanelAppletsManager *manag
{
MatePanelAppletFactoryInfo *info;
ActivateAppletFunc activate_applet;
+ GetAppletWidgetFunc get_applet_widget;
info = get_applet_factory_info (manager, iid);
if (!info)
@@ -434,6 +438,15 @@ mate_panel_applets_manager_dbus_factory_activate (MatePanelAppletsManager *manag
return FALSE;
}
+ if (!g_module_symbol (info->module, "mate_panel_applet_get_applet_widget", (gpointer *) &get_applet_widget)) {
+ /* FIXME: use a GError? */
+ g_warning ("Failed to load applet %s: %s", iid, g_module_error ());
+ g_module_close (info->module);
+ info->module = NULL;
+
+ return FALSE;
+ }
+
/* Activate the applet */
if (activate_applet () != 0) {
/* FIXME: use a GError? */
@@ -444,6 +457,7 @@ mate_panel_applets_manager_dbus_factory_activate (MatePanelAppletsManager *manag
return FALSE;
}
info->activate_applet = activate_applet;
+ info->get_applet_widget = get_applet_widget;
info->n_applets = 1;
@@ -550,6 +564,20 @@ mate_panel_applets_manager_dbus_load_applet (MatePanelAppletsManager *ma
return mate_panel_applet_frame_dbus_load (iid, frame_act);
}
+static GtkWidget *
+mate_panel_applets_manager_dbus_get_applet_widget (MatePanelAppletsManager *manager,
+ const gchar *iid,
+ guint uid)
+{
+ MatePanelAppletFactoryInfo *info;
+
+ info = get_applet_factory_info (manager, iid);
+ if (!info)
+ return NULL;
+
+ return info->get_applet_widget (info->id, uid);
+}
+
static void
mate_panel_applets_manager_dbus_finalize (GObject *object)
{
@@ -598,6 +626,7 @@ mate_panel_applets_manager_dbus_class_init (MatePanelAppletsManagerDBusClass *cl
manager_class->get_applet_info = mate_panel_applets_manager_dbus_get_applet_info;
manager_class->get_applet_info_from_old_id = mate_panel_applets_manager_dbus_get_applet_info_from_old_id;
manager_class->load_applet = mate_panel_applets_manager_dbus_load_applet;
+ manager_class->get_applet_widget = mate_panel_applets_manager_dbus_get_applet_widget;
g_type_class_add_private (class, sizeof (MatePanelAppletsManagerDBusPrivate));
}