all repos — fluxbox @ 71674739ec6de376273cb3c5b938da132e7035c5

custom fork of the fluxbox windowmanager

Changed workspace names signal in BScreen to use the new signal system
Henrik Kinnunen fluxgen@fluxbox.org
commit

71674739ec6de376273cb3c5b938da132e7035c5

parent

86819abab91cf3ea20540278d00bad6a6b86d4b0

M ChangeLogChangeLog

@@ -1,6 +1,9 @@

(Format: Year/Month/Day) Changes for 1.1.2 *08/09/21: + * Changed workspace names signal in BScreen to use the new signal + system (Henrik) + Screen.hh/cc, SendToMenu.hh/cc, WorkspaceMenu.hh/cc, WorkspaceNameTool.hh/cc * Changed current workspace signal in Bscreen to use the new signal system (Henrik) FocusableList.hh/cc, Screen.hh/cc, SendToMenu.hh/cc,
M src/Screen.ccsrc/Screen.cc

@@ -341,7 +341,6 @@ const string &altscreenname,

int scrn, int num_layers) : m_clientlist_sig(*this), // client signal m_iconlist_sig(*this), // icon list signal - m_workspacenames_sig(*this), // workspace names signal m_workspace_area_sig(*this), // workspace area signal m_focusedwindow_sig(*this), // focused window signal m_reconfigure_sig(*this), // reconfigure signal

@@ -1017,7 +1016,7 @@ void BScreen::updateWorkspaceName(unsigned int w) {

Workspace *space = getWorkspace(w); if (space) { m_workspace_names[w] = space->name(); - m_workspacenames_sig.notify(); + m_workspacenames_sig.emit(*this); Fluxbox::instance()->save_rc(); } }

@@ -1104,7 +1103,7 @@ m_workspaces_list.push_back(wkspc);

if (save_name) { addWorkspaceName(wkspc->name().c_str()); //update names - m_workspacenames_sig.notify(); + m_workspacenames_sig.emit(*this); } saveWorkspaces(m_workspaces_list.size());
M src/Screen.hhsrc/Screen.hh

@@ -216,7 +216,7 @@ FbTk::Subject &iconListSig() { return m_iconlist_sig; }

/// workspace count signal FbTk::Signal<void, BScreen&> &workspaceCountSig() { return m_workspacecount_sig; } /// workspace names signal - FbTk::Subject &workspaceNamesSig() { return m_workspacenames_sig; } + FbTk::Signal<void, BScreen&> &workspaceNamesSig() { return m_workspacenames_sig; } /// workspace area signal FbTk::Subject &workspaceAreaSig() { return m_workspace_area_sig; } /// current workspace signal

@@ -494,7 +494,7 @@

ScreenSubject m_clientlist_sig, ///< client signal m_iconlist_sig, ///< notify if a window gets iconified/deiconified - m_workspacenames_sig, ///< workspace names signal + m_workspace_area_sig, ///< workspace area changed signal m_focusedwindow_sig, ///< focused window signal m_reconfigure_sig, ///< reconfigure signal

@@ -503,6 +503,8 @@ m_bg_change_sig; ///< background change signal

FbTk::Signal<void, BScreen&> m_workspacecount_sig; ///< workspace count signal FbTk::Signal<void, BScreen&> m_currentworkspace_sig; ///< current workspace signal + FbTk::Signal<void, BScreen&> m_workspacenames_sig; ///< workspace names signal + FbTk::MultLayers m_layermanager; bool root_colormap_installed, managed;
M src/SendToMenu.ccsrc/SendToMenu.cc

@@ -55,17 +55,16 @@ // listen to:

// workspace count signal // workspace names signal // current workspace signal - m_rebuildObs = makeObserver(*this, &SendToMenu::rebuildMenu); - screen.workspaceNamesSig().attach(m_rebuildObs); + join(screen.workspaceNamesSig(), + FbTk::MemFun(*this, &SendToMenu::rebuildMenuForScreen)); - // setup new signal system - join( screen.currentWorkspaceSig(), - FbTk::MemFun(*this, &SendToMenu::rebuildMenuForScreen)); + join(screen.currentWorkspaceSig(), + FbTk::MemFun(*this, &SendToMenu::rebuildMenuForScreen)); // setup new signal system - join( screen.workspaceCountSig(), - FbTk::MemFun(*this, &SendToMenu::rebuildMenuForScreen)); + join(screen.workspaceCountSig(), + FbTk::MemFun(*this, &SendToMenu::rebuildMenuForScreen)); // no title for this menu, it should be a submenu in the window menu. disableTitle();

@@ -74,7 +73,7 @@ rebuildMenu();

} SendToMenu::~SendToMenu() { - delete m_rebuildObs; + } void SendToMenu::rebuildMenu() {
M src/SendToMenu.hhsrc/SendToMenu.hh

@@ -52,8 +52,6 @@ }

/// Rebuild the menu from scratch. void rebuildMenu(); - /// listens to signals that makes this instance need to rebuild menu - FbTk::Observer *m_rebuildObs; }; #endif // SENDTOMENU_HH
M src/WorkspaceMenu.ccsrc/WorkspaceMenu.cc

@@ -97,26 +97,13 @@ setItemSelected(screen.currentWorkspace()->workspaceID() + IDX_AFTER_ICONS, true);

updateMenu(screen.currentWorkspace()->workspaceID() + IDX_AFTER_ICONS); } -void WorkspaceMenu::update(FbTk::Subject *subj) { - - if (subj != 0 && typeid(*subj) == typeid(BScreen::ScreenSubject)) { - BScreen::ScreenSubject &screen_subj = *static_cast<BScreen::ScreenSubject *>(subj); - BScreen &screen = screen_subj.screen(); - if ( subj == &screen.workspaceNamesSig() ) { - workspaceInfoChanged( screen ); - } - } else { - FbTk::Menu::update(subj); - } -} - void WorkspaceMenu::init(BScreen &screen) { - screen.workspaceNamesSig().attach(this); - join(screen.currentWorkspaceSig(), FbTk::MemFun(*this, &WorkspaceMenu::workspaceChanged)); join(screen.workspaceCountSig(), + FbTk::MemFun(*this, &WorkspaceMenu::workspaceInfoChanged)); + join(screen.workspaceNamesSig(), FbTk::MemFun(*this, &WorkspaceMenu::workspaceInfoChanged)); using namespace FbTk;
M src/WorkspaceMenu.hhsrc/WorkspaceMenu.hh

@@ -38,8 +38,7 @@ class WorkspaceMenu: public FbMenu, private FbTk::SignalTracker {

public: explicit WorkspaceMenu(BScreen &screen); virtual ~WorkspaceMenu() { } - /// called when a subject is sending a signal - void update(FbTk::Subject *subj); + private: /// initialize menu for the screen void init(BScreen &screen);
M src/WorkspaceNameTool.ccsrc/WorkspaceNameTool.cc

@@ -43,9 +43,9 @@ m_button.setGC(m_theme->textGC());

m_button.setText(m_screen.currentWorkspace()->name()); // setup signals - screen.workspaceNamesSig().attach(this); - join(screen.currentWorkspaceSig(), + FbTk::MemFun(*this, &WorkspaceNameTool::updateForScreen)); + join(screen.workspaceNamesSig(), FbTk::MemFun(*this, &WorkspaceNameTool::updateForScreen)); theme.reconfigSig().attach(this);
M src/fluxbox.ccsrc/fluxbox.cc

@@ -454,10 +454,11 @@ screen->initWindows();

// attach screen signals to this screen->focusedWindowSig().attach(this); - screen->workspaceNamesSig().attach(this); screen->workspaceAreaSig().attach(this); screen->clientListSig().attach(this); + join(screen->workspaceNamesSig(), + FbTk::MemFun(*this, &Fluxbox::workspaceNamesChanged)); join(screen->currentWorkspaceSig(), FbTk::MemFun(*this, &Fluxbox::workspaceChanged));

@@ -1102,13 +1103,7 @@ screen.removeClient(*client);

} else if (typeid(*changedsub) == typeid(BScreen::ScreenSubject)) { BScreen::ScreenSubject *subj = dynamic_cast<BScreen::ScreenSubject *>(changedsub); BScreen &screen = subj->screen(); - if ((&(screen.workspaceNamesSig())) == changedsub) { - for (AtomHandlerContainerIt it= m_atomhandler.begin(); - it != m_atomhandler.end(); ++it) { - if ((*it).first->update()) - (*it).first->updateWorkspaceNames(screen); - } - } else if ((&(screen.focusedWindowSig())) == changedsub) { + if ((&(screen.focusedWindowSig())) == changedsub) { for (AtomHandlerContainerIt it= m_atomhandler.begin(); it != m_atomhandler.end(); it++) { (*it).first->updateFocusedWindow(screen,

@@ -1530,3 +1525,11 @@ if ((*it).first->update())

(*it).first->updateCurrentWorkspace(screen); } } + +void Fluxbox::workspaceNamesChanged(BScreen &screen) { + for (AtomHandlerContainerIt it= m_atomhandler.begin(); + it != m_atomhandler.end(); ++it) { + if ((*it).first->update()) + (*it).first->updateWorkspaceNames(screen); + } +}
M src/fluxbox.hhsrc/fluxbox.hh

@@ -205,6 +205,8 @@ /// Called when workspace count on a specific screen changed.

void workspaceCountChanged( BScreen& screen ); /// Called when workspace was switched void workspaceChanged(BScreen& screen); + /// Called when workspace names changed + void workspaceNamesChanged(BScreen &screen); std::auto_ptr<FbAtoms> m_fbatoms;