mirror of https://github.com/adamdruppe/arsd.git
more webview support and lld-link compat hacks
This commit is contained in:
parent
77bc2828c3
commit
7f31dfbace
62
minigui.d
62
minigui.d
|
@ -327,6 +327,9 @@ version(Windows) {
|
||||||
}
|
}
|
||||||
|
|
||||||
version(Windows) {
|
version(Windows) {
|
||||||
|
version(minigui_manifest) {} else version=minigui_no_manifest;
|
||||||
|
|
||||||
|
version(minigui_no_manifest) {} else
|
||||||
static if(__VERSION__ >= 2_083)
|
static if(__VERSION__ >= 2_083)
|
||||||
version(CRuntime_Microsoft) { // FIXME: mingw?
|
version(CRuntime_Microsoft) { // FIXME: mingw?
|
||||||
// assume we want commctrl6 whenever possible since there's really no reason not to
|
// assume we want commctrl6 whenever possible since there's really no reason not to
|
||||||
|
@ -4204,6 +4207,19 @@ template classStaticallyEmits(This, EventType) {
|
||||||
class NestedChildWindowWidget : Widget {
|
class NestedChildWindowWidget : Widget {
|
||||||
SimpleWindow win;
|
SimpleWindow win;
|
||||||
|
|
||||||
|
/++
|
||||||
|
Used on X to send focus to the appropriate child window when requested by the window manager.
|
||||||
|
|
||||||
|
Normally returns its own nested window. Can also return another child or null to revert to the parent
|
||||||
|
if you override it in a child class.
|
||||||
|
|
||||||
|
History:
|
||||||
|
Added April 2, 2022 (dub v10.8)
|
||||||
|
+/
|
||||||
|
SimpleWindow focusableWindow() {
|
||||||
|
return win;
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
// win = new SimpleWindow(640, 480, null, OpenGlOptions.yes, Resizability.automaticallyScaleIfPossible, WindowTypes.nestedChild, WindowFlags.normal, getParentWindow(parent));
|
// win = new SimpleWindow(640, 480, null, OpenGlOptions.yes, Resizability.automaticallyScaleIfPossible, WindowTypes.nestedChild, WindowFlags.normal, getParentWindow(parent));
|
||||||
this(SimpleWindow win, Widget parent) {
|
this(SimpleWindow win, Widget parent) {
|
||||||
|
@ -4236,6 +4252,18 @@ class NestedChildWindowWidget : Widget {
|
||||||
return pwin;
|
return pwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/++
|
||||||
|
Called upon the nested window being destroyed.
|
||||||
|
Remember the window has already been destroyed at
|
||||||
|
this point, so don't use the native handle for anything.
|
||||||
|
|
||||||
|
History:
|
||||||
|
Added April 3, 2022 (dub v10.8)
|
||||||
|
+/
|
||||||
|
protected void dispose() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected void windowsetup(SimpleWindow w) {
|
protected void windowsetup(SimpleWindow w) {
|
||||||
/*
|
/*
|
||||||
win.onFocusChange = (bool getting) {
|
win.onFocusChange = (bool getting) {
|
||||||
|
@ -4244,6 +4272,23 @@ class NestedChildWindowWidget : Widget {
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/+
|
||||||
|
win.onFocusChange = (bool getting) {
|
||||||
|
if(getting) {
|
||||||
|
this.parentWindow.focusedWidget = this;
|
||||||
|
this.emit!FocusEvent();
|
||||||
|
this.emit!FocusInEvent();
|
||||||
|
} else {
|
||||||
|
this.emit!BlurEvent();
|
||||||
|
this.emit!FocusOutEvent();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
+/
|
||||||
|
|
||||||
|
win.onDestroyed = () {
|
||||||
|
this.dispose();
|
||||||
|
};
|
||||||
|
|
||||||
version(win32_widgets) {
|
version(win32_widgets) {
|
||||||
Widget.nativeMapping[win.hwnd] = this;
|
Widget.nativeMapping[win.hwnd] = this;
|
||||||
this.originalWindowProcedure = cast(WNDPROC) SetWindowLongPtr(win.hwnd, GWL_WNDPROC, cast(size_t) &HookedWndProc);
|
this.originalWindowProcedure = cast(WNDPROC) SetWindowLongPtr(win.hwnd, GWL_WNDPROC, cast(size_t) &HookedWndProc);
|
||||||
|
@ -4259,8 +4304,7 @@ class NestedChildWindowWidget : Widget {
|
||||||
parentWindow.dispatchMouseEvent(e);
|
parentWindow.dispatchMouseEvent(e);
|
||||||
},
|
},
|
||||||
(KeyEvent e) {
|
(KeyEvent e) {
|
||||||
//import std.stdio;
|
//import std.stdio; writefln("%s %x %s", cast(void*) win, cast(uint) e.key, e.key);
|
||||||
//writefln("%x %s", cast(uint) e.key, e.key);
|
|
||||||
parentWindow.dispatchKeyEvent(e);
|
parentWindow.dispatchKeyEvent(e);
|
||||||
},
|
},
|
||||||
(dchar e) {
|
(dchar e) {
|
||||||
|
@ -7926,11 +7970,21 @@ class Window : Widget {
|
||||||
if(Runtime.args.length)
|
if(Runtime.args.length)
|
||||||
title = Runtime.args[0];
|
title = Runtime.args[0];
|
||||||
}
|
}
|
||||||
win = new SimpleWindow(width, height, title, OpenGlOptions.no, Resizability.allowResizing, WindowTypes.normal, WindowFlags.dontAutoShow);
|
win = new SimpleWindow(width, height, title, OpenGlOptions.no, Resizability.allowResizing, WindowTypes.normal, WindowFlags.dontAutoShow | WindowFlags.managesChildWindowFocus);
|
||||||
|
|
||||||
|
win.setRequestedInputFocus = &this.setRequestedInputFocus;
|
||||||
|
|
||||||
this(win);
|
this(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SimpleWindow setRequestedInputFocus() {
|
||||||
|
if(auto fw = cast(NestedChildWindowWidget) focusedWidget) {
|
||||||
|
// sdpyPrintDebugString("heaven");
|
||||||
|
return fw.focusableWindow;
|
||||||
|
}
|
||||||
|
return win;
|
||||||
|
}
|
||||||
|
|
||||||
/// ditto
|
/// ditto
|
||||||
this(string title, int width = 500, int height = 500) {
|
this(string title, int width = 500, int height = 500) {
|
||||||
this(width, height, title);
|
this(width, height, title);
|
||||||
|
@ -9715,7 +9769,7 @@ class MenuBar : Widget {
|
||||||
Status bars appear at the bottom of a MainWindow.
|
Status bars appear at the bottom of a MainWindow.
|
||||||
They are made out of Parts, with a width and content.
|
They are made out of Parts, with a width and content.
|
||||||
|
|
||||||
They can have multiple parts or be in simple mode. FIXME: implement
|
They can have multiple parts or be in simple mode. FIXME: implement simple mode.
|
||||||
|
|
||||||
|
|
||||||
sb.parts[0].content = "Status bar text!";
|
sb.parts[0].content = "Status bar text!";
|
||||||
|
|
Loading…
Reference in New Issue