Browse Source

set _NET_ACTIVE_WINDOW on the root window when focus changes

master
Wesley Kerfoot 4 years ago
parent
commit
e20c44e016
  1. 22
      src/nimwin.nim

22
src/nimwin.nim

@ -452,6 +452,23 @@ proc deleteWindow(display : PDisplay, window : Window) =
else:
discard display.XDestroyWindow(window.win)
proc setActiveWindow(display : PDisplay, root : TWindow, window : PWindow) =
let netActiveWindow : TAtom = display.XInternAtom("_NET_ACTIVE_WINDOW", false.TBool)
let windowType : TAtom = display.XInternAtom("WINDOW", false.TBool)
discard display.XChangeProperty(root, netActiveWindow, windowType, 32, PropModeReplace, cast[ptr cuchar](window), 1)
proc getActiveWindowName(display : PDisplay, root : TWindow) : Option[string] =
var winNameReturn : cstring
for prop in getProperties(display, root):
if prop.isSome and prop.get.kind == pkWindow and prop.get.name == "_NET_ACTIVE_WINDOW":
if prop.get.windowProps.len > 0:
discard display.XFetchName(prop.get.windowProps[0], winNameReturn.addr)
result = cstringToNim(winNameReturn)
discard winNameReturn.XFree
when isMainModule:
discard "~/.nimwin".expandTilde.existsOrCreateDir
@ -598,6 +615,11 @@ when isMainModule:
windowZipper.rhs = windowStack.reversed
windowZipper.lhs = @[]
if currentFocus.isSome:
var focus = currentFocus.get
display.setActiveWindow(root, focus.addr)
echo display.getActiveWindowName(root)
elif (ev.theType == MapNotify) and (ev.xmap.override_redirect == 0):
let rootAttrs = getAttributes(display, root.addr)
if rootAttrs.isSome:

Loading…
Cancel
Save