initial import
[vuplus_webkit] / Source / WebCore / page / mac / ChromeMac.mm
1 /*
2  * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19
20 #import "config.h"
21 #import "Chrome.h"
22
23 #import "BlockExceptions.h"
24 #import "ChromeClient.h"
25
26 namespace WebCore {
27
28
29 void Chrome::focusNSView(NSView* view)
30 {
31     BEGIN_BLOCK_OBJC_EXCEPTIONS;
32
33     // Handle the WK2 case where there is no view passed in.
34     if (!view) {
35         client()->makeFirstResponder();
36         return;
37     }
38     
39     NSResponder *firstResponder = client()->firstResponder();
40     if (firstResponder == view)
41         return;
42
43     if (![view window] || ![view superview] || ![view acceptsFirstResponder])
44         return;
45
46     client()->makeFirstResponder(view);
47
48     // Setting focus can actually cause a style change which might
49     // remove the view from its superview while it's being made
50     // first responder. This confuses AppKit so we must restore
51     // the old first responder.
52     if (![view superview])
53         client()->makeFirstResponder(firstResponder);
54
55     END_BLOCK_OBJC_EXCEPTIONS;
56 }
57
58 } // namespace WebCore