all repos — fluxbox @ 11190682277e3ac14d976738576f20df04e63dc5

custom fork of the fluxbox windowmanager

fix crash when toolbar disabled
simonb simonb
commit

11190682277e3ac14d976738576f20df04e63dc5

parent

932eebe0ddbc611ccf72cbebebbde656ae2d08ec

4 files changed, 21 insertions(+), 18 deletions(-)

jump to
M ChangeLogChangeLog

@@ -1,6 +1,8 @@

(Format: Year/Month/Day) Changes for 0.9.16: *06/04/22: + * Fix crash when toolbar disabled (Simon) + Slit.hh/cc Screen.cc * Couple of memory-based fixes from valgrind (Simon) Keys.cc Screen.cc MenuCreator.cc * Applied #1467926 and #1458069, minor other changes (Mathias)
M src/Screen.ccsrc/Screen.cc

@@ -1687,13 +1687,6 @@ tabplacement_menu->updateMenu();

menu.insert(tabmenu_label, tab_menu); -#ifdef SLIT - if (slit() != 0) { - slit()->menu().setInternalMenu(); - menu.insert("Slit", &slit()->menu()); - } -#endif // SLIT - Configmenus::iterator it = m_configmenu_list.begin(); Configmenus::iterator it_end = m_configmenu_list.end(); for (; it != it_end; ++it)
M src/Slit.ccsrc/Slit.cc

@@ -260,9 +260,6 @@ m_screen(scr),

m_slitmenu(scr.menuTheme(), scr.imageControl(), *scr.layerManager().getLayer(Layer::MENU)), - m_placement_menu(scr.menuTheme(), - scr.imageControl(), - *scr.layerManager().getLayer(Layer::MENU)), m_clientlist_menu(scr.menuTheme(), scr.imageControl(), *scr.layerManager().getLayer(Layer::MENU)),

@@ -274,6 +271,7 @@ m_kwm2_dockwindow(XInternAtom(FbTk::App::instance()->display(),

"_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False)), //KDE v2.x m_layeritem(0), + m_slit_theme(new SlitTheme(scr.rootWindow().screenNumber())), m_strut(0), // resources

@@ -300,6 +298,8 @@ // attach to theme and root window change signal

m_slit_theme->reconfigSig().attach(this); scr.resizeSig().attach(this); scr.reconfigureSig().attach(this); // if alpha changed (we disablethis signal when we get theme change sig) + + scr.addConfigMenu(_FBTEXT(Slit, Slit, "Slit", "The Slit"), m_slitmenu); frame.pixmap = None; // move the frame out of sight for a moment

@@ -1236,10 +1236,17 @@

FbTk::RefCount<FbTk::Command> save_and_reconfigure(s_a_reconf_macro); FbTk::RefCount<FbTk::Command> save_and_reconfigure_slit(s_a_reconf_slit_macro); + + // it'll be freed by the slitmenu (since not marked internal) + FbMenu *placement_menu = new FbMenu(m_screen.menuTheme(), + m_screen.imageControl(), + *m_screen.layerManager().getLayer(::Layer::MENU)); + + // setup base menu m_slitmenu.setLabel(_FBTEXT(Slit, Slit, "Slit", "The Slit")); m_slitmenu.insert(_FBTEXT(Menu, Placement, "Placement", "Title of Placement menu"), - &m_placement_menu); + placement_menu); m_slitmenu.insert(_FBTEXT(Menu, Layer, "Layer...", "Title of Layer menu"), m_layermenu.get());

@@ -1287,10 +1294,11 @@ m_slitmenu.insert(_FBTEXT(Slit, ClientsMenu, "Clients", "Slit client menu"), &m_clientlist_menu);

m_slitmenu.updateMenu(); // setup sub menu - m_placement_menu.setLabel(_FBTEXT(Slit, Placement, "Slit Placement", "Slit Placement")); - m_placement_menu.setMinimumSublevels(3); + placement_menu->setLabel(_FBTEXT(Slit, Placement, "Slit Placement", "Slit Placement")); + placement_menu->setMinimumSublevels(3); m_layermenu->setInternalMenu(); m_clientlist_menu.setInternalMenu(); + m_slitmenu.setInternalMenu(); typedef pair<const char *, Slit::Placement> PlacementP; typedef list<PlacementP> Placements;

@@ -1314,10 +1322,10 @@ const char *str = place_menu.front().first;

Slit::Placement placement = place_menu.front().second; if (str == 0) { - m_placement_menu.insert(""); - m_placement_menu.setItemEnabled(i, false); + placement_menu->insert(""); + placement_menu->setItemEnabled(i, false); } else { - m_placement_menu.insert(new PlaceSlitMenuItem(str, *this, + placement_menu->insert(new PlaceSlitMenuItem(str, *this, placement, save_and_reconfigure));

@@ -1326,7 +1334,7 @@ place_menu.pop_front();

} // finaly update sub menu - m_placement_menu.updateMenu(); + placement_menu->updateMenu(); } void Slit::moveToLayer(int layernum) {
M src/Slit.hhsrc/Slit.hh

@@ -147,7 +147,7 @@ BScreen &m_screen;

FbTk::Timer m_timer; SlitClients m_client_list; - FbMenu m_slitmenu, m_placement_menu, m_clientlist_menu; + FbMenu m_slitmenu, m_clientlist_menu; std::auto_ptr<LayerMenu> m_layermenu; std::string m_filename;