From 5ceacc65925f597180c918fcaa2a8171c42cbcdd Mon Sep 17 00:00:00 2001 From: fluxgen Date: Sat, 18 Feb 2006 20:19:22 +0000 Subject: moved all focus handling to FocusControl --- src/CommandDialog.cc | 8 +-- src/CurrentWindowCmd.cc | 10 +-- src/FocusControl.cc | 71 +++++++++++-------- src/FocusControl.hh | 3 +- src/IconbarTool.cc | 3 +- src/Screen.cc | 14 ++-- src/Window.cc | 2 +- src/Workspace.cc | 3 +- src/WorkspaceCmd.cc | 3 +- src/fluxbox.cc | 181 +++++++----------------------------------------- src/fluxbox.hh | 17 +++-- 11 files changed, 101 insertions(+), 214 deletions(-) diff --git a/src/CommandDialog.cc b/src/CommandDialog.cc index d3d62d4..aeb9900 100644 --- a/src/CommandDialog.cc +++ b/src/CommandDialog.cc @@ -28,7 +28,7 @@ #include "FbWinFrameTheme.hh" #include "WinClient.hh" #include "CommandParser.hh" -#include "fluxbox.hh" +#include "FocusControl.hh" #include "FbTk/ImageControl.hh" #include "FbTk/EventManager.hh" @@ -90,9 +90,9 @@ void CommandDialog::hide() { FbTk::FbWindow::hide(); // return focus to fluxbox window - if (Fluxbox::instance()->getFocusedWindow() && - Fluxbox::instance()->getFocusedWindow()->fbwindow()) - Fluxbox::instance()->getFocusedWindow()->fbwindow()->setInputFocus(); + if (FocusControl::focusedWindow() && + FocusControl::focusedWindow()->fbwindow()) + FocusControl::focusedWindow()->fbwindow()->setInputFocus(); } diff --git a/src/CurrentWindowCmd.cc b/src/CurrentWindowCmd.cc index d78ed99..7bc7977 100644 --- a/src/CurrentWindowCmd.cc +++ b/src/CurrentWindowCmd.cc @@ -29,10 +29,12 @@ #include "Screen.hh" #include "WinClient.hh" +#include "FocusControl.hh" + CurrentWindowCmd::CurrentWindowCmd(Action act):m_action(act) { } void CurrentWindowCmd::execute() { - WinClient *client = Fluxbox::instance()->getFocusedWindow(); + WinClient *client = FocusControl::focusedWindow(); if (client && client->fbwindow()) (client->fbwindow()->*m_action)(); } @@ -95,19 +97,19 @@ void GoToTabCmd::real_execute() { } void WindowHelperCmd::execute() { - WinClient *client = Fluxbox::instance()->getFocusedWindow(); + WinClient *client = FocusControl::focusedWindow(); if (client && client->fbwindow()) // guarantee that fbwindow() exists too real_execute(); } WinClient &WindowHelperCmd::winclient() { // will exist from execute above - return *Fluxbox::instance()->getFocusedWindow(); + return *FocusControl::focusedWindow(); } FluxboxWindow &WindowHelperCmd::fbwindow() { // will exist from execute above - return *Fluxbox::instance()->getFocusedWindow()->fbwindow(); + return *FocusControl::focusedWindow()->fbwindow(); } MoveCmd::MoveCmd(const int step_size_x, const int step_size_y) : diff --git a/src/FocusControl.cc b/src/FocusControl.cc index d18af44..6e98fc4 100644 --- a/src/FocusControl.cc +++ b/src/FocusControl.cc @@ -142,7 +142,7 @@ void FocusControl::prevFocus(int opts) { FluxboxWindow *focused_group = 0; // start from the focused window bool have_focused = false; - WinClient *focused = Fluxbox::instance()->getFocusedWindow(); + WinClient *focused = focusedWindow(); if (focused != 0) { if (focused->screen().screenNumber() == m_screen.screenNumber()) { have_focused = true; @@ -197,7 +197,7 @@ void FocusControl::stopCyclingFocus() { m_focused_list.push_front(client); client->fbwindow()->raise(); } else { - Fluxbox::instance()->revertFocus(m_screen); + revertFocus(m_screen); } } @@ -307,7 +307,7 @@ void FocusControl::nextFocus(int opts) { FluxboxWindow *focused_group = 0; // start from the focused window bool have_focused = false; - WinClient *focused = Fluxbox::instance()->getFocusedWindow(); + WinClient *focused = focusedWindow(); if (focused != 0) { if (focused->screen().screenNumber() == m_screen.screenNumber()) { have_focused = true; @@ -340,11 +340,11 @@ void FocusControl::nextFocus(int opts) { void FocusControl::raiseFocus() { bool have_focused = false; - Fluxbox &fb = *Fluxbox::instance(); + // set have_focused if the currently focused window // is on this screen - if (fb.getFocusedWindow()) { - if (fb.getFocusedWindow()->screen().screenNumber() == m_screen.screenNumber()) { + if (focusedWindow()) { + if (focusedWindow()->screen().screenNumber() == m_screen.screenNumber()) { have_focused = true; } } @@ -352,7 +352,7 @@ void FocusControl::raiseFocus() { // if we have a focused window on this screen and // number of windows is greater than one raise the focused window if (m_screen.currentWorkspace()->numberOfWindows() > 1 && have_focused) - fb.getFocusedWindow()->raise(); + focusedWindow()->raise(); } @@ -402,9 +402,12 @@ void FocusControl::dirFocus(FluxboxWindow &win, FocusDir dir) { int edge=0, upper=0, lower=0, oedge=0, oupper=0, olower=0; int otop = (*it)->y(), + // 2 * border = border on each side obottom = (*it)->y() + (*it)->height() + 2*borderW, oleft = (*it)->x(), + // 2 * border = border on each side oright = (*it)->x() + (*it)->width() + 2*borderW; + // check if they intersect switch (dir) { case FOCUSUP: @@ -441,7 +444,9 @@ void FocusControl::dirFocus(FluxboxWindow &win, FocusDir dir) { break; } - if (oedge < edge) continue; // not in the right direction + if (oedge < edge) + continue; // not in the right direction + if (olower <= upper || oupper >= lower) { // outside our horz bounds, get a heavy weight penalty int myweight = 100000 + oedge - edge + abs(upper-oupper)+abs(lower-olower); @@ -475,6 +480,7 @@ void FocusControl::removeClient(WinClient &client) { cyc = *m_cycling_window; m_focused_list.remove(&client); + if (cyc == &client) { m_cycling_window = m_focused_list.end(); } @@ -548,9 +554,8 @@ void FocusControl::unfocusWindow(WinClient &client, if (trans_parent->fbwindow() && // can't focus if no fbwin (!unfocus_frame || trans_parent->fbwindow() != fbwin) && // can't be this window trans_parent->fbwindow()->isVisible() && - trans_parent->fbwindow()-> - setCurrentClient(*trans_parent, - Fluxbox::instance()->getFocusedWindow() == &client)) { + trans_parent->fbwindow()->setCurrentClient(*trans_parent, + s_focused_window == &client)) { return; } trans_parent = trans_parent->transientFor(); @@ -565,19 +570,23 @@ void FocusControl::unfocusWindow(WinClient &client, WinClient *last_focus = screen.focusControl().lastFocusedWindow(*fbwin, &client); if (last_focus != 0 && fbwin->setCurrentClient(*last_focus, - Fluxbox::instance()->getFocusedWindow() == &client)) { + s_focused_window == &client)) { return; } } - if (full_revert && Fluxbox::instance()->getFocusedWindow() == &client) + if (full_revert && s_focused_window == &client) revertFocus(screen); } void FocusControl::setFocusedWindow(WinClient *client) { - assert(false); + BScreen *screen = client ? &client->screen() : 0; + BScreen *old_screen = + FocusControl::focusedWindow() ? + &FocusControl::focusedWindow()->screen() : 0; + #ifdef DEBUG cerr<<__FILE__<searchWindow(s_focused_window) != 0) { - s_focused_window = 0; - } else { - old_client = s_focused_window; - if (old_client->fbwindow()) { - FluxboxWindow *old_win = old_client->fbwindow(); + // check if s_focused_window is valid + if (s_focused_window != 0 && + Fluxbox::instance()->validateClient(s_focused_window)) { - if (!client || client->fbwindow() != old_win) - old_win->setFocusFlag(false); - } + old_client = s_focused_window; + if (old_client->fbwindow()) { + FluxboxWindow *old_win = old_client->fbwindow(); + + if (!client || client->fbwindow() != old_win) + old_win->setFocusFlag(false); } + + } else { + s_focused_window = 0; } + if (client && client->fbwindow() && !client->fbwindow()->isIconic()) { // screen should be ok FluxboxWindow *win = client->fbwindow(); s_focused_window = client; // update focused window - win->setCurrentClient(*client, false); // don't setinputfocus + win->setCurrentClient(*client, + false); // don't set inputfocus win->setFocusFlag(true); // set focus flag } else s_focused_window = 0; - Fluxbox::instance()->updateFocusedWindow(s_focused_window, old_client); - */ + // update AtomHandlers and/or other stuff... + Fluxbox::instance()->updateFocusedWindow(screen, old_screen); } ////////////////////// FocusControl RESOURCES diff --git a/src/FocusControl.hh b/src/FocusControl.hh index 4870c1f..0d9cd05 100644 --- a/src/FocusControl.hh +++ b/src/FocusControl.hh @@ -96,7 +96,8 @@ public: void removeClient(WinClient &client); static void revertFocus(BScreen &screen); - static void unfocusWindow(WinClient &client, bool full_revert, bool unfocus_frame); + // like revertFocus, but specifically related to this window (transients etc) + static void unfocusWindow(WinClient &client, bool full_revert = true, bool unfocus_frame = false); static void setFocusedWindow(WinClient *focus_to); static WinClient *focusedWindow() { return s_focused_window; } private: diff --git a/src/IconbarTool.cc b/src/IconbarTool.cc index 1c3a4f0..61ac45d 100644 --- a/src/IconbarTool.cc +++ b/src/IconbarTool.cc @@ -34,6 +34,7 @@ #include "BoolMenuItem.hh" #include "CommandParser.hh" #include "WinClient.hh" +#include "FocusControl.hh" #include "FbTk/I18n.hh" #include "FbTk/Menu.hh" @@ -948,7 +949,7 @@ void IconbarTool::addList(std::list &winlist) { } void IconbarTool::timedRender() { - WinClient *client = Fluxbox::instance()->getFocusedWindow(); + WinClient *client = FocusControl::focusedWindow(); if (client == 0 || client->fbwindow() == 0) return; diff --git a/src/Screen.cc b/src/Screen.cc index 402142e..ccee94c 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -925,7 +925,7 @@ void BScreen::changeWorkspaceID(unsigned int id) { FbTk::App::instance()->sync(false); - WinClient *focused_client = Fluxbox::instance()->getFocusedWindow(); + WinClient *focused_client = FocusControl::focusedWindow(); FluxboxWindow *focused = 0; if (focused_client) focused = focused_client->fbwindow(); @@ -966,7 +966,7 @@ void BScreen::changeWorkspaceID(unsigned int id) { if (focused && (focused->isStuck() || focused->isMoving())) focused->setInputFocus(); else - Fluxbox::instance()->revertFocus(*this); + FocusControl::revertFocus(*this); if (focused && focused->isMoving()) focused->resumeMoving(); @@ -982,7 +982,7 @@ void BScreen::sendToWorkspace(unsigned int id, FluxboxWindow *win, bool changeWS return; if (!win) { - WinClient *client = Fluxbox::instance()->getFocusedWindow(); + WinClient *client = FocusControl::focusedWindow(); if (client) win = client->fbwindow(); } @@ -1039,8 +1039,8 @@ void BScreen::addNetizen(Window win) { } } - Window f = ((Fluxbox::instance()->getFocusedWindow()) ? - Fluxbox::instance()->getFocusedWindow()->window() : None); + Window f = ((FocusControl::focusedWindow()) ? + FocusControl::focusedWindow()->window() : None); net->sendWindowFocus(f); } @@ -1075,8 +1075,8 @@ void BScreen::updateNetizenWorkspaceCount() { void BScreen::updateNetizenWindowFocus() { - Window f = ((Fluxbox::instance()->getFocusedWindow()) ? - Fluxbox::instance()->getFocusedWindow()->window() : None); + Window f = ((FocusControl::focusedWindow()) ? + FocusControl::focusedWindow()->window() : None); for_each(m_netizen_list.begin(), m_netizen_list.end(), bind2nd(mem_fun(&Netizen::sendWindowFocus), f)); diff --git a/src/Window.cc b/src/Window.cc index ef56e6e..5ef606b 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -622,7 +622,7 @@ void FluxboxWindow::attachClient(WinClient &client, int x, int y) { // reparent client win to this frame frame().setClientWindow(client); WinClient *was_focused = 0; - WinClient *focused_win = Fluxbox::instance()->getFocusedWindow(); + WinClient *focused_win = FocusControl::focusedWindow(); // get the current window on the end of our client list Window leftwin = None; diff --git a/src/Workspace.cc b/src/Workspace.cc index 8c7049e..07e76f0 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -32,6 +32,7 @@ #include "WinClient.hh" #include "FbWinFrame.hh" #include "WindowCmd.hh" +#include "FocusControl.hh" #include "FbTk/I18n.hh" #include "FbTk/MenuItem.hh" @@ -207,7 +208,7 @@ int Workspace::removeWindow(FluxboxWindow *w, bool still_alive) { } if (w->isFocused() && still_alive) - Fluxbox::instance()->unfocusWindow(w->winClient(), true, true); + FocusControl::unfocusWindow(w->winClient(), true, true); // we don't remove it from the layermanager, as it may be being moved Windows::iterator erase_it = remove(m_windowlist.begin(), diff --git a/src/WorkspaceCmd.cc b/src/WorkspaceCmd.cc index 70044c8..39b415b 100644 --- a/src/WorkspaceCmd.cc +++ b/src/WorkspaceCmd.cc @@ -29,6 +29,7 @@ #include "Screen.hh" #include "fluxbox.hh" #include "WinClient.hh" +#include "FocusControl.hh" #include "FbTk/KeyUtil.hh" @@ -92,7 +93,7 @@ void DirFocusCmd::execute() { if (screen == 0) return; - WinClient *client = Fluxbox::instance()->getFocusedWindow(); + WinClient *client = FocusControl::focusedWindow(); if (client == 0 || client->fbwindow() == 0) return; diff --git a/src/fluxbox.cc b/src/fluxbox.cc index cc9bbb2..d2759d0 100644 --- a/src/fluxbox.cc +++ b/src/fluxbox.cc @@ -224,7 +224,7 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile m_rc_cache_max(m_resourcemanager, 200, "session.cacheMax", "Session.CacheMax"), m_rc_auto_raise_delay(m_resourcemanager, 250, "session.autoRaiseDelay", "Session.AutoRaiseDelay"), m_rc_use_mod1(m_resourcemanager, true, "session.useMod1", "Session.UseMod1"), - m_focused_window(0), m_masked_window(0), + m_masked_window(0), m_mousescreen(0), m_keyscreen(0), m_watching_screen(0), m_watch_keyrelease(0), @@ -511,7 +511,7 @@ int Fluxbox::initScreen(int scrnr) { (*it).first->initForScreen(*screen); } - revertFocus(*screen); // make sure focus style is correct + FocusControl::revertFocus(*screen); // make sure focus style is correct #ifdef SLIT if (screen->slit()) screen->slit()->show(); @@ -694,7 +694,7 @@ void Fluxbox::handleEvent(XEvent * const e) { } if (screen != 0) - revertFocus(*screen); + FocusControl::revertFocus(*screen); } // try FbTk::EventHandler first @@ -870,8 +870,8 @@ void Fluxbox::handleEvent(XEvent * const e) { e->xfocus.detail == NotifyInferior) break; WinClient *winclient = searchWindow(e->xfocus.window); - if (winclient && m_focused_window != winclient) - setFocusedWindow(winclient); + if (winclient && FocusControl::focusedWindow() != winclient) + FocusControl::setFocusedWindow(winclient); } break; case FocusOut:{ @@ -886,11 +886,11 @@ void Fluxbox::handleEvent(XEvent * const e) { #ifdef DEBUG cerr<<__FILE__<<"("<<__FUNCTION__<<") Focus out is not a FluxboxWindow !!"<fbwindow() == 0 || !winclient->fbwindow()->isMoving())) // we don't unfocus a moving window - setFocusedWindow(0); + FocusControl::setFocusedWindow(0); } break; case ClientMessage: @@ -1224,8 +1224,8 @@ 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; + if (FocusControl::focusedWindow() == &win.winClient()) + FocusControl::setFocusedWindow(0); } else if ((&(win.workspaceSig())) == changedsub) { // workspace signal for (AtomHandlerContainerIt it= m_atomhandler.begin(); @@ -1297,12 +1297,12 @@ void Fluxbox::update(FbTk::Subject *changedsub) { // This is where we revert focus on window close // NOWHERE ELSE!!! - if (m_focused_window == &client) - unfocusWindow(client); + if (FocusControl::focusedWindow() == &client) + FocusControl::unfocusWindow(client); // failed to revert focus? - if (m_focused_window == &client) - m_focused_window = 0; + if (FocusControl::focusedWindow() == &client) + FocusControl::setFocusedWindow(0); } } @@ -1796,73 +1796,22 @@ void Fluxbox::timed_reconfigure() { m_reconfigure_wait = m_reread_menu_wait = false; } -// set focused window -void Fluxbox::setFocusedWindow(WinClient *client) { - // already focused - if (m_focused_window == client) { -#ifdef DEBUG - cerr<<"Focused window already win"<fbwindow()->title()<(), m_focused_window), - Select2nd())); - - // if not found... - if (it == m_window_search.end()) { - m_focused_window = 0; - } else { - old_client = m_focused_window; - old_screen = &old_client->screen(); - - if (old_client->fbwindow()) { - FluxboxWindow *old_win = old_client->fbwindow(); - - if (!client || client->fbwindow() != old_win) - old_win->setFocusFlag(false); - } - } - } - - if (client && client->fbwindow() && !client->fbwindow()->isIconic()) { - FluxboxWindow *win = client->fbwindow(); - // make sure we have a valid win pointer with a valid screen - ScreenList::iterator winscreen = - std::find(m_screen_list.begin(), m_screen_list.end(), - &client->screen()); - if (winscreen == m_screen_list.end()) { - m_focused_window = 0; // the window pointer wasn't valid, mark no window focused - } else { - screen = *winscreen; - m_focused_window = client; // update focused window - win->setCurrentClient(*client, false); // don't setinputfocus - win->setFocusFlag(true); // set focus flag - } - - } else - m_focused_window = 0; - +bool Fluxbox::validateClient(const WinClient *client) const { + WinClientMap::const_iterator it = + find_if(m_window_search.begin(), + m_window_search.end(), + Compose(bind2nd(equal_to(), client), + Select2nd())); + return it != m_window_search.end(); +} +void Fluxbox::updateFocusedWindow(BScreen *screen, BScreen *old_screen) { if (screen != 0) { screen->updateNetizenWindowFocus(); for (AtomHandlerContainerIt it= m_atomhandler.begin(); it != m_atomhandler.end(); it++) { - (*it).first->updateFocusedWindow(*screen, (m_focused_window ? - m_focused_window->window() : + (*it).first->updateFocusedWindow(*screen, (FocusControl::focusedWindow() ? + FocusControl::focusedWindow()->window() : 0)); } } @@ -1875,88 +1824,6 @@ void Fluxbox::setFocusedWindow(WinClient *client) { } } -/** - * This function is called whenever we aren't quite sure what - * focus is meant to be, it'll make things right ;-) - * last_focused is set to something if we want to make use of the - * previously focused window (it must NOT be set focused now, it - * is probably dying). - * - * ignore_event means that it ignores the given event until - * it gets a focusIn - */ -void Fluxbox::revertFocus(BScreen &screen) { - // Relevant resources: - // resource.focus_last = whether we focus last focused when changing workspace - // BScreen::FocusModel = sloppy, click, whatever - WinClient *next_focus = screen.focusControl().lastFocusedWindow(screen.currentWorkspaceID()); - - // if setting focus fails, or isn't possible, fallback correctly - if (!(next_focus && next_focus->fbwindow() && - next_focus->fbwindow()->setCurrentClient(*next_focus, true))) { - setFocusedWindow(0); // so we don't get dangling m_focused_window pointer - switch (screen.focusControl().focusModel()) { - case FocusControl::MOUSEFOCUS: - XSetInputFocus(FbTk::App::instance()->display(), - PointerRoot, None, CurrentTime); - break; - case FocusControl::CLICKFOCUS: - screen.rootWindow().setInputFocus(RevertToPointerRoot, CurrentTime); - break; - } - } -} - -/* - * Like revertFocus, but specifically related to this window (transients etc) - * if full_revert, we fallback to a full revertFocus if we can't find anything - * local to the client. - * If unfocus_frame is true, we won't focus anything in the same frame - * as the client. - * - * So, we first prefer to choose a transient parent, then the last - * client in this window, and if no luck (or unfocus_frame), then - * we just use the normal revertFocus on the screen. - * - * assumption: client has focus - */ -void Fluxbox::unfocusWindow(WinClient &client, bool full_revert, bool unfocus_frame) { - // go up the transient tree looking for a focusable window - - FluxboxWindow *fbwin = client.fbwindow(); - if (fbwin == 0) - unfocus_frame = false; - - WinClient *trans_parent = client.transientFor(); - while (trans_parent) { - if (trans_parent->fbwindow() && // can't focus if no fbwin - (!unfocus_frame || trans_parent->fbwindow() != fbwin) && // can't be this window - trans_parent->fbwindow()->isVisible() && - trans_parent->fbwindow()->setCurrentClient(*trans_parent, m_focused_window == &client)) { - return; - } - trans_parent = trans_parent->transientFor(); - } - - if (fbwin == 0) - return; // nothing more we can do - - BScreen &screen = fbwin->screen(); - - if (!unfocus_frame) { - WinClient *last_focus = screen.focusControl().lastFocusedWindow(*fbwin, &client); - if (last_focus != 0 && - fbwin->setCurrentClient(*last_focus, m_focused_window == &client)) { - return; - } - } - - if (full_revert && m_focused_window == &client) - revertFocus(screen); - -} - - void Fluxbox::watchKeyRelease(BScreen &screen, unsigned int mods) { if (mods == 0) { diff --git a/src/fluxbox.hh b/src/fluxbox.hh index bb2f9b6..40b0379 100644 --- a/src/fluxbox.hh +++ b/src/fluxbox.hh @@ -89,6 +89,8 @@ public: /// main event loop void eventLoop(); bool validateWindow(Window win) const; + bool validateClient(const WinClient *client) const; + void grab(); void ungrab(); Keys *keys() { return m_key.get(); } @@ -97,7 +99,6 @@ public: // Not currently implemented until we decide how it'll be used //WinClient *searchGroup(Window); WinClient *searchWindow(Window); - WinClient *getFocusedWindow() { return m_focused_window; } int initScreen(int screen_nr); BScreen *searchScreen(Window w); @@ -134,6 +135,7 @@ public: // class to store layer numbers (special Resource type) // we have a special resource type because we need to be able to name certain layers // a Resource wouldn't allow this + class Layer { public: explicit Layer(int i) : m_num(i) {}; @@ -166,10 +168,6 @@ public: void watchKeyRelease(BScreen &screen, unsigned int mods); - void setFocusedWindow(WinClient *w); - void revertFocus(BScreen &screen); - // like revertFocus, but specifically related to this window (transients etc) - void unfocusWindow(WinClient &client, bool full_revert = true, bool unfocus_frame = false); void shutdown(); void load_rc(BScreen &scr); void loadRootCommand(BScreen &scr); @@ -200,6 +198,12 @@ public: /// handle any system signal sent to the application void handleSignal(int signum); void update(FbTk::Subject *changed); + /** + * Sends update signal to atomhandlers, + * @param screen the new screen + * @param old_screen the old screen if any, can be the same as new screen + */ + void updateFocusedWindow(BScreen *screen, BScreen *old_screen); void attachSignals(FluxboxWindow &win); void attachSignals(WinClient &winclient); @@ -227,7 +231,7 @@ public: // screen we are watching for modifier changes BScreen *watchingScreen() { return m_watching_screen; } const XEvent &lastEvent() const { return m_last_event; } - + private: typedef struct MenuTimestamp { @@ -292,7 +296,6 @@ private: typedef std::list ScreenList; ScreenList m_screen_list; - WinClient *m_focused_window; FluxboxWindow *m_masked_window; BScreen *m_mousescreen, *m_keyscreen; -- cgit v0.11.2