more helpers for x migration stuff

This commit is contained in:
Adam D. Ruppe 2017-04-07 19:09:07 -04:00
parent 922635a5dd
commit 29789f61bf
2 changed files with 27 additions and 0 deletions

View File

@ -1131,6 +1131,13 @@ class Widget {
foreach(child; children)
child.discardXConnectionState();
}
void recreateXConnectionState() {
foreach(child; children)
child.discardXConnectionState();
redraw();
}
}
///
@ -2482,6 +2489,12 @@ class Window : Widget {
///
this(SimpleWindow win) {
static if(UsingSimpledisplayX11) {
win.discardAdditionalConnectionState = &discardXConnectionState;
win.recreateAdditionalConnectionState = &recreateXConnectionState;
}
tabStop = false;
super(null);
this.win = win;

View File

@ -1073,15 +1073,29 @@ class SimpleWindow : CapableOfHandlingNativeEvent {
if(_parent !is null && _parent.stateDiscarded)
_parent.recreateAfterDisconnect();
bool wasHidden = hidden;
activeScreenPainter = null; // should already be done but just to confirm
impl.createWindow(_width, _height, _title, openglMode, _parent);
if(recreateAdditionalConnectionState)
recreateAdditionalConnectionState();
hidden = wasHidden;
}
bool stateDiscarded;
void discardConnectionState() {
if(XDisplayConnection.display)
impl.dispose(); // if display is already null, it is hopeless to try to destroy stuff on it anyway
if(discardAdditionalConnectionState)
discardAdditionalConnectionState();
stateDiscarded = true;
}
void delegate() discardAdditionalConnectionState;
void delegate() recreateAdditionalConnectionState;
}