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