diff options
author | markt <markt> | 2007-10-24 17:09:26 (GMT) |
---|---|---|
committer | markt <markt> | 2007-10-24 17:09:26 (GMT) |
commit | f3afe787c1209cf1357493924a4f7eb7864def54 (patch) | |
tree | d0c0c3eca154ab538fbc1fb3c62081e9250c05bd /src/ClientPattern.cc | |
parent | 74eb584a312aba21b21eccb6c49ade1571aa3740 (diff) | |
download | fluxbox-f3afe787c1209cf1357493924a4f7eb7864def54.zip fluxbox-f3afe787c1209cf1357493924a4f7eb7864def54.tar.bz2 |
introduced workspacename for ClientPattern, and some miscellaneous cleanup
Diffstat (limited to 'src/ClientPattern.cc')
-rw-r--r-- | src/ClientPattern.cc | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/ClientPattern.cc b/src/ClientPattern.cc index f8238dd..9ee1848 100644 --- a/src/ClientPattern.cc +++ b/src/ClientPattern.cc | |||
@@ -129,6 +129,8 @@ ClientPattern::ClientPattern(const char *str, bool default_no_transient): | |||
129 | prop = ICONHIDDEN; | 129 | prop = ICONHIDDEN; |
130 | } else if (strcasecmp(memstr.c_str(), "workspace") == 0) { | 130 | } else if (strcasecmp(memstr.c_str(), "workspace") == 0) { |
131 | prop = WORKSPACE; | 131 | prop = WORKSPACE; |
132 | } else if (strcasecmp(memstr.c_str(), "workspacename") == 0) { | ||
133 | prop = WORKSPACENAME; | ||
132 | } else if (strcasecmp(memstr.c_str(), "head") == 0) { | 134 | } else if (strcasecmp(memstr.c_str(), "head") == 0) { |
133 | prop = HEAD; | 135 | prop = HEAD; |
134 | } else if (strcasecmp(memstr.c_str(), "layer") == 0) { | 136 | } else if (strcasecmp(memstr.c_str(), "layer") == 0) { |
@@ -236,6 +238,9 @@ string ClientPattern::toString() const { | |||
236 | case WORKSPACE: | 238 | case WORKSPACE: |
237 | pat.append("workspace="); | 239 | pat.append("workspace="); |
238 | break; | 240 | break; |
241 | case WORKSPACENAME: | ||
242 | pat.append("workspacename="); | ||
243 | break; | ||
239 | case HEAD: | 244 | case HEAD: |
240 | pat.append("head="); | 245 | pat.append("head="); |
241 | break; | 246 | break; |
@@ -268,20 +273,11 @@ bool ClientPattern::match(const Focusable &win) const { | |||
268 | Terms::const_iterator it_end = m_terms.end(); | 273 | Terms::const_iterator it_end = m_terms.end(); |
269 | for (; it != it_end; ++it) { | 274 | for (; it != it_end; ++it) { |
270 | if ((*it)->orig == "[current]") { | 275 | if ((*it)->orig == "[current]") { |
271 | // workspaces don't necessarily have unique names, so we want to | 276 | WinClient *focused = FocusControl::focusedWindow(); |
272 | // compare numbers instead of strings | 277 | if (!focused || !((*it)->negate ^ |
273 | if ((*it)->prop == WORKSPACE && (!win.fbwindow() || | 278 | (getProperty((*it)->prop, win) == |
274 | !((*it)->negate ^ | 279 | getProperty((*it)->prop, *focused)))) |
275 | (win.fbwindow()->workspaceNumber() == | ||
276 | win.screen().currentWorkspaceID())))) | ||
277 | return false; | 280 | return false; |
278 | else { | ||
279 | WinClient *focused = FocusControl::focusedWindow(); | ||
280 | if (!focused || !((*it)->negate ^ | ||
281 | (getProperty((*it)->prop, win) == | ||
282 | getProperty((*it)->prop, *focused)))) | ||
283 | return false; | ||
284 | } | ||
285 | } else if ((*it)->prop == HEAD && | 281 | } else if ((*it)->prop == HEAD && |
286 | (*it)->orig == "[mouse]") { | 282 | (*it)->orig == "[mouse]") { |
287 | int mouse_head = win.screen().getCurrHead(); | 283 | int mouse_head = win.screen().getCurrHead(); |
@@ -315,8 +311,7 @@ bool ClientPattern::addTerm(const string &str, WinProperty prop, bool negate) { | |||
315 | return true; | 311 | return true; |
316 | } | 312 | } |
317 | 313 | ||
318 | string ClientPattern::getProperty(WinProperty prop, | 314 | string ClientPattern::getProperty(WinProperty prop, const Focusable &client) { |
319 | const Focusable &client) const { | ||
320 | // we need this for some of the window properties | 315 | // we need this for some of the window properties |
321 | const FluxboxWindow *fbwin = client.fbwindow(); | 316 | const FluxboxWindow *fbwin = client.fbwindow(); |
322 | 317 | ||
@@ -357,6 +352,14 @@ string ClientPattern::getProperty(WinProperty prop, | |||
357 | case WORKSPACE: { | 352 | case WORKSPACE: { |
358 | if (!fbwin) | 353 | if (!fbwin) |
359 | return ""; | 354 | return ""; |
355 | char tmpstr[128]; | ||
356 | sprintf(tmpstr, "%d", fbwin->workspaceNumber()); | ||
357 | return std::string(tmpstr); | ||
358 | break; | ||
359 | } | ||
360 | case WORKSPACENAME: { | ||
361 | if (!fbwin) | ||
362 | return ""; | ||
360 | const Workspace *w = client.screen().getWorkspace(fbwin->workspaceNumber()); | 363 | const Workspace *w = client.screen().getWorkspace(fbwin->workspaceNumber()); |
361 | return w ? w->name() : ""; | 364 | return w ? w->name() : ""; |
362 | break; | 365 | break; |
@@ -377,7 +380,7 @@ string ClientPattern::getProperty(WinProperty prop, | |||
377 | return client.getWMClassName(); | 380 | return client.getWMClassName(); |
378 | } | 381 | } |
379 | 382 | ||
380 | bool ClientPattern::equals(const ClientPattern &pat) const { | 383 | bool ClientPattern::operator ==(const ClientPattern &pat) const { |
381 | // we require the terms to be identical (order too) | 384 | // we require the terms to be identical (order too) |
382 | Terms::const_iterator it = m_terms.begin(); | 385 | Terms::const_iterator it = m_terms.begin(); |
383 | Terms::const_iterator it_end = m_terms.end(); | 386 | Terms::const_iterator it_end = m_terms.end(); |