summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext/cursors.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-09-10 19:39:52 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-09-10 19:39:52 -0400
commit7449de6e8fd71a83ce142269d9c289d7258976e6 (patch)
tree2ced683b26d8e272d9171a63caa37573796c805c /libs/gtkmm2ext/cursors.cc
parent233d2e8530fbb9ee5046e1ebcd3dbdfead772c9e (diff)
fix/improve/test hotspot file parsing
Diffstat (limited to 'libs/gtkmm2ext/cursors.cc')
-rw-r--r--libs/gtkmm2ext/cursors.cc36
1 files changed, 28 insertions, 8 deletions
diff --git a/libs/gtkmm2ext/cursors.cc b/libs/gtkmm2ext/cursors.cc
index a99a457032..9948fc667f 100644
--- a/libs/gtkmm2ext/cursors.cc
+++ b/libs/gtkmm2ext/cursors.cc
@@ -20,8 +20,13 @@
#include <sstream>
#include <fstream>
+#include "pbd/error.h"
+#include "pbd/compose.h"
+
#include "gtkmm2ext/cursors.h"
+#include "i18n.h"
+
using namespace Gtkmm2ext;
CursorInfo::Infos CursorInfo::infos;
@@ -46,24 +51,39 @@ CursorInfo::load_cursor_info (const std::string& path)
std::string name;
int x;
int y;
+ bool parse_ok;
+ int line_number = 1;
do {
- s << infofile;
+ parse_ok = false;
+ infofile >> name;
if (!infofile) {
+ /* failing here is OK ... EOF */
+ parse_ok = true;
break;
}
- s >> name;
- s >> x;
- s >> y;
- if (!s) {
+ infofile >> x;
+ if (!infofile) {
break;
}
-
- CursorInfo* ci = new CursorInfo (name, x, y);
- infos[name] = ci;
+ infofile >> y;
+ if (!infofile) {
+ break;
+ }
+
+ parse_ok = true;
+ line_number++;
+
+ infos[name] = new CursorInfo (name, x, y);
} while (true);
+ if (!parse_ok) {
+ PBD::error << string_compose (_("cursor hotspots info file %1 has an error on line %2"), path, line_number) << endmsg;
+ infos.clear ();
+ return -1;
+ }
+
return 0;
}