fixed minor focus bug and updated to use timer command
This commit is contained in:
parent
f35a4840ef
commit
e9e60037b0
1 changed files with 21 additions and 60 deletions
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: fluxbox.cc,v 1.179 2003/08/10 12:50:04 rathnor Exp $
|
||||
// $Id: fluxbox.cc,v 1.180 2003/08/11 16:06:51 fluxgen Exp $
|
||||
|
||||
#include "fluxbox.hh"
|
||||
|
||||
|
@ -410,7 +410,6 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
|
|||
m_rc_cache_life(m_resourcemanager, 5, "session.cacheLife", "Session.CacheLife"),
|
||||
m_rc_cache_max(m_resourcemanager, 200, "session.cacheMax", "Session.CacheMax"),
|
||||
m_focused_window(0), m_masked_window(0),
|
||||
m_timer(this),
|
||||
m_mousescreen(0),
|
||||
m_keyscreen(0),
|
||||
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
|
|||
#endif // HAVE_RANDR
|
||||
|
||||
load_rc();
|
||||
// setup theme manager to have our style file ready to be scanned
|
||||
FbTk::ThemeManager::instance().load(getStyleFilename());
|
||||
|
||||
// setup atom handlers before we create any windows
|
||||
#ifdef USE_GNOME
|
||||
|
@ -541,7 +542,7 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
|
|||
#ifdef USE_TOOLBAR
|
||||
m_atomhandler.push_back(new ToolbarHandler(*screen));
|
||||
#endif // USE_TOOLBAR
|
||||
|
||||
|
||||
// attach screen signals to this
|
||||
screen->currentWorkspaceSig().attach(this);
|
||||
screen->workspaceCountSig().attach(this);
|
||||
|
@ -552,6 +553,7 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
|
|||
for (size_t atomh=0; atomh<m_atomhandler.size(); ++atomh) {
|
||||
m_atomhandler[atomh]->initForScreen(*screen);
|
||||
}
|
||||
|
||||
}
|
||||
m_keyscreen = m_mousescreen = m_screen_list.front();
|
||||
|
||||
|
@ -561,12 +563,15 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
|
|||
"Make sure you don't have another window manager running.");
|
||||
}
|
||||
|
||||
|
||||
XSynchronize(disp, False);
|
||||
XSync(disp, False);
|
||||
|
||||
m_reconfigure_wait = m_reread_menu_wait = false;
|
||||
|
||||
m_timer.setTimeout(0);
|
||||
FbTk::RefCount<FbTk::Command> reconf_cmd(new FbTk::SimpleCommand<Fluxbox>(*this, &Fluxbox::timed_reconfigure));
|
||||
m_timer.setCommand(reconf_cmd);
|
||||
m_timer.fireOnce(true);
|
||||
|
||||
// Create keybindings handler and load keys file
|
||||
|
@ -895,7 +900,7 @@ void Fluxbox::handleEvent(XEvent * const e) {
|
|||
break;
|
||||
|
||||
WinClient *winclient = searchWindow(e->xfocus.window);
|
||||
if (winclient && !(m_focused_window == winclient))
|
||||
if (winclient && m_focused_window != winclient)
|
||||
setFocusedWindow(winclient);
|
||||
|
||||
} break;
|
||||
|
@ -910,6 +915,8 @@ void Fluxbox::handleEvent(XEvent * const e) {
|
|||
cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<<endl;
|
||||
#endif // DEBUG
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1284,7 +1291,9 @@ void Fluxbox::update(FbTk::Subject *changedsub) {
|
|||
// make sure each workspace get this
|
||||
BScreen &scr = win.screen();
|
||||
scr.removeWindow(&win);
|
||||
|
||||
if (m_focused_window == &win.winClient())
|
||||
m_focused_window = 0;
|
||||
|
||||
} else if ((&(win.workspaceSig())) == changedsub) { // workspace signal
|
||||
for (size_t i=0; i<m_atomhandler.size(); ++i) {
|
||||
if (m_atomhandler[i]->update())
|
||||
|
@ -1321,6 +1330,7 @@ void Fluxbox::update(FbTk::Subject *changedsub) {
|
|||
}
|
||||
}
|
||||
} else if (typeid(*changedsub) == typeid(WinClient::WinClientSubj)) {
|
||||
|
||||
WinClient::WinClientSubj *subj = dynamic_cast<WinClient::WinClientSubj *>(changedsub);
|
||||
WinClient &client = subj->winClient();
|
||||
|
||||
|
@ -1337,7 +1347,10 @@ void Fluxbox::update(FbTk::Subject *changedsub) {
|
|||
if (m_focused_window == &client)
|
||||
revertFocus(screen);
|
||||
|
||||
removeWindowSearch(client.window());
|
||||
removeWindowSearch(client.window());
|
||||
// failed to revert focus?
|
||||
if (m_focused_window == &client)
|
||||
m_focused_window = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1540,27 +1553,12 @@ void Fluxbox::save_rc() {
|
|||
placement.c_str());
|
||||
XrmPutLineResource(&new_blackboxrc, rc_string);
|
||||
|
||||
// load_rc(screen);
|
||||
|
||||
// these are static, but may not be saved in the users resource file,
|
||||
// writing these resources will allow the user to edit them at a later
|
||||
// time... but loading the defaults before saving allows us to rewrite the
|
||||
// users changes...
|
||||
|
||||
#ifdef HAVE_STRFTIME
|
||||
sprintf(rc_string, "session.screen%d.strftimeFormat: %s", screen_number,
|
||||
screen->getStrftimeFormat());
|
||||
XrmPutLineResource(&new_blackboxrc, rc_string);
|
||||
#else // !HAVE_STRFTIME
|
||||
sprintf(rc_string, "session.screen%d.dateFormat: %s", screen_number,
|
||||
((screen->getDateFormat() == B_EUROPEANDATE) ?
|
||||
"European" : "American"));
|
||||
XrmPutLineResource(&new_blackboxrc, rc_string);
|
||||
|
||||
sprintf(rc_string, "session.screen%d.clockFormat: %d", screen_number,
|
||||
((screen->isClock24Hour()) ? 24 : 12));
|
||||
XrmPutLineResource(&new_blackboxrc, rc_string);
|
||||
#endif // HAVE_STRFTIME
|
||||
|
||||
// write out the users workspace names
|
||||
sprintf(rc_string, "session.screen%d.workspaceNames: ", screen_number);
|
||||
string workspaces_string(rc_string);
|
||||
|
@ -1774,42 +1772,6 @@ void Fluxbox::load_rc(BScreen &screen) {
|
|||
} else
|
||||
screen.savePlacementPolicy(BScreen::ROWSMARTPLACEMENT);
|
||||
|
||||
#ifdef HAVE_STRFTIME
|
||||
sprintf(name_lookup, "session.screen%d.strftimeFormat", screen_number);
|
||||
sprintf(class_lookup, "Session.Screen%d.StrftimeFormat", screen_number);
|
||||
if (XrmGetResource(*database, name_lookup, class_lookup, &value_type,
|
||||
&value))
|
||||
screen.saveStrftimeFormat(value.addr);
|
||||
else
|
||||
screen.saveStrftimeFormat("%I:%M %p");
|
||||
#else // HAVE_STRFTIME
|
||||
|
||||
sprintf(name_lookup, "session.screen%d.dateFormat", screen_number);
|
||||
sprintf(class_lookup, "Session.Screen%d.DateFormat", screen_number);
|
||||
if (XrmGetResource(*database, name_lookup, class_lookup, &value_type,
|
||||
&value)) {
|
||||
if (strncasecmp(value.addr, "european", value.size))
|
||||
screen.saveDateFormat(B_AMERICANDATE);
|
||||
else
|
||||
screen.saveDateFormat(B_EUROPEANDATE);
|
||||
} else
|
||||
screen.saveDateFormat(B_AMERICANDATE);
|
||||
|
||||
sprintf(name_lookup, "session.screen%d.clockFormat", screen_number);
|
||||
sprintf(class_lookup, "Session.Screen%d.ClockFormat", screen_number);
|
||||
if (XrmGetResource(*database, name_lookup, class_lookup, &value_type,
|
||||
&value)) {
|
||||
int clock;
|
||||
if (sscanf(value.addr, "%d", &clock) != 1)
|
||||
screen.saveClock24Hour(false);
|
||||
else if (clock == 24)
|
||||
screen.saveClock24Hour(true);
|
||||
else
|
||||
screen.saveClock24Hour(false);
|
||||
} else
|
||||
screen.saveClock24Hour(false);
|
||||
#endif // HAVE_STRFTIME
|
||||
|
||||
}
|
||||
|
||||
void Fluxbox::loadRootCommand(BScreen &screen) {
|
||||
|
@ -1859,7 +1821,6 @@ void Fluxbox::real_reconfigure() {
|
|||
if (old_blackboxrc)
|
||||
XrmDestroyDatabase(old_blackboxrc);
|
||||
|
||||
|
||||
ScreenList::iterator sit = m_screen_list.begin();
|
||||
ScreenList::iterator sit_end = m_screen_list.end();
|
||||
for (; sit != sit_end; ++sit)
|
||||
|
@ -1956,7 +1917,7 @@ void Fluxbox::clearMenuFilenames() {
|
|||
m_menu_timestamps.erase(m_menu_timestamps.begin(), m_menu_timestamps.end());
|
||||
}
|
||||
|
||||
void Fluxbox::timeout() {
|
||||
void Fluxbox::timed_reconfigure() {
|
||||
if (m_reconfigure_wait)
|
||||
real_reconfigure();
|
||||
|
||||
|
|
Loading…
Reference in a new issue