all repos — fluxbox @ 2fcc0fd9e7b92dbb440fd67e34fdbab05be7d98d

custom fork of the fluxbox windowmanager

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

2fcc0fd9e7b92dbb440fd67e34fdbab05be7d98d

parent

f2c8868724ebcaa6afaac4a71093f77b7eeaa23f

7 files changed, 31 insertions(+), 21 deletions(-)

jump to
M ChangeLogChangeLog

@@ -1,7 +1,9 @@

(Format: Year/Month/Day) Changes for 1.1.2 *08/09/28: - * Change focused window signal to use the new signal system (Henrik) + * Changed workspace area signal to use the new signal system (Henrik) + Window.hh/cc, Screen.hh/cc, fluxbox.hh/cc + * Changed focused window signal to use the new signal system (Henrik) FbTk/Signal.hh, FocusControl.cc, FocusableList.hh/cc, Screen.hh/cc Window.hh/cc, fluxbox.hh/cc *08/09/25:
M src/Screen.ccsrc/Screen.cc

@@ -339,7 +339,6 @@ BScreen::BScreen(FbTk::ResourceManager &rm,

const string &screenname, const string &altscreenname, int scrn, int num_layers) : - m_workspace_area_sig(*this), // workspace area signal m_reconfigure_sig(*this), // reconfigure signal m_resize_sig(*this), m_layermanager(num_layers),

@@ -1453,7 +1452,7 @@ updated = m_head_areas[i]->updateAvailableWorkspaceArea() || updated;

} if (updated) - m_workspace_area_sig.notify(); + m_workspace_area_sig.emit(*this); } void BScreen::addWorkspaceName(const char *name) {

@@ -1933,7 +1932,7 @@ m_root_theme->reconfigTheme();

// send resize notify m_resize_sig.notify(); - m_workspace_area_sig.notify(); + m_workspace_area_sig.emit(*this); // move windows out of inactive heads clearHeads();
M src/Screen.hhsrc/Screen.hh

@@ -219,7 +219,7 @@ ScreenSignal &workspaceCountSig() { return m_workspacecount_sig; }

/// workspace names signal ScreenSignal &workspaceNamesSig() { return m_workspacenames_sig; } /// workspace area signal - FbTk::Subject &workspaceAreaSig() { return m_workspace_area_sig; } + ScreenSignal &workspaceAreaSig() { return m_workspace_area_sig; } /// current workspace signal ScreenSignal &currentWorkspaceSig() { return m_currentworkspace_sig; } /// focused window signal

@@ -494,11 +494,11 @@

const Strut* availableWorkspaceArea(int head) const; ScreenSubject - m_workspace_area_sig, ///< workspace area changed signal m_reconfigure_sig, ///< reconfigure signal m_resize_sig; ///< resize signal FbTk::Signal<void, BScreen&, FluxboxWindow*, WinClient*> m_focusedwindow_sig; ///< focused window signal + ScreenSignal m_workspace_area_sig; ///< workspace area changed signal ScreenSignal m_iconlist_sig; ///< notify if a window gets iconified/deiconified ScreenSignal m_clientlist_sig; ///< client signal ScreenSignal m_bg_change_sig; ///< background change signal
M src/Window.ccsrc/Window.cc

@@ -1488,9 +1488,10 @@ void FluxboxWindow::attachWorkAreaSig() {

// notify when struts change, so we can resize accordingly // Subject checks for duplicates for us if (m_state.maximized || m_state.fullscreen) - screen().workspaceAreaSig().attach(this); + join(screen().workspaceAreaSig(), + FbTk::MemFun(*this, &FluxboxWindow::workspaceAreaChanged)); else - screen().workspaceAreaSig().detach(this); + leave(screen().workspaceAreaSig()); } /**

@@ -2729,12 +2730,14 @@

} else if (subj == &m_theme.reconfigSig()) { frame().applyDecorations(); sendConfigureNotify(); - } else if (subj == &screen().workspaceAreaSig()) { - frame().applyState(); } else if (m_initialized && subj == &m_frame.frameExtentSig()) { Fluxbox::instance()->updateFrameExtents(*this); sendConfigureNotify(); } +} + +void FluxboxWindow::workspaceAreaChanged(BScreen &screen) { + frame().applyState(); } // commit current decoration values to actual displayed things
M src/Window.hhsrc/Window.hh

@@ -526,6 +526,9 @@

void associateClient(WinClient &client); /// Called when focused changed, and is attached when it is not in fullscreen mode void focusedWindowChanged(BScreen &screen, FluxboxWindow *focused_win, WinClient* client); + /// Called when workspace area on screen changed. + void workspaceAreaChanged(BScreen &screen); + // state and hint signals WinSubject m_hintsig,
M src/fluxbox.ccsrc/fluxbox.cc

@@ -453,7 +453,9 @@

screen->initWindows(); // attach screen signals to this - screen->workspaceAreaSig().attach(this); + + join(screen->workspaceAreaSig(), + FbTk::MemFun(*this, &Fluxbox::workspaceAreaChanged)); join(screen->focusedWindowSig(), FbTk::MemFun(*this, &Fluxbox::focusedWindowChanged));

@@ -1104,16 +1106,6 @@ revertFocus();

} screen.removeClient(*client); - } else if (typeid(*changedsub) == typeid(BScreen::ScreenSubject)) { - BScreen::ScreenSubject *subj = dynamic_cast<BScreen::ScreenSubject *>(changedsub); - BScreen &screen = subj->screen(); - if ((&(screen.workspaceAreaSig())) == changedsub) { - for (AtomHandlerContainerIt it= m_atomhandler.begin(); - it != m_atomhandler.end(); ++it) { - if ((*it).first->update()) - (*it).first->updateWorkarea(screen); - } - } } }

@@ -1540,3 +1532,11 @@ it != m_atomhandler.end(); it++) {

(*it).first->updateFocusedWindow(screen, client ? client->window() : 0 ); } } + +void Fluxbox::workspaceAreaChanged(BScreen &screen) { + for (AtomHandlerContainerIt it= m_atomhandler.begin(); + it != m_atomhandler.end(); ++it) { + if ((*it).first->update()) + (*it).first->updateWorkarea(screen); + } +}
M src/fluxbox.hhsrc/fluxbox.hh

@@ -214,6 +214,9 @@ void focusedWindowChanged(BScreen &screen,

FluxboxWindow* win, WinClient* client); + /// Called when the workspace area changed. + void workspaceAreaChanged(BScreen &screen); + std::auto_ptr<FbAtoms> m_fbatoms; FbTk::ResourceManager m_resourcemanager, &m_screen_rm;