summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfluxgen <fluxgen>2004-01-19 18:29:43 (GMT)
committerfluxgen <fluxgen>2004-01-19 18:29:43 (GMT)
commit2e0fba32533f505e5121e7506de8987ac12c2cdc (patch)
tree4f465fa6a89ec43ea03c8c19f15280550e53c705
parentdf5d6f30e27eb058c71cf4f3b80e358f35260a2d (diff)
downloadfluxbox_lack-2e0fba32533f505e5121e7506de8987ac12c2cdc.zip
fluxbox_lack-2e0fba32533f505e5121e7506de8987ac12c2cdc.tar.bz2
workspace area signal
-rw-r--r--src/Screen.cc28
-rw-r--r--src/Screen.hh7
2 files changed, 24 insertions, 11 deletions
diff --git a/src/Screen.cc b/src/Screen.cc
index a81ee9e..57dead2 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: Screen.cc,v 1.261 2004/01/16 11:47:07 fluxgen Exp $ 25// $Id: Screen.cc,v 1.262 2004/01/19 18:29:43 fluxgen Exp $
26 26
27 27
28#include "Screen.hh" 28#include "Screen.hh"
@@ -386,6 +386,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
386 m_iconlist_sig(*this), // icon list signal 386 m_iconlist_sig(*this), // icon list signal
387 m_workspacecount_sig(*this), // workspace count signal 387 m_workspacecount_sig(*this), // workspace count signal
388 m_workspacenames_sig(*this), // workspace names signal 388 m_workspacenames_sig(*this), // workspace names signal
389 m_workspace_area_sig(*this), // workspace area signal
389 m_currentworkspace_sig(*this), // current workspace signal 390 m_currentworkspace_sig(*this), // current workspace signal
390 m_reconfigure_sig(*this), // reconfigure signal 391 m_reconfigure_sig(*this), // reconfigure signal
391 m_resize_sig(*this), 392 m_resize_sig(*this),
@@ -1078,10 +1079,10 @@ void BScreen::changeWorkspaceID(unsigned int id) {
1078 // This is a little tricks to reduce flicker 1079 // This is a little tricks to reduce flicker
1079 // this way we can set focus pixmap on frame before we show it 1080 // this way we can set focus pixmap on frame before we show it
1080 // and using ExposeEvent to redraw without flicker 1081 // and using ExposeEvent to redraw without flicker
1081 /* 1082 /*
1082 WinClient *win = getLastFocusedWindow(currentWorkspaceID()); 1083 WinClient *win = getLastFocusedWindow(currentWorkspaceID());
1083 if (win && win->fbwindow()) 1084 if (win && win->fbwindow())
1084 win->fbwindow()->setFocusFlag(true); 1085 win->fbwindow()->setFocusFlag(true);
1085 */ 1086 */
1086 1087
1087 currentWorkspace()->showAll(); 1088 currentWorkspace()->showAll();
@@ -1095,6 +1096,7 @@ void BScreen::changeWorkspaceID(unsigned int id) {
1095 focused->resumeMoving(); 1096 focused->resumeMoving();
1096 1097
1097 updateNetizenCurrentWorkspace(); 1098 updateNetizenCurrentWorkspace();
1099 FbTk::App::instance()->sync(false);
1098 1100
1099} 1101}
1100 1102
@@ -1210,8 +1212,6 @@ void BScreen::updateNetizenWindowAdd(Window w, unsigned long p) {
1210 for (; it != it_end; ++it) { 1212 for (; it != it_end; ++it) {
1211 (*it)->sendWindowAdd(w, p); 1213 (*it)->sendWindowAdd(w, p);
1212 } 1214 }
1213
1214 m_clientlist_sig.notify();
1215 1215
1216} 1216}
1217 1217
@@ -1355,6 +1355,8 @@ FluxboxWindow *BScreen::createWindow(Window client) {
1355 win->show(); 1355 win->show();
1356 } 1356 }
1357 1357
1358 m_clientlist_sig.notify();
1359
1358 FbTk::App::instance()->sync(false); 1360 FbTk::App::instance()->sync(false);
1359 return win; 1361 return win;
1360} 1362}
@@ -1379,6 +1381,8 @@ FluxboxWindow *BScreen::createWindow(WinClient &client) {
1379 if (win->workspaceNumber() == currentWorkspaceID() || win->isStuck()) 1381 if (win->workspaceNumber() == currentWorkspaceID() || win->isStuck())
1380 win->show(); 1382 win->show();
1381 1383
1384 m_clientlist_sig.notify();
1385
1382 return win; 1386 return win;
1383} 1387}
1384 1388
@@ -1418,18 +1422,23 @@ private:
1418 Strut &m_max_area; 1422 Strut &m_max_area;
1419}; 1423};
1420 1424
1421}; // end anonymous namespace 1425} // end anonymous namespace
1422 1426
1423void BScreen::updateAvailableWorkspaceArea() { 1427void BScreen::updateAvailableWorkspaceArea() {
1424 // find max of left, right, top and bottom and set avaible workspace area 1428 // find max of left, right, top and bottom and set avaible workspace area
1425 1429
1426 // clear old area 1430 // clear old area
1431 Strut oldarea = *(m_available_workspace_area.get());
1427 m_available_workspace_area.reset(new Strut(0, 0, 0, 0)); 1432 m_available_workspace_area.reset(new Strut(0, 0, 0, 0));
1428 1433
1429 // calculate max area 1434 // calculate max area
1430 for_each(m_strutlist.begin(), 1435 for_each(m_strutlist.begin(),
1431 m_strutlist.end(), 1436 m_strutlist.end(),
1432 MaxArea(*m_available_workspace_area.get())); 1437 MaxArea(*m_available_workspace_area.get()));
1438
1439 // only notify if the area changed
1440 if (oldarea == *(m_available_workspace_area.get()))
1441 m_workspace_area_sig.notify();
1433} 1442}
1434 1443
1435void BScreen::addWorkspaceName(const char *name) { 1444void BScreen::addWorkspaceName(const char *name) {
@@ -2390,7 +2399,8 @@ bool BScreen::doSkipWindow(const WinClient &winclient, int opts) {
2390 (opts & CYCLESKIPSTUCK) != 0 && win->isStuck() || // skip if stuck 2399 (opts & CYCLESKIPSTUCK) != 0 && win->isStuck() || // skip if stuck
2391 // skip if not active client (i.e. only visit each fbwin once) 2400 // skip if not active client (i.e. only visit each fbwin once)
2392 (opts & CYCLEGROUPS) != 0 && win->winClient().window() != winclient.window() || 2401 (opts & CYCLEGROUPS) != 0 && win->winClient().window() != winclient.window() ||
2393 (opts & CYCLESKIPSHADED) != 0 && win->isShaded() // skip if shaded 2402 (opts & CYCLESKIPSHADED) != 0 && win->isShaded() || // skip if shaded
2403 win->isHidden()
2394 ); 2404 );
2395} 2405}
2396 2406
diff --git a/src/Screen.hh b/src/Screen.hh
index 8f5951e..ced6f66 100644
--- a/src/Screen.hh
+++ b/src/Screen.hh
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: Screen.hh,v 1.133 2004/01/16 11:58:45 fluxgen Exp $ 25// $Id: Screen.hh,v 1.134 2004/01/19 18:28:58 fluxgen Exp $
26 26
27#ifndef SCREEN_HH 27#ifndef SCREEN_HH
28#define SCREEN_HH 28#define SCREEN_HH
@@ -136,7 +136,7 @@ public:
136 136
137 inline unsigned int width() const { return rootWindow().width(); } 137 inline unsigned int width() const { return rootWindow().width(); }
138 inline unsigned int height() const { return rootWindow().height(); } 138 inline unsigned int height() const { return rootWindow().height(); }
139 inline unsigned int screenNumber() const { return rootWindow().screenNumber(); } 139 inline int screenNumber() const { return rootWindow().screenNumber(); }
140 140
141 /// @return number of workspaces 141 /// @return number of workspaces
142 inline unsigned int getCount() const { return m_workspaces_list.size(); } 142 inline unsigned int getCount() const { return m_workspaces_list.size(); }
@@ -162,6 +162,8 @@ public:
162 FbTk::Subject &workspaceCountSig() { return m_workspacecount_sig; } 162 FbTk::Subject &workspaceCountSig() { return m_workspacecount_sig; }
163 /// workspace names signal 163 /// workspace names signal
164 FbTk::Subject &workspaceNamesSig() { return m_workspacenames_sig; } 164 FbTk::Subject &workspaceNamesSig() { return m_workspacenames_sig; }
165 /// workspace area signal
166 FbTk::Subject &workspaceAreaSig() { return m_workspace_area_sig; }
165 /// current workspace signal 167 /// current workspace signal
166 FbTk::Subject &currentWorkspaceSig() { return m_currentworkspace_sig; } 168 FbTk::Subject &currentWorkspaceSig() { return m_currentworkspace_sig; }
167 /// reconfigure signal 169 /// reconfigure signal
@@ -360,6 +362,7 @@ private:
360 m_iconlist_sig, ///< notify if a window gets iconified/deiconified 362 m_iconlist_sig, ///< notify if a window gets iconified/deiconified
361 m_workspacecount_sig, ///< workspace count signal 363 m_workspacecount_sig, ///< workspace count signal
362 m_workspacenames_sig, ///< workspace names signal 364 m_workspacenames_sig, ///< workspace names signal
365 m_workspace_area_sig, ///< workspace area changed signal
363 m_currentworkspace_sig, ///< current workspace signal 366 m_currentworkspace_sig, ///< current workspace signal
364 m_reconfigure_sig, ///< reconfigure signal 367 m_reconfigure_sig, ///< reconfigure signal
365 m_resize_sig; ///< resize signal 368 m_resize_sig; ///< resize signal