Browse Source

fix hot reloading, add logging

fix-resizing
Wesley Kerfoot 4 years ago
parent
commit
6f0ece1427
  1. 28
      src/nimwin.nim

28
src/nimwin.nim

@ -8,6 +8,10 @@ proc handleBadWindow(display : PDisplay, ev : PXErrorEvent) : cint {.cdecl.} =
# ev.resourceID
0
proc handleIOError(display : PDisplay) : cint {.cdecl.} =
0
template HandleKey(key : TKeySym, body : untyped) : untyped =
block:
if (XLookupKeySym(cast[PXKeyEvent](ev.xkey.addr), 0) == key.cuint):
@ -136,11 +140,19 @@ proc handleProcess(p : Process) =
processChan.send(p.processID)
when isMainModule:
discard "~/.nimwin".expandTilde.existsOrCreateDir
var logFile : File = expandTilde("~/.nimwin/nimwin_log").open(fmWrite)
logFile.writeLine("Starting Nimwin")
var start : TXButtonEvent
var ev : TXEvent
var attr : TXWindowAttributes
let display = getDisplay()
let displayNum = display.DisplayString
logFile.writeLine(fmt"Opened display {displayNum}")
root = DefaultRootWindow(display)
@ -156,6 +168,7 @@ when isMainModule:
var openProcesses = initTable[int, Process]() # hashset of processes
discard XSetErrorHandler(handleBadWindow)
discard XSetIOErrorHandler(handleIOError)
while true:
let processExited = processChan.tryRecv()
@ -189,14 +202,19 @@ when isMainModule:
discard display.XRaiseWindow(windowStack[0].win)
HandleKey(XK_Q):
let displayNum = display.DisplayString
let env : cstringArray = allocCStringArray([fmt"DISPLAY={displayNum}"])
let currentPath = getAppDir()
if fmt"{currentPath}/nimwin".existsFile:
echo fmt"Restarting: executing {currentPath}/nimwin on {displayNum}"
discard execve(fmt"{currentPath}/nimwin".cstring, nil, env)
logFile.writeLine("Trying to restart Nimwin")
logFile.writeLine(fmt"Restarting: executing {currentPath}/nimwin on display={displayNum}")
logFile.flushFile
discard display.XCloseDisplay
let restartResult = execvp(fmt"{currentPath}/nimwin".cstring, nil)
if restartResult == -1:
quit("Failed to restart Nimwin")
elif (ev.theType == ButtonPress) and (ev.xButton.subWindow != None):
discard XGetWindowAttributes(display, ev.xButton.subWindow, attr.addr)

Loading…
Cancel
Save