diff options
-rw-r--r-- | src/Keys.cc | 45 | ||||
-rw-r--r-- | src/Keys.hh | 3 |
2 files changed, 38 insertions, 10 deletions
diff --git a/src/Keys.cc b/src/Keys.cc index 86cb4d5..6d13cd4 100644 --- a/src/Keys.cc +++ b/src/Keys.cc | |||
@@ -187,22 +187,32 @@ void Keys::grabWindow(Window win) { | |||
187 | @return true on success else false | 187 | @return true on success else false |
188 | */ | 188 | */ |
189 | bool Keys::load(const char *filename) { | 189 | bool Keys::load(const char *filename) { |
190 | if (!filename) | 190 | // an intentionally empty file will still have one root mapping |
191 | return false; | 191 | bool firstload = m_map.empty(); |
192 | |||
193 | //free memory of previous grabs | ||
194 | deleteTree(); | ||
195 | 192 | ||
196 | m_map["default:"] = new t_key(0,0,0,0); | 193 | if (!filename) { |
194 | if (firstload) | ||
195 | loadDefaults(); | ||
196 | return false; | ||
197 | } | ||
197 | 198 | ||
198 | FbTk::App::instance()->sync(false); | 199 | FbTk::App::instance()->sync(false); |
199 | 200 | ||
200 | //open the file | 201 | // open the file |
201 | ifstream infile(filename); | 202 | ifstream infile(filename); |
202 | if (!infile) | 203 | if (!infile) { |
203 | return false; // faild to open file | 204 | if (firstload) |
205 | loadDefaults(); | ||
204 | 206 | ||
205 | unsigned int current_line = 0;//so we can tell the user where the fault is | 207 | return false; // failed to open file |
208 | } | ||
209 | |||
210 | // free memory of previous grabs | ||
211 | deleteTree(); | ||
212 | |||
213 | m_map["default:"] = new t_key(0,0,0,0); | ||
214 | |||
215 | unsigned int current_line = 0; //so we can tell the user where the fault is | ||
206 | 216 | ||
207 | while (!infile.eof()) { | 217 | while (!infile.eof()) { |
208 | string linebuffer; | 218 | string linebuffer; |
@@ -225,6 +235,21 @@ bool Keys::load(const char *filename) { | |||
225 | return true; | 235 | return true; |
226 | } | 236 | } |
227 | 237 | ||
238 | /** | ||
239 | * Load critical key/mouse bindings for when there are fatal errors reading the keyFile. | ||
240 | */ | ||
241 | void Keys::loadDefaults() { | ||
242 | #ifdef DEBUG | ||
243 | cerr<<"Loading default key bindings"<<endl; | ||
244 | #endif | ||
245 | deleteTree(); | ||
246 | m_map["default:"] = new t_key(0,0,0,0); | ||
247 | addBinding("OnDesktop Mouse1 :HideMenus"); | ||
248 | addBinding("OnDesktop Mouse2 :WorkspaceMenu"); | ||
249 | addBinding("OnDesktop Mouse3 :RootMenu"); | ||
250 | keyMode("default"); | ||
251 | } | ||
252 | |||
228 | bool Keys::save(const char *filename) const { | 253 | bool Keys::save(const char *filename) const { |
229 | //!! | 254 | //!! |
230 | //!! TODO: fix keybinding saving | 255 | //!! TODO: fix keybinding saving |
diff --git a/src/Keys.hh b/src/Keys.hh index 2d022c6..2fca460 100644 --- a/src/Keys.hh +++ b/src/Keys.hh | |||
@@ -98,6 +98,9 @@ private: | |||
98 | void ungrabButtons(); | 98 | void ungrabButtons(); |
99 | void grabWindow(Window win); | 99 | void grabWindow(Window win); |
100 | 100 | ||
101 | // Load default keybindings for when there are errors loading the initial one | ||
102 | void loadDefaults(); | ||
103 | |||
101 | std::string m_filename; | 104 | std::string m_filename; |
102 | 105 | ||
103 | class t_key; | 106 | class t_key; |