aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMark Tiefenbruck <mark@fluxbox.org>2008-08-05 12:00:48 (GMT)
committerMark Tiefenbruck <mark@fluxbox.org>2008-08-05 12:00:48 (GMT)
commit22aa93c56de131b80dfb161615650c4fb6cf6832 (patch)
treed68fe96088759ea952ff8f4b7214411be9541f46 /src
parent24bea22035e79c17fa6b6fdcd60f88e4eac467d8 (diff)
downloadfluxbox-22aa93c56de131b80dfb161615650c4fb6cf6832.zip
fluxbox-22aa93c56de131b80dfb161615650c4fb6cf6832.tar.bz2
fix the Focus key command
Diffstat (limited to 'src')
-rw-r--r--src/CurrentWindowCmd.cc16
-rw-r--r--src/CurrentWindowCmd.hh10
-rw-r--r--src/FocusableList.cc11
-rw-r--r--src/FocusableList.hh2
4 files changed, 34 insertions, 5 deletions
diff --git a/src/CurrentWindowCmd.cc b/src/CurrentWindowCmd.cc
index 42ee69c..9253058 100644
--- a/src/CurrentWindowCmd.cc
+++ b/src/CurrentWindowCmd.cc
@@ -56,8 +56,6 @@ FbTk::Command<void> *createCurrentWindowCmd(const std::string &command,
56 return new CurrentWindowCmd(&FluxboxWindow::lower); 56 return new CurrentWindowCmd(&FluxboxWindow::lower);
57 else if (command == "lowerlayer") 57 else if (command == "lowerlayer")
58 return new CurrentWindowCmd(&FluxboxWindow::lowerLayer); 58 return new CurrentWindowCmd(&FluxboxWindow::lowerLayer);
59 else if (command == "activate" || command == "focus")
60 return new CurrentWindowCmd((void (FluxboxWindow::*)())&FluxboxWindow::focus);
61 else if (command == "close") 59 else if (command == "close")
62 return new CurrentWindowCmd(&FluxboxWindow::close); 60 return new CurrentWindowCmd(&FluxboxWindow::close);
63 else if (command == "killwindow" || command == "kill") 61 else if (command == "killwindow" || command == "kill")
@@ -98,8 +96,6 @@ REGISTER_COMMAND_PARSER(raise, createCurrentWindowCmd, void);
98REGISTER_COMMAND_PARSER(raiselayer, createCurrentWindowCmd, void); 96REGISTER_COMMAND_PARSER(raiselayer, createCurrentWindowCmd, void);
99REGISTER_COMMAND_PARSER(lower, createCurrentWindowCmd, void); 97REGISTER_COMMAND_PARSER(lower, createCurrentWindowCmd, void);
100REGISTER_COMMAND_PARSER(lowerlayer, createCurrentWindowCmd, void); 98REGISTER_COMMAND_PARSER(lowerlayer, createCurrentWindowCmd, void);
101REGISTER_COMMAND_PARSER(activate, createCurrentWindowCmd, void);
102REGISTER_COMMAND_PARSER(focus, createCurrentWindowCmd, void);
103REGISTER_COMMAND_PARSER(close, createCurrentWindowCmd, void); 99REGISTER_COMMAND_PARSER(close, createCurrentWindowCmd, void);
104REGISTER_COMMAND_PARSER(killwindow, createCurrentWindowCmd, void); 100REGISTER_COMMAND_PARSER(killwindow, createCurrentWindowCmd, void);
105REGISTER_COMMAND_PARSER(kill, createCurrentWindowCmd, void); 101REGISTER_COMMAND_PARSER(kill, createCurrentWindowCmd, void);
@@ -252,6 +248,18 @@ void GoToTabCmd::real_execute() {
252 (*it)->focus(); 248 (*it)->focus();
253} 249}
254 250
251REGISTER_COMMAND_WITH_ARGS(activate, FocusCmd, void);
252REGISTER_COMMAND_WITH_ARGS(focus, FocusCmd, void);
253
254void FocusCmd::real_execute() {
255 Focusable *win = 0;
256 if (!m_pat.error())
257 win = fbwindow().screen().focusControl().focusedOrderWinList().find(m_pat);
258 if (!win)
259 win = &fbwindow();
260 win->focus();
261}
262
255REGISTER_COMMAND(startmoving, StartMovingCmd, void); 263REGISTER_COMMAND(startmoving, StartMovingCmd, void);
256 264
257void StartMovingCmd::real_execute() { 265void StartMovingCmd::real_execute() {
diff --git a/src/CurrentWindowCmd.hh b/src/CurrentWindowCmd.hh
index 5d381a2..d70e2fb 100644
--- a/src/CurrentWindowCmd.hh
+++ b/src/CurrentWindowCmd.hh
@@ -137,6 +137,16 @@ private:
137 const int m_tab_num; 137 const int m_tab_num;
138}; 138};
139 139
140// focus the window
141class FocusCmd: public WindowHelperCmd {
142public:
143 explicit FocusCmd(const std::string &pat): m_pat(pat.c_str()) { }
144protected:
145 void real_execute();
146private:
147 const ClientPattern m_pat;
148};
149
140// begin moving with mouse 150// begin moving with mouse
141class StartMovingCmd: public WindowHelperCmd { 151class StartMovingCmd: public WindowHelperCmd {
142public: 152public:
diff --git a/src/FocusableList.cc b/src/FocusableList.cc
index 70f415e..d15e10a 100644
--- a/src/FocusableList.cc
+++ b/src/FocusableList.cc
@@ -286,10 +286,19 @@ void FocusableList::reset() {
286 286
287bool FocusableList::contains(const Focusable &win) const { 287bool FocusableList::contains(const Focusable &win) const {
288 Focusables::const_iterator it = m_list.begin(), it_end = m_list.end(); 288 Focusables::const_iterator it = m_list.begin(), it_end = m_list.end();
289 it = find(it, it_end, &win); 289 it = std::find(it, it_end, &win);
290 return (it != it_end); 290 return (it != it_end);
291} 291}
292 292
293Focusable *FocusableList::find(const ClientPattern &pat) const {
294 Focusables::const_iterator it = m_list.begin(), it_end = m_list.end();
295 for (; it != it_end; ++it) {
296 if (pat.match(**it))
297 return *it;
298 }
299 return 0;
300}
301
293void FocusableList::attachChild(FocusableList &child) const { 302void FocusableList::attachChild(FocusableList &child) const {
294 m_addsig.attach(&child); 303 m_addsig.attach(&child);
295 m_removesig.attach(&child); 304 m_removesig.attach(&child);
diff --git a/src/FocusableList.hh b/src/FocusableList.hh
index cdf6bec..a72e2f0 100644
--- a/src/FocusableList.hh
+++ b/src/FocusableList.hh
@@ -70,6 +70,8 @@ public:
70 bool empty() const { return m_list.empty(); } 70 bool empty() const { return m_list.empty(); }
71 /// does the list contain the given window? 71 /// does the list contain the given window?
72 bool contains(const Focusable &win) const; 72 bool contains(const Focusable &win) const;
73 /// find the first window matching the pattern
74 Focusable *find(const ClientPattern &pattern) const;
73 75
74 /** 76 /**
75 @name signals 77 @name signals