static gboolean load_module (const gchar * name, GtkWidget * menu) { g_debug("Looking at Module: %s", name); g_return_val_if_fail(name != NULL, FALSE); if (!g_str_has_suffix(name, G_MODULE_SUFFIX)) { return FALSE; } g_debug("Loading Module: %s", name); /* Build the object for the module */ IndicatorObject * io = indicator_object_new_from_file(name); /* Connect to its signals */ g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(entry_added), menu); g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_CALLBACK(entry_removed), menu); /* Work on the entries */ GList * entries = indicator_object_get_entries(io); GList * entry = NULL; for (entry = entries; entry != NULL; entry = g_list_next(entry)) { IndicatorObjectEntry * entrydata = (IndicatorObjectEntry *)entry->data; entry_added(io, entrydata, menu); } g_list_free(entries); return TRUE; }
int main(int argc, char* argv[]) { GtkWidget *win; GtkCssProvider *cssprovider; GdkScreen *screen; GError *error; /* Disable global menus */ g_unsetenv ("UBUNTU_MENUPROXY"); gtk_init(&argc, &argv); ido_init (); screen = gdk_screen_get_default(); win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (win), -1, 28); g_signal_connect(win, "realize", G_CALLBACK(on_realize), NULL); g_signal_connect(screen, "monitors-changed", G_CALLBACK(on_screen_change), win); g_signal_connect(screen, "size-changed", G_CALLBACK(on_screen_change), win); cssprovider = gtk_css_provider_new (); gtk_css_provider_load_from_data(cssprovider, "GtkMenuBar {\n" " -GtkMenuBar-internal-padding: 0;\n" " -GtkMenuBar-shadow-type: none;\n" "}\n" "GtkWidget {\n" " -GtkWidget-focus-line-width: 0;\n" " -GtkWidget-focus-padding: 0;\n" "}\n", -1, NULL); gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER (cssprovider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); GtkWidget* menubar = gtk_menu_bar_new(); load_indicator_files (INDICATOR_DIR, menubar); IndicatorObject * io = indicator_object_new_from_file("/usr/lib/indicators3/7/libapplication.so"); load_indicator(io, menubar); GtkWidget* hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_add(GTK_CONTAINER(win), hbox); gtk_box_pack_end(GTK_BOX(hbox), menubar, FALSE, FALSE, 0); g_signal_connect_after(menubar, "draw", G_CALLBACK(on_draw), NULL); g_signal_connect(win, "draw", G_CALLBACK(on_draw), NULL); gtk_widget_show_all(win); gdk_window_process_updates(gtk_widget_get_window(win), TRUE); gtk_widget_set_app_paintable(win, TRUE); gtk_main(); return 0; }
static void pp_load_indicator_module(PPPanel *panel, const gchar *name) { fprintf(stderr, "loading %s\n", name); gchar *path = g_build_filename(PP_INDICATOR_DIR, name, NULL); IndicatorObject *obj = indicator_object_new_from_file(path); g_free(path); /* TODO: Removal handler */ g_signal_connect(G_OBJECT(obj), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(pp_on_entry_added), panel); GList *entries = indicator_object_get_entries(obj); GList *entry = entries; while (entry != NULL) { IndicatorObjectEntry *entry_data = (IndicatorObjectEntry *) entry->data; pp_on_entry_added(obj, entry_data, panel); entry = g_list_next(entry); } g_list_free(entries); }