magreenblatt wrote:In cefclient you could use RootWindowManager.
thanks.
I implemented as below, and verified it is working as expected for the time being.
- Code: Select all
void ClientHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
#ifdef APP_EXT
MainContext::Get()->GetRootWindowManager()->CloseBrowser(browser);
#endif
}
void RootWindowManager::OnBrowserCreated(RootWindow* root_window,
CefRefPtr<CefBrowser> browser) {
#ifdef APP_EXT
// Add to the list of existing browsers.
if (browser->IsPopup())
browser_list_.push_back(browser);
#endif
}
#ifdef APP_EXT
void RootWindowManager::CloseBrowser(CefRefPtr<CefBrowser> browser) {
// if it is main window
if (!browser->IsPopup()) {
// Remove from the list of existing browsers.
BrowserList::iterator bit = browser_list_.begin();
for (; bit != browser_list_.end(); ++bit) {
(*bit)->GetHost()->CloseBrowser(false);
browser_list_.erase(bit);
}
return;
}
// if it is pop window
BrowserList::iterator bit = browser_list_.begin();
for (; bit != browser_list_.end(); ++bit) {
if ((*bit)->IsSame(browser)) {
browser_list_.erase(bit);
break;
}
}
}
#endif
I use !browser->IsPopup() to judge if it is main window or popup window, that is, there are two kinds of window in total for cef3, right?
if not, what's the right way to detect main window, pop up window, or etc?
thanks