diff options
author | rathnor <rathnor> | 2003-07-04 14:06:20 (GMT) |
---|---|---|
committer | rathnor <rathnor> | 2003-07-04 14:06:20 (GMT) |
commit | 16c567638cad8b0fdd5afb08ae7a185f5259e4c1 (patch) | |
tree | 03a5b1e59b630516d05a6f81fd82f026b69a2a5b /src/Remember.cc | |
parent | e82122eb44f3ed758f804c97da08d11196e42510 (diff) | |
download | fluxbox-16c567638cad8b0fdd5afb08ae7a185f5259e4c1.zip fluxbox-16c567638cad8b0fdd5afb08ae7a185f5259e4c1.tar.bz2 |
fix winclient death signalling
Diffstat (limited to 'src/Remember.cc')
-rw-r--r-- | src/Remember.cc | 218 |
1 files changed, 109 insertions, 109 deletions
diff --git a/src/Remember.cc b/src/Remember.cc index 97d1e35..0b4b248 100644 --- a/src/Remember.cc +++ b/src/Remember.cc | |||
@@ -21,7 +21,7 @@ | |||
21 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 21 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
22 | // DEALINGS IN THE SOFTWARE. | 22 | // DEALINGS IN THE SOFTWARE. |
23 | 23 | ||
24 | // $Id: Remember.cc,v 1.25 2003/07/04 01:03:40 rathnor Exp $ | 24 | // $Id: Remember.cc,v 1.26 2003/07/04 14:06:20 rathnor Exp $ |
25 | 25 | ||
26 | #include "Remember.hh" | 26 | #include "Remember.hh" |
27 | #include "ClientPattern.hh" | 27 | #include "ClientPattern.hh" |
@@ -216,94 +216,94 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) { | |||
216 | } | 216 | } |
217 | 217 | ||
218 | row++; | 218 | row++; |
219 | if (line[0] != '#') { //the line is commented | 219 | if (line[0] == '#') |
220 | int parse_pos = 0, err = 0; | 220 | continue; //the line is commented |
221 | string str_key, str_label; | 221 | int parse_pos = 0, err = 0; |
222 | err = FbTk::StringUtil::getStringBetween(str_key, | 222 | string str_key, str_label; |
223 | line.c_str(), | 223 | err = FbTk::StringUtil::getStringBetween(str_key, |
224 | '[', ']'); | 224 | line.c_str(), |
225 | if (err > 0 ) { | 225 | '[', ']'); |
226 | if (err > 0 ) { | ||
227 | parse_pos += err; | ||
228 | err = FbTk::StringUtil::getStringBetween(str_label, | ||
229 | line.c_str() + parse_pos, | ||
230 | '{', '}'); | ||
231 | if (err>0) { | ||
226 | parse_pos += err; | 232 | parse_pos += err; |
227 | err = FbTk::StringUtil::getStringBetween(str_label, | 233 | } |
228 | line.c_str() + parse_pos, | 234 | } else |
229 | '{', '}'); | 235 | continue; //read next line |
230 | if (err>0) { | 236 | |
231 | parse_pos += err; | 237 | if (!str_key.size()) |
232 | } | 238 | continue; //read next line |
233 | } else | 239 | if (str_key == "Workspace") { |
234 | continue; //read next line | 240 | unsigned int w; |
235 | 241 | istringstream iss(str_label.c_str()); | |
236 | if (!str_key.size()) | 242 | iss >> w; |
237 | continue; //read next line | 243 | app.rememberWorkspace(w); |
238 | if (str_key == "Workspace") { | 244 | } else if (str_key == "Layer") { |
239 | unsigned int w; | 245 | unsigned int l; |
240 | istringstream iss(str_label.c_str()); | 246 | istringstream iss(str_label.c_str()); |
241 | iss >> w; | 247 | iss >> l; |
242 | app.rememberWorkspace(w); | 248 | app.rememberLayer(l); |
243 | } else if (str_key == "Layer") { | 249 | } else if (str_key == "Dimensions") { |
244 | unsigned int l; | 250 | unsigned int h,w; |
245 | istringstream iss(str_label.c_str()); | 251 | istringstream iss(str_label.c_str()); |
246 | iss >> l; | 252 | iss >> w >> h; |
247 | app.rememberLayer(l); | 253 | app.rememberDimensions(w,h); |
248 | } else if (str_key == "Dimensions") { | 254 | } else if (str_key == "Position") { |
249 | unsigned int h,w; | 255 | unsigned int x,y; |
250 | istringstream iss(str_label.c_str()); | 256 | istringstream iss(str_label); |
251 | iss >> w >> h; | 257 | iss >> x >> y; |
252 | app.rememberDimensions(w,h); | 258 | app.rememberPosition(x,y); |
253 | } else if (str_key == "Position") { | 259 | } else if (str_key == "Shaded") { |
254 | unsigned int x,y; | 260 | app.rememberShadedstate((str_label=="yes")); |
255 | istringstream iss(str_label); | 261 | } else if (str_key == "Tab") { |
256 | iss >> x >> y; | 262 | app.rememberTabstate((str_label=="yes")); |
257 | app.rememberPosition(x,y); | 263 | } else if (str_key == "Deco") { |
258 | } else if (str_key == "Shaded") { | 264 | if (str_label == "NONE") { |
259 | app.rememberShadedstate((str_label=="yes")); | 265 | app.rememberDecostate((unsigned int) 0); |
260 | } else if (str_key == "Tab") { | 266 | } else if (str_label == "NORMAL") { |
261 | app.rememberTabstate((str_label=="yes")); | 267 | app.rememberDecostate((unsigned int) 0xfffffff); |
262 | } else if (str_key == "Deco") { | 268 | } else if (str_label == "TINY") { |
263 | if (str_label == "NONE") { | 269 | app.rememberDecostate((unsigned int) |
264 | app.rememberDecostate((unsigned int) 0); | 270 | FluxboxWindow::DECORM_TITLEBAR |
265 | } else if (str_label == "NORMAL") { | 271 | | FluxboxWindow::DECORM_ICONIFY |
266 | app.rememberDecostate((unsigned int) 0xfffffff); | 272 | | FluxboxWindow::DECORM_MENU |
267 | } else if (str_label == "TINY") { | 273 | ); |
268 | app.rememberDecostate((unsigned int) | 274 | } else if (str_label == "TOOL") { |
269 | FluxboxWindow::DECORM_TITLEBAR | 275 | app.rememberDecostate((unsigned int) |
270 | | FluxboxWindow::DECORM_ICONIFY | 276 | FluxboxWindow::DECORM_TITLEBAR |
271 | | FluxboxWindow::DECORM_MENU | 277 | | FluxboxWindow::DECORM_MENU |
272 | ); | 278 | ); |
273 | } else if (str_label == "TOOL") { | 279 | } else if (str_label == "BORDER") { |
274 | app.rememberDecostate((unsigned int) | 280 | app.rememberDecostate((unsigned int) |
275 | FluxboxWindow::DECORM_TITLEBAR | 281 | FluxboxWindow::DECORM_BORDER |
276 | | FluxboxWindow::DECORM_MENU | 282 | | FluxboxWindow::DECORM_MENU |
277 | ); | 283 | ); |
278 | } else if (str_label == "BORDER") { | ||
279 | app.rememberDecostate((unsigned int) | ||
280 | FluxboxWindow::DECORM_BORDER | ||
281 | | FluxboxWindow::DECORM_MENU | ||
282 | ); | ||
283 | } else { | ||
284 | unsigned int mask; | ||
285 | const char * str = str_label.c_str(); | ||
286 | // it'll have at least one char and \0, so this is safe | ||
287 | istringstream iss(str); | ||
288 | // check for hex | ||
289 | if (str[0] == '0' && str[1] == 'x') { | ||
290 | iss.seekg(2); | ||
291 | iss >> hex; | ||
292 | } | ||
293 | iss >> mask ; | ||
294 | app.rememberDecostate(mask); | ||
295 | } | ||
296 | } else if (str_key == "Sticky") { | ||
297 | app.rememberStuckstate((str_label=="yes")); | ||
298 | } else if (str_key == "Jump") { | ||
299 | app.rememberJumpworkspace((str_label=="yes")); | ||
300 | } else if (str_key == "Close") { | ||
301 | app.rememberSaveOnClose((str_label=="yes")); | ||
302 | } else if (str_key == "end") { | ||
303 | return row; | ||
304 | } else { | 284 | } else { |
305 | cerr << "Unsupported apps key = " << str_key << endl; | 285 | unsigned int mask; |
286 | const char * str = str_label.c_str(); | ||
287 | // it'll have at least one char and \0, so this is safe | ||
288 | istringstream iss(str); | ||
289 | // check for hex | ||
290 | if (str[0] == '0' && str[1] == 'x') { | ||
291 | iss.seekg(2); | ||
292 | iss >> hex; | ||
293 | } | ||
294 | iss >> mask ; | ||
295 | app.rememberDecostate(mask); | ||
306 | } | 296 | } |
297 | } else if (str_key == "Sticky") { | ||
298 | app.rememberStuckstate((str_label=="yes")); | ||
299 | } else if (str_key == "Jump") { | ||
300 | app.rememberJumpworkspace((str_label=="yes")); | ||
301 | } else if (str_key == "Close") { | ||
302 | app.rememberSaveOnClose((str_label=="yes")); | ||
303 | } else if (str_key == "end") { | ||
304 | return row; | ||
305 | } else { | ||
306 | cerr << "Unsupported apps key = " << str_key << endl; | ||
307 | } | 307 | } |
308 | } | 308 | } |
309 | } | 309 | } |
@@ -684,35 +684,35 @@ void Remember::setupClient(WinClient &winclient) { | |||
684 | } | 684 | } |
685 | } | 685 | } |
686 | 686 | ||
687 | void Remember::updateWindowClose(FluxboxWindow &win) { | 687 | void Remember::updateClientClose(WinClient &winclient) { |
688 | // This doesn't work at present since fluxbox.cc is missing the windowclose stuff. | 688 | Application *app = find(winclient); |
689 | // I don't trust it (particularly winClient()) while this is the case | 689 | |
690 | if (app && (app->save_on_close_remember && app->save_on_close)) { | ||
690 | 691 | ||
691 | // scan all winclients and remove this fbw | 692 | for (int attrib = 0; attrib <= REM_LASTATTRIB; attrib++) { |
692 | Patterns::iterator it = m_pats.begin(); | 693 | if (isRemembered(winclient, (Attribute) attrib)) { |
693 | while (it != m_pats.end()) { | 694 | rememberAttrib(winclient, (Attribute) attrib); |
694 | if (&win == it->second->group) | 695 | } |
695 | it->second->group = 0; | 696 | } |
696 | ++it; | ||
697 | } | ||
698 | 697 | ||
699 | return; | 698 | save(); |
699 | } | ||
700 | 700 | ||
701 | WinClient &winclient = win.winClient(); | 701 | // we need to get rid of references to this client |
702 | Application *app = find(winclient); | 702 | Clients::iterator wc_it = m_clients.find(&winclient); |
703 | Clients::iterator wc_it = m_clients.find(&win.winClient()); | ||
704 | 703 | ||
705 | if (wc_it != m_clients.end()) | 704 | if (wc_it != m_clients.end()) { |
706 | m_clients.erase(wc_it); | 705 | m_clients.erase(wc_it); |
706 | } | ||
707 | 707 | ||
708 | if (!app || !(app->save_on_close_remember && app->save_on_close)) | 708 | } |
709 | return; | ||
710 | 709 | ||
711 | for (int attrib = 0; attrib <= REM_LASTATTRIB; attrib++) { | 710 | void Remember::updateFrameClose(FluxboxWindow &win) { |
712 | if (isRemembered(winclient, (Attribute) attrib)) { | 711 | // scan all applications and remove this fbw if it is a recorded group |
713 | rememberAttrib(winclient, (Attribute) attrib); | 712 | Patterns::iterator it = m_pats.begin(); |
714 | } | 713 | while (it != m_pats.end()) { |
714 | if (&win == it->second->group) | ||
715 | it->second->group = 0; | ||
716 | ++it; | ||
715 | } | 717 | } |
716 | |||
717 | save(); | ||
718 | } | 718 | } |