code review 7094060: taowm: when a onscreen window closes, move the most rec... (issue 7094060)

3 views
Skip to first unread message

nige...@golang.org

unread,
Jan 20, 2013, 7:18:50 AM1/20/13
to nige...@golang.org, ta...@googlegroups.com, re...@codereview-hr.appspotmail.com
Reviewers: nigeltao,

Message:
Hello nige...@golang.org (cc: ta...@googlegroups.com),

I'd like you to review this change to
https://code.google.com/p/taowm/


Description:
taowm: when a onscreen window closes, move the most recently used
offscreen window into the freshly vacated frame.

Please review this at https://codereview.appspot.com/7094060/

Affected files:
M taowm/geom.go
M taowm/main.go


Index: taowm/geom.go
===================================================================
--- a/taowm/geom.go
+++ b/taowm/geom.go
@@ -103,6 +103,7 @@
xWin xp.Window
rect xp.Rectangle
name string
+ offscreenSeqNum uint32
hasTransientFor bool
seen bool
selected bool
@@ -437,6 +438,8 @@
[]xp.Rectangle{f.rect}))
}

+var nextOffscreenSeqNum uint32 = 1
+
func (w *window) property(a xp.Atom) string {
p, err := xp.GetProperty(xConn, false, w.xWin, a, xp.GetPropertyTypeAny,
0, 1<<32-1).Reply()
if err != nil {
@@ -486,6 +489,8 @@
0,
}
} else {
+ w.offscreenSeqNum = nextOffscreenSeqNum
+ nextOffscreenSeqNum++
mask = xp.ConfigWindowX | xp.ConfigWindowY
values = []uint32{
uint32(uint16(r.X)),
Index: taowm/main.go
===================================================================
--- a/taowm/main.go
+++ b/taowm/main.go
@@ -199,8 +199,6 @@
if quitting && findWindow(func(w *window) bool { return true }) == nil {
os.Exit(0)
}
- w.link[next].link[prev] = w.link[prev]
- w.link[prev].link[next] = w.link[next]
if w.hasTransientFor {
for {
w1 := findWindow(func(w2 *window) bool { return w2.transientFor == w })
@@ -211,18 +209,31 @@
}
}
if f := w.frame; f != nil {
+ replacement := (*window)(nil)
if w.transientFor != nil && w.transientFor.frame == nil {
- f.window, w.transientFor.frame = w.transientFor, f
- w.transientFor.configure()
+ replacement = w.transientFor
+ } else {
+ bestOffscreenSeqNum := uint32(0)
+ for w1 := w.link[next]; w1 != w; w1 = w1.link[next] {
+ if w1.offscreenSeqNum > bestOffscreenSeqNum && w1.frame == nil {
+ replacement, bestOffscreenSeqNum = w1, w1.offscreenSeqNum
+ }
+ }
+ }
+ if replacement != nil {
+ f.window, replacement.frame = replacement, f
+ replacement.configure()
if p, err := xp.QueryPointer(xConn, rootXWin).Reply(); err != nil {
log.Println(err)
} else if contains(f.rect, p.RootX, p.RootY) {
- focus(w.transientFor)
+ focus(replacement)
}
} else {
f.window = nil
}
}
+ w.link[next].link[prev] = w.link[prev]
+ w.link[prev].link[next] = w.link[next]
*w = window{}
makeLists()
pulseChan <- time.Now()


nige...@golang.org

unread,
Jan 20, 2013, 7:19:36 AM1/20/13
to nige...@golang.org, ta...@googlegroups.com, re...@codereview-hr.appspotmail.com
*** Submitted as
https://code.google.com/p/taowm/source/detail?r=03c848a1ebe3 ***

taowm: when a onscreen window closes, move the most recently used
offscreen window into the freshly vacated frame.

R=nigeltao
CC=taowm
https://codereview.appspot.com/7094060


https://codereview.appspot.com/7094060/
Reply all
Reply to author
Forward
0 new messages