Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit cf76aff

Browse files
committed
[[ BrowserWidget ]] Add display & parent window params to browser creation functions
[[ BrowserWidget ]] Add widget function to get stack display handle [[ BrowserWidget ]] Make widget display / window functions available to LCB
1 parent 4c5cf25 commit cf76aff

File tree

8 files changed

+41
-24
lines changed

8 files changed

+41
-24
lines changed

engine/src/browser.lcb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public foreign handler MCBrowserLibrarySetWaitFunction(in pWait as Pointer) retu
6161
public foreign handler MCBrowserLibraryGetRunloopCallback(out pCallback as Pointer, out pContext as Pointer) returns CBool binds to "<builtin>"
6262

6363
public foreign handler MCBrowserFactoryGet(in pFactoryId as NativeCString, out rFactory as MCBrowserFactoryRef) returns CBool binds to "<builtin>"
64-
public foreign handler MCBrowserFactoryCreateBrowser(in pFactory as MCBrowserFactoryRef, out rBrowser as MCBrowserRef) returns CBool binds to "<builtin>"
64+
public foreign handler MCBrowserFactoryCreateBrowser(in pFactory as MCBrowserFactoryRef, in pDisplay as Pointer, in pParentView as Pointer, out rBrowser as MCBrowserRef) returns CBool binds to "<builtin>"
6565

6666
public foreign handler MCBrowserRetain(in pBrowser as MCBrowserRef) returns MCBrowserRef binds to "<builtin>"
6767
public foreign handler MCBrowserRelease(in pBrowser as MCBrowserRef) returns nothing binds to "<builtin>"

engine/src/widget.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2456,6 +2456,21 @@ extern "C" MC_DLLEXPORT void MCWidgetEvalStackNativeView(void *&r_native_view)
24562456
r_native_view = MCscreen->GetNativeWindowHandle(MCwidgetobject->getw());
24572457
}
24582458

2459+
extern "C" MC_DLLEXPORT void MCWidgetEvalStackNativeDisplay(void *&r_display)
2460+
{
2461+
if (MCwidgetobject == nil)
2462+
{
2463+
MCWidgetThrowNoCurrentWidgetError();
2464+
return;
2465+
}
2466+
2467+
if (!MCscreen->platform_get_display_handle(r_display))
2468+
{
2469+
// TODO - throw error
2470+
return;
2471+
}
2472+
}
2473+
24592474
////////////////////////////////////////////////////////////////////////////////
24602475

24612476
bool MCErrorCreateNamedTypeInfo(MCNameRef p_domain, MCNameRef p_name, MCStringRef p_message, MCTypeInfoRef &r_error_type)

engine/src/widget.mlc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,9 @@ end syntax
978978

979979
public foreign handler MCWidgetExecGetNativeLayer(out rNativeLayer as Pointer) returns nothing binds to "<builtin>"
980980
public foreign handler MCWidgetExecSetNativeLayer(in pNativeLayer as optional Pointer) returns nothing binds to "<builtin>"
981+
public foreign handler MCWidgetEvalStackNativeView(out rNativeView as Pointer) returns nothing binds to "<builtin>"
982+
public foreign handler MCWidgetEvalStackNativeDisplay(out rDisplay as Pointer) returns nothing binds to "<builtin>"
983+
981984
/*
982985
TODO - docs
983986
*/

extensions/widgets/browser/browser.lcb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,15 +130,22 @@ end handler
130130

131131
public handler OnOpen()
132132
variable tParent as Pointer
133+
/* UNCHECKED */
134+
MCWidgetEvalStackNativeView(tParent)
135+
133136
// TODO - add widget code to get stack window handler
134137
// put my native window into tParent
135138

136139
variable tFactory as MCBrowserFactoryRef
137140
/* UNCHECKED */
138141
MCBrowserFactoryGet(mBrowserType, tFactory)
139142

143+
variable tDisplay as Pointer
144+
/* UNCHECKED */
145+
MCWidgetEvalStackNativeDisplay(tDisplay)
146+
140147
/* UNCHECKED */
141-
MCBrowserFactoryCreateBrowser(tFactory, mBrowser)
148+
MCBrowserFactoryCreateBrowser(tFactory, tDisplay, tParent, mBrowser)
142149

143150
variable tBrowserView as Pointer
144151
/* UNCHECKED */

libbrowser/include/libbrowser.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class MCBrowser : public MCBrowserRefCounted
107107
class MCBrowserFactory : public MCBrowserRefCounted
108108
{
109109
public:
110-
virtual bool CreateBrowser(MCBrowser *&r_browser) = 0;
110+
virtual bool CreateBrowser(void *p_display, void *p_parent_view, MCBrowser *&r_browser) = 0;
111111
};
112112

113113
////////////////////////////////////////////////////////////////////////////////
@@ -187,7 +187,7 @@ typedef struct __MCBrowser *MCBrowserRef;
187187
typedef struct __MCBrowserFactory *MCBrowserFactoryRef;
188188

189189
MC_DLLEXPORT bool MCBrowserFactoryGet(const char *p_factory_id, MCBrowserFactoryRef &r_factory);
190-
MC_DLLEXPORT bool MCBrowserFactoryCreateBrowser(MCBrowserFactoryRef p_factory, MCBrowserRef &r_browser);
190+
MC_DLLEXPORT bool MCBrowserFactoryCreateBrowser(MCBrowserFactoryRef p_factory, void *p_display, void *p_parent_view, MCBrowserRef &r_browser);
191191

192192
MC_DLLEXPORT MCBrowserRef MCBrowserRetain(MCBrowserRef p_browser);
193193
MC_DLLEXPORT void MCBrowserRelease(MCBrowserRef p_browser);

libbrowser/src/libbrowser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,13 @@ bool MCBrowserFactoryGet(const char *p_factory, MCBrowserFactoryRef &r_factory)
145145
return true;
146146
}
147147

148-
bool MCBrowserFactoryCreateBrowser(MCBrowserFactoryRef p_factory, MCBrowserRef &r_browser)
148+
bool MCBrowserFactoryCreateBrowser(MCBrowserFactoryRef p_factory, void *p_display, void *p_parent_window, MCBrowserRef &r_browser)
149149
{
150150
if (p_factory == nil)
151151
return false;
152152

153153
MCBrowser *t_browser;
154-
if (!((MCBrowserFactory*)p_factory)->CreateBrowser(t_browser))
154+
if (!((MCBrowserFactory*)p_factory)->CreateBrowser(p_display, p_parent_window, t_browser))
155155
return false;
156156

157157
r_browser = (MCBrowserRef)t_browser;

libbrowser/src/libbrowser_cef.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,8 @@ class MCCefBrowserClient : public CefClient, CefLifeSpanHandler, CefRequestHandl
609609
if (p_browser->GetIdentifier() == m_browser_id)
610610
{
611611
// Close the browser window
612-
MCCefPlatformCloseBrowserWindow(p_browser);
612+
if (m_owner != nil)
613+
m_owner->PlatformCloseBrowserWindow(p_browser);
613614

614615
// return true to prevent default handling
615616
return true;
@@ -915,14 +916,14 @@ MCCefBrowserBase::~MCCefBrowserBase(void)
915916

916917
////////////////////////////////////////////////////////////////////////////////
917918

918-
MCBrowser *MCCefBrowserInstantiate(void *p_parent_window)
919+
MCBrowser *MCCefBrowserInstantiate(void *p_display, void *p_parent_window)
919920
{
920921
// IM-2014-03-18: [[ revBrowserCEF ]] Make sure cef library is loaded before trying to create browser
921922
if (!MCCefBrowserInitialise())
922923
return nil;
923924

924925
MCCefBrowserBase *t_browser;
925-
if (!MCCefPlatformCreateBrowser(p_parent_window, t_browser))
926+
if (!MCCefPlatformCreateBrowser(p_display, p_parent_window, t_browser))
926927
return nil;
927928

928929
if (!t_browser->Initialize())
@@ -1527,18 +1528,13 @@ bool MCCefBrowserFactory::Initialize()
15271528
return MCCefBrowserInitialise();
15281529
}
15291530

1530-
bool MCCefBrowserFactory::CreateBrowser(MCBrowser *&r_browser)
1531+
bool MCCefBrowserFactory::CreateBrowser(void *p_display, void *p_parent_view, MCBrowser *&r_browser)
15311532
{
1532-
void *t_parent_view;
1533-
t_parent_view = nil;
1534-
1535-
MCWidgetEvalStackNativeView(t_parent_view);
1536-
1537-
if (t_parent_view == nil)
1533+
if (p_parent_view == nil)
15381534
return false;
15391535

15401536
MCBrowser *t_browser;
1541-
t_browser = MCCefBrowserInstantiate(t_parent_view);
1537+
t_browser = MCCefBrowserInstantiate(p_display, p_parent_view);
15421538

15431539
if (t_browser == nil)
15441540
return false;

libbrowser/src/libbrowser_cef.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ class MCCefBrowserBase : public MCBrowserBase
119119
// Platform-specific methods
120120

121121
virtual void PlatformConfigureWindow(CefWindowInfo &r_info) = 0;
122+
virtual void PlatformCloseBrowserWindow(CefRefPtr<CefBrowser> p_browser) = 0;
122123

123124
virtual bool PlatformGetRect(MCBrowserRect &r_rect) = 0;
124125
virtual bool PlatformSetRect(const MCBrowserRect &p_rect) = 0;
@@ -144,7 +145,7 @@ class MCCefBrowserFactory : public MCBrowserFactory
144145
MCCefBrowserFactory();
145146
virtual ~MCCefBrowserFactory();
146147

147-
bool CreateBrowser(MCBrowser *&r_browser) override;
148+
bool CreateBrowser(void *p_display, void *p_parent_view, MCBrowser *&r_browser) override;
148149

149150
//////////
150151

@@ -153,8 +154,7 @@ class MCCefBrowserFactory : public MCBrowserFactory
153154

154155
bool MCCefBrowserFactoryCreate(MCBrowserFactoryRef &r_factory);
155156

156-
bool MCCefPlatformCreateBrowser(void *p_parent_window, MCCefBrowserBase *&r_browser);
157-
void MCCefPlatformCloseBrowserWindow(CefRefPtr<CefBrowser> p_browser);
157+
bool MCCefPlatformCreateBrowser(void *p_display, void *p_parent_window, MCCefBrowserBase *&r_browser);
158158

159159
const char *MCCefPlatformGetSubProcessName(void);
160160

@@ -186,8 +186,4 @@ extern "C" void *MCU_loadmodule(const char *p_source);
186186
extern "C" void MCU_unloadmodule(void *p_module);
187187
extern "C" void *MCU_resolvemodulesymbol(void *p_module, const char *p_symbol);
188188

189-
// Engine hooks
190-
191-
extern "C" void MCWidgetEvalStackNativeView(void *&r_native_view);
192-
193189
#endif /* __LIBBROWSER_CEF_H__ */

0 commit comments

Comments
 (0)