/** configure from preferences */ static NftResult _this_from_prefs( NftPrefs * prefs, void **newObj, NftPrefsNode * node, void *userptr) { /* window geometry */ gint x = 0, y = 0, width = 0, height = 0; nft_prefs_node_prop_int_get(node, "x", &x); nft_prefs_node_prop_int_get(node, "y", &y); nft_prefs_node_prop_int_get(node, "width", &width); nft_prefs_node_prop_int_get(node, "height", &height); if(width > 0 && height > 0) gtk_window_resize(GTK_WINDOW(UI("window")), width, height); if(x > 0 && y > 0) gtk_window_move(GTK_WINDOW(UI("window")), x, y); /* log visible? */ bool boolean = false; nft_prefs_node_prop_boolean_get(node, "window-visible", &boolean); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(niftyconf_ui("item_log_win")), boolean); ui_log_show(boolean); /* log level */ char *loglevel; if((loglevel = nft_prefs_node_prop_string_get(node, "loglevel"))) { nft_log_level_set(nft_log_level_from_string(loglevel)); nft_prefs_free(loglevel); } /* log flags */ nft_prefs_node_prop_boolean_get(node, "show-file", &boolean); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UI("checkbutton_file")), boolean); nft_prefs_node_prop_boolean_get(node, "show-line", &boolean); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UI("checkbutton_line")), boolean); nft_prefs_node_prop_boolean_get(node, "show-function", &boolean); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UI("checkbutton_function")), boolean); return NFT_SUCCESS; }
/** function to generate a Person "object" from a preferences description */ static NftResult _person_from_prefs(NftPrefs *p, void **newObj, NftPrefsNode *node, void *userptr) { static size_t i; /* only fill reserved space, not more */ if(i >= sizeof(persons)/sizeof(struct Person)) return NFT_FAILURE; char *name; if(!(name = nft_prefs_node_prop_string_get(node, "name"))) { NFT_LOG(L_ERROR, "failed to get property \"name\" from prefs-node"); return NFT_FAILURE; } char *email; if(!(email = nft_prefs_node_prop_string_get(node, "email"))) { NFT_LOG(L_ERROR, "failed to get property \"email\" from prefs-node"); return NFT_FAILURE; } int age; if(!nft_prefs_node_prop_int_get(node, "age", &age)) { NFT_LOG(L_ERROR, "failed to get property \"age\" from prefs-node"); return NFT_FAILURE; } bool alive; if(!nft_prefs_node_prop_boolean_get(node, "alive", &alive)) { NFT_LOG(L_ERROR, "failed to get property \"alive\" from prefs-node"); return NFT_FAILURE; } strncpy(persons[i].name, name, sizeof(persons[i].name)); strncpy(persons[i].email, email, sizeof(persons[i].email)); persons[i].age = age; persons[i].alive = alive; /* free strings */ nft_prefs_free(name); nft_prefs_free(email); /* save pointer to new object */ *newObj = &persons[i++]; return NFT_SUCCESS; }