int initialize_modules(void) { int rc = PLCTAG_STATUS_OK; /* loop until we get the lock flag */ while (!lock_acquire((lock_t*)&library_initialization_lock)) { sleep_ms(1); } if(!library_initialized) { pdebug(DEBUG_INFO,"Initialized library modules."); rc = lib_init(); if(rc == PLCTAG_STATUS_OK) { rc = ab_init(); } library_initialized = 1; /* hook the destructor */ atexit(destroy_modules); pdebug(DEBUG_INFO,"Done initializing library modules."); } /* we hold the lock, so clear it.*/ lock_release((lock_t*)&library_initialization_lock); return rc; }
int main(int argc, char** argv) { GtkWidget *vbox; GtkWidget *menubar; GtkWidget *file_menu; GtkWidget *file_item; GtkWidget *quit_item; GtkWidget *handlebox; GtkWidget *toolbar; GtkToolItem *new_toolbar_button; GtkWidget *scrolledwin; GtkTreeSelection *list_select; GtkListStore *list_store; GtkCellRenderer *renderer; GtkTreeViewColumn *column; alpm_list_t *list, *i; gtk_init(&argc, &argv); main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(main_window), "Address Book"); gtk_window_set_position(GTK_WINDOW(main_window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(main_window), WINDOW_WIDTH, WINDOW_HEIGHT); g_signal_connect(G_OBJECT(main_window), "delete_event", G_CALLBACK(app_delete_event_cb), NULL); g_signal_connect(G_OBJECT(main_window), "destroy", G_CALLBACK(app_destroy_cb), NULL); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(main_window), vbox); menubar = gtk_menu_bar_new(); file_menu = gtk_menu_new(); file_item = gtk_menu_item_new_with_mnemonic("_File"); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file_item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item), file_menu); quit_item = gtk_menu_item_new_with_label("Quit"); g_signal_connect(G_OBJECT(quit_item), "activate", G_CALLBACK(app_quit_cb), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), quit_item); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); handlebox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0); toolbar = gtk_toolbar_new(); new_toolbar_button = gtk_tool_button_new_from_stock(GTK_STOCK_NEW); gtk_widget_set_tooltip_text(GTK_WIDGET(new_toolbar_button), "New contact"); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), new_toolbar_button, -1); edit_toolbar_button = gtk_tool_button_new_from_stock(GTK_STOCK_EDIT); gtk_widget_set_tooltip_text(GTK_WIDGET(edit_toolbar_button), "Edit contact"); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), edit_toolbar_button, -1); delete_toolbar_button = gtk_tool_button_new_from_stock(GTK_STOCK_DELETE); gtk_widget_set_tooltip_text(GTK_WIDGET(delete_toolbar_button), "Delete contact"); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), delete_toolbar_button, -1); gtk_widget_set_sensitive(GTK_WIDGET(edit_toolbar_button), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(delete_toolbar_button), FALSE); gtk_container_add(GTK_CONTAINER(handlebox), toolbar); gtk_container_set_border_width(GTK_CONTAINER(handlebox), 0); g_signal_connect(G_OBJECT(new_toolbar_button), "clicked", G_CALLBACK(sab_main_window_new_button_cb), main_window); g_signal_connect(G_OBJECT(edit_toolbar_button), "clicked", G_CALLBACK(sab_main_window_edit_button_cb), main_window); g_signal_connect(G_OBJECT(delete_toolbar_button), "clicked", G_CALLBACK(sab_main_window_delete_button_cb), NULL); scrolledwin = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); list_store = gtk_list_store_new(LIST_COL_NUM, G_TYPE_STRING, /* First name */ G_TYPE_STRING, /* Last name */ G_TYPE_STRING, /* Email */ G_TYPE_POINTER /* Contact pointer */ ); list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); g_object_unref(list_store); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list_view), TRUE); list_select = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view)); g_signal_connect(list_select, "changed", G_CALLBACK(sab_main_window_list_selection_changed_cb), NULL); /* Create the columns. */ renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("First Name", renderer, "text", LIST_COL_FIRST_NAME, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("Last Name", renderer, "text", LIST_COL_LAST_NAME, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("Email", renderer, "text", LIST_COL_EMAIL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column); gtk_container_add(GTK_CONTAINER(scrolledwin), list_view); gtk_widget_grab_focus(GTK_WIDGET(list_view)); gtk_widget_show_all(main_window); ab_init(); list = ab_get_contact_list(); for (i = list; i; i = alpm_list_next(i)) { sab_main_window_insert_item(list_view, (ab_contact_t *)i->data); } gtk_main(); return 0; }