diff options
Diffstat (limited to 'src/MenuCreator.cc')
-rw-r--r-- | src/MenuCreator.cc | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/src/MenuCreator.cc b/src/MenuCreator.cc index 6a6accc..46f233d 100644 --- a/src/MenuCreator.cc +++ b/src/MenuCreator.cc | |||
@@ -66,10 +66,10 @@ using FbTk::AutoReloadHelper; | |||
66 | 66 | ||
67 | namespace { | 67 | namespace { |
68 | 68 | ||
69 | std::auto_ptr<FbMenu> createStyleMenu(int screen_number, const string &label, | 69 | FbTk::RefCount<FbTk::Menu> createStyleMenu(int screen_number, const string &label, |
70 | AutoReloadHelper *reloader, const string &directory) { | 70 | AutoReloadHelper *reloader, const string &directory) { |
71 | 71 | ||
72 | std::auto_ptr<FbMenu> menu(MenuCreator::createMenu(label, screen_number)); | 72 | FbTk::RefCount<FbMenu> menu(MenuCreator::createMenu(label, screen_number)); |
73 | 73 | ||
74 | // perform shell style ~ home directory expansion | 74 | // perform shell style ~ home directory expansion |
75 | string stylesdir(FbTk::StringUtil::expandFilename(directory)); | 75 | string stylesdir(FbTk::StringUtil::expandFilename(directory)); |
@@ -107,11 +107,11 @@ std::auto_ptr<FbMenu> createStyleMenu(int screen_number, const string &label, | |||
107 | return menu; | 107 | return menu; |
108 | } | 108 | } |
109 | 109 | ||
110 | std::auto_ptr<FbMenu> createRootCmdMenu(int screen_number, const string &label, | 110 | FbTk::RefCount<FbTk::Menu> createRootCmdMenu(int screen_number, const string &label, |
111 | const string &directory, AutoReloadHelper *reloader, | 111 | const string &directory, AutoReloadHelper *reloader, |
112 | const string &cmd) { | 112 | const string &cmd) { |
113 | 113 | ||
114 | std::auto_ptr<FbMenu> menu(MenuCreator::createMenu(label, screen_number)); | 114 | FbTk::RefCount<FbMenu> menu(MenuCreator::createMenu(label, screen_number)); |
115 | 115 | ||
116 | // perform shell style ~ home directory expansion | 116 | // perform shell style ~ home directory expansion |
117 | string rootcmddir(FbTk::StringUtil::expandFilename(directory)); | 117 | string rootcmddir(FbTk::StringUtil::expandFilename(directory)); |
@@ -267,8 +267,8 @@ insertMenuItem(lua::state &l, FbTk::Menu &menu, FbTk::StringConvertor &parent_co | |||
267 | int size = menu.insert(str_label); | 267 | int size = menu.insert(str_label); |
268 | menu.setItemEnabled(size-1, false); | 268 | menu.setItemEnabled(size-1, false); |
269 | } else if(str_key == "icons") { | 269 | } else if(str_key == "icons") { |
270 | FbTk::Menu *submenu = MenuCreator::createMenuType("iconmenu", screen_number); | 270 | FbTk::RefCount<FbTk::Menu> submenu = MenuCreator::createMenuType("iconmenu", screen_number); |
271 | if (submenu == 0) | 271 | if (! submenu) |
272 | return; | 272 | return; |
273 | if (str_label.empty()) | 273 | if (str_label.empty()) |
274 | menu.insert(_FB_XTEXT(Menu, Icons, "Icons", "Iconic windows menu title"), submenu); | 274 | menu.insert(_FB_XTEXT(Menu, Icons, "Icons", "Iconic windows menu title"), submenu); |
@@ -281,12 +281,12 @@ insertMenuItem(lua::state &l, FbTk::Menu &menu, FbTk::StringConvertor &parent_co | |||
281 | else | 281 | else |
282 | menu.insert(str_label, exit_cmd); | 282 | menu.insert(str_label, exit_cmd); |
283 | } else if (str_key == "config") { | 283 | } else if (str_key == "config") { |
284 | menu.insert(str_label, &screen->configMenu()); | 284 | menu.insert(str_label, FbTk::RefCount<FbTk::Menu>(screen->configMenu()) ); |
285 | } else if(str_key == "menu") { | 285 | } else if(str_key == "menu") { |
286 | std::auto_ptr<FbMenu> t(MenuCreator::createMenu("", screen_number)); | 286 | FbTk::RefCount<FbTk::Menu> t(MenuCreator::createMenu("", screen_number)); |
287 | l.pushvalue(-1); | 287 | l.pushvalue(-1); |
288 | createMenu_(*t, l, *conv, reloader); | 288 | createMenu_(*t, l, *conv, reloader); |
289 | menu.insert(str_label, t.release()); | 289 | menu.insert(str_label, t); |
290 | } else { | 290 | } else { |
291 | // items that have a parameter | 291 | // items that have a parameter |
292 | const string &str_cmd = getField(l, -1, "param"); | 292 | const string &str_cmd = getField(l, -1, "param"); |
@@ -301,16 +301,15 @@ insertMenuItem(lua::state &l, FbTk::Menu &menu, FbTk::StringConvertor &parent_co | |||
301 | menu.insert(new StyleMenuItem(str_label, str_cmd)); | 301 | menu.insert(new StyleMenuItem(str_label, str_cmd)); |
302 | else if (str_key == "stylesdir") | 302 | else if (str_key == "stylesdir") |
303 | menu.insert(str_label, | 303 | menu.insert(str_label, |
304 | createStyleMenu(screen_number, str_label, reloader, str_cmd).release()); | 304 | createStyleMenu(screen_number, str_label, reloader, str_cmd)); |
305 | else if (str_key == "wallpapers") { | 305 | else if (str_key == "wallpapers") { |
306 | string program = getField(l, -1, "program"); | 306 | string program = getField(l, -1, "program"); |
307 | if(program.empty()) | 307 | if(program.empty()) |
308 | program = realProgramName("fbsetbg"); | 308 | program = realProgramName("fbsetbg"); |
309 | menu.insert(str_label, createRootCmdMenu(screen_number, str_label, str_cmd, | 309 | menu.insert(str_label, createRootCmdMenu(screen_number, str_label, str_cmd, |
310 | reloader, program).release() ); | 310 | reloader, program) ); |
311 | } else if (str_key == "workspaces") { | 311 | } else if (str_key == "workspaces") { |
312 | screen->workspaceMenu().setInternalMenu(); | 312 | menu.insert(str_label, FbTk::RefCount<FbTk::Menu>(screen->workspaceMenu()) ); |
313 | menu.insert(str_label, &screen->workspaceMenu()); | ||
314 | } else { | 313 | } else { |
315 | // finally, try window-related commands | 314 | // finally, try window-related commands |
316 | MenuCreator::createWindowMenuItem(str_key, str_label, menu); | 315 | MenuCreator::createWindowMenuItem(str_key, str_label, menu); |
@@ -396,17 +395,17 @@ void MenuCreator::createFromFile(const string &filename, | |||
396 | createMenu(inject_into, l, reloader); | 395 | createMenu(inject_into, l, reloader); |
397 | } | 396 | } |
398 | 397 | ||
399 | FbMenu *MenuCreator::createMenuType(const string &type, int screen_num) { | 398 | FbTk::RefCount<FbMenu> MenuCreator::createMenuType(const string &type, int screen_num) { |
399 | FbTk::RefCount<FbMenu> menu; | ||
400 | BScreen *screen = Fluxbox::instance()->findScreen(screen_num); | 400 | BScreen *screen = Fluxbox::instance()->findScreen(screen_num); |
401 | if (screen == 0) | 401 | |
402 | return 0; | ||
403 | if (type == "iconmenu") | 402 | if (type == "iconmenu") |
404 | return new ClientMenu(*screen, screen->iconList(), | 403 | menu.reset(new ClientMenu(*screen, screen->iconList(), |
405 | true); // listen to icon list changes | 404 | true)); // listen to icon list changes |
406 | else if (type == "workspacemenu") | 405 | else if (type == "workspacemenu") |
407 | return new WorkspaceMenu(*screen); | 406 | menu.reset(new WorkspaceMenu(*screen)); |
408 | 407 | ||
409 | return 0; | 408 | return menu; |
410 | } | 409 | } |
411 | 410 | ||
412 | bool MenuCreator::createWindowMenuItem(const string &type, | 411 | bool MenuCreator::createWindowMenuItem(const string &type, |
@@ -494,10 +493,9 @@ bool MenuCreator::createWindowMenuItem(const string &type, | |||
494 | if (screen == 0) | 493 | if (screen == 0) |
495 | return false; | 494 | return false; |
496 | 495 | ||
497 | FbTk::Menu *submenu = | 496 | FbTk::RefCount<FbTk::Menu> submenu( new AlphaMenu(screen->menuTheme(), |
498 | new AlphaMenu(screen->menuTheme(), | ||
499 | screen->imageControl(), | 497 | screen->imageControl(), |
500 | *screen->layerManager().getLayer(ResourceLayer::MENU)); | 498 | *screen->layerManager().getLayer(ResourceLayer::MENU)) ); |
501 | submenu->disableTitle(); | 499 | submenu->disableTitle(); |
502 | menu.insert(label.empty() ? _FB_XTEXT(Configmenu, Transparency, "Transparency", | 500 | menu.insert(label.empty() ? _FB_XTEXT(Configmenu, Transparency, "Transparency", |
503 | "Menu containing various transparency options"): label, | 501 | "Menu containing various transparency options"): label, |
@@ -515,17 +513,17 @@ bool MenuCreator::createWindowMenuItem(const string &type, | |||
515 | 513 | ||
516 | } else if (type == "sendto") { | 514 | } else if (type == "sendto") { |
517 | menu.insert(label.empty() ? _FB_XTEXT(Windowmenu, SendTo, "Send To...", "Send to menu item name"): | 515 | menu.insert(label.empty() ? _FB_XTEXT(Windowmenu, SendTo, "Send To...", "Send to menu item name"): |
518 | label, new SendToMenu(*Fluxbox::instance()->findScreen(menu.screenNumber()))); | 516 | label, FbTk::RefCount<FbTk::Menu>(new SendToMenu(*Fluxbox::instance()->findScreen(menu.screenNumber()))) ); |
519 | } else if (type == "layer") { | 517 | } else if (type == "layer") { |
520 | BScreen *screen = Fluxbox::instance()->findScreen(menu.screenNumber()); | 518 | BScreen *screen = Fluxbox::instance()->findScreen(menu.screenNumber()); |
521 | if (screen == 0) | 519 | if (screen == 0) |
522 | return false; | 520 | return false; |
523 | 521 | ||
524 | FbTk::Menu *submenu = new LayerMenu(screen->menuTheme(), | 522 | FbTk::RefCount<FbTk::Menu> submenu( new LayerMenu(screen->menuTheme(), |
525 | screen->imageControl(), | 523 | screen->imageControl(), |
526 | *screen->layerManager().getLayer(ResourceLayer::MENU), | 524 | *screen->layerManager().getLayer(ResourceLayer::MENU), |
527 | &context, | 525 | &context, |
528 | false); | 526 | false) ); |
529 | submenu->disableTitle(); | 527 | submenu->disableTitle(); |
530 | menu.insert(label.empty()?_FB_XTEXT(Windowmenu, Layer, "Layer ...", "Layer menu"):label, submenu); | 528 | menu.insert(label.empty()?_FB_XTEXT(Windowmenu, Layer, "Layer ...", "Layer menu"):label, submenu); |
531 | 529 | ||