@@ -113,22 +113,117 @@ private void Model_PropertyChanged(object sender, System.ComponentModel.Property
113
113
if ( e . PropertyName == nameof ( LayoutDocumentFloatingWindow . RootPanel ) && _model . RootPanel == null ) InternalClose ( ) ;
114
114
}
115
115
116
- /// <inheritdoc />
117
- protected override IntPtr FilterMessage ( IntPtr hwnd , int msg , IntPtr wParam , IntPtr lParam , ref bool handled )
116
+ private void ActiveOfSinglePane ( bool isActive )
118
117
{
119
- switch ( msg )
118
+ var layoutDocumentPane = _model . Descendents ( ) . OfType < LayoutDocumentPane > ( )
119
+ . FirstOrDefault ( p => p . ChildrenCount > 0 && p . SelectedContent != null ) ;
120
+
121
+ layoutDocumentPane . SelectedContent . IsActive = isActive ;
122
+ }
123
+
124
+ private static LayoutDocumentPaneControl FindDocumentPaneControlByPoint ( IEnumerable < LayoutDocumentPaneControl > areaHosts , Point point )
125
+ {
126
+ foreach ( var areaHost in areaHosts )
120
127
{
121
- case Win32Helper . WM_NCLBUTTONDOWN : //Left button down on title -> start dragging over docking manager
122
- if ( wParam . ToInt32 ( ) == Win32Helper . HT_CAPTION )
128
+ var area = areaHost . GetScreenArea ( ) ;
129
+ var pos = areaHost . TransformFromDeviceDPI ( point ) ;
130
+ var b = area . Contains ( pos ) ;
131
+
132
+ if ( b )
133
+ {
134
+ return areaHost ;
135
+ }
136
+ }
137
+
138
+ return null ;
139
+ }
140
+
141
+ private void ActiveOfMultiPane ( bool isActive )
142
+ {
143
+ var mousePosition = Win32Helper . GetMousePosition ( ) ;
144
+ var rootVisual = ( ( FloatingWindowContentHost ) Content ) . RootVisual ;
145
+ var areaHosts = rootVisual . FindVisualChildren < LayoutDocumentPaneControl > ( ) ;
146
+
147
+ if ( isActive )
148
+ {
149
+ var documentPane = FindDocumentPaneControlByPoint ( areaHosts , mousePosition ) ;
150
+ if ( documentPane != null )
151
+ {
152
+ var model = ( LayoutDocumentPane ) documentPane . Model ;
153
+ if ( model . SelectedContent != null )
123
154
{
124
- LayoutDocumentPane layoutDocumentPane = _model . Descendents ( ) . OfType < LayoutDocumentPane > ( ) . FirstOrDefault ( p => p . ChildrenCount > 0 && p . SelectedContent != null ) ;
125
- if ( layoutDocumentPane != null )
155
+ model . SelectedContent . IsActive = true ;
156
+ return ;
157
+ }
158
+ // AnchorablePane
159
+ else
160
+ {
161
+ var index = 0 ;
162
+ for ( var i = 0 ; i < model . Children . Count ; i ++ )
126
163
{
127
- layoutDocumentPane . SelectedContent . IsActive = true ;
164
+ var item = model . Children [ i ] ;
165
+ if ( item . IsLastFocusedDocument )
166
+ {
167
+ index = i ;
168
+ }
128
169
}
129
170
130
- handled = true ;
171
+ model . SelectedContentIndex = index ;
172
+ return ;
173
+ }
174
+ }
175
+ else
176
+ {
177
+ // Active the Last Focus
178
+ foreach ( var areaHost in areaHosts )
179
+ {
180
+ var model = ( LayoutDocumentPane ) areaHost . Model ;
181
+ for ( var i = 0 ; i < model . Children . Count ; i ++ )
182
+ {
183
+ var item = model . Children [ i ] ;
184
+ if ( item . IsLastFocusedDocument )
185
+ {
186
+ item . IsActive = true ;
187
+ return ;
188
+ }
189
+ }
190
+ }
191
+ }
192
+ }
193
+ else
194
+ {
195
+ foreach ( var areaHost in areaHosts )
196
+ {
197
+ var model = ( LayoutDocumentPane ) areaHost . Model ;
198
+ for ( var i = 0 ; i < model . Children . Count ; i ++ )
199
+ {
200
+ var item = model . Children [ i ] ;
201
+ if ( item . IsActive )
202
+ {
203
+ item . IsActive = false ;
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+
210
+ /// <inheritdoc />
211
+ protected override IntPtr FilterMessage ( IntPtr hwnd , int msg , IntPtr wParam , IntPtr lParam , ref bool handled )
212
+ {
213
+ switch ( msg )
214
+ {
215
+ case Win32Helper . WM_ACTIVATE :
216
+ var isInactive = ( ( int ) wParam & 0xFFFF ) == Win32Helper . WA_INACTIVE ;
217
+ if ( _model . IsSinglePane )
218
+ {
219
+ ActiveOfSinglePane ( ! isInactive ) ;
131
220
}
221
+ else
222
+ {
223
+ ActiveOfMultiPane ( ! isInactive ) ;
224
+ }
225
+
226
+ handled = true ;
132
227
break ;
133
228
134
229
case Win32Helper . WM_NCRBUTTONUP :
0 commit comments