@@ -167,6 +167,13 @@ const createGroupActions = (group, groupType) => {
167167 if ( item . name !== 'bar' ) {
168168 const icon = getIcon ( item . name ) ;
169169 actionContainer . append ( icon ) ;
170+ if ( icon . classList . contains ( 'bb-dockview-control-icon-dropdown' ) ) {
171+ setTimeout ( ( ) => {
172+ if ( group . model . location . type == 'floating' && group . panels . some ( panel => panel . renderer == 'always' ) ) {
173+ observeDisplayChange ( icon , group )
174+ }
175+ } , 0 )
176+ }
170177 }
171178 } ) ;
172179 setTimeout ( ( ) => {
@@ -178,13 +185,47 @@ const createGroupActions = (group, groupType) => {
178185 } , 0 )
179186 addActionEvent ( group , actionContainer ) ;
180187}
188+ const observeDisplayChange = ( icon , group ) => {
189+ const dockview = group . api . accessor
190+ const element = icon . querySelector ( '.dropdown-menu' )
191+ const mutationObserver = new MutationObserver ( ( mutations ) => {
192+ mutations . forEach ( mutation => {
193+ if ( mutation . attributeName == 'class' ) {
194+ if ( mutation . target . classList . contains ( 'show' ) ) {
195+ const currentPanelEle = group . activePanel . view . content . element . parentElement
196+ const childEle = currentPanelEle . children [ 0 ]
197+ group . element . querySelector ( '&>.dv-content-container' ) . append ( childEle )
198+ currentPanelEle . style . zIndex = - 1
199+ childEle . wrapperEle = currentPanelEle
200+ }
201+ else {
202+ const panelEleList = [ ...group . element . querySelector ( '&>.dv-content-container' ) . children ] . map ( item => {
203+ const wrapperEle = item . wrapperEle
204+ delete item . wrapperEle
205+ wrapperEle . append ( item )
206+ return wrapperEle
207+ } )
208+ group . element . parentElement . parentElement . append ( ...panelEleList )
209+ }
210+ }
211+ } )
212+ } ) ;
213+ group . mutationObserver = mutationObserver
214+ mutationObserver . observe ( element , {
215+ attributes : true ,
216+ attributeFilter : [ "class" ] ,
217+ } ) ;
218+ }
181219
182220const disposeGroup = group => {
183221 const { observer } = group . api . accessor . params ;
184222 if ( observer ) {
185223 observer . unobserve ( group . header . element ) ;
186224 observer . unobserve ( group . header . tabs . _tabsList ) ;
187225 }
226+ if ( group . mutationObserver ) {
227+ group . mutationObserver . disconnect ( ) ;
228+ }
188229 removeActionEvent ( group ) ;
189230}
190231
0 commit comments