mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Under ARC (Automatic Reference Counting), assigning to an Objective-C pointer has different semantics than assigning to a void* pointer. This makes it dangerous to treat the same memory address as an Objective-C pointer in some cases and as a "regular C pointer" in other cases. This change removes the conditional type defines and instead uses void* everywhere. Explicit type casting in combination with ARC annotations makes it safe to get typed Objective-C pointers from the void* pointers. This change enables ARC by default in the CEF binary distribution CMake configuration for the cefclient and cefsimple sample applications. It can be disabled by adding `-DOPTION_USE_ARC=Off` to the CMake command line. ARC is not supported when building Chromium due to the substantial number of changes that would be required in the Chromium code base.
94 lines
3.0 KiB
Plaintext
94 lines
3.0 KiB
Plaintext
// Copyright (c) 2015 The Chromium Embedded Framework Authors. All rights
|
|
// reserved. Use of this source code is governed by a BSD-style license that
|
|
// can be found in the LICENSE file.
|
|
|
|
#include "tests/cefclient/browser/browser_window_std_mac.h"
|
|
|
|
#include <Cocoa/Cocoa.h>
|
|
|
|
#include "include/base/cef_logging.h"
|
|
#include "tests/cefclient/browser/client_handler_std.h"
|
|
#include "tests/shared/browser/main_message_loop.h"
|
|
|
|
namespace client {
|
|
|
|
BrowserWindowStdMac::BrowserWindowStdMac(Delegate* delegate,
|
|
const std::string& startup_url)
|
|
: BrowserWindow(delegate) {
|
|
client_handler_ = new ClientHandlerStd(this, startup_url);
|
|
}
|
|
|
|
void BrowserWindowStdMac::CreateBrowser(
|
|
ClientWindowHandle parent_handle,
|
|
const CefRect& rect,
|
|
const CefBrowserSettings& settings,
|
|
CefRefPtr<CefRequestContext> request_context) {
|
|
REQUIRE_MAIN_THREAD();
|
|
|
|
CefWindowInfo window_info;
|
|
window_info.SetAsChild(parent_handle, rect.x, rect.y, rect.width,
|
|
rect.height);
|
|
|
|
CefBrowserHost::CreateBrowser(window_info, client_handler_,
|
|
client_handler_->startup_url(), settings,
|
|
request_context);
|
|
}
|
|
|
|
void BrowserWindowStdMac::GetPopupConfig(CefWindowHandle temp_handle,
|
|
CefWindowInfo& windowInfo,
|
|
CefRefPtr<CefClient>& client,
|
|
CefBrowserSettings& settings) {
|
|
CEF_REQUIRE_UI_THREAD();
|
|
|
|
// The window will be properly sized after the browser is created.
|
|
windowInfo.SetAsChild(temp_handle, 0, 0, 0, 0);
|
|
client = client_handler_;
|
|
}
|
|
|
|
void BrowserWindowStdMac::ShowPopup(ClientWindowHandle parent_handle,
|
|
int x,
|
|
int y,
|
|
size_t width,
|
|
size_t height) {
|
|
REQUIRE_MAIN_THREAD();
|
|
|
|
NSView* browser_view = CAST_CEF_WINDOW_HANDLE_TO_NSVIEW(GetWindowHandle());
|
|
|
|
// Re-parent |browser_view| to |parent_handle|.
|
|
[browser_view removeFromSuperview];
|
|
[CAST_CEF_WINDOW_HANDLE_TO_NSVIEW(parent_handle) addSubview:browser_view];
|
|
|
|
NSSize size = NSMakeSize(static_cast<int>(width), static_cast<int>(height));
|
|
[browser_view setFrameSize:size];
|
|
}
|
|
|
|
void BrowserWindowStdMac::Show() {
|
|
REQUIRE_MAIN_THREAD();
|
|
// Nothing to do here. Chromium internally handles window show/hide.
|
|
}
|
|
|
|
void BrowserWindowStdMac::Hide() {
|
|
REQUIRE_MAIN_THREAD();
|
|
// Nothing to do here. Chromium internally handles window show/hide.
|
|
}
|
|
|
|
void BrowserWindowStdMac::SetBounds(int x, int y, size_t width, size_t height) {
|
|
REQUIRE_MAIN_THREAD();
|
|
// Nothing to do here. Cocoa will size the browser for us.
|
|
}
|
|
|
|
void BrowserWindowStdMac::SetFocus(bool focus) {
|
|
REQUIRE_MAIN_THREAD();
|
|
// Nothing to do here. Chromium internally handles window focus assignment.
|
|
}
|
|
|
|
ClientWindowHandle BrowserWindowStdMac::GetWindowHandle() const {
|
|
REQUIRE_MAIN_THREAD();
|
|
|
|
if (browser_)
|
|
return browser_->GetHost()->GetWindowHandle();
|
|
return NULL;
|
|
}
|
|
|
|
} // namespace client
|