@@ -4,6 +4,8 @@ import { useTranslation } from 'react-i18next';
4
4
import { useDispatch , useSelector } from 'react-redux' ;
5
5
import {
6
6
HideMode ,
7
+ MonitorInfo ,
8
+ SeelenWegItemDisplayOption ,
7
9
SeelenWegMode ,
8
10
SeelenWegSide ,
9
11
SeparatorWegItem ,
@@ -19,7 +21,7 @@ import { UserApplication } from '../item/infra/UserApplication';
19
21
20
22
import { RootActions , Selectors } from '../shared/store/app' ;
21
23
22
- import { SwItem } from '../shared/store/domain' ;
24
+ import { OpenedWindow , SwItem } from '../shared/store/domain' ;
23
25
24
26
import { cx } from '../../../shared/styles' ;
25
27
import { WithContextMenu } from '../../components/WithContextMenu' ;
@@ -62,6 +64,8 @@ export function SeelenWeg() {
62
64
const pinnedOnCenter = useSelector ( Selectors . itemsOnCenter ) ;
63
65
const pinnedOnRight = useSelector ( Selectors . itemsOnRight ) ;
64
66
67
+ const monitorInfo : MonitorInfo = useSelector ( Selectors . monitorInfo ) ;
68
+
65
69
const dispatch = useDispatch ( ) ;
66
70
const { t } = useTranslation ( ) ;
67
71
@@ -140,11 +144,58 @@ export function SeelenWeg() {
140
144
const isHorizontal =
141
145
settings . position === SeelenWegSide . Top || settings . position === SeelenWegSide . Bottom ;
142
146
147
+ let shouldBeReduced = [ ] ;
148
+ switch ( settings . multitaskbarItemVisibilityBehaviour ) {
149
+ case SeelenWegItemDisplayOption . PrimaryScreenAll :
150
+ if ( monitorInfo . isPrimary ) {
151
+ shouldBeReduced = [ ] ;
152
+ } else {
153
+ shouldBeReduced = [ SwItemType . Pinned , SwItemType . TemporalApp ] ;
154
+ }
155
+ break ;
156
+ case SeelenWegItemDisplayOption . Minimal :
157
+ if ( monitorInfo . isPrimary ) {
158
+ shouldBeReduced = [ SwItemType . TemporalApp ] ;
159
+ } else {
160
+ shouldBeReduced = [ SwItemType . Pinned , SwItemType . TemporalApp ] ;
161
+ }
162
+ break ;
163
+ default :
164
+ shouldBeReduced = [ ] ;
165
+ break ;
166
+ }
167
+
168
+ function isOnMonitor ( item : SwItem ) {
169
+ if ( shouldBeReduced . includes ( item . type ) ) {
170
+ return ! ( 'opens' in item ) || item . opens . some ( ( current : OpenedWindow ) => current . presentative_monitor == monitorInfo . index ) ;
171
+ } else {
172
+ return true ;
173
+ }
174
+ }
175
+
176
+ function filterOpenElement ( item : SwItem ) : SwItem {
177
+ const newItem = { ...item } ;
178
+
179
+ if ( ( 'opens' in item ) ) {
180
+ if ( monitorInfo . isPrimary ) {
181
+ newItem . opens = item . opens . filter ( ( current : OpenedWindow ) => settings . multitaskbarItemVisibilityBehaviour != SeelenWegItemDisplayOption . Minimal || current . presentative_monitor == monitorInfo . index ) ;
182
+ } else {
183
+ newItem . opens = item . opens . filter ( ( current : OpenedWindow ) => current . presentative_monitor == monitorInfo . index ) ;
184
+ }
185
+ }
186
+
187
+ return newItem ;
188
+ }
189
+
190
+ const filteredPinOnLeft = pinnedOnLeft . filter ( isOnMonitor ) . map ( filterOpenElement ) ;
191
+ const filteredPinOnCenter = pinnedOnCenter . filter ( isOnMonitor ) . map ( filterOpenElement ) ;
192
+ const filteredPinOnRight = pinnedOnRight . filter ( isOnMonitor ) . map ( filterOpenElement ) ;
193
+
143
194
return (
144
195
< WithContextMenu items = { getSeelenWegMenu ( t ) } >
145
196
< Reorder . Group
146
197
as = "div"
147
- values = { [ ...pinnedOnLeft , Separator1 , ...pinnedOnCenter , Separator2 , ...pinnedOnRight ] }
198
+ values = { [ ...filteredPinOnLeft , Separator1 , ...filteredPinOnCenter , Separator2 , ...filteredPinOnRight ] }
148
199
onReorder = { onReorderPinned }
149
200
axis = { isHorizontal ? 'x' : 'y' }
150
201
className = { cx ( 'taskbar' , settings . position . toLowerCase ( ) , {
@@ -157,7 +208,7 @@ export function SeelenWeg() {
157
208
>
158
209
< BackgroundByLayersV2 prefix = "taskbar" />
159
210
{ [
160
- ...pinnedOnLeft . map ( ItemByType ) ,
211
+ ...filteredPinOnLeft . map ( ItemByType ) ,
161
212
< Reorder . Item
162
213
as = "div"
163
214
key = "separator1"
@@ -166,9 +217,9 @@ export function SeelenWeg() {
166
217
visible : settings . visibleSeparators ,
167
218
} ) }
168
219
drag = { false }
169
- style = { getSeparatorComplementarySize ( pinnedOnLeft . length , pinnedOnCenter . length ) }
220
+ style = { getSeparatorComplementarySize ( filteredPinOnLeft . length , filteredPinOnCenter . length ) }
170
221
/> ,
171
- ...pinnedOnCenter . map ( ItemByType ) ,
222
+ ...filteredPinOnCenter . map ( ItemByType ) ,
172
223
< Reorder . Item
173
224
as = "div"
174
225
key = "separator2"
@@ -177,9 +228,9 @@ export function SeelenWeg() {
177
228
visible : settings . visibleSeparators ,
178
229
} ) }
179
230
drag = { false }
180
- style = { getSeparatorComplementarySize ( pinnedOnRight . length , pinnedOnCenter . length ) }
231
+ style = { getSeparatorComplementarySize ( filteredPinOnRight . length , filteredPinOnCenter . length ) }
181
232
/> ,
182
- ...pinnedOnRight . map ( ItemByType ) ,
233
+ ...filteredPinOnRight . map ( ItemByType ) ,
183
234
] }
184
235
</ Reorder . Group >
185
236
</ WithContextMenu >
0 commit comments