From b3238d4b743fa5d5f6e362c30bfec17fe991b856 Mon Sep 17 00:00:00 2001 From: Kaj-Michael Lang Date: Thu, 25 Oct 2007 18:47:33 +0300 Subject: [PATCH] Fix crasher in category add. Misc other changes. --- src/poi-gui.c | 112 ++++++++++++++++++++++++-------------------------- src/poi.c | 98 +++++++++++++++++++++---------------------- 2 files changed, 100 insertions(+), 110 deletions(-) diff --git a/src/poi-gui.c b/src/poi-gui.c index 6a20be5..2cdb683 100644 --- a/src/poi-gui.c +++ b/src/poi-gui.c @@ -57,8 +57,14 @@ static struct _quick_poi_categories quick_poi_categories[] = { { NODE_AMENITY_ATM, "ATM", }, }; -/* Argh... */ -static gdouble qp_lat, qp_lon; +/* Quick POI information structure */ +typedef struct _poi_quick_data poi_quick_data; +static struct _poi_quick_data { + GtkWidget *dialog; + GtkWidget *label; + gdouble lat; + gdouble lon; +} qp; static gboolean category_delete(GtkWidget *widget, delete_poi *dpoi) @@ -147,8 +153,10 @@ delete_poi dpoi = { NULL, NULL, 0 }; poi_category *c; if (cat_id > 0) { - if (poi_category_get(cat_id, &c)==FALSE) + if (poi_category_get(cat_id, &c)==FALSE) { + popup_error(_window, "Failed to get category."); return FALSE; + } dialog = gtk_dialog_new_with_buttons(_("Edit Category"), GTK_WINDOW(_window), @@ -200,14 +208,13 @@ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(txt_desc), GTK_WRAP_WORD); gtk_container_add(GTK_CONTAINER(txt_scroll), txt_desc); gtk_widget_set_size_request(GTK_WIDGET(txt_scroll), 400, 60); -desc_txt = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc)); - gtk_table_attach(GTK_TABLE(table), chk_enabled = gtk_check_button_new_with_label(_("Enabled")), 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4); /* label */ gtk_entry_set_text(GTK_ENTRY(txt_label), c->label); /* desc */ +desc_txt = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc)); gtk_text_buffer_set_text(desc_txt, c->desc, -1); /* enabled */ @@ -220,14 +227,13 @@ gtk_widget_show_all(dialog); while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) { if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_label)))) { c=poi_category_new(); - c->label = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_label))); + c->label=g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_label))); } else { popup_error(dialog,_("Please specify a name for the category.")); continue; } - gtk_text_buffer_get_iter_at_offset(desc_txt, &begin, 0); - gtk_text_buffer_get_end_iter(desc_txt, &end); + gtk_text_buffer_get_bounds(desc_txt, &begin, &end); c->desc = gtk_text_buffer_get_text(desc_txt, &begin, &end, TRUE); c->enabled = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(chk_enabled)) ? 1 : 0); @@ -236,11 +242,13 @@ while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) { if (results==FALSE) popup_error(_window, _("Problem updating category")); poi_category_free(c); + + break; } -g_free(dpoi.txt_label); -g_object_unref(desc_txt); -gtk_widget_hide_all(dialog); +if (dpoi.txt_label) + g_free(dpoi.txt_label); +gtk_widget_destroy(dialog); return results; } @@ -326,11 +334,8 @@ dialog = gtk_dialog_new_with_buttons(_("POI Categories"), ossohelp_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_POICAT, _osso); #endif -gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), - btn_edit = gtk_button_new_with_label(_("Edit"))); - -gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), - btn_add = gtk_button_new_with_label(_("Add"))); +gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_edit = gtk_button_new_with_label(_("Edit"))); +gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_add = gtk_button_new_with_label(_("Add"))); store = poi_category_generate_store(); @@ -338,7 +343,7 @@ if (!store) return TRUE; sw = gtk_scrolled_window_new(NULL, NULL); -gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); +gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), sw, TRUE, TRUE, 0); tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); @@ -391,7 +396,7 @@ return TRUE; } gboolean -poi_delete_confirm(GtkWidget * widget, delete_poi * dpoi) +poi_delete_confirm(GtkWidget *widget, delete_poi *dpoi) { GtkWidget *dialog; guint i; @@ -588,19 +593,18 @@ GtkTextBuffer *desc_txt; GtkTextIter begin, end; delete_poi dpoi = { NULL, NULL, 0 }; PoiCategoryEditInfo pcedit; +gchar tmp1[16], tmp2[16]; if (action == ACTION_EDIT_POI) { - if (!poi_select(unitx, unity, &poi)) { + if (!poi_select(unitx, unity, &poi)) return FALSE; - } dialog = gtk_dialog_new_with_buttons(_("Edit POI"), GTK_WINDOW(_window), GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), - btn_delete = gtk_button_new_with_label(_("Delete"))); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_delete = gtk_button_new_with_label(_("Delete"))); dpoi.dialog = dialog; dpoi.txt_label = g_strdup(poi.label); @@ -627,41 +631,25 @@ if (action == ACTION_EDIT_POI) { } /* Set the p_latlon string. */ -{ - gchar tmp1[16], tmp2[16]; - lat_format(poi.lat, tmp1); - lon_format(poi.lon, tmp2); - p_latlon = g_strdup_printf("%s, %s", tmp1, tmp2); -} +lat_format(poi.lat, tmp1); +lon_format(poi.lon, tmp2); +p_latlon = g_strdup_printf("%s, %s", tmp1, tmp2); -gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), - table = gtk_table_new(6, 4, FALSE), TRUE, TRUE, 0); +gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table = gtk_table_new(6, 4, FALSE), TRUE, TRUE, 0); -gtk_table_attach(GTK_TABLE(table), - label = gtk_label_new(_("Lat, Lon")), - 0, 1, 0, 1, GTK_FILL, 0, 2, 4); +gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lat, Lon")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4); gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); -gtk_table_attach(GTK_TABLE(table), - label = gtk_label_new(p_latlon), - 1, 3, 0, 1, GTK_FILL, 0, 2, 4); +gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(p_latlon), 1, 3, 0, 1, GTK_FILL, 0, 2, 4); gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); -gtk_table_attach(GTK_TABLE(table), - label = gtk_label_new(_("Label")), - 0, 1, 1, 2, GTK_FILL, 0, 2, 4); +gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Label")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4); gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); -gtk_table_attach(GTK_TABLE(table), - txt_label = gtk_entry_new(), - 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4); +gtk_table_attach(GTK_TABLE(table), txt_label = gtk_entry_new(), 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4); -gtk_table_attach(GTK_TABLE(table), - label = gtk_label_new(_("Category")), - 0, 1, 3, 4, GTK_FILL, 0, 2, 4); +gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Category")), 0, 1, 3, 4, GTK_FILL, 0, 2, 4); gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); -gtk_table_attach(GTK_TABLE(table), - hbox = gtk_hbox_new(FALSE, 4), - 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 2, 4); +gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 2, 4); cmb_category = category_combo_new(); gtk_box_pack_start(GTK_BOX(hbox), cmb_category, FALSE, FALSE, 4); @@ -758,15 +746,22 @@ static gboolean poi_quick_button_cb(GtkWidget *w, gpointer data) { guint cat_id; -gtk_widget_destroy(dialog_qp); +gchar *label; cat_id=GPOINTER_TO_INT(data); -/* poi_add frees the label and desc so strdup them */ -if (poi_add(qp_lat, qp_lon, cat_id, g_strdup("QP"), g_strdup("Quick POI, update information please."))==FALSE) { +if (strlen(gtk_entry_get_text(GTK_ENTRY(qp.label)))>0) { + label=g_strdup(gtk_entry_get_text(GTK_ENTRY(qp.label))); +} else { + label=g_strdup(""); +} + +/* poi_add frees the label and desc so strdup */ +if (poi_add(qp.lat, qp.lon, cat_id, label, g_strdup("Quick POI, update information please."))==FALSE) { popup_error(_window, _("Problem adding POI")); } else { map_render_data(); + gtk_widget_destroy(qp.dialog); } return TRUE; @@ -779,9 +774,9 @@ GtkWidget *table; GtkWidget *buttons[POI_QUICK_BUTTONS]; guint x,y; -unit2latlon(unitx, unity, qp_lat, qp_lon); +unit2latlon(unitx, unity, qp.lat, qp.lon); -dialog_qp = gtk_dialog_new_with_buttons(_("Quick POI"), +qp.dialog = gtk_dialog_new_with_buttons(_("Quick POI"), GTK_WINDOW(_window), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, @@ -790,10 +785,10 @@ dialog_qp = gtk_dialog_new_with_buttons(_("Quick POI"), #ifdef WITH_OSSO_NOTYET /* Enable the help button. */ - ossohelp_dialog_help_enable(GTK_DIALOG(dialog_qp), HELP_ID_POIQUICK, _osso); + ossohelp_dialog_help_enable(GTK_DIALOG(qp.dialog), HELP_ID_POIQUICK, _osso); #endif -gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_qp)->vbox), table = gtk_table_new(3, 3, FALSE), TRUE, TRUE, 0); +gtk_box_pack_start(GTK_BOX(GTK_DIALOG(qp.dialog)->vbox), table = gtk_table_new(3, 3, FALSE), TRUE, TRUE, 0); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_table_set_row_spacings(GTK_TABLE(table), 6); @@ -807,10 +802,11 @@ for (x=1;x<=3;x++) { } } -gtk_widget_show_all(dialog_qp); +gtk_box_pack_start(GTK_BOX(GTK_DIALOG(qp.dialog)->vbox), qp.label = gtk_entry_new(), TRUE, TRUE, 0); +gtk_widget_show_all(qp.dialog); -if (GTK_RESPONSE_REJECT == gtk_dialog_run(GTK_DIALOG(dialog_qp))) { - gtk_widget_destroy(dialog_qp); +if (GTK_RESPONSE_REJECT == gtk_dialog_run(GTK_DIALOG(qp.dialog))) { + gtk_widget_destroy(qp.dialog); return TRUE; } diff --git a/src/poi.c b/src/poi.c index f20c80e..179c6f5 100644 --- a/src/poi.c +++ b/src/poi.c @@ -73,7 +73,10 @@ static struct _poi_categories default_poi_categories[] = { { NODE_AMENITY_TOWNHALL, "Townhall", "" , "", "#408090" }, { NODE_AMENITY_WC, "WC/Toilets", "" , "public/toilets", "#e1d62c" }, { NODE_AMENITY_TELEPHONE, "Telephone", "Public telephone" , "public/telephone", "#208060" }, - { NODE_TOURISM_ATTRACTION, "Attraction", "Something interesting" , "generic", "#004000" }, + { NODE_TOURISM_ATTRACTION, "Attraction", "Something interesting" , "generic", "#005000" }, + + { NODE_HISTORIC_MUSEUM, "Museum", "A place where objects of historical, artistic, or scientific interest are exhibited, preserved or studied." , "sightseeing/museum", "#202020" }, + { NODE_HISTORIC_CASTLE, "Castle", "Historical building or group of building used for defense by military forces, whose main structures are walls and towers." , "sightseeing/castle", "#404040" }, { NODE_SPORT_CENTER, "Sport Center", "" , "sports/centre", "#101080" }, { NODE_SPORT_STADIUM, "Sport Stadium", "" , "sports/stadium", "#101080" }, @@ -117,18 +120,17 @@ poi_populate_categories(sqlite3 *db) sqlite3_stmt *sql_cat; gint i; -g_printf("Checking default categories\n"); sqlite3_prepare_v2(db,"insert or replace into category (cat_id, label, desc, enabled, priority, icon, color)" " values (?, ?, ?, 1, ?, ?, ?)", -1, &sql_cat, NULL); for (i=0; default_poi_categories[i].name; i++) { sqlite3_bind_int(sql_cat, 1, default_poi_categories[i].type); - sqlite3_bind_text(sql_cat, 2, default_poi_categories[i].name, -1, SQLITE_TRANSIENT); - sqlite3_bind_text(sql_cat, 3, default_poi_categories[i].desc, -1, SQLITE_TRANSIENT); + sqlite3_bind_text(sql_cat, 2, default_poi_categories[i].name, -1, SQLITE_STATIC); + sqlite3_bind_text(sql_cat, 3, default_poi_categories[i].desc, -1, SQLITE_STATIC); sqlite3_bind_int(sql_cat, 4, default_poi_categories[i].type/100); - sqlite3_bind_text(sql_cat, 5, default_poi_categories[i].icon, -1, SQLITE_TRANSIENT); - sqlite3_bind_text(sql_cat, 6, default_poi_categories[i].color, -1, SQLITE_TRANSIENT); + sqlite3_bind_text(sql_cat, 5, default_poi_categories[i].icon, -1, SQLITE_STATIC); + sqlite3_bind_text(sql_cat, 6, default_poi_categories[i].color, -1, SQLITE_STATIC); if (sqlite3_step(sql_cat)==SQLITE_OK) g_printf("Failed to update category: %d [%s]\n", i, default_poi_categories[i].name); sqlite3_reset(sql_cat); @@ -150,28 +152,28 @@ if (SQLITE_OK != sqlite3_get_table(db, "select label from poi limit 1", &pszResult, &nRow, &nColumn, NULL)) { gchar *create_sql; - g_printf("Creating initial tables\n"); + g_printerr("Creating initial POI tables\n"); create_sql = sqlite3_mprintf ("create table poi " - "(poi_id integer PRIMARY KEY, " + "(poi_id INTEGER PRIMARY KEY AUTOINCREMENT, " "lat real, " "lon real, " "elev real, " "label text, " "desc text, " - "public integer, " - "source integer default 0, " - "osm_id integer default 0, " - "priority integer default 2, " - "cat_id integer);" - "create table category (cat_id integer PRIMARY KEY," + "public int, " + "source int default 0, " + "osm_id int default 0, " + "priority int default 2, " + "cat_id int);" + "create table category (cat_id INTEGER PRIMARY KEY AUTOINCREMENT," "label text, " "desc text, " "icon text, " "color char(7), " - "priority integer default 2, " - "enabled integer);"); + "priority int default 2, " + "enabled int);"); if (SQLITE_OK != sqlite3_exec(db, create_sql, NULL, NULL, NULL) && (SQLITE_OK != sqlite3_get_table(db, "select label from poi limit 1", @@ -239,18 +241,13 @@ poi_db_prepare(sqlite3 *db) "insert into poi (lat, lon, label, desc, cat_id, public)" " values (?, ?, ?, ?, ?, 1)", -1, &poisql.insert_poi, NULL); /* update poi */ - sqlite3_prepare_v2(db, "update poi set label = ?, desc = ?, " - "cat_id = ? where poi_id = ?", - -1, &poisql.update_poi, NULL); + sqlite3_prepare_v2(db, "update poi set label = ?, desc = ?, cat_id = ? where poi_id = ?", -1, &poisql.update_poi, NULL); /* delete from poi */ - sqlite3_prepare_v2(db, "delete from poi where poi_id = ?", - -1, &poisql.delete_poi, NULL); + sqlite3_prepare_v2(db, "delete from poi where poi_id = ?", -1, &poisql.delete_poi, NULL); /* delete from poi by cat_id */ - sqlite3_prepare_v2(db, "delete from poi where cat_id = ?", - -1, &poisql.delete_poi_by_catid, NULL); + sqlite3_prepare_v2(db, "delete from poi where cat_id = ?", -1, &poisql.delete_poi_by_catid, NULL); /* get next poilabel */ - sqlite3_prepare_v2(db, "select ifnull(max(poi_id) + 1,1) from poi", - -1, &poisql.nextlabel_poi, NULL); + sqlite3_prepare_v2(db, "select ifnull(max(poi_id) + 1,1) from poi", -1, &poisql.nextlabel_poi, NULL); /* select from category */ sqlite3_prepare_v2(db, @@ -403,9 +400,8 @@ if (!_db) if (cat_id > 0) { /* edit category */ - if (SQLITE_OK != - sqlite3_bind_text(poisql.update_cat, 1, c->label, -1, g_free) - || SQLITE_OK != sqlite3_bind_text(poisql.update_cat, 2, c->desc, -1, g_free) + if (SQLITE_OK != sqlite3_bind_text(poisql.update_cat, 1, c->label, -1, SQLITE_STATIC) + || SQLITE_OK != sqlite3_bind_text(poisql.update_cat, 2, c->desc, -1, SQLITE_STATIC) || SQLITE_OK != sqlite3_bind_int(poisql.update_cat, 3, c->enabled) || SQLITE_OK != sqlite3_bind_int(poisql.update_cat, 4, c->id) || SQLITE_DONE != sqlite3_step(poisql.update_cat)) { @@ -415,9 +411,8 @@ if (cat_id > 0) { sqlite3_clear_bindings(poisql.update_cat); } else { /* add category */ - if (SQLITE_OK != - sqlite3_bind_text(poisql.insert_cat, 1, c->label, -1, g_free) - || SQLITE_OK != sqlite3_bind_text(poisql.insert_cat, 2, c->desc, -1, g_free) + if (SQLITE_OK != sqlite3_bind_text(poisql.insert_cat, 1, c->label, -1, SQLITE_STATIC) + || SQLITE_OK != sqlite3_bind_text(poisql.insert_cat, 2, c->desc, -1, SQLITE_STATIC) || SQLITE_OK != sqlite3_bind_int(poisql.insert_cat, 3, c->enabled) || SQLITE_DONE != sqlite3_step(poisql.insert_cat)) { results = FALSE; @@ -434,16 +429,14 @@ poi_category_delete(delete_poi *dpoi) if (!_db) return FALSE; -if (SQLITE_OK != sqlite3_bind_int(poisql.delete_poi_by_catid, 1, dpoi->id) - || SQLITE_DONE != sqlite3_step(poisql.delete_poi_by_catid)) { - sqlite3_reset(poisql.delete_poi_by_catid); - return FALSE; +if (SQLITE_OK != sqlite3_bind_int(poisql.delete_poi_by_catid, 1, dpoi->id) || SQLITE_DONE != sqlite3_step(poisql.delete_poi_by_catid)) { + sqlite3_reset(poisql.delete_poi_by_catid); + return FALSE; } sqlite3_reset(poisql.delete_poi_by_catid); sqlite3_clear_bindings(poisql.delete_poi_by_catid); -if (SQLITE_OK != sqlite3_bind_int(poisql.delete_cat, 1, dpoi->id) || - SQLITE_DONE != sqlite3_step(poisql.delete_cat)) { +if (SQLITE_OK != sqlite3_bind_int(poisql.delete_cat, 1, dpoi->id) || SQLITE_DONE != sqlite3_step(poisql.delete_cat)) { sqlite3_reset(poisql.delete_cat); return FALSE; } @@ -459,14 +452,12 @@ poi_delete(delete_poi *dpoi) if (!_db) return FALSE; -if (SQLITE_OK != sqlite3_bind_int(poisql.delete_poi, 1, dpoi->id) || - SQLITE_DONE != sqlite3_step(poisql.delete_poi)) { +if (SQLITE_OK != sqlite3_bind_int(poisql.delete_poi, 1, dpoi->id) || SQLITE_DONE != sqlite3_step(poisql.delete_poi)) { sqlite3_reset(poisql.delete_poi); return FALSE; -} else { - sqlite3_reset(poisql.delete_poi); - sqlite3_clear_bindings(poisql.delete_poi); } +sqlite3_reset(poisql.delete_poi); +sqlite3_clear_bindings(poisql.delete_poi); return TRUE; } @@ -482,14 +473,15 @@ gint num_cats=0; if (!_db) return FALSE; -*store = gtk_list_store_new(POI_NUM_COLUMNS, G_TYPE_INT, /* POI ID */ - G_TYPE_INT, /* Category ID */ - G_TYPE_DOUBLE, /* Latitude */ - G_TYPE_DOUBLE, /* Longitude */ - G_TYPE_STRING, /* Lat/Lon */ - G_TYPE_STRING, /* POI Label */ - G_TYPE_STRING, /* POI Desc. */ - G_TYPE_STRING); /* Category Label */ +*store = gtk_list_store_new(POI_NUM_COLUMNS, + G_TYPE_INT, /* POI ID */ + G_TYPE_INT, /* Category ID */ + G_TYPE_DOUBLE, /* Latitude */ + G_TYPE_DOUBLE, /* Longitude */ + G_TYPE_STRING, /* Lat/Lon */ + G_TYPE_STRING, /* POI Label */ + G_TYPE_STRING, /* POI Desc. */ + G_TYPE_STRING); /* Category Label */ x = unitx - pixel2unit(3 * _draw_width); y = unity + pixel2unit(3 * _draw_width); @@ -509,6 +501,7 @@ if (SQLITE_OK != sqlite3_bind_double(poisql.select_poi, 1, lat1) || while (SQLITE_ROW == sqlite3_step(poisql.select_poi)) { gdouble lat, lon; + lat = sqlite3_column_double(poisql.select_poi, 0); lon = sqlite3_column_double(poisql.select_poi, 1); lat_format(lat, tmp1); @@ -518,8 +511,9 @@ while (SQLITE_ROW == sqlite3_step(poisql.select_poi)) { gtk_list_store_set(*store, &iter, POI_POIID, sqlite3_column_int(poisql.select_poi, 2), POI_CATID, sqlite3_column_int(poisql.select_poi, 5), - POI_LAT, lat, POI_LON, lon, POI_LATLON, - g_strdup_printf("%s, %s", tmp1, tmp2), + POI_LAT, lat, + POI_LON, lon, + POI_LATLON, g_strdup_printf("%s, %s", tmp1, tmp2), POI_LABEL, sqlite3_column_text(poisql.select_poi, 3), POI_DESC, sqlite3_column_text(poisql.select_poi, 4), POI_CATLAB, sqlite3_column_text(poisql.select_poi, 6), -- 2.39.5