diff options
-rw-r--r-- | doc/asciidoc/client-patterns.txt | 9 | ||||
-rw-r--r-- | doc/asciidoc/fluxbox-apps.txt | 9 | ||||
-rw-r--r-- | doc/fluxbox-apps.5.in | 45 | ||||
-rw-r--r-- | doc/fluxbox-keys.5.in | 42 | ||||
-rw-r--r-- | src/ClientPattern.cc | 18 | ||||
-rw-r--r-- | src/ClientPattern.hh | 2 | ||||
-rw-r--r-- | src/FocusControl.cc | 2 | ||||
-rw-r--r-- | src/Focusable.hh | 4 | ||||
-rw-r--r-- | src/Window.cc | 21 | ||||
-rw-r--r-- | src/Window.hh | 1 | ||||
-rw-r--r-- | src/WindowState.hh | 8 |
11 files changed, 122 insertions, 39 deletions
diff --git a/doc/asciidoc/client-patterns.txt b/doc/asciidoc/client-patterns.txt index 5bb50a0..ed1229d 100644 --- a/doc/asciidoc/client-patterns.txt +++ b/doc/asciidoc/client-patterns.txt | |||
@@ -32,9 +32,18 @@ The following values are accepted for 'propertyname'::: | |||
32 | *Maximized*;; | 32 | *Maximized*;; |
33 | Either *yes* or *no*, depending on whether the window is maximized or | 33 | Either *yes* or *no*, depending on whether the window is maximized or |
34 | not. | 34 | not. |
35 | *MaximizedHorizontal*;; | ||
36 | Either *yes* or *no*, depending on whether the window is maximized | ||
37 | horizontally or not. | ||
38 | *MaximizedVertical*;; | ||
39 | Either *yes* or *no*, depending on whether the window is maximized | ||
40 | vertically or not. | ||
35 | *Minimized*;; | 41 | *Minimized*;; |
36 | Either *yes* or *no*, depending on whether the window is minimized | 42 | Either *yes* or *no*, depending on whether the window is minimized |
37 | (iconified) or not. | 43 | (iconified) or not. |
44 | *Fullscreen*;; | ||
45 | Either *yes* or *no*, depending on whether the window is fullscreen or | ||
46 | not. | ||
38 | *Shaded*;; | 47 | *Shaded*;; |
39 | Either *yes* or *no*, depending on whether the window is shaded or | 48 | Either *yes* or *no*, depending on whether the window is shaded or |
40 | not. | 49 | not. |
diff --git a/doc/asciidoc/fluxbox-apps.txt b/doc/asciidoc/fluxbox-apps.txt index 07bac0e..31a26fa 100644 --- a/doc/asciidoc/fluxbox-apps.txt +++ b/doc/asciidoc/fluxbox-apps.txt | |||
@@ -137,10 +137,10 @@ Specify the decoration state. There are several predefined 'value' sets:;; | |||
137 | Standard decorations | 137 | Standard decorations |
138 | *NONE*;; | 138 | *NONE*;; |
139 | No decorations | 139 | No decorations |
140 | *TAB* | 140 | *BORDER*;; |
141 | Like TAB except keep the tabs | ||
142 | *Border*;; | ||
143 | Like NONE except keep the X window border | 141 | Like NONE except keep the X window border |
142 | *TAB*;; | ||
143 | Like BORDER except keep external tabs (if enabled) | ||
144 | *TINY*;; | 144 | *TINY*;; |
145 | Titlebar with only an iconify button | 145 | Titlebar with only an iconify button |
146 | *TOOL*;; | 146 | *TOOL*;; |
@@ -150,8 +150,7 @@ Specify the decoration state. There are several predefined 'value' sets:;; | |||
150 | + | 150 | + |
151 | The 'value' may also be a bitmask for finer-grained control. The bits are, from | 151 | The 'value' may also be a bitmask for finer-grained control. The bits are, from |
152 | (1<<0) to (1<<10): Titlebar, Handle/Grips, Border, Iconify Button, Maximize | 152 | (1<<0) to (1<<10): Titlebar, Handle/Grips, Border, Iconify Button, Maximize |
153 | Button, Close Button, Menu Enabled, Sticky Button, Shade Button, Tabbing | 153 | Button, Close Button, Menu Button, Sticky Button, Shade Button, External Tabs, Focus Enabled. |
154 | enabled, Focus Enabled. | ||
155 | 154 | ||
156 | *[Shaded]* {'bool'}:: | 155 | *[Shaded]* {'bool'}:: |
157 | Whether the window is Shaded (rolled-up) or not. | 156 | Whether the window is Shaded (rolled-up) or not. |
diff --git a/doc/fluxbox-apps.5.in b/doc/fluxbox-apps.5.in index 88b947c..9b32ca6 100644 --- a/doc/fluxbox-apps.5.in +++ b/doc/fluxbox-apps.5.in | |||
@@ -1,7 +1,7 @@ | |||
1 | '\" t | 1 | '\" t |
2 | .\" Title: fluxbox-apps | 2 | .\" Title: fluxbox-apps |
3 | .\" Author: Jim Ramsay <i.am@jimramsay.com> | 3 | .\" Author: Jim Ramsay <i.am@jimramsay.com> |
4 | .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/> | 4 | .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/> |
5 | .\" Date: 28 October 2011 | 5 | .\" Date: 28 October 2011 |
6 | .\" Manual: Fluxbox Manual | 6 | .\" Manual: Fluxbox Manual |
7 | .\" Source: fluxbox-apps.txt | 7 | .\" Source: fluxbox-apps.txt |
@@ -137,18 +137,18 @@ head specified (Xinerama only)\&. | |||
137 | Specify the layer to open the window on (by number)\&. Each layer has a number\&. The named ones are: 2\-AboveDock, 4\-Dock, 6\-Top, 8\-Normal, 10\-Bottom, 12\-Desktop\&. | 137 | Specify the layer to open the window on (by number)\&. Each layer has a number\&. The named ones are: 2\-AboveDock, 4\-Dock, 6\-Top, 8\-Normal, 10\-Bottom, 12\-Desktop\&. |
138 | .RE | 138 | .RE |
139 | .PP | 139 | .PP |
140 | \fB[Dimensions]\fR {\fIwidth\fR \fIheight\fR} | 140 | \fB[Dimensions]\fR {\fIwidth[%]\fR \fIheight[%]\fR} |
141 | .RS 4 | 141 | .RS 4 |
142 | Opens the application with the specified | 142 | Opens the application with the specified |
143 | \fIwidth\fR | 143 | \fIwidth\fR |
144 | and | 144 | and |
145 | \fIheight\fR, in pixels\&. | 145 | \fIheight\fR, in pixels\&. If the value is given in percent, then the window size will be based on the current screen\(cqs size\&. |
146 | .RE | 146 | .RE |
147 | .PP | 147 | .PP |
148 | \fB[Position]\fR (\fIanchor\fR) {\fIX\fR \fIY\fR} | 148 | \fB[Position]\fR (\fIanchor\fR) {\fIX[%]\fR \fIY[%]\fR} |
149 | .RS 4 | 149 | .RS 4 |
150 | Position the application at a particular spot\&. By default the upper\-left corner is placed at screen coordinates (\fIX\fR,\fIY\fR)\&. If you specify an | 150 | Position the application at a particular spot\&. By default the upper\-left corner is placed at screen coordinates (\fIX\fR,\fIY\fR)\&. If you specify an |
151 | \fIanchor\fR, say BottomRight, then the lower\-right corner of the window is positioned (\fIX\fR,\fIY\fR) pixels from the lower\-right corner of the screen\&. | 151 | \fIanchor\fR, say BottomRight, then the lower\-right corner of the window is positioned (\fIX\fR,\fIY\fR) pixels from the lower\-right corner of the screen\&. If the value is given in percent, then the coordinates will be based on the current screen\(cqs size\&. |
152 | .PP | 152 | .PP |
153 | \fIanchor\fR may be set to one of: | 153 | \fIanchor\fR may be set to one of: |
154 | .RS 4 | 154 | .RS 4 |
@@ -171,15 +171,18 @@ Standard decorations | |||
171 | \fBNONE\fR | 171 | \fBNONE\fR |
172 | .RS 4 | 172 | .RS 4 |
173 | No decorations | 173 | No decorations |
174 | \fBTAB\fR | ||
175 | Like TAB except keep the tabs | ||
176 | .RE | 174 | .RE |
177 | .PP | 175 | .PP |
178 | \fBBorder\fR | 176 | \fBBORDER\fR |
179 | .RS 4 | 177 | .RS 4 |
180 | Like NONE except keep the X window border | 178 | Like NONE except keep the X window border |
181 | .RE | 179 | .RE |
182 | .PP | 180 | .PP |
181 | \fBTAB\fR | ||
182 | .RS 4 | ||
183 | Like BORDER except keep external tabs (if enabled) | ||
184 | .RE | ||
185 | .PP | ||
183 | \fBTINY\fR | 186 | \fBTINY\fR |
184 | .RS 4 | 187 | .RS 4 |
185 | Titlebar with only an iconify button | 188 | Titlebar with only an iconify button |
@@ -192,7 +195,7 @@ Titlebar only | |||
192 | .sp | 195 | .sp |
193 | The | 196 | The |
194 | \fIvalue\fR | 197 | \fIvalue\fR |
195 | may also be a bitmask for finer\-grained control\&. The bits are, from (1<<0) to (1<<10): Titlebar, Handle/Grips, Border, Iconify Button, Maximize Button, Close Button, Menu Enabled, Sticky Button, Shade Button, Tabbing enabled, Focus Enabled\&. | 198 | may also be a bitmask for finer\-grained control\&. The bits are, from (1<<0) to (1<<10): Titlebar, Handle/Grips, Border, Iconify Button, Maximize Button, Close Button, Menu Button, Sticky Button, Shade Button, External Tabs, Focus Enabled\&. |
196 | .RE | 199 | .RE |
197 | .RE | 200 | .RE |
198 | .PP | 201 | .PP |
@@ -348,6 +351,22 @@ or | |||
348 | \fBno\fR, depending on whether the window is maximized or not\&. | 351 | \fBno\fR, depending on whether the window is maximized or not\&. |
349 | .RE | 352 | .RE |
350 | .PP | 353 | .PP |
354 | \fBMaximizedHorizontal\fR | ||
355 | .RS 4 | ||
356 | Either | ||
357 | \fByes\fR | ||
358 | or | ||
359 | \fBno\fR, depending on whether the window is maximized horizontally or not\&. | ||
360 | .RE | ||
361 | .PP | ||
362 | \fBMaximizedVertical\fR | ||
363 | .RS 4 | ||
364 | Either | ||
365 | \fByes\fR | ||
366 | or | ||
367 | \fBno\fR, depending on whether the window is maximized vertically or not\&. | ||
368 | .RE | ||
369 | .PP | ||
351 | \fBMinimized\fR | 370 | \fBMinimized\fR |
352 | .RS 4 | 371 | .RS 4 |
353 | Either | 372 | Either |
@@ -356,6 +375,14 @@ or | |||
356 | \fBno\fR, depending on whether the window is minimized (iconified) or not\&. | 375 | \fBno\fR, depending on whether the window is minimized (iconified) or not\&. |
357 | .RE | 376 | .RE |
358 | .PP | 377 | .PP |
378 | \fBFullscreen\fR | ||
379 | .RS 4 | ||
380 | Either | ||
381 | \fByes\fR | ||
382 | or | ||
383 | \fBno\fR, depending on whether the window is fullscreen or not\&. | ||
384 | .RE | ||
385 | .PP | ||
359 | \fBShaded\fR | 386 | \fBShaded\fR |
360 | .RS 4 | 387 | .RS 4 |
361 | Either | 388 | Either |
diff --git a/doc/fluxbox-keys.5.in b/doc/fluxbox-keys.5.in index 50b79d8..7ff39f5 100644 --- a/doc/fluxbox-keys.5.in +++ b/doc/fluxbox-keys.5.in | |||
@@ -1,7 +1,7 @@ | |||
1 | '\" t | 1 | '\" t |
2 | .\" Title: fluxbox-keys | 2 | .\" Title: fluxbox-keys |
3 | .\" Author: Jim Ramsay <i.am@jimramsay.com> | 3 | .\" Author: Jim Ramsay <i.am@jimramsay.com> |
4 | .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/> | 4 | .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/> |
5 | .\" Date: 28 October 2011 | 5 | .\" Date: 28 October 2011 |
6 | .\" Manual: Fluxbox Manual | 6 | .\" Manual: Fluxbox Manual |
7 | .\" Source: fluxbox-keys.txt | 7 | .\" Source: fluxbox-keys.txt |
@@ -417,24 +417,24 @@ Reorder the tabs in the current tab group, swapping the current tab with the one | |||
417 | Remove the current tab from the tab group, placing it in its own window\&. | 417 | Remove the current tab from the tab group, placing it in its own window\&. |
418 | .RE | 418 | .RE |
419 | .PP | 419 | .PP |
420 | \fBResizeTo\fR \fIwidth\fR \fIheight\fR | 420 | \fBResizeTo\fR \fIwidth[%]\fR \fIheight[%]\fR |
421 | .RS 4 | 421 | .RS 4 |
422 | Resizes the window to the given width and height\&. | 422 | Resizes the window to the given width and height\&. If the value is given in percent, then the window size will be based on the current screen\(cqs size\&. |
423 | .RE | 423 | .RE |
424 | .PP | 424 | .PP |
425 | \fBResize\fR \fIdelta\-width\fR \fIdelta\-height\fR | 425 | \fBResize\fR \fIdelta\-width[%]\fR \fIdelta\-height[%]\fR |
426 | .RS 4 | 426 | .RS 4 |
427 | Resizes the window relative to the current width and height\&. | 427 | Resizes the window relative to the current width and height\&. If the value is given in percent, then the window size will be based on the current window\(cqs size\&. |
428 | .RE | 428 | .RE |
429 | .PP | 429 | .PP |
430 | \fBResizeHorizontal\fR \fIdelta\-width\fR / \fBResizeVertical\fR \fIdelta\-height\fR | 430 | \fBResizeHorizontal\fR \fIdelta\-width[%]\fR / \fBResizeVertical\fR \fIdelta\-height[%]\fR |
431 | .RS 4 | 431 | .RS 4 |
432 | Resizes the window in one dimension only | 432 | Resizes the window in one dimension only\&. If the value is given in percent, then the window size will be based on the current window\(cqs size\&. |
433 | .RE | 433 | .RE |
434 | .PP | 434 | .PP |
435 | \fBMoveTo\fR \fIx\fR \fIy\fR [\fIanchor\fR] | 435 | \fBMoveTo\fR \fIx[%]\fR \fIy[%]\fR [\fIanchor\fR] |
436 | .RS 4 | 436 | .RS 4 |
437 | Moves the window to the given coordinates, given in pixels\&. | 437 | Moves the window to the given coordinates, given in pixels or relatively to the current screen size if % is specified after the value\&. |
438 | .sp | 438 | .sp |
439 | If either | 439 | If either |
440 | \fIx\fR | 440 | \fIx\fR |
@@ -1034,6 +1034,22 @@ or | |||
1034 | \fBno\fR, depending on whether the window is maximized or not\&. | 1034 | \fBno\fR, depending on whether the window is maximized or not\&. |
1035 | .RE | 1035 | .RE |
1036 | .PP | 1036 | .PP |
1037 | \fBMaximizedHorizontal\fR | ||
1038 | .RS 4 | ||
1039 | Either | ||
1040 | \fByes\fR | ||
1041 | or | ||
1042 | \fBno\fR, depending on whether the window is maximized horizontally or not\&. | ||
1043 | .RE | ||
1044 | .PP | ||
1045 | \fBMaximizedVertical\fR | ||
1046 | .RS 4 | ||
1047 | Either | ||
1048 | \fByes\fR | ||
1049 | or | ||
1050 | \fBno\fR, depending on whether the window is maximized vertically or not\&. | ||
1051 | .RE | ||
1052 | .PP | ||
1037 | \fBMinimized\fR | 1053 | \fBMinimized\fR |
1038 | .RS 4 | 1054 | .RS 4 |
1039 | Either | 1055 | Either |
@@ -1042,6 +1058,14 @@ or | |||
1042 | \fBno\fR, depending on whether the window is minimized (iconified) or not\&. | 1058 | \fBno\fR, depending on whether the window is minimized (iconified) or not\&. |
1043 | .RE | 1059 | .RE |
1044 | .PP | 1060 | .PP |
1061 | \fBFullscreen\fR | ||
1062 | .RS 4 | ||
1063 | Either | ||
1064 | \fByes\fR | ||
1065 | or | ||
1066 | \fBno\fR, depending on whether the window is fullscreen or not\&. | ||
1067 | .RE | ||
1068 | .PP | ||
1045 | \fBShaded\fR | 1069 | \fBShaded\fR |
1046 | .RS 4 | 1070 | .RS 4 |
1047 | Either | 1071 | Either |
diff --git a/src/ClientPattern.cc b/src/ClientPattern.cc index f49f7fd..f57513d 100644 --- a/src/ClientPattern.cc +++ b/src/ClientPattern.cc | |||
@@ -67,13 +67,17 @@ struct Name2WinProperty { | |||
67 | ClientPattern::WinProperty prop; | 67 | ClientPattern::WinProperty prop; |
68 | }; | 68 | }; |
69 | 69 | ||
70 | const Name2WinProperty name_2_winproperties[] = { // sorted for 'bsearch' | 70 | // sorted alphabetically for 'bsearch' |
71 | const Name2WinProperty name_2_winproperties[] = { | ||
71 | { "class", ClientPattern::CLASS }, | 72 | { "class", ClientPattern::CLASS }, |
72 | { "focushidden", ClientPattern::FOCUSHIDDEN }, | 73 | { "focushidden", ClientPattern::FOCUSHIDDEN }, |
74 | { "fullscreen", ClientPattern::FULLSCREEN }, | ||
73 | { "head", ClientPattern::HEAD }, | 75 | { "head", ClientPattern::HEAD }, |
74 | { "iconhidden", ClientPattern::ICONHIDDEN }, | 76 | { "iconhidden", ClientPattern::ICONHIDDEN }, |
75 | { "layer", ClientPattern::LAYER }, | 77 | { "layer", ClientPattern::LAYER }, |
76 | { "maximized", ClientPattern::MAXIMIZED }, | 78 | { "maximized", ClientPattern::MAXIMIZED }, |
79 | { "maximizedhorizontal", ClientPattern::HORZMAX }, | ||
80 | { "maximizedvertical", ClientPattern::VERTMAX }, | ||
77 | { "minimized", ClientPattern::MINIMIZED }, | 81 | { "minimized", ClientPattern::MINIMIZED }, |
78 | { "name", ClientPattern::NAME }, | 82 | { "name", ClientPattern::NAME }, |
79 | { "role", ClientPattern::ROLE }, | 83 | { "role", ClientPattern::ROLE }, |
@@ -132,6 +136,9 @@ Prop2String property_2_strings[] = { // sorted by 'prop' | |||
132 | { ClientPattern::URGENT, "urgent" }, | 136 | { ClientPattern::URGENT, "urgent" }, |
133 | { ClientPattern::SCREEN, "screen" }, | 137 | { ClientPattern::SCREEN, "screen" }, |
134 | { ClientPattern::XPROP, "@" }, | 138 | { ClientPattern::XPROP, "@" }, |
139 | { ClientPattern::FULLSCREEN, "fullscreen" }, | ||
140 | { ClientPattern::VERTMAX, "maximizedvertical" }, | ||
141 | { ClientPattern::HORZMAX, "maximizedhorizontal" }, | ||
135 | }; | 142 | }; |
136 | 143 | ||
137 | 144 | ||
@@ -411,6 +418,15 @@ FbTk::FbString ClientPattern::getProperty(WinProperty prop, const Focusable &cli | |||
411 | case MINIMIZED: | 418 | case MINIMIZED: |
412 | result = (fbwin && fbwin->isIconic()) ? "yes" : "no"; | 419 | result = (fbwin && fbwin->isIconic()) ? "yes" : "no"; |
413 | break; | 420 | break; |
421 | case FULLSCREEN: | ||
422 | result = (fbwin && fbwin->isFullscreen()) ? "yes" : "no"; | ||
423 | break; | ||
424 | case VERTMAX: | ||
425 | result = (fbwin && fbwin->isMaximizedVert()) ? "yes" : "no"; | ||
426 | break; | ||
427 | case HORZMAX: | ||
428 | result = (fbwin && fbwin->isMaximizedHorz()) ? "yes" : "no"; | ||
429 | break; | ||
414 | case SHADED: | 430 | case SHADED: |
415 | result = (fbwin && fbwin->isShaded()) ? "yes" : "no"; | 431 | result = (fbwin && fbwin->isShaded()) ? "yes" : "no"; |
416 | break; | 432 | break; |
diff --git a/src/ClientPattern.hh b/src/ClientPattern.hh index 315edb1..a5b7206 100644 --- a/src/ClientPattern.hh +++ b/src/ClientPattern.hh | |||
@@ -55,7 +55,7 @@ public: | |||
55 | TITLE = 0, CLASS, NAME, ROLE, TRANSIENT, | 55 | TITLE = 0, CLASS, NAME, ROLE, TRANSIENT, |
56 | MAXIMIZED, MINIMIZED, SHADED, STUCK, FOCUSHIDDEN, ICONHIDDEN, | 56 | MAXIMIZED, MINIMIZED, SHADED, STUCK, FOCUSHIDDEN, ICONHIDDEN, |
57 | WORKSPACE, WORKSPACENAME, HEAD, LAYER, URGENT, SCREEN, | 57 | WORKSPACE, WORKSPACENAME, HEAD, LAYER, URGENT, SCREEN, |
58 | XPROP | 58 | XPROP, FULLSCREEN, VERTMAX, HORZMAX |
59 | }; | 59 | }; |
60 | 60 | ||
61 | /// Does this client match this pattern? | 61 | /// Does this client match this pattern? |
diff --git a/src/FocusControl.cc b/src/FocusControl.cc index 5bf113f..383de61 100644 --- a/src/FocusControl.cc +++ b/src/FocusControl.cc | |||
@@ -53,7 +53,7 @@ namespace { | |||
53 | 53 | ||
54 | bool doSkipWindow(const Focusable &win, const ClientPattern *pat) { | 54 | bool doSkipWindow(const Focusable &win, const ClientPattern *pat) { |
55 | const FluxboxWindow *fbwin = win.fbwindow(); | 55 | const FluxboxWindow *fbwin = win.fbwindow(); |
56 | if (!fbwin || fbwin->isFocusHidden()) | 56 | if (!fbwin || fbwin->isFocusHidden() || fbwin->isModal()) |
57 | return true; // skip if no fbwindow or if focushidden | 57 | return true; // skip if no fbwindow or if focushidden |
58 | if (pat && !pat->match(win)) | 58 | if (pat && !pat->match(win)) |
59 | return true; // skip if it doesn't match the pattern | 59 | return true; // skip if it doesn't match the pattern |
diff --git a/src/Focusable.hh b/src/Focusable.hh index 679e00b..fd0705b 100644 --- a/src/Focusable.hh +++ b/src/Focusable.hh | |||
@@ -54,8 +54,10 @@ public: | |||
54 | 54 | ||
55 | /// @return true if the focusable has input focus | 55 | /// @return true if the focusable has input focus |
56 | virtual bool isFocused() const { return m_focused; } | 56 | virtual bool isFocused() const { return m_focused; } |
57 | /// @return return true if it can be focused | 57 | /// @return true if it can be focused |
58 | virtual bool acceptsFocus() const { return true; } | 58 | virtual bool acceptsFocus() const { return true; } |
59 | /// @return true if temporarily prevented from being focused | ||
60 | virtual bool isModal() const { return false; } | ||
59 | 61 | ||
60 | /// @return true if icon button should appear focused | 62 | /// @return true if icon button should appear focused |
61 | bool getAttentionState() const { return m_attention_state; } | 63 | bool getAttentionState() const { return m_attention_state; } |
diff --git a/src/Window.cc b/src/Window.cc index f5a2fe2..747c909 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -3306,6 +3306,10 @@ bool FluxboxWindow::acceptsFocus() const { | |||
3306 | return (m_client ? m_client->acceptsFocus() : false); | 3306 | return (m_client ? m_client->acceptsFocus() : false); |
3307 | } | 3307 | } |
3308 | 3308 | ||
3309 | bool FluxboxWindow::isModal() const { | ||
3310 | return (m_client ? m_client->isModal() : true); | ||
3311 | } | ||
3312 | |||
3309 | const FbTk::PixmapWithMask &FluxboxWindow::icon() const { | 3313 | const FbTk::PixmapWithMask &FluxboxWindow::icon() const { |
3310 | return (m_client ? m_client->icon() : m_icon); | 3314 | return (m_client ? m_client->icon() : m_icon); |
3311 | } | 3315 | } |
@@ -3609,15 +3613,16 @@ void FluxboxWindow::updateButtons() { | |||
3609 | } | 3613 | } |
3610 | break; | 3614 | break; |
3611 | case WinButton::MENUICON: | 3615 | case WinButton::MENUICON: |
3612 | winbtn = new WinButton(*this, m_button_theme, | 3616 | if (m_state.deco_mask & WindowState::DECORM_MENU) { |
3613 | screen().pressedWinButtonTheme(), | 3617 | winbtn = new WinButton(*this, m_button_theme, |
3614 | dir[i], | 3618 | screen().pressedWinButtonTheme(), |
3615 | frame().titlebar(), | 3619 | dir[i], |
3616 | 0, 0, 10, 10); | 3620 | frame().titlebar(), |
3617 | winbtn->join(titleSig(), | 3621 | 0, 0, 10, 10); |
3622 | winbtn->join(titleSig(), | ||
3618 | FbTk::MemFunIgnoreArgs(*winbtn, &WinButton::updateAll)); | 3623 | FbTk::MemFunIgnoreArgs(*winbtn, &WinButton::updateAll)); |
3619 | 3624 | winbtn->setOnClick(show_menu_cmd); | |
3620 | winbtn->setOnClick(show_menu_cmd); | 3625 | } |
3621 | break; | 3626 | break; |
3622 | } | 3627 | } |
3623 | 3628 | ||
diff --git a/src/Window.hh b/src/Window.hh index 0d2cadd..8c97c7b 100644 --- a/src/Window.hh +++ b/src/Window.hh | |||
@@ -414,6 +414,7 @@ public: | |||
414 | FbTk::FbWindow &parent() { return m_parent; } | 414 | FbTk::FbWindow &parent() { return m_parent; } |
415 | 415 | ||
416 | bool acceptsFocus() const; | 416 | bool acceptsFocus() const; |
417 | bool isModal() const; | ||
417 | const FbTk::PixmapWithMask &icon() const; | 418 | const FbTk::PixmapWithMask &icon() const; |
418 | const FbTk::BiDiString &title() const; | 419 | const FbTk::BiDiString &title() const; |
419 | const FbTk::FbString &getWMClassName() const; | 420 | const FbTk::FbString &getWMClassName() const; |
diff --git a/src/WindowState.hh b/src/WindowState.hh index 58664fa..6b45a44 100644 --- a/src/WindowState.hh +++ b/src/WindowState.hh | |||
@@ -90,10 +90,10 @@ public: | |||
90 | enum Decoration { | 90 | enum Decoration { |
91 | DECOR_NONE = 0, | 91 | DECOR_NONE = 0, |
92 | DECOR_NORMAL = DECORM_LAST - 1, | 92 | DECOR_NORMAL = DECORM_LAST - 1, |
93 | DECOR_TINY = DECORM_TITLEBAR|DECORM_ICONIFY|DECORM_MENU|DECORM_TAB, | 93 | DECOR_TINY = DECORM_TITLEBAR|DECORM_ICONIFY, |
94 | DECOR_TOOL = DECORM_TITLEBAR|DECORM_MENU, | 94 | DECOR_TOOL = DECORM_TITLEBAR, |
95 | DECOR_BORDER = DECORM_BORDER|DECORM_MENU, | 95 | DECOR_BORDER = DECORM_BORDER, |
96 | DECOR_TAB = DECORM_BORDER|DECORM_MENU|DECORM_TAB | 96 | DECOR_TAB = DECORM_BORDER|DECORM_TAB |
97 | }; | 97 | }; |
98 | 98 | ||
99 | enum WindowType { | 99 | enum WindowType { |