Skip to content

Commit 87cc741

Browse files
committed
Fix phpdesktop.ToggleFullscreen()
1 parent 9cecffe commit 87cc741

File tree

7 files changed

+29
-19
lines changed

7 files changed

+29
-19
lines changed

cef/app.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ bool App::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
3535
CefRefPtr<CefFrame> frame,
3636
CefProcessId source_process,
3737
CefRefPtr<CefProcessMessage> message) {
38-
LOGGER_DEBUG << "renderer[" << browser->GetIdentifier() << "] "
39-
<< "OnProcessMessageReceived: " << message->GetName().ToString();
38+
LOGGER_DEBUG << "V8 renderer[" << browser->GetIdentifier() << "] "
39+
<< "received process message: " << message->GetName().ToString();
4040
if (message->GetName() == "SetIsFullscreen") {
4141
CefRefPtr<CefListValue> args = message->GetArgumentList();
4242
bool isFullscreen = args->GetBool(0);
@@ -62,7 +62,7 @@ void App::OnContextCreated(CefRefPtr<CefBrowser> browser,
6262
CefRefPtr<CefFrame> frame,
6363
CefRefPtr<CefV8Context> context) {
6464
// RENDERER PROCESS.
65-
LOGGER_DEBUG << "V8 context created";
65+
LOGGER_DEBUG << "V8 context created, in context: " << CefV8Context::InContext();
6666
CefRefPtr<CefV8Value> window = context->GetGlobal();
6767
CefRefPtr<CefV8Handler> handler = GetJavascriptApi(browser);
6868
if (!handler.get()) {
@@ -95,16 +95,16 @@ void App::OnContextCreated(CefRefPtr<CefBrowser> browser,
9595
///
9696
/*--cef()--*/
9797
void App::OnBrowserCreated(CefRefPtr<CefBrowser> browser, CefRefPtr<CefDictionaryValue> extra_info) {
98-
LOGGER_DEBUG << "OnBrowserCreated()";
99-
StoreJavascriptApi(browser, new JavascriptApi(browser));
98+
LOGGER_DEBUG << "V8 browser was created";
99+
StoreJavascriptApi(browser, new JavascriptApi());
100100
}
101101

102102
///
103103
// Called before a browser is destroyed.
104104
///
105105
/*--cef()--*/
106106
void App::OnBrowserDestroyed(CefRefPtr<CefBrowser> browser) {
107-
LOGGER_DEBUG << "OnBrowserDestroyed()";
107+
LOGGER_DEBUG << "V8 browser was destroyed";
108108
RemoveJavascriptApi(browser);
109109
}
110110

cef/browser_window.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void StoreBrowserWindow(HWND hwnd, BrowserWindow* browser) {
6969
}
7070
}
7171
void RemoveBrowserWindow(HWND hwnd) {
72-
LOGGER_DEBUG << "RemoveBrowserWindow(): hwnd = " << (uintptr_t) hwnd;
72+
LOGGER_DEBUG << "Remove browser window, hwnd = " << (uintptr_t) hwnd;
7373
BrowserWindow* browser = GetBrowserWindow(hwnd);
7474
if (!browser) {
7575
LOGGER_WARNING << "RemoveBrowserWindow() failed: "
@@ -138,6 +138,7 @@ void BrowserWindow::SetCefBrowser(CefRefPtr<CefBrowser> cefBrowser) {
138138
CefRefPtr<CefProcessMessage> message = \
139139
CefProcessMessage::Create("SetIsFullscreen");
140140
message->GetArgumentList()->SetBool(0, fullscreen_->IsFullscreen());
141+
LOGGER_DEBUG << "Send process message to V8: SetIsFullscreen";
141142
cefBrowser->GetMainFrame()->SendProcessMessage(PID_RENDERER, message);
142143
}
143144
}

cef/client_handler.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ bool ClientHandler::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
7272
CefProcessId source_process,
7373
CefRefPtr<CefProcessMessage> message) {
7474
LOGGER_DEBUG << "browser[" << browser->GetIdentifier() << "] "
75-
<< "OnProcessMessageReceived: " << message->GetName().ToString();
75+
<< "received process message: " << message->GetName().ToString();
7676
if (message->GetName() == "ToggleFullscreen") {
7777
BrowserWindow* browserWindow = GetBrowserWindow(\
7878
browser->GetHost()->GetWindowHandle());
@@ -174,11 +174,11 @@ void ClientHandler::OnAfterCreated(CefRefPtr<CefBrowser> cefBrowser) {
174174
///
175175
void ClientHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
176176
REQUIRE_UI_THREAD();
177-
LOGGER_DEBUG << "OnBeforeClose() hwnd="
177+
LOGGER_DEBUG << "Before browser is closed, hwnd="
178178
<< (uintptr_t) browser->GetHost()->GetWindowHandle();
179179
RemoveBrowserWindow(browser->GetHost()->GetWindowHandle());
180180
if (g_browserWindows.empty()) {
181-
LOGGER_DEBUG << "Calling CefQuitMessageLoop()";
181+
LOGGER_DEBUG << "Quit CEF message loop";
182182
CefQuitMessageLoop();
183183
}
184184
}

cef/fullscreen.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ void Fullscreen::ToggleFullscreen() {
1818
}
1919
HWND hwnd = browserWindow->GetWindowHandle();
2020
if (!isFullscreen_) {
21+
LOGGER_DEBUG << "Toggle fullscreen On";
2122
isMaximized_ = (IsZoomed(hwnd) != 0);
2223
if (isMaximized_) {
2324
SendMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
@@ -49,6 +50,7 @@ void Fullscreen::ToggleFullscreen() {
4950
left, top, right-left, bottom-top,
5051
SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
5152
} else {
53+
LOGGER_DEBUG << "Toggle fullscreen Off";
5254
SetWindowLong(hwnd, GWL_STYLE, gwlStyle_);
5355
SetWindowLong(hwnd, GWL_EXSTYLE, gwlExStyle_);
5456
RECT rect = windowRect_;

cef/javascript_api.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,27 @@
44

55
#include "javascript_api.h"
66
#include "../version.h"
7+
#include "../logger.h"
78

89
bool JavascriptApi::Execute(const CefString& name,
910
CefRefPtr<CefV8Value> object,
1011
const CefV8ValueList& arguments,
1112
CefRefPtr<CefV8Value>& retval,
1213
CefString& exception) {
14+
LOGGER_DEBUG << "V8 execute phpdesktop object method: " << name;
1315
if (name == "GetVersion") {
1416
retval = CefV8Value::CreateString(GetPhpDesktopVersion());
1517
return true;
1618
} else if (name == "ToggleFullscreen") {
17-
CefRefPtr<CefProcessMessage> message = \
18-
CefProcessMessage::Create("ToggleFullscreen");
19-
cefBrowser_->GetMainFrame()->SendProcessMessage(PID_BROWSER, message);
20-
isFullscreen_ = !(isFullscreen_);
19+
CefRefPtr<CefProcessMessage> message = CefProcessMessage::Create("ToggleFullscreen");
20+
if (message->IsValid()) {
21+
// Browser object must be obtained using current context, cannot use previously stored object.
22+
CefRefPtr<CefV8Context> context = CefV8Context::GetCurrentContext();
23+
context->GetBrowser()->GetMainFrame()->SendProcessMessage(PID_BROWSER, message);
24+
isFullscreen_ = !(isFullscreen_);
25+
} else {
26+
LOGGER_ERROR << "V8 could not create process message: ToggleFullscreen";
27+
}
2128
return true;
2229
} else if (name == "IsFullscreen") {
2330
retval = CefV8Value::CreateBool(isFullscreen_);

cef/javascript_api.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111
class JavascriptApi : public CefV8Handler
1212
{
1313
public:
14-
JavascriptApi(CefRefPtr<CefBrowser> cefBrowser)
15-
: cefBrowser_(cefBrowser),
16-
isFullscreen_(false)
14+
JavascriptApi()
15+
: isFullscreen_(false)
1716
{
1817
}
1918

@@ -28,7 +27,9 @@ class JavascriptApi : public CefV8Handler
2827
}
2928

3029
protected:
31-
CefRefPtr<CefBrowser> cefBrowser_;
30+
// Can't store CefBrowser object in CefV8Handler as it won't work properly when sending process message.
31+
// Issue reported here: https://magpcss.org/ceforum/viewtopic.php?f=6&t=20040
32+
3233
bool isFullscreen_;
3334

3435
private:

main.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,6 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
391391
#endif
392392

393393
CefInitialize(main_args, cef_settings, app.get(), sandbox_info);
394-
LOGGER_DEBUG << "nCmdShow=" << nCmdShow;
395394
CefRunMessageLoop();
396395
CefShutdown();
397396

0 commit comments

Comments
 (0)