aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fluxbox.cc81
1 files changed, 21 insertions, 60 deletions
diff --git a/src/fluxbox.cc b/src/fluxbox.cc
index f910e7b..d6ece65 100644
--- a/src/fluxbox.cc
+++ b/src/fluxbox.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: fluxbox.cc,v 1.179 2003/08/10 12:50:04 rathnor Exp $ 25// $Id: fluxbox.cc,v 1.180 2003/08/11 16:06:51 fluxgen Exp $
26 26
27#include "fluxbox.hh" 27#include "fluxbox.hh"
28 28
@@ -410,7 +410,6 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
410 m_rc_cache_life(m_resourcemanager, 5, "session.cacheLife", "Session.CacheLife"), 410 m_rc_cache_life(m_resourcemanager, 5, "session.cacheLife", "Session.CacheLife"),
411 m_rc_cache_max(m_resourcemanager, 200, "session.cacheMax", "Session.CacheMax"), 411 m_rc_cache_max(m_resourcemanager, 200, "session.cacheMax", "Session.CacheMax"),
412 m_focused_window(0), m_masked_window(0), 412 m_focused_window(0), m_masked_window(0),
413 m_timer(this),
414 m_mousescreen(0), 413 m_mousescreen(0),
415 m_keyscreen(0), 414 m_keyscreen(0),
416 m_watching_screen(0), m_watch_keyrelease(0), 415 m_watching_screen(0), m_watch_keyrelease(0),
@@ -472,6 +471,8 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
472#endif // HAVE_RANDR 471#endif // HAVE_RANDR
473 472
474 load_rc(); 473 load_rc();
474 // setup theme manager to have our style file ready to be scanned
475 FbTk::ThemeManager::instance().load(getStyleFilename());
475 476
476 // setup atom handlers before we create any windows 477 // setup atom handlers before we create any windows
477#ifdef USE_GNOME 478#ifdef USE_GNOME
@@ -541,7 +542,7 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
541#ifdef USE_TOOLBAR 542#ifdef USE_TOOLBAR
542 m_atomhandler.push_back(new ToolbarHandler(*screen)); 543 m_atomhandler.push_back(new ToolbarHandler(*screen));
543#endif // USE_TOOLBAR 544#endif // USE_TOOLBAR
544 545
545 // attach screen signals to this 546 // attach screen signals to this
546 screen->currentWorkspaceSig().attach(this); 547 screen->currentWorkspaceSig().attach(this);
547 screen->workspaceCountSig().attach(this); 548 screen->workspaceCountSig().attach(this);
@@ -552,6 +553,7 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
552 for (size_t atomh=0; atomh<m_atomhandler.size(); ++atomh) { 553 for (size_t atomh=0; atomh<m_atomhandler.size(); ++atomh) {
553 m_atomhandler[atomh]->initForScreen(*screen); 554 m_atomhandler[atomh]->initForScreen(*screen);
554 } 555 }
556
555 } 557 }
556 m_keyscreen = m_mousescreen = m_screen_list.front(); 558 m_keyscreen = m_mousescreen = m_screen_list.front();
557 559
@@ -561,12 +563,15 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
561 "Make sure you don't have another window manager running."); 563 "Make sure you don't have another window manager running.");
562 } 564 }
563 565
566
564 XSynchronize(disp, False); 567 XSynchronize(disp, False);
565 XSync(disp, False); 568 XSync(disp, False);
566 569
567 m_reconfigure_wait = m_reread_menu_wait = false; 570 m_reconfigure_wait = m_reread_menu_wait = false;
568 571
569 m_timer.setTimeout(0); 572 m_timer.setTimeout(0);
573 FbTk::RefCount<FbTk::Command> reconf_cmd(new FbTk::SimpleCommand<Fluxbox>(*this, &Fluxbox::timed_reconfigure));
574 m_timer.setCommand(reconf_cmd);
570 m_timer.fireOnce(true); 575 m_timer.fireOnce(true);
571 576
572 // Create keybindings handler and load keys file 577 // Create keybindings handler and load keys file
@@ -895,7 +900,7 @@ void Fluxbox::handleEvent(XEvent * const e) {
895 break; 900 break;
896 901
897 WinClient *winclient = searchWindow(e->xfocus.window); 902 WinClient *winclient = searchWindow(e->xfocus.window);
898 if (winclient && !(m_focused_window == winclient)) 903 if (winclient && m_focused_window != winclient)
899 setFocusedWindow(winclient); 904 setFocusedWindow(winclient);
900 905
901 } break; 906 } break;
@@ -910,6 +915,8 @@ void Fluxbox::handleEvent(XEvent * const e) {
910 cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<<endl; 915 cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<<endl;
911#endif // DEBUG 916#endif // DEBUG
912 917
918 } else {
919
913 } 920 }
914 } 921 }
915 break; 922 break;
@@ -1284,7 +1291,9 @@ void Fluxbox::update(FbTk::Subject *changedsub) {
1284 // make sure each workspace get this 1291 // make sure each workspace get this
1285 BScreen &scr = win.screen(); 1292 BScreen &scr = win.screen();
1286 scr.removeWindow(&win); 1293 scr.removeWindow(&win);
1287 1294 if (m_focused_window == &win.winClient())
1295 m_focused_window = 0;
1296
1288 } else if ((&(win.workspaceSig())) == changedsub) { // workspace signal 1297 } else if ((&(win.workspaceSig())) == changedsub) { // workspace signal
1289 for (size_t i=0; i<m_atomhandler.size(); ++i) { 1298 for (size_t i=0; i<m_atomhandler.size(); ++i) {
1290 if (m_atomhandler[i]->update()) 1299 if (m_atomhandler[i]->update())
@@ -1321,6 +1330,7 @@ void Fluxbox::update(FbTk::Subject *changedsub) {
1321 } 1330 }
1322 } 1331 }
1323 } else if (typeid(*changedsub) == typeid(WinClient::WinClientSubj)) { 1332 } else if (typeid(*changedsub) == typeid(WinClient::WinClientSubj)) {
1333
1324 WinClient::WinClientSubj *subj = dynamic_cast<WinClient::WinClientSubj *>(changedsub); 1334 WinClient::WinClientSubj *subj = dynamic_cast<WinClient::WinClientSubj *>(changedsub);
1325 WinClient &client = subj->winClient(); 1335 WinClient &client = subj->winClient();
1326 1336
@@ -1337,7 +1347,10 @@ void Fluxbox::update(FbTk::Subject *changedsub) {
1337 if (m_focused_window == &client) 1347 if (m_focused_window == &client)
1338 revertFocus(screen); 1348 revertFocus(screen);
1339 1349
1340 removeWindowSearch(client.window()); 1350 removeWindowSearch(client.window());
1351 // failed to revert focus?
1352 if (m_focused_window == &client)
1353 m_focused_window = 0;
1341 } 1354 }
1342} 1355}
1343 1356
@@ -1540,27 +1553,12 @@ void Fluxbox::save_rc() {
1540 placement.c_str()); 1553 placement.c_str());
1541 XrmPutLineResource(&new_blackboxrc, rc_string); 1554 XrmPutLineResource(&new_blackboxrc, rc_string);
1542 1555
1543 // load_rc(screen); 1556
1544 // these are static, but may not be saved in the users resource file, 1557 // these are static, but may not be saved in the users resource file,
1545 // writing these resources will allow the user to edit them at a later 1558 // writing these resources will allow the user to edit them at a later
1546 // time... but loading the defaults before saving allows us to rewrite the 1559 // time... but loading the defaults before saving allows us to rewrite the
1547 // users changes... 1560 // users changes...
1548 1561
1549#ifdef HAVE_STRFTIME
1550 sprintf(rc_string, "session.screen%d.strftimeFormat: %s", screen_number,
1551 screen->getStrftimeFormat());
1552 XrmPutLineResource(&new_blackboxrc, rc_string);
1553#else // !HAVE_STRFTIME
1554 sprintf(rc_string, "session.screen%d.dateFormat: %s", screen_number,
1555 ((screen->getDateFormat() == B_EUROPEANDATE) ?
1556 "European" : "American"));
1557 XrmPutLineResource(&new_blackboxrc, rc_string);
1558
1559 sprintf(rc_string, "session.screen%d.clockFormat: %d", screen_number,
1560 ((screen->isClock24Hour()) ? 24 : 12));
1561 XrmPutLineResource(&new_blackboxrc, rc_string);
1562#endif // HAVE_STRFTIME
1563
1564 // write out the users workspace names 1562 // write out the users workspace names
1565 sprintf(rc_string, "session.screen%d.workspaceNames: ", screen_number); 1563 sprintf(rc_string, "session.screen%d.workspaceNames: ", screen_number);
1566 string workspaces_string(rc_string); 1564 string workspaces_string(rc_string);
@@ -1774,42 +1772,6 @@ void Fluxbox::load_rc(BScreen &screen) {
1774 } else 1772 } else
1775 screen.savePlacementPolicy(BScreen::ROWSMARTPLACEMENT); 1773 screen.savePlacementPolicy(BScreen::ROWSMARTPLACEMENT);
1776 1774
1777#ifdef HAVE_STRFTIME
1778 sprintf(name_lookup, "session.screen%d.strftimeFormat", screen_number);
1779 sprintf(class_lookup, "Session.Screen%d.StrftimeFormat", screen_number);
1780 if (XrmGetResource(*database, name_lookup, class_lookup, &value_type,
1781 &value))
1782 screen.saveStrftimeFormat(value.addr);
1783 else
1784 screen.saveStrftimeFormat("%I:%M %p");
1785#else // HAVE_STRFTIME
1786
1787 sprintf(name_lookup, "session.screen%d.dateFormat", screen_number);
1788 sprintf(class_lookup, "Session.Screen%d.DateFormat", screen_number);
1789 if (XrmGetResource(*database, name_lookup, class_lookup, &value_type,
1790 &value)) {
1791 if (strncasecmp(value.addr, "european", value.size))
1792 screen.saveDateFormat(B_AMERICANDATE);
1793 else
1794 screen.saveDateFormat(B_EUROPEANDATE);
1795 } else
1796 screen.saveDateFormat(B_AMERICANDATE);
1797
1798 sprintf(name_lookup, "session.screen%d.clockFormat", screen_number);
1799 sprintf(class_lookup, "Session.Screen%d.ClockFormat", screen_number);
1800 if (XrmGetResource(*database, name_lookup, class_lookup, &value_type,
1801 &value)) {
1802 int clock;
1803 if (sscanf(value.addr, "%d", &clock) != 1)
1804 screen.saveClock24Hour(false);
1805 else if (clock == 24)
1806 screen.saveClock24Hour(true);
1807 else
1808 screen.saveClock24Hour(false);
1809 } else
1810 screen.saveClock24Hour(false);
1811#endif // HAVE_STRFTIME
1812
1813} 1775}
1814 1776
1815void Fluxbox::loadRootCommand(BScreen &screen) { 1777void Fluxbox::loadRootCommand(BScreen &screen) {
@@ -1859,7 +1821,6 @@ void Fluxbox::real_reconfigure() {
1859 if (old_blackboxrc) 1821 if (old_blackboxrc)
1860 XrmDestroyDatabase(old_blackboxrc); 1822 XrmDestroyDatabase(old_blackboxrc);
1861 1823
1862
1863 ScreenList::iterator sit = m_screen_list.begin(); 1824 ScreenList::iterator sit = m_screen_list.begin();
1864 ScreenList::iterator sit_end = m_screen_list.end(); 1825 ScreenList::iterator sit_end = m_screen_list.end();
1865 for (; sit != sit_end; ++sit) 1826 for (; sit != sit_end; ++sit)
@@ -1956,7 +1917,7 @@ void Fluxbox::clearMenuFilenames() {
1956 m_menu_timestamps.erase(m_menu_timestamps.begin(), m_menu_timestamps.end()); 1917 m_menu_timestamps.erase(m_menu_timestamps.begin(), m_menu_timestamps.end());
1957} 1918}
1958 1919
1959void Fluxbox::timeout() { 1920void Fluxbox::timed_reconfigure() {
1960 if (m_reconfigure_wait) 1921 if (m_reconfigure_wait)
1961 real_reconfigure(); 1922 real_reconfigure();
1962 1923