aboutsummaryrefslogtreecommitdiff
path: root/src/MenuCreator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/MenuCreator.cc')
-rw-r--r--src/MenuCreator.cc50
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
67namespace { 67namespace {
68 68
69std::auto_ptr<FbMenu> createStyleMenu(int screen_number, const string &label, 69FbTk::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
110std::auto_ptr<FbMenu> createRootCmdMenu(int screen_number, const string &label, 110FbTk::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
399FbMenu *MenuCreator::createMenuType(const string &type, int screen_num) { 398FbTk::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
412bool MenuCreator::createWindowMenuItem(const string &type, 411bool 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