From 84ca1f2e2f82b66b417b8e25295e37cb07985f3d Mon Sep 17 00:00:00 2001 From: markt <markt> Date: Thu, 6 Jul 2006 04:10:34 +0000 Subject: re-fixing the focus after fixing the crash bug --- ChangeLog | 3 +++ src/FocusControl.cc | 14 ++------------ src/Screen.cc | 10 ++++++---- src/Window.cc | 10 +++------- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index e5f91c4..65abab5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ (Format: Year/Month/Day) Changes for 1.0rc3: +*06/07/06: + * Still trying to get the focus right: bug #1517750 (Mark) + FocusControl.cc Window.cc Screen.cc *06/07/05: * Fix crash on startup on some platforms (Simon) FbTk/FbString.cc diff --git a/src/FocusControl.cc b/src/FocusControl.cc index f0d1387..339541c 100644 --- a/src/FocusControl.cc +++ b/src/FocusControl.cc @@ -458,18 +458,8 @@ void FocusControl::setFocusedWindow(WinClient *client) { #endif // DEBUG // Update the old focused client to non focus - // check if s_focused_window is valid - if (s_focused_window != 0 && - Fluxbox::instance()->validateClient(s_focused_window)) { - - if (!client && s_focused_fbwindow) - s_focused_fbwindow->setFocusFlag(false); - - } else { - s_focused_window = 0; - s_focused_fbwindow = 0; - } - + if (s_focused_fbwindow) + s_focused_fbwindow->setFocusFlag(false); if (client && client->fbwindow() && !client->fbwindow()->isIconic()) { // screen should be ok diff --git a/src/Screen.cc b/src/Screen.cc index 47599bc..df15250 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -1365,11 +1365,10 @@ FluxboxWindow *BScreen::createWindow(Window client) { // always put on end of focused list, if it gets focused it'll get pushed up // there is only the one win client at this stage + focusControl().addFocusBack(*winclient); if (focusControl().focusNew()) - focusControl().addFocusFront(*winclient); - else - focusControl().addFocusBack(*winclient); - + FocusControl::setFocusedWindow(winclient); + // we also need to check if another window expects this window to the left // and if so, then join it. FluxboxWindow *otherwin = 0; @@ -1407,6 +1406,9 @@ FluxboxWindow *BScreen::createWindow(WinClient &client) { return 0; } + if (focusControl().focusNew() || FocusControl::focusedWindow() == &client) + FocusControl::setFocusedWindow(&client); + m_clientlist_sig.notify(); return win; diff --git a/src/Window.cc b/src/Window.cc index 80b7ef6..03bde16 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -703,11 +703,9 @@ void FluxboxWindow::attachClient(WinClient &client, int x, int y) { m_workspacesig.notify(); m_layersig.notify(); - if (was_focused != 0) { + if (was_focused != 0) // already has focus, we're just assuming the state of the old window - setCurrentClient(*was_focused, false); - frame().setFocus(true); - } + FocusControl::setFocusedWindow(&client); frame().reconfigure(); @@ -776,10 +774,8 @@ void FluxboxWindow::detachCurrentClient() { return; WinClient &client = *m_client; detachClient(*m_client); - if (client.fbwindow() != 0) { + if (client.fbwindow() != 0) client.fbwindow()->show(); - FocusControl::setFocusedWindow(&client); - } } /// removes client from client list, does not create new fluxboxwindow for it -- cgit v0.11.2