- Fix initial state of the |is_showing_| flag in CefRenderWidgetHostViewOSR (issue #1363).
- Windows: Modify the cefclient OSR example to call WasHidden(true) when the app is minimized. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1818 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
parent
0b78461f5b
commit
df2242aff2
|
@ -155,7 +155,7 @@ CefRenderWidgetHostViewOSR::CefRenderWidgetHostViewOSR(
|
||||||
render_widget_host_(content::RenderWidgetHostImpl::From(widget)),
|
render_widget_host_(content::RenderWidgetHostImpl::From(widget)),
|
||||||
parent_host_view_(NULL),
|
parent_host_view_(NULL),
|
||||||
popup_host_view_(NULL),
|
popup_host_view_(NULL),
|
||||||
is_showing_(false),
|
is_showing_(true),
|
||||||
is_destroyed_(false),
|
is_destroyed_(false),
|
||||||
#if defined(OS_MACOSX)
|
#if defined(OS_MACOSX)
|
||||||
text_input_context_osr_mac_(NULL),
|
text_input_context_osr_mac_(NULL),
|
||||||
|
|
|
@ -18,7 +18,13 @@
|
||||||
#include "cefclient/string_util.h"
|
#include "cefclient/string_util.h"
|
||||||
|
|
||||||
CefRefPtr<ClientHandler> g_handler;
|
CefRefPtr<ClientHandler> g_handler;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
CefRefPtr<CefCommandLine> g_command_line;
|
CefRefPtr<CefCommandLine> g_command_line;
|
||||||
|
int g_offscreen_state = 0;
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
CefRefPtr<CefBrowser> AppGetBrowser() {
|
CefRefPtr<CefBrowser> AppGetBrowser() {
|
||||||
if (!g_handler.get())
|
if (!g_handler.get())
|
||||||
|
@ -78,11 +84,15 @@ void AppGetBrowserSettings(CefBrowserSettings& settings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AppIsOffScreenRenderingEnabled() {
|
bool AppIsOffScreenRenderingEnabled() {
|
||||||
DCHECK(g_command_line.get());
|
if (g_offscreen_state == 0) {
|
||||||
if (!g_command_line.get())
|
// Store the value so it isn't queried multiple times.
|
||||||
return false;
|
DCHECK(g_command_line.get());
|
||||||
|
g_offscreen_state =
|
||||||
|
g_command_line->HasSwitch(cefclient::kOffScreenRenderingEnabled) ?
|
||||||
|
1 : 2;
|
||||||
|
}
|
||||||
|
|
||||||
return g_command_line->HasSwitch(cefclient::kOffScreenRenderingEnabled);
|
return (g_offscreen_state == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunGetSourceTest(CefRefPtr<CefBrowser> browser) {
|
void RunGetSourceTest(CefRefPtr<CefBrowser> browser) {
|
||||||
|
|
|
@ -192,6 +192,16 @@ void OSRWindow::Invalidate() {
|
||||||
kRenderDelay);
|
kRenderDelay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OSRWindow::WasHidden(bool hidden) {
|
||||||
|
if (hidden == hidden_)
|
||||||
|
return;
|
||||||
|
CefRefPtr<CefBrowser> browser = browser_provider_->GetBrowser();
|
||||||
|
if (!browser)
|
||||||
|
return;
|
||||||
|
browser->GetHost()->WasHidden(hidden);
|
||||||
|
hidden_ = hidden;
|
||||||
|
}
|
||||||
|
|
||||||
CefBrowserHost::DragOperationsMask
|
CefBrowserHost::DragOperationsMask
|
||||||
OSRWindow::OnDragEnter(CefRefPtr<CefDragData> drag_data,
|
OSRWindow::OnDragEnter(CefRefPtr<CefDragData> drag_data,
|
||||||
CefMouseEvent ev,
|
CefMouseEvent ev,
|
||||||
|
@ -226,9 +236,10 @@ OSRWindow::OSRWindow(OSRBrowserProvider* browser_provider, bool transparent)
|
||||||
hWnd_(NULL),
|
hWnd_(NULL),
|
||||||
hDC_(NULL),
|
hDC_(NULL),
|
||||||
hRC_(NULL),
|
hRC_(NULL),
|
||||||
|
current_drag_op_(DRAG_OPERATION_NONE),
|
||||||
painting_popup_(false),
|
painting_popup_(false),
|
||||||
render_task_pending_(false),
|
render_task_pending_(false),
|
||||||
current_drag_op_(DRAG_OPERATION_NONE) {
|
hidden_(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
OSRWindow::~OSRWindow() {
|
OSRWindow::~OSRWindow() {
|
||||||
|
|
|
@ -87,6 +87,7 @@ class OSRWindow : public ClientHandler::RenderHandler,
|
||||||
CefBrowserHost::DragOperationsMask effect) OVERRIDE;
|
CefBrowserHost::DragOperationsMask effect) OVERRIDE;
|
||||||
|
|
||||||
void Invalidate();
|
void Invalidate();
|
||||||
|
void WasHidden(bool hidden);
|
||||||
|
|
||||||
static int GetCefKeyboardModifiers(WPARAM wparam, LPARAM lparam);
|
static int GetCefKeyboardModifiers(WPARAM wparam, LPARAM lparam);
|
||||||
static int GetCefMouseModifiers(WPARAM wparam);
|
static int GetCefMouseModifiers(WPARAM wparam);
|
||||||
|
@ -119,6 +120,7 @@ class OSRWindow : public ClientHandler::RenderHandler,
|
||||||
|
|
||||||
bool painting_popup_;
|
bool painting_popup_;
|
||||||
bool render_task_pending_;
|
bool render_task_pending_;
|
||||||
|
bool hidden_;
|
||||||
|
|
||||||
IMPLEMENT_REFCOUNTING(OSRWindow);
|
IMPLEMENT_REFCOUNTING(OSRWindow);
|
||||||
};
|
};
|
||||||
|
|
|
@ -597,15 +597,26 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
// Minimizing resizes the window to 0x0 which causes our layout to go all
|
if (!g_handler.get())
|
||||||
// screwy, so we just ignore it.
|
break;
|
||||||
if (wParam != SIZE_MINIMIZED && g_handler.get() &&
|
|
||||||
g_handler->GetBrowser()) {
|
// Mark the off-screen browser as hidden when the frame window is
|
||||||
|
// minimized to reduce resource usage.
|
||||||
|
if (AppIsOffScreenRenderingEnabled()) {
|
||||||
|
CefRefPtr<OSRWindow> osr_window =
|
||||||
|
static_cast<OSRWindow*>(g_handler->GetOSRHandler().get());
|
||||||
|
if (osr_window)
|
||||||
|
osr_window->WasHidden(wParam == SIZE_MINIMIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't resize the window if minimizing because the resulting size of 0x0
|
||||||
|
// causes the layout to go all screwy.
|
||||||
|
if (wParam != SIZE_MINIMIZED && g_handler->GetBrowser()) {
|
||||||
|
// Retrieve the window handle (parent window with off-screen rendering).
|
||||||
CefWindowHandle hwnd =
|
CefWindowHandle hwnd =
|
||||||
g_handler->GetBrowser()->GetHost()->GetWindowHandle();
|
g_handler->GetBrowser()->GetHost()->GetWindowHandle();
|
||||||
if (hwnd) {
|
if (hwnd) {
|
||||||
// Resize the browser window and address bar to match the new frame
|
// Resize the window and address bar to match the new frame size.
|
||||||
// window size
|
|
||||||
RECT rect;
|
RECT rect;
|
||||||
GetClientRect(hWnd, &rect);
|
GetClientRect(hWnd, &rect);
|
||||||
rect.top += URLBAR_HEIGHT;
|
rect.top += URLBAR_HEIGHT;
|
||||||
|
|
Loading…
Reference in New Issue