OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/focus/focus_manager.h" | 5 #include "ui/views/focus/focus_manager.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 | 191 |
192 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { | 192 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { |
193 FocusManager* focus_manager = GetFocusManager(); | 193 FocusManager* focus_manager = GetFocusManager(); |
194 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 194 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
195 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); | 195 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); |
196 | 196 |
197 TestAcceleratorTarget return_target(true); | 197 TestAcceleratorTarget return_target(true); |
198 TestAcceleratorTarget escape_target(true); | 198 TestAcceleratorTarget escape_target(true); |
199 EXPECT_EQ(return_target.accelerator_count(), 0); | 199 EXPECT_EQ(return_target.accelerator_count(), 0); |
200 EXPECT_EQ(escape_target.accelerator_count(), 0); | 200 EXPECT_EQ(escape_target.accelerator_count(), 0); |
201 EXPECT_EQ(NULL, | |
202 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
203 EXPECT_EQ(NULL, | |
204 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
205 | 201 |
206 // Register targets. | 202 // Register targets. |
207 focus_manager->RegisterAccelerator(return_accelerator, | 203 focus_manager->RegisterAccelerator(return_accelerator, |
208 ui::AcceleratorManager::kNormalPriority, | 204 ui::AcceleratorManager::kNormalPriority, |
209 &return_target); | 205 &return_target); |
210 focus_manager->RegisterAccelerator(escape_accelerator, | 206 focus_manager->RegisterAccelerator(escape_accelerator, |
211 ui::AcceleratorManager::kNormalPriority, | 207 ui::AcceleratorManager::kNormalPriority, |
212 &escape_target); | 208 &escape_target); |
213 | 209 |
214 // Checks if the correct target is registered. | |
215 EXPECT_EQ(&return_target, | |
216 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
217 EXPECT_EQ(&escape_target, | |
218 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
219 | |
220 // Hitting the return key. | 210 // Hitting the return key. |
221 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 211 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
222 EXPECT_EQ(return_target.accelerator_count(), 1); | 212 EXPECT_EQ(return_target.accelerator_count(), 1); |
223 EXPECT_EQ(escape_target.accelerator_count(), 0); | 213 EXPECT_EQ(escape_target.accelerator_count(), 0); |
224 | 214 |
225 // Hitting the escape key. | 215 // Hitting the escape key. |
226 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 216 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
227 EXPECT_EQ(return_target.accelerator_count(), 1); | 217 EXPECT_EQ(return_target.accelerator_count(), 1); |
228 EXPECT_EQ(escape_target.accelerator_count(), 1); | 218 EXPECT_EQ(escape_target.accelerator_count(), 1); |
229 | 219 |
230 // Register another target for the return key. | 220 // Register another target for the return key. |
231 TestAcceleratorTarget return_target2(true); | 221 TestAcceleratorTarget return_target2(true); |
232 EXPECT_EQ(return_target2.accelerator_count(), 0); | 222 EXPECT_EQ(return_target2.accelerator_count(), 0); |
233 focus_manager->RegisterAccelerator(return_accelerator, | 223 focus_manager->RegisterAccelerator(return_accelerator, |
234 ui::AcceleratorManager::kNormalPriority, | 224 ui::AcceleratorManager::kNormalPriority, |
235 &return_target2); | 225 &return_target2); |
236 EXPECT_EQ(&return_target2, | |
237 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
238 | 226 |
239 // Hitting the return key; return_target2 has the priority. | 227 // Hitting the return key; return_target2 has the priority. |
240 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 228 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
241 EXPECT_EQ(return_target.accelerator_count(), 1); | 229 EXPECT_EQ(return_target.accelerator_count(), 1); |
242 EXPECT_EQ(return_target2.accelerator_count(), 1); | 230 EXPECT_EQ(return_target2.accelerator_count(), 1); |
243 | 231 |
244 // Register a target that does not process the accelerator event. | 232 // Register a target that does not process the accelerator event. |
245 TestAcceleratorTarget return_target3(false); | 233 TestAcceleratorTarget return_target3(false); |
246 EXPECT_EQ(return_target3.accelerator_count(), 0); | 234 EXPECT_EQ(return_target3.accelerator_count(), 0); |
247 focus_manager->RegisterAccelerator(return_accelerator, | 235 focus_manager->RegisterAccelerator(return_accelerator, |
248 ui::AcceleratorManager::kNormalPriority, | 236 ui::AcceleratorManager::kNormalPriority, |
249 &return_target3); | 237 &return_target3); |
250 EXPECT_EQ(&return_target3, | |
251 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
252 | |
253 // Hitting the return key. | 238 // Hitting the return key. |
254 // Since the event handler of return_target3 returns false, return_target2 | 239 // Since the event handler of return_target3 returns false, return_target2 |
255 // should be called too. | 240 // should be called too. |
256 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 241 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
257 EXPECT_EQ(return_target.accelerator_count(), 1); | 242 EXPECT_EQ(return_target.accelerator_count(), 1); |
258 EXPECT_EQ(return_target2.accelerator_count(), 2); | 243 EXPECT_EQ(return_target2.accelerator_count(), 2); |
259 EXPECT_EQ(return_target3.accelerator_count(), 1); | 244 EXPECT_EQ(return_target3.accelerator_count(), 1); |
260 | 245 |
261 // Unregister return_target2. | 246 // Unregister return_target2. |
262 focus_manager->UnregisterAccelerator(return_accelerator, &return_target2); | 247 focus_manager->UnregisterAccelerator(return_accelerator, &return_target2); |
263 EXPECT_EQ(&return_target3, | |
264 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
265 | 248 |
266 // Hitting the return key. return_target3 and return_target should be called. | 249 // Hitting the return key. return_target3 and return_target should be called. |
267 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 250 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
268 EXPECT_EQ(return_target.accelerator_count(), 2); | 251 EXPECT_EQ(return_target.accelerator_count(), 2); |
269 EXPECT_EQ(return_target2.accelerator_count(), 2); | 252 EXPECT_EQ(return_target2.accelerator_count(), 2); |
270 EXPECT_EQ(return_target3.accelerator_count(), 2); | 253 EXPECT_EQ(return_target3.accelerator_count(), 2); |
271 | 254 |
272 // Unregister targets. | 255 // Unregister targets. |
273 focus_manager->UnregisterAccelerator(return_accelerator, &return_target); | 256 focus_manager->UnregisterAccelerator(return_accelerator, &return_target); |
274 focus_manager->UnregisterAccelerator(return_accelerator, &return_target3); | 257 focus_manager->UnregisterAccelerator(return_accelerator, &return_target3); |
275 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target); | 258 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target); |
276 | 259 |
277 // Now there is no target registered. | |
278 EXPECT_EQ(NULL, | |
279 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
280 EXPECT_EQ(NULL, | |
281 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
282 | |
283 // Hitting the return key and the escape key. Nothing should happen. | 260 // Hitting the return key and the escape key. Nothing should happen. |
284 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 261 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
285 EXPECT_EQ(return_target.accelerator_count(), 2); | 262 EXPECT_EQ(return_target.accelerator_count(), 2); |
286 EXPECT_EQ(return_target2.accelerator_count(), 2); | 263 EXPECT_EQ(return_target2.accelerator_count(), 2); |
287 EXPECT_EQ(return_target3.accelerator_count(), 2); | 264 EXPECT_EQ(return_target3.accelerator_count(), 2); |
288 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); | 265 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); |
289 EXPECT_EQ(escape_target.accelerator_count(), 1); | 266 EXPECT_EQ(escape_target.accelerator_count(), 1); |
290 } | 267 } |
291 | 268 |
292 TEST_F(FocusManagerTest, HighPriorityHandlers) { | 269 TEST_F(FocusManagerTest, HighPriorityHandlers) { |
293 FocusManager* focus_manager = GetFocusManager(); | 270 FocusManager* focus_manager = GetFocusManager(); |
294 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); | 271 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); |
295 | 272 |
296 TestAcceleratorTarget escape_target_high(true); | 273 TestAcceleratorTarget escape_target_high(true); |
297 TestAcceleratorTarget escape_target_normal(true); | 274 TestAcceleratorTarget escape_target_normal(true); |
298 EXPECT_EQ(escape_target_high.accelerator_count(), 0); | 275 EXPECT_EQ(escape_target_high.accelerator_count(), 0); |
299 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); | 276 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); |
300 EXPECT_EQ(NULL, | |
301 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
302 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); | 277 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); |
303 | 278 |
304 // Register high priority target. | 279 // Register high priority target. |
305 focus_manager->RegisterAccelerator(escape_accelerator, | 280 focus_manager->RegisterAccelerator(escape_accelerator, |
306 ui::AcceleratorManager::kHighPriority, | 281 ui::AcceleratorManager::kHighPriority, |
307 &escape_target_high); | 282 &escape_target_high); |
308 EXPECT_EQ(&escape_target_high, | |
309 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
310 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 283 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
311 | 284 |
312 // Hit the escape key. | 285 // Hit the escape key. |
313 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 286 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
314 EXPECT_EQ(escape_target_high.accelerator_count(), 1); | 287 EXPECT_EQ(escape_target_high.accelerator_count(), 1); |
315 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); | 288 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); |
316 | 289 |
317 // Add a normal priority target and make sure it doesn't see the key. | 290 // Add a normal priority target and make sure it doesn't see the key. |
318 focus_manager->RegisterAccelerator(escape_accelerator, | 291 focus_manager->RegisterAccelerator(escape_accelerator, |
319 ui::AcceleratorManager::kNormalPriority, | 292 ui::AcceleratorManager::kNormalPriority, |
320 &escape_target_normal); | 293 &escape_target_normal); |
321 | 294 |
322 // Checks if the correct target is registered (same as before, the high | 295 // Checks if the correct target is registered (same as before, the high |
323 // priority one). | 296 // priority one). |
324 EXPECT_EQ(&escape_target_high, | |
325 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
326 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 297 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
327 | 298 |
328 // Hit the escape key. | 299 // Hit the escape key. |
329 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 300 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
330 EXPECT_EQ(escape_target_high.accelerator_count(), 2); | 301 EXPECT_EQ(escape_target_high.accelerator_count(), 2); |
331 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); | 302 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); |
332 | 303 |
333 // Unregister the high priority accelerator. | 304 // Unregister the high priority accelerator. |
334 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); | 305 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); |
335 EXPECT_EQ(&escape_target_normal, | |
336 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
337 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); | 306 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); |
338 | 307 |
339 // Hit the escape key. | 308 // Hit the escape key. |
340 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 309 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
341 EXPECT_EQ(escape_target_high.accelerator_count(), 2); | 310 EXPECT_EQ(escape_target_high.accelerator_count(), 2); |
342 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 311 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
343 | 312 |
344 // Add the high priority target back and make sure it starts seeing the key. | 313 // Add the high priority target back and make sure it starts seeing the key. |
345 focus_manager->RegisterAccelerator(escape_accelerator, | 314 focus_manager->RegisterAccelerator(escape_accelerator, |
346 ui::AcceleratorManager::kHighPriority, | 315 ui::AcceleratorManager::kHighPriority, |
347 &escape_target_high); | 316 &escape_target_high); |
348 EXPECT_EQ(&escape_target_high, | |
349 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
350 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 317 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
351 | 318 |
352 // Hit the escape key. | 319 // Hit the escape key. |
353 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 320 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
354 EXPECT_EQ(escape_target_high.accelerator_count(), 3); | 321 EXPECT_EQ(escape_target_high.accelerator_count(), 3); |
355 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 322 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
356 | 323 |
357 // Unregister the normal priority accelerator. | 324 // Unregister the normal priority accelerator. |
358 focus_manager->UnregisterAccelerator( | 325 focus_manager->UnregisterAccelerator( |
359 escape_accelerator, &escape_target_normal); | 326 escape_accelerator, &escape_target_normal); |
360 EXPECT_EQ(&escape_target_high, | |
361 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
362 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 327 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
363 | 328 |
364 // Hit the escape key. | 329 // Hit the escape key. |
365 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 330 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
366 EXPECT_EQ(escape_target_high.accelerator_count(), 4); | 331 EXPECT_EQ(escape_target_high.accelerator_count(), 4); |
367 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 332 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
368 | 333 |
369 // Unregister the high priority accelerator. | 334 // Unregister the high priority accelerator. |
370 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); | 335 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); |
371 EXPECT_EQ(NULL, | |
372 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
373 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); | 336 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); |
374 | 337 |
375 // Hit the escape key (no change, no targets registered). | 338 // Hit the escape key (no change, no targets registered). |
376 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); | 339 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); |
377 EXPECT_EQ(escape_target_high.accelerator_count(), 4); | 340 EXPECT_EQ(escape_target_high.accelerator_count(), 4); |
378 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 341 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
379 } | 342 } |
380 | 343 |
381 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { | 344 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { |
382 FocusManager* focus_manager = GetFocusManager(); | 345 FocusManager* focus_manager = GetFocusManager(); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 int accelerator_count_; | 405 int accelerator_count_; |
443 | 406 |
444 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget); | 407 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget); |
445 }; | 408 }; |
446 | 409 |
447 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { | 410 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { |
448 FocusManager* focus_manager = GetFocusManager(); | 411 FocusManager* focus_manager = GetFocusManager(); |
449 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 412 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
450 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); | 413 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); |
451 EXPECT_EQ(target.accelerator_count(), 0); | 414 EXPECT_EQ(target.accelerator_count(), 0); |
452 EXPECT_EQ(NULL, | |
453 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
454 | 415 |
455 // Register the target. | 416 // Register the target. |
456 focus_manager->RegisterAccelerator(return_accelerator, | 417 focus_manager->RegisterAccelerator(return_accelerator, |
457 ui::AcceleratorManager::kNormalPriority, | 418 ui::AcceleratorManager::kNormalPriority, |
458 &target); | 419 &target); |
459 EXPECT_EQ(&target, | |
460 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
461 | 420 |
462 // Hitting the return key. The target will be unregistered. | 421 // Hitting the return key. The target will be unregistered. |
463 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 422 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
464 EXPECT_EQ(target.accelerator_count(), 1); | 423 EXPECT_EQ(target.accelerator_count(), 1); |
465 EXPECT_EQ(NULL, | |
466 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
467 | 424 |
468 // Hitting the return key again; nothing should happen. | 425 // Hitting the return key again; nothing should happen. |
469 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 426 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
470 EXPECT_EQ(target.accelerator_count(), 1); | 427 EXPECT_EQ(target.accelerator_count(), 1); |
471 } | 428 } |
472 | 429 |
473 TEST_F(FocusManagerTest, SuspendAccelerators) { | 430 TEST_F(FocusManagerTest, SuspendAccelerators) { |
474 const ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE); | 431 const ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE); |
475 ui::Accelerator accelerator(event.key_code(), event.flags()); | 432 ui::Accelerator accelerator(event.key_code(), event.flags()); |
476 TestAcceleratorTarget target(true); | 433 TestAcceleratorTarget target(true); |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
874 EXPECT_EQ(view1, GetFocusManager()->GetFocusedView()); | 831 EXPECT_EQ(view1, GetFocusManager()->GetFocusedView()); |
875 | 832 |
876 // Allow focus to go to the parent, and focus backwards which should now move | 833 // Allow focus to go to the parent, and focus backwards which should now move |
877 // up |widget_view| (in the parent). | 834 // up |widget_view| (in the parent). |
878 delegate->set_should_advance_focus_to_parent(true); | 835 delegate->set_should_advance_focus_to_parent(true); |
879 GetFocusManager()->AdvanceFocus(true); | 836 GetFocusManager()->AdvanceFocus(true); |
880 EXPECT_EQ(widget_view, GetFocusManager()->GetFocusedView()); | 837 EXPECT_EQ(widget_view, GetFocusManager()->GetFocusedView()); |
881 } | 838 } |
882 | 839 |
883 } // namespace views | 840 } // namespace views |
OLD | NEW |