init
This commit is contained in:
commit
d2743fe41d
22 changed files with 2290 additions and 0 deletions
122
lib/tree/window.lua
Normal file
122
lib/tree/window.lua
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
local Tree
|
||||
local X = require("x")
|
||||
local Util = require("util")
|
||||
local Async = require("async")
|
||||
local Tag = require("tree.tag")
|
||||
|
||||
local function round(n)
|
||||
return math.floor(n+0.5)
|
||||
end
|
||||
|
||||
local Window = {
|
||||
x = 0, y = 0,
|
||||
w = 0, h = 0,
|
||||
bx = 0, by = 0,
|
||||
bw = 0, bh = 0,
|
||||
margin = {top = 0, right = 0, bottom = 0, left = 0},
|
||||
borderWidth = 0
|
||||
}
|
||||
Window.__index = Window
|
||||
function Window.new(id)
|
||||
local window = {
|
||||
id = id,
|
||||
monitor = Tree.focusedMonitor,
|
||||
-- tags = {
|
||||
-- main = Tag.new()
|
||||
-- }
|
||||
}
|
||||
setmetatable(window, Window)
|
||||
return window
|
||||
end
|
||||
function Window:getClass()
|
||||
if self.class == nil then
|
||||
local c1, c2 = X.getProperty(self.id, X.getAtoms("WM_CLASS"), 0, X.AnyPropertyType)
|
||||
if c1 then
|
||||
self.class = {c1, c2}
|
||||
else
|
||||
self.class = false
|
||||
end
|
||||
end
|
||||
return self.class
|
||||
end
|
||||
function Window:getName()
|
||||
self.name = X.getProperty(self.id, X.getAtoms("_NET_WM_NAME"), 0, X.getAtoms("UTF8_STRING"))
|
||||
if not self.name then
|
||||
self.name = X.getProperty(self.id, X.getAtoms("WM_NAME"), 0, X.AnyPropertyType)
|
||||
end
|
||||
return self.name
|
||||
end
|
||||
function Window:float()
|
||||
end
|
||||
function Window:setGeometry(x, y, w, h)
|
||||
if self.x ~= x or self.y ~= y or self.width ~= w or self.h ~= h then
|
||||
self.x, self.y, self.width, self.height = x, y, w, h
|
||||
self:applyGeometry()
|
||||
end
|
||||
-- self.monitor.dirtyGeometry = true
|
||||
-- self.dirtyGeometry = true
|
||||
-- Tree.dirtyGeometry = true
|
||||
-- self.dirtyGeometry = true
|
||||
-- print("set")
|
||||
-- Async.idle(function()
|
||||
-- if self.dirtyGeometry then
|
||||
-- self:applyGeometry()
|
||||
-- end
|
||||
-- print("ran")
|
||||
-- self.dirtyGeometry = false
|
||||
-- end)
|
||||
end
|
||||
function Window:applyGeometry()
|
||||
X.setWindowGeometry(self.id, self.x, self.y, self.width, self.height)
|
||||
end
|
||||
function Window:show()
|
||||
self.visible = true
|
||||
X.mapWindow(self.id)
|
||||
Tree.focusedMonitor:updateTiling()
|
||||
end
|
||||
function Window:hide()
|
||||
self.visible = false
|
||||
X.unmapWindow(self.id)
|
||||
Tree.focusedMonitor:updateTiling()
|
||||
end
|
||||
--* Window:focus() Moves keyboard focus to window, appends it to the focus history (**Tree**.**focusHistory**), and adds the "focused" tag
|
||||
function Window:unmanage()
|
||||
local i = self:getIndex()
|
||||
table.remove(self.monitor.stack, i)
|
||||
if self.focused then
|
||||
Tree.focusedWindow = nil
|
||||
self.focused = nil
|
||||
end
|
||||
Tree.windows[self.id] = nil
|
||||
Tree.focusedMonitor:updateTiling()
|
||||
end
|
||||
function Window:getIndex()
|
||||
return Util.indexOf(self.monitor.stack, self)
|
||||
end
|
||||
function Window:getNext(d)
|
||||
d = d or 1
|
||||
local stack = Tree.focusedMonitor.stack
|
||||
local w = self:getIndex()
|
||||
local i = (((w-1) + d) % #stack) + 1
|
||||
return stack[i]
|
||||
end
|
||||
function Window:focus()
|
||||
self.focused = true
|
||||
if Tree.focusedWindow then
|
||||
Tree.focusedWindow.focused = false
|
||||
end
|
||||
Tree.focusedWindow = self
|
||||
Tree.focusedContainer = self.parent
|
||||
Tree.focusedMonitor.focusedContainer = self.parent
|
||||
X.setInputFocus(self.id)
|
||||
end
|
||||
function Window:getStackIndex()
|
||||
return Util.indexOf(self, self.monitor.stack)
|
||||
end
|
||||
|
||||
function Window.init()
|
||||
Tree = require("tree")
|
||||
end
|
||||
|
||||
return Window
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue