diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/GipfelWidget.H | 1 | ||||
| -rw-r--r-- | src/GipfelWidget.cxx | 22 | ||||
| -rw-r--r-- | src/ImageMetaData.cxx | 20 | 
3 files changed, 28 insertions, 15 deletions
| diff --git a/src/GipfelWidget.H b/src/GipfelWidget.H index 3158a11..f8e242e 100644 --- a/src/GipfelWidget.H +++ b/src/GipfelWidget.H @@ -25,6 +25,7 @@ class GipfelWidget : public Fl_Group {  		int have_gipfel_info;  		ImageMetaData *md;  		int show_hidden; +		char focused_mountain_label[128];  		int handle(int event); diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index 0f94f9f..b895ecb 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -33,6 +33,7 @@  static double pi_d, deg2rad;  GipfelWidget::GipfelWidget(int X,int Y,int W, int H): Fl_Group(X, Y, W, H) { +	end();  	pi_d = asin(1.0) * 2.0;  	deg2rad = pi_d / 180.0;  	img = NULL; @@ -286,19 +287,16 @@ GipfelWidget::draw() {  	}  	if (focused_mountain) { -		static char buf[128];  		m = focused_mountain;  		int m_x = w() / 2 + x() + (int) rint(m->x);  		int m_y = h() / 2 + y() + (int) rint(m->y); -		snprintf(buf, sizeof(buf), "%s (%dm), distance %.2fkm", -                m->name, (int) m->height, pan->get_real_distance(m) / 1000.0); -  		fl_color(FL_YELLOW); -		fl_rectf(m_x, m_y - height, (int) fl_width(buf) + 2, height + 2); +		fl_rectf(m_x, m_y - height, +			(int) fl_width(focused_mountain_label) + 2, height + 2);  		fl_color(FL_BLACK); -  		fl_draw(buf, m_x, m_y); +  		fl_draw(focused_mountain_label, m_x, m_y);  	} @@ -613,6 +611,10 @@ GipfelWidget::handle(int event) {  					cur_mountain = m;  			} else if (Fl::event_button() == 2) {  				toggle_known_mountain(mark_x, mark_y); +				if (focused_mountain) { +					focused_mountain = NULL; +					redraw(); +				}  			}  			Fl::focus(this); @@ -629,7 +631,13 @@ GipfelWidget::handle(int event) {  			return 1;  		case FL_MOVE:  			m = find_mountain(pan->get_visible_mountains(), Fl::event_x()-x(), Fl::event_y()-y()); -			if (m  && m != focused_mountain) { +			if (m != focused_mountain && (!m || !known_hills->contains(m))) { +				if (m) +					snprintf(focused_mountain_label, +						sizeof(focused_mountain_label) - 1, +						"%s (%dm), distance %.2fkm", +						m->name, (int) m->height, pan->get_real_distance(m) / 1000.0); +  				focused_mountain = m;  				redraw();  			} diff --git a/src/ImageMetaData.cxx b/src/ImageMetaData.cxx index a678360..f22a641 100644 --- a/src/ImageMetaData.cxx +++ b/src/ImageMetaData.cxx @@ -93,7 +93,7 @@ degminsecstr2double(char *val) {  int  ImageMetaData::load_image_exif(char *name) { -    char * args[32]; +    const char * args[32];      FILE *p;      pid_t pid;      int status; @@ -107,7 +107,7 @@ ImageMetaData::load_image_exif(char *name) {      args[3] = name;      args[4] = NULL; -    p = pexecvp(args[0], args, &pid, "r"); +    p = pexecvp(args[0], const_cast<char * const *>(args), &pid, "r");      if (p) {          while (fgets(buf, sizeof(buf), p) != NULL) { @@ -155,7 +155,7 @@ ImageMetaData::load_image_exif(char *name) {  int  ImageMetaData::load_image_jpgcom(char *name) { -    char * args[32]; +    const char * args[32];      FILE *p;      pid_t pid;      int status; @@ -168,7 +168,7 @@ ImageMetaData::load_image_jpgcom(char *name) {      args[1] = name;      args[2] = NULL; -    p = pexecvp(args[0], args, &pid, "r"); +    p = pexecvp(args[0], const_cast<char * const *>(args), &pid, "r");      if (p) {          while (fgets(buf, sizeof(buf), p) != NULL) { @@ -208,15 +208,18 @@ ImageMetaData::load_image_jpgcom(char *name) {  int  ImageMetaData::save_image_jpgcom(char *in_img, char *out_img) { -    char * args[32]; +    const char * args[32];      FILE *p;      pid_t pid;      char buf[1024], tmpname[MAXPATHLEN];      int status, err = 0;      ssize_t n;  	int tmp_fd; +	char *dirbuf; -	snprintf(tmpname, sizeof(tmpname), "%s/.gipfelXXXXXX", dirname(out_img)); +	dirbuf = strdup(out_img); +	snprintf(tmpname, sizeof(tmpname), "%s/.gipfelXXXXXX", dirname(dirbuf)); +	free(dirbuf);  	tmp_fd = mkstemp(tmpname);  	if (tmp_fd < 0) {  		perror("mkstemp"); @@ -242,7 +245,7 @@ ImageMetaData::save_image_jpgcom(char *in_img, char *out_img) {      args[4] = in_img;      args[5] = NULL; -    p = pexecvp(args[0], args, &pid, "r"); +    p = pexecvp(args[0], const_cast<char * const *>(args), &pid, "r");      if (p) {          while ((n = fread(buf, 1, sizeof(buf), p)) != 0) { @@ -263,7 +266,8 @@ ImageMetaData::save_image_jpgcom(char *in_img, char *out_img) {  		err++;  	} -    close(tmp_fd); +	fsync(tmp_fd); /* make sure data is on disk before replacing orig file */ +	close(tmp_fd);  	if (!err) {  		if (rename(tmpname, out_img) != 0) { | 
