Updating branch refs/heads/master
         to cee9b27c882738dfb1f80f816757cbaaeecda821 (commit)
       from 67c060d1d815937a5dc60c17d54945c00591ef4f (commit)

commit cee9b27c882738dfb1f80f816757cbaaeecda821
Author: Mark Trompell <m...@foresightlinux.org>
Date:   Fri May 29 15:56:42 2009 +0200

    start to break things

 panel-plugin/indicator.c |   78 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/panel-plugin/indicator.c b/panel-plugin/indicator.c
index 35fa940..d7e2ae6 100644
--- a/panel-plugin/indicator.c
+++ b/panel-plugin/indicator.c
@@ -43,6 +43,9 @@
 static void
 indicator_construct (XfcePanelPlugin *plugin);
 
+static gboolean
+load_module (const gchar * name, GtkWidget * menu);
+
 
 /* register the plugin */
 XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (indicator_construct);
@@ -270,3 +273,78 @@ indicator_construct (XfcePanelPlugin *plugin)
   g_signal_connect (G_OBJECT (plugin), "about",
                     G_CALLBACK (indicator_about), NULL);
 }
+
+
+static gboolean
+load_module (const gchar * name, GtkWidget * menu)
+{
+       g_debug("Looking at Module: %s", name);
+       g_return_val_if_fail(name != NULL, FALSE);
+
+       guint suffix_len = strlen(G_MODULE_SUFFIX);
+       guint name_len = strlen(name);
+
+       g_return_val_if_fail(name_len > suffix_len, FALSE);
+
+       int i;
+       for (i = 0; i < suffix_len; i++) {
+               if (name[(name_len - suffix_len) + i] != (G_MODULE_SUFFIX)[i])
+                       return FALSE;
+       }
+       g_debug("Loading Module: %s", name);
+
+       gchar * fullpath = g_build_filename(INDICATOR_DIR, name, NULL);
+       GModule * module = g_module_open(fullpath,
+                                     G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+       g_free(fullpath);
+       g_return_val_if_fail(module != NULL, FALSE);
+
+       get_version_t lget_version = NULL;
+       g_return_val_if_fail(g_module_symbol(module, INDICATOR_GET_VERSION_S, 
(gpointer *)(&lget_version)), FALSE);
+       if (!INDICATOR_VERSION_CHECK(lget_version())) {
+               g_warning("Indicator using API version '%s' we're expecting 
'%s'", lget_version(), INDICATOR_VERSION);
+               return FALSE;
+       }
+
+       get_label_t lget_label = NULL;
+       g_return_val_if_fail(g_module_symbol(module, INDICATOR_GET_LABEL_S, 
(gpointer *)(&lget_label)), FALSE);
+       g_return_val_if_fail(lget_label != NULL, FALSE);
+       GtkLabel * label = lget_label();
+
+       get_icon_t lget_icon = NULL;
+       g_return_val_if_fail(g_module_symbol(module, INDICATOR_GET_ICON_S, 
(gpointer *)(&lget_icon)), FALSE);
+       g_return_val_if_fail(lget_icon != NULL, FALSE);
+       GtkImage * icon = lget_icon();
+
+       get_menu_t lget_menu = NULL;
+       g_return_val_if_fail(g_module_symbol(module, INDICATOR_GET_MENU_S, 
(gpointer *)(&lget_menu)), FALSE);
+       g_return_val_if_fail(lget_menu != NULL, FALSE);
+       GtkMenu * lmenu = lget_menu();
+
+       if (label == NULL && icon == NULL) {
+               /* This is the case where there is nothing to display,
+                  kinda odd that we'd have a module with nothing. */
+               g_warning("No label or icon.  Odd.");
+               return FALSE;
+       }
+
+       GtkWidget * menuitem = gtk_menu_item_new();
+       GtkWidget * hbox = gtk_hbox_new(FALSE, 3);
+       if (icon != NULL) {
+               gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(icon), FALSE, 
FALSE, 0);
+       }
+       if (label != NULL) {
+               gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, 
FALSE, 0);
+       }
+       gtk_container_add(GTK_CONTAINER(menuitem), hbox);
+       gtk_widget_show(hbox);
+
+       if (lmenu != NULL) {
+               gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), 
GTK_WIDGET(lmenu));
+       }
+
+       gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+       gtk_widget_show(menuitem);
+
+       return TRUE;
+}
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to