Example #1
0
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;
}
Example #2
0
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;
}