summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Keys.cc45
-rw-r--r--src/Keys.hh3
2 files changed, 38 insertions, 10 deletions
diff --git a/src/Keys.cc b/src/Keys.cc
index fd96fe8..72d59cd 100644
--- a/src/Keys.cc
+++ b/src/Keys.cc
@@ -166,22 +166,32 @@ void Keys::ungrabButtons() {
166 @return true on success else false 166 @return true on success else false
167*/ 167*/
168bool Keys::load(const char *filename) { 168bool Keys::load(const char *filename) {
169 if (!filename) 169 // an intentionally empty file will still have one root mapping
170 return false; 170 bool firstload = m_map.empty();
171
172 //free memory of previous grabs
173 deleteTree();
174 171
175 m_map["default:"] = new t_key(0,0,0,0); 172 if (!filename) {
173 if (firstload)
174 loadDefaults();
175 return false;
176 }
176 177
177 FbTk::App::instance()->sync(false); 178 FbTk::App::instance()->sync(false);
178 179
179 //open the file 180 // open the file
180 ifstream infile(filename); 181 ifstream infile(filename);
181 if (!infile) 182 if (!infile) {
182 return false; // faild to open file 183 if (firstload)
184 loadDefaults();
183 185
184 unsigned int current_line = 0;//so we can tell the user where the fault is 186 return false; // failed to open file
187 }
188
189 // free memory of previous grabs
190 deleteTree();
191
192 m_map["default:"] = new t_key(0,0,0,0);
193
194 unsigned int current_line = 0; //so we can tell the user where the fault is
185 195
186 while (!infile.eof()) { 196 while (!infile.eof()) {
187 string linebuffer; 197 string linebuffer;
@@ -204,6 +214,21 @@ bool Keys::load(const char *filename) {
204 return true; 214 return true;
205} 215}
206 216
217/**
218 * Load critical key/mouse bindings for when there are fatal errors reading the keyFile.
219 */
220void Keys::loadDefaults() {
221#ifdef DEBUG
222 cerr<<"Loading default key bindings"<<endl;
223#endif
224 deleteTree();
225 m_map["default:"] = new t_key(0,0,0,0);
226 addBinding("OnDesktop Mouse1 :HideMenus");
227 addBinding("OnDesktop Mouse2 :WorkspaceMenu");
228 addBinding("OnDesktop Mouse3 :RootMenu");
229 keyMode("default");
230}
231
207bool Keys::save(const char *filename) const { 232bool Keys::save(const char *filename) const {
208 //!! 233 //!!
209 //!! TODO: fix keybinding saving 234 //!! TODO: fix keybinding saving
diff --git a/src/Keys.hh b/src/Keys.hh
index c075d38..a83a0ec 100644
--- a/src/Keys.hh
+++ b/src/Keys.hh
@@ -97,6 +97,9 @@ private:
97 void grabButton(unsigned int button, unsigned int mod); 97 void grabButton(unsigned int button, unsigned int mod);
98 void ungrabButtons(); 98 void ungrabButtons();
99 99
100 // Load default keybindings for when there are errors loading the initial one
101 void loadDefaults();
102
100 std::string m_filename; 103 std::string m_filename;
101 104
102 class t_key; 105 class t_key;