diff options
author | Mark Tiefenbruck <mark@fluxbox.org> | 2008-08-19 16:18:32 (GMT) |
---|---|---|
committer | Mark Tiefenbruck <mark@fluxbox.org> | 2008-08-19 16:18:32 (GMT) |
commit | 4e64d45e1678f525fe20b4a53fb9539a58f18176 (patch) | |
tree | 766a9a2fefe451f8261e70428591f7bc0d8f55ef | |
parent | e5d43edb8ebd472b680a5b4a96dfa1fcf1ef2260 (diff) | |
download | fluxbox_lack-4e64d45e1678f525fe20b4a53fb9539a58f18176.zip fluxbox_lack-4e64d45e1678f525fe20b4a53fb9539a58f18176.tar.bz2 |
add [transient] tag to apps file to match transient windows
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | doc/asciidoc/fluxbox.1 | 38 | ||||
-rw-r--r-- | doc/asciidoc/fluxbox.txt | 41 | ||||
-rw-r--r-- | doc/fluxbox.1.in | 38 | ||||
-rw-r--r-- | src/ClientPattern.cc | 6 | ||||
-rw-r--r-- | src/ClientPattern.hh | 2 | ||||
-rw-r--r-- | src/Remember.cc | 45 |
7 files changed, 45 insertions, 128 deletions
@@ -1,5 +1,8 @@ | |||
1 | (Format: Year/Month/Day) | 1 | (Format: Year/Month/Day) |
2 | Changes for 1.1 | 2 | Changes for 1.1 |
3 | *08/08/19: | ||
4 | * Add new [transient] tag to apps file to match transient windows (Mark) | ||
5 | ClientPattern.cc/hh Remember.cc | ||
3 | *08/08/18: | 6 | *08/08/18: |
4 | * Combined code for MoveTo key command and saved window positions (Mark) | 7 | * Combined code for MoveTo key command and saved window positions (Mark) |
5 | Side effects: | 8 | Side effects: |
diff --git a/doc/asciidoc/fluxbox.1 b/doc/asciidoc/fluxbox.1 index b7518ad..4d14f71 100644 --- a/doc/asciidoc/fluxbox.1 +++ b/doc/asciidoc/fluxbox.1 | |||
@@ -1,11 +1,11 @@ | |||
1 | .\" Title: fluxbox | 1 | .\" Title: fluxbox |
2 | .\" Author: | 2 | .\" Author: |
3 | .\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/> | 3 | .\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/> |
4 | .\" Date: 08/18/2008 | 4 | .\" Date: 08/19/2008 |
5 | .\" Manual: | 5 | .\" Manual: |
6 | .\" Source: | 6 | .\" Source: |
7 | .\" | 7 | .\" |
8 | .TH "FLUXBOX" "1" "08/18/2008" "" "" | 8 | .TH "FLUXBOX" "1" "08/19/2008" "" "" |
9 | .\" disable hyphenation | 9 | .\" disable hyphenation |
10 | .nh | 10 | .nh |
11 | .\" disable justification (adjust text to left margin only) | 11 | .\" disable justification (adjust text to left margin only) |
@@ -1213,7 +1213,7 @@ The format of a line in the `apps\' file is: | |||
1213 | [end] | 1213 | [end] |
1214 | .fi | 1214 | .fi |
1215 | .RE | 1215 | .RE |
1216 | Each app\-name can be a string, or a regular expression\. By default the name is matched against a window\'s WM_CLASS property (the first string in it, called the "instance")\. You can match against the title, instance name (default), class name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it\. You can also specify multiple matches, which must ALL match for the properties to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. | 1216 | Each app\-name can be a string, or a regular expression\. By default the name is matched against a window\'s WM_CLASS property (the first string in it, called the "instance")\. You can match against the title, instance name (default), class name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it\. You can also specify multiple matches, which must ALL match for the properties to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. Settings associated with an [app] line will not be applied to transient windows\. [transient] may be used instead to match them\. |
1217 | .sp | 1217 | .sp |
1218 | .sp | 1218 | .sp |
1219 | .RS 4 | 1219 | .RS 4 |
@@ -1404,37 +1404,7 @@ You can also place [group] tag around several [app] tags, with an [end] tag to i | |||
1404 | [end] | 1404 | [end] |
1405 | .fi | 1405 | .fi |
1406 | .RE | 1406 | .RE |
1407 | Parameters in the `apps\' file are case\-sensitive\. Application names are taken from the first X window WM_CLASS attribute by default (WM_NAME = title, WM_WINDOW_ROLE = role)\. You can see this attribute by using the xprop command\. Transient windows are not affected by application settings\. Take care when using regular expressions\. If you are not familiar with regular expressions you can disable this feature by specifying \-\-disable\-regexp during configure\. Plain strings will then be matched\. | 1407 | Parameters in the `apps\' file are case\-sensitive\. Application names are taken from the first X window WM_CLASS attribute by default (WM_NAME = title, WM_WINDOW_ROLE = role)\. You can see this attribute by using the xprop command\. Take care when using regular expressions\. If you are not familiar with regular expressions you can disable this feature by specifying \-\-disable\-regexp during configure\. Plain strings will then be matched\. |
1408 | .sp | ||
1409 | .SH "GROUPS" | ||
1410 | Since version 0\.1\.11, fluxbox has a feature called autogrouping, that is apps are automatically grouped together if they are in the same group\. NOTE: this feature is deprecated since version 0\.9\.1 in favor of grouping using the `apps\' file, since it is much more powerful\. | ||
1411 | .sp | ||
1412 | You can create groups simply by editing the ~/\.fluxbox/groups file\. This file takes the format of: | ||
1413 | .sp | ||
1414 | .sp | ||
1415 | .RS 4 | ||
1416 | .nf | ||
1417 | <app1> <app2> <app3> <\.\.\.> <appN> | ||
1418 | .fi | ||
1419 | .RE | ||
1420 | where elements can be found with this command: | ||
1421 | .sp | ||
1422 | .sp | ||
1423 | .RS 4 | ||
1424 | .nf | ||
1425 | $> xprop WM_CLASS | ||
1426 | .fi | ||
1427 | .RE | ||
1428 | Just type this command into a terminal and use the mouse to click on the desired app and it will tell you what to write as an element (use the first of the two names returned)\. Each line forms a different group, e\.g\.: | ||
1429 | .sp | ||
1430 | .sp | ||
1431 | .RS 4 | ||
1432 | .nf | ||
1433 | Navigator nedit | ||
1434 | xterm | ||
1435 | .fi | ||
1436 | .RE | ||
1437 | This will create two groups, one with netscape and nedit, and one with xterm\. The new window will only group itself to other windows on the same workspace and to the last window that was focused\. | ||
1438 | .sp | 1408 | .sp |
1439 | .SH "THE SLIT" | 1409 | .SH "THE SLIT" |
1440 | The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\. | 1410 | The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\. |
diff --git a/doc/asciidoc/fluxbox.txt b/doc/asciidoc/fluxbox.txt index 136cc43..e357fd4 100644 --- a/doc/asciidoc/fluxbox.txt +++ b/doc/asciidoc/fluxbox.txt | |||
@@ -1139,7 +1139,8 @@ name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it. You can | |||
1139 | also specify multiple matches, which must ALL match for the properties to be | 1139 | also specify multiple matches, which must ALL match for the properties to be |
1140 | applied. If a count is supplied in curly brackets at the end of the app line, | 1140 | applied. If a count is supplied in curly brackets at the end of the app line, |
1141 | then the entry will only match at most that many at any time (default is to | 1141 | then the entry will only match at most that many at any time (default is to |
1142 | match all matching windows). | 1142 | match all matching windows). Settings associated with an [app] line will not be |
1143 | applied to transient windows. [transient] may be used instead to match them. | ||
1143 | 1144 | ||
1144 | ................................................................... | 1145 | ................................................................... |
1145 | # match a standard xterm | 1146 | # match a standard xterm |
@@ -1298,41 +1299,9 @@ entries. Here is a short example of an `apps' file: | |||
1298 | Parameters in the `apps' file are case-sensitive. Application names are taken | 1299 | Parameters in the `apps' file are case-sensitive. Application names are taken |
1299 | from the first X window WM_CLASS attribute by default (WM_NAME = title, | 1300 | from the first X window WM_CLASS attribute by default (WM_NAME = title, |
1300 | WM_WINDOW_ROLE = role). You can see this attribute by using the xprop | 1301 | WM_WINDOW_ROLE = role). You can see this attribute by using the xprop |
1301 | command. Transient windows are not affected by application settings. Take care | 1302 | command. Take care when using regular expressions. If you are not familiar with |
1302 | when using regular expressions. If you are not familiar with regular | 1303 | regular expressions you can disable this feature by specifying --disable-regexp |
1303 | expressions you can disable this feature by specifying --disable-regexp during | 1304 | during configure. Plain strings will then be matched. |
1304 | configure. Plain strings will then be matched. | ||
1305 | |||
1306 | GROUPS | ||
1307 | ------ | ||
1308 | Since version 0.1.11, fluxbox has a feature called autogrouping, that is apps | ||
1309 | are automatically grouped together if they are in the same group. NOTE: this | ||
1310 | feature is deprecated since version 0.9.1 in favor of grouping using the | ||
1311 | `apps' file, since it is much more powerful. | ||
1312 | |||
1313 | You can create groups simply by editing the ~/.fluxbox/groups file. This file | ||
1314 | takes the format of: | ||
1315 | |||
1316 | <app1> <app2> <app3> <...> <appN> | ||
1317 | |||
1318 | where elements can be found with this command: | ||
1319 | |||
1320 | .................. | ||
1321 | $> xprop WM_CLASS | ||
1322 | .................. | ||
1323 | |||
1324 | Just type this command into a terminal and use the mouse to click on the | ||
1325 | desired app and it will tell you what to write as an element (use the first of | ||
1326 | the two names returned). Each line forms a different group, e.g.: | ||
1327 | |||
1328 | ................ | ||
1329 | Navigator nedit | ||
1330 | xterm | ||
1331 | ................ | ||
1332 | |||
1333 | This will create two groups, one with netscape and nedit, and one with xterm. | ||
1334 | The new window will only group itself to other windows on the same workspace | ||
1335 | and to the last window that was focused. | ||
1336 | 1305 | ||
1337 | THE SLIT | 1306 | THE SLIT |
1338 | -------- | 1307 | -------- |
diff --git a/doc/fluxbox.1.in b/doc/fluxbox.1.in index b7518ad..4d14f71 100644 --- a/doc/fluxbox.1.in +++ b/doc/fluxbox.1.in | |||
@@ -1,11 +1,11 @@ | |||
1 | .\" Title: fluxbox | 1 | .\" Title: fluxbox |
2 | .\" Author: | 2 | .\" Author: |
3 | .\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/> | 3 | .\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/> |
4 | .\" Date: 08/18/2008 | 4 | .\" Date: 08/19/2008 |
5 | .\" Manual: | 5 | .\" Manual: |
6 | .\" Source: | 6 | .\" Source: |
7 | .\" | 7 | .\" |
8 | .TH "FLUXBOX" "1" "08/18/2008" "" "" | 8 | .TH "FLUXBOX" "1" "08/19/2008" "" "" |
9 | .\" disable hyphenation | 9 | .\" disable hyphenation |
10 | .nh | 10 | .nh |
11 | .\" disable justification (adjust text to left margin only) | 11 | .\" disable justification (adjust text to left margin only) |
@@ -1213,7 +1213,7 @@ The format of a line in the `apps\' file is: | |||
1213 | [end] | 1213 | [end] |
1214 | .fi | 1214 | .fi |
1215 | .RE | 1215 | .RE |
1216 | Each app\-name can be a string, or a regular expression\. By default the name is matched against a window\'s WM_CLASS property (the first string in it, called the "instance")\. You can match against the title, instance name (default), class name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it\. You can also specify multiple matches, which must ALL match for the properties to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. | 1216 | Each app\-name can be a string, or a regular expression\. By default the name is matched against a window\'s WM_CLASS property (the first string in it, called the "instance")\. You can match against the title, instance name (default), class name, or role (the WM_WINDOW_ROLE property) by explicitly specifying it\. You can also specify multiple matches, which must ALL match for the properties to be applied\. If a count is supplied in curly brackets at the end of the app line, then the entry will only match at most that many at any time (default is to match all matching windows)\. Settings associated with an [app] line will not be applied to transient windows\. [transient] may be used instead to match them\. |
1217 | .sp | 1217 | .sp |
1218 | .sp | 1218 | .sp |
1219 | .RS 4 | 1219 | .RS 4 |
@@ -1404,37 +1404,7 @@ You can also place [group] tag around several [app] tags, with an [end] tag to i | |||
1404 | [end] | 1404 | [end] |
1405 | .fi | 1405 | .fi |
1406 | .RE | 1406 | .RE |
1407 | Parameters in the `apps\' file are case\-sensitive\. Application names are taken from the first X window WM_CLASS attribute by default (WM_NAME = title, WM_WINDOW_ROLE = role)\. You can see this attribute by using the xprop command\. Transient windows are not affected by application settings\. Take care when using regular expressions\. If you are not familiar with regular expressions you can disable this feature by specifying \-\-disable\-regexp during configure\. Plain strings will then be matched\. | 1407 | Parameters in the `apps\' file are case\-sensitive\. Application names are taken from the first X window WM_CLASS attribute by default (WM_NAME = title, WM_WINDOW_ROLE = role)\. You can see this attribute by using the xprop command\. Take care when using regular expressions\. If you are not familiar with regular expressions you can disable this feature by specifying \-\-disable\-regexp during configure\. Plain strings will then be matched\. |
1408 | .sp | ||
1409 | .SH "GROUPS" | ||
1410 | Since version 0\.1\.11, fluxbox has a feature called autogrouping, that is apps are automatically grouped together if they are in the same group\. NOTE: this feature is deprecated since version 0\.9\.1 in favor of grouping using the `apps\' file, since it is much more powerful\. | ||
1411 | .sp | ||
1412 | You can create groups simply by editing the ~/\.fluxbox/groups file\. This file takes the format of: | ||
1413 | .sp | ||
1414 | .sp | ||
1415 | .RS 4 | ||
1416 | .nf | ||
1417 | <app1> <app2> <app3> <\.\.\.> <appN> | ||
1418 | .fi | ||
1419 | .RE | ||
1420 | where elements can be found with this command: | ||
1421 | .sp | ||
1422 | .sp | ||
1423 | .RS 4 | ||
1424 | .nf | ||
1425 | $> xprop WM_CLASS | ||
1426 | .fi | ||
1427 | .RE | ||
1428 | Just type this command into a terminal and use the mouse to click on the desired app and it will tell you what to write as an element (use the first of the two names returned)\. Each line forms a different group, e\.g\.: | ||
1429 | .sp | ||
1430 | .sp | ||
1431 | .RS 4 | ||
1432 | .nf | ||
1433 | Navigator nedit | ||
1434 | xterm | ||
1435 | .fi | ||
1436 | .RE | ||
1437 | This will create two groups, one with netscape and nedit, and one with xterm\. The new window will only group itself to other windows on the same workspace and to the last window that was focused\. | ||
1438 | .sp | 1408 | .sp |
1439 | .SH "THE SLIT" | 1409 | .SH "THE SLIT" |
1440 | The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\. | 1410 | The slit is a special fluxbox window frame that can contain dockable applications, e\.g\. \fIbbtools\fR or \fIwmapps\fR\. |
diff --git a/src/ClientPattern.cc b/src/ClientPattern.cc index c08a574..6a19f2f 100644 --- a/src/ClientPattern.cc +++ b/src/ClientPattern.cc | |||
@@ -58,7 +58,7 @@ ClientPattern::ClientPattern(): | |||
58 | m_nummatches(0) {} | 58 | m_nummatches(0) {} |
59 | 59 | ||
60 | // parse the given pattern (to end of line) | 60 | // parse the given pattern (to end of line) |
61 | ClientPattern::ClientPattern(const char *str, bool default_no_transient): | 61 | ClientPattern::ClientPattern(const char *str): |
62 | m_matchlimit(0), | 62 | m_matchlimit(0), |
63 | m_nummatches(0) | 63 | m_nummatches(0) |
64 | { | 64 | { |
@@ -112,7 +112,6 @@ ClientPattern::ClientPattern(const char *str, bool default_no_transient): | |||
112 | prop = ROLE; | 112 | prop = ROLE; |
113 | } else if (strcasecmp(memstr.c_str(), "transient") == 0) { | 113 | } else if (strcasecmp(memstr.c_str(), "transient") == 0) { |
114 | prop = TRANSIENT; | 114 | prop = TRANSIENT; |
115 | default_no_transient = false; | ||
116 | } else if (strcasecmp(memstr.c_str(), "maximized") == 0) { | 115 | } else if (strcasecmp(memstr.c_str(), "maximized") == 0) { |
117 | prop = MAXIMIZED; | 116 | prop = MAXIMIZED; |
118 | } else if (strcasecmp(memstr.c_str(), "minimized") == 0) { | 117 | } else if (strcasecmp(memstr.c_str(), "minimized") == 0) { |
@@ -148,9 +147,6 @@ ClientPattern::ClientPattern(const char *str, bool default_no_transient): | |||
148 | had_error = true; | 147 | had_error = true; |
149 | } | 148 | } |
150 | 149 | ||
151 | if (default_no_transient) | ||
152 | had_error = !addTerm("no", TRANSIENT); | ||
153 | |||
154 | if (!had_error) { | 150 | if (!had_error) { |
155 | // otherwise, we check for a number | 151 | // otherwise, we check for a number |
156 | string number; | 152 | string number; |
diff --git a/src/ClientPattern.hh b/src/ClientPattern.hh index 1fd2722..611adeb 100644 --- a/src/ClientPattern.hh +++ b/src/ClientPattern.hh | |||
@@ -43,7 +43,7 @@ public: | |||
43 | * apps file. the bool value returns the character at which | 43 | * apps file. the bool value returns the character at which |
44 | * there was a parse problem, or -1. | 44 | * there was a parse problem, or -1. |
45 | */ | 45 | */ |
46 | explicit ClientPattern(const char * str, bool default_no_transient = false); | 46 | explicit ClientPattern(const char * str); |
47 | 47 | ||
48 | ~ClientPattern(); | 48 | ~ClientPattern(); |
49 | 49 | ||
diff --git a/src/Remember.cc b/src/Remember.cc index d5b2ece..43437f4 100644 --- a/src/Remember.cc +++ b/src/Remember.cc | |||
@@ -73,7 +73,7 @@ using std::dec; | |||
73 | 73 | ||
74 | class Application { | 74 | class Application { |
75 | public: | 75 | public: |
76 | Application(bool grouped, ClientPattern *pat = 0); | 76 | Application(bool transient, bool grouped, ClientPattern *pat = 0); |
77 | void reset(); | 77 | void reset(); |
78 | void forgetWorkspace() { workspace_remember = false; } | 78 | void forgetWorkspace() { workspace_remember = false; } |
79 | void forgetHead() { head_remember = false; } | 79 | void forgetHead() { head_remember = false; } |
@@ -182,7 +182,7 @@ public: | |||
182 | bool fullscreenstate_remember; | 182 | bool fullscreenstate_remember; |
183 | bool fullscreenstate; | 183 | bool fullscreenstate; |
184 | 184 | ||
185 | bool is_grouped; | 185 | bool is_transient, is_grouped; |
186 | FbTk::RefCount<ClientPattern> group_pattern; | 186 | FbTk::RefCount<ClientPattern> group_pattern; |
187 | 187 | ||
188 | }; | 188 | }; |
@@ -192,8 +192,8 @@ public: | |||
192 | 192 | ||
193 | 193 | ||
194 | 194 | ||
195 | Application::Application(bool grouped, ClientPattern *pat) | 195 | Application::Application(bool transient, bool grouped, ClientPattern *pat): |
196 | : is_grouped(grouped), group_pattern(pat) | 196 | is_transient(transient), is_grouped(grouped), group_pattern(pat) |
197 | { | 197 | { |
198 | reset(); | 198 | reset(); |
199 | } | 199 | } |
@@ -571,13 +571,14 @@ int parseApp(ifstream &file, Application &app, string *first_line = 0) { | |||
571 | effectively moved into the new | 571 | effectively moved into the new |
572 | */ | 572 | */ |
573 | 573 | ||
574 | Application* findMatchingPatterns(ClientPattern *pat, Remember::Patterns *patlist, bool is_group, ClientPattern *match_pat = 0) { | 574 | Application* findMatchingPatterns(ClientPattern *pat, Remember::Patterns *patlist, bool transient, bool is_group, ClientPattern *match_pat = 0) { |
575 | 575 | ||
576 | Remember::Patterns::iterator it = patlist->begin(); | 576 | Remember::Patterns::iterator it = patlist->begin(); |
577 | Remember::Patterns::iterator it_end = patlist->end(); | 577 | Remember::Patterns::iterator it_end = patlist->end(); |
578 | 578 | ||
579 | for (; it != it_end; ++it) { | 579 | for (; it != it_end; ++it) { |
580 | if (*it->first == *pat && is_group == it->second->is_grouped && | 580 | if (*it->first == *pat && is_group == it->second->is_grouped && |
581 | transient == it->second->is_transient && | ||
581 | ((match_pat == 0 && *it->second->group_pattern == 0) || | 582 | ((match_pat == 0 && *it->second->group_pattern == 0) || |
582 | (match_pat && *match_pat == **it->second->group_pattern))) { | 583 | (match_pat && *match_pat == **it->second->group_pattern))) { |
583 | 584 | ||
@@ -664,7 +665,8 @@ Application* Remember::find(WinClient &winclient) { | |||
664 | else { | 665 | else { |
665 | Patterns::iterator it = m_pats->begin(); | 666 | Patterns::iterator it = m_pats->begin(); |
666 | for (; it != m_pats->end(); it++) | 667 | for (; it != m_pats->end(); it++) |
667 | if (it->first->match(winclient)) { | 668 | if (it->first->match(winclient) && |
669 | it->second->is_transient == winclient.isTransient()) { | ||
668 | it->first->addMatch(); | 670 | it->first->addMatch(); |
669 | m_clients[&winclient] = it->second; | 671 | m_clients[&winclient] = it->second; |
670 | return it->second; | 672 | return it->second; |
@@ -676,7 +678,7 @@ Application* Remember::find(WinClient &winclient) { | |||
676 | 678 | ||
677 | Application * Remember::add(WinClient &winclient) { | 679 | Application * Remember::add(WinClient &winclient) { |
678 | ClientPattern *p = new ClientPattern(); | 680 | ClientPattern *p = new ClientPattern(); |
679 | Application *app = new Application(false); | 681 | Application *app = new Application(winclient.isTransient(), false); |
680 | 682 | ||
681 | // by default, we match against the WMClass of a window (instance and class strings) | 683 | // by default, we match against the WMClass of a window (instance and class strings) |
682 | string win_name = ::escapeRememberChars(p->getProperty(ClientPattern::NAME, winclient)); | 684 | string win_name = ::escapeRememberChars(p->getProperty(ClientPattern::NAME, winclient)); |
@@ -687,7 +689,6 @@ Application * Remember::add(WinClient &winclient) { | |||
687 | p->addTerm(win_class, ClientPattern::CLASS); | 689 | p->addTerm(win_class, ClientPattern::CLASS); |
688 | if (!win_role.empty()) | 690 | if (!win_role.empty()) |
689 | p->addTerm(win_role, ClientPattern::ROLE); | 691 | p->addTerm(win_role, ClientPattern::ROLE); |
690 | p->addTerm(winclient.isTransient() ? "yes" : "no", ClientPattern::TRANSIENT); | ||
691 | m_clients[&winclient] = app; | 692 | m_clients[&winclient] = app; |
692 | p->addMatch(); | 693 | p->addMatch(); |
693 | m_pats->push_back(make_pair(p, app)); | 694 | m_pats->push_back(make_pair(p, app)); |
@@ -739,16 +740,21 @@ void Remember::reload() { | |||
739 | line.c_str(), | 740 | line.c_str(), |
740 | '[', ']'); | 741 | '[', ']'); |
741 | 742 | ||
742 | if (pos > 0 && strcasecmp(key.c_str(), "app") == 0) { | 743 | if (pos > 0 && (strcasecmp(key.c_str(), "app") == 0 || |
743 | ClientPattern *pat = new ClientPattern(line.c_str() + pos, true); | 744 | strcasecmp(key.c_str(), "transient") == 0)) { |
745 | ClientPattern *pat = new ClientPattern(line.c_str() + pos); | ||
744 | if (!in_group) { | 746 | if (!in_group) { |
745 | if ((err = pat->error()) == 0) { | 747 | if ((err = pat->error()) == 0) { |
746 | Application *app = findMatchingPatterns(pat, old_pats, false); | 748 | bool transient = (strcasecmp(key.c_str(), |
749 | "transient") == 0); | ||
750 | Application *app = findMatchingPatterns(pat, | ||
751 | old_pats, transient, false); | ||
747 | if (app) { | 752 | if (app) { |
748 | app->reset(); | 753 | app->reset(); |
749 | reused_apps.insert(app); | 754 | reused_apps.insert(app); |
750 | } else | 755 | } else { |
751 | app = new Application(false); | 756 | app = new Application(transient, false); |
757 | } | ||
752 | 758 | ||
753 | m_pats->push_back(make_pair(pat, app)); | 759 | m_pats->push_back(make_pair(pat, app)); |
754 | row += parseApp(apps_file, *app); | 760 | row += parseApp(apps_file, *app); |
@@ -769,7 +775,7 @@ void Remember::reload() { | |||
769 | } else if (pos > 0 && strcasecmp(key.c_str(), "group") == 0) { | 775 | } else if (pos > 0 && strcasecmp(key.c_str(), "group") == 0) { |
770 | in_group = true; | 776 | in_group = true; |
771 | if (line.find('(') != string::npos) | 777 | if (line.find('(') != string::npos) |
772 | pat = new ClientPattern(line.c_str() + pos, true); | 778 | pat = new ClientPattern(line.c_str() + pos); |
773 | } else if (in_group) { | 779 | } else if (in_group) { |
774 | // otherwise assume that it is the start of the attributes | 780 | // otherwise assume that it is the start of the attributes |
775 | Application *app = 0; | 781 | Application *app = 0; |
@@ -777,12 +783,13 @@ void Remember::reload() { | |||
777 | list<ClientPattern *>::iterator it = grouped_pats.begin(); | 783 | list<ClientPattern *>::iterator it = grouped_pats.begin(); |
778 | list<ClientPattern *>::iterator it_end = grouped_pats.end(); | 784 | list<ClientPattern *>::iterator it_end = grouped_pats.end(); |
779 | while (!app && it != it_end) { | 785 | while (!app && it != it_end) { |
780 | app = findMatchingPatterns(*it, old_pats, in_group, pat); | 786 | app = findMatchingPatterns(*it, old_pats, false, |
787 | in_group, pat); | ||
781 | ++it; | 788 | ++it; |
782 | } | 789 | } |
783 | 790 | ||
784 | if (!app) | 791 | if (!app) |
785 | app = new Application(in_group, pat); | 792 | app = new Application(false, in_group, pat); |
786 | else | 793 | else |
787 | reused_apps.insert(app); | 794 | reused_apps.insert(app); |
788 | 795 | ||
@@ -885,11 +892,13 @@ void Remember::save() { | |||
885 | Patterns::iterator git_end = m_pats->end(); | 892 | Patterns::iterator git_end = m_pats->end(); |
886 | for (; git != git_end; git++) { | 893 | for (; git != git_end; git++) { |
887 | if (git->second == &a) { | 894 | if (git->second == &a) { |
888 | apps_file << " [app]"<<git->first->toString()<<endl; | 895 | apps_file << (a.is_transient ? " [transient]" : " [app]") << |
896 | git->first->toString()<<endl; | ||
889 | } | 897 | } |
890 | } | 898 | } |
891 | } else { | 899 | } else { |
892 | apps_file << "[app]"<<it->first->toString()<<endl; | 900 | apps_file << (a.is_transient ? "[transient]" : "[app]") << |
901 | it->first->toString()<<endl; | ||
893 | } | 902 | } |
894 | if (a.workspace_remember) { | 903 | if (a.workspace_remember) { |
895 | apps_file << " [Workspace]\t{" << a.workspace << "}" << endl; | 904 | apps_file << " [Workspace]\t{" << a.workspace << "}" << endl; |