On Sun, Jan 15, 2012 at 9:26 PM, Uli Schlachter <psyc...@znc.in> wrote:
> Heh. First two patches are merged.

Cool.

> For the third one:
>>  local client = require("awful.client")
>> +local screen = require("awful.screen")
[...]
>>  function no_offscreen(c)
>>      local c = c or capi.client.focus
>>      local geometry = c:geometry()
>> +    local screen   = c.screen or screen.getbycoord(geometry.x, geometry.y)
>
> We now have two variables named screen, the global one and the local one. Also
> "local foo = bar or foo.foobar()" looks weird.
>
> However, I don't have any ideas how to change that. The best I can think of is
> "local a_screen = require("awful.screen")" instead of the above version.

I went with that since that seems to be the convention.

>> +    local cls = client.visible(screen)
>
> Uhm, what?! This doesn't look like it has any chance of not erroring out.

Oops. This is why I waited to get a snack before sending the patch
series; I intended to review and hopefully catch this silly error. But
seeing your mail the first thing when I got back, I couldn't resist.

> (client.visible() will call capi.client.get(screen) and the C code will 
> complain
> that awful.screen is not a screen object)

You mean index, not screen object, right?

> Search and replace error?

Yep :-|. My tooltip was working, so that lowered my guards too.

Fixed in the attached patch.

git fetch origin isn't returning anything. You messaged too early?
Or server issues?

-- 
Anurag Priyam
From 44d6903d983d1690a5e6725409075e415ffa9472 Mon Sep 17 00:00:00 2001
From: Anurag Priyam <anurag08pri...@gmail.com>
Date: Sun, 15 Jan 2012 16:27:47 +0530
Subject: [PATCH] awful.placement: can now operate on any object with a set
 geometry

So the utility of `awful.placement` is not merely limited to client objects,
but also to wiboxes.

[us: use appropriate naming convention; catch misplaced statement]

Signed-off-by: Anurag Priyam <anurag08pri...@gmail.com>
---
 lib/awful/placement.lua.in |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/lib/awful/placement.lua.in b/lib/awful/placement.lua.in
index fa3d37b..9520faa 100644
--- a/lib/awful/placement.lua.in
+++ b/lib/awful/placement.lua.in
@@ -17,6 +17,7 @@ local capi =
 }
 local client = require("awful.client")
 local layout = require("awful.layout")
+local a_screen = require("awful.screen")
 
 --- Places client according to special criteria.
 module("awful.placement")
@@ -105,8 +106,9 @@ end
 function no_offscreen(c)
     local c = c or capi.client.focus
     local geometry = c:geometry()
+    local screen   = c.screen or a_screen.getbycoord(geometry.x, geometry.y)
     local border = c.border_width
-    local screen_geometry = capi.screen[c.screen].workarea
+    local screen_geometry = capi.screen[screen].workarea
 
     if geometry.x + geometry.width + 2*border > screen_geometry.x + screen_geometry.width then
         geometry.x = screen_geometry.x + screen_geometry.width - geometry.width
@@ -126,10 +128,11 @@ end
 --- Place the client where there's place available with minimum overlap.
 -- @param c The client.
 function no_overlap(c)
-    local cls = client.visible(c.screen)
-    local curlay = layout.get()
-    local areas = { capi.screen[c.screen].workarea }
     local geometry = c:geometry()
+    local screen   = c.screen or a_screen.getbycoord(geometry.x, geometry.y)
+    local cls = client.visible(screen)
+    local curlay = layout.get()
+    local areas = { capi.screen[screen].workarea }
     for i, cl in pairs(cls) do
         if cl ~= c and cl.type ~= "desktop" and (client.floating.get(cl) or curlay == layout.suit.floating) then
             areas = area_remove(areas, cl:geometry())
@@ -192,11 +195,12 @@ end
 function centered(c, p)
     local c = c or capi.client.focus
     local c_geometry = c:geometry()
+    local screen = c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y)
     local s_geometry
     if p then
         s_geometry = p:geometry()
     else
-        s_geometry = capi.screen[c.screen].geometry
+        s_geometry = capi.screen[screen].geometry
     end
     return c:geometry({ x = s_geometry.x + (s_geometry.width - c_geometry.width) / 2,
                         y = s_geometry.y + (s_geometry.height - c_geometry.height) / 2 })
@@ -209,11 +213,12 @@ end
 function center_horizontal(c, p)
     local c = c or capi.client.focus
     local c_geometry = c:geometry()
+    local screen = c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y)
     local s_geometry
     if p then
         s_geometry = p:geometry()
     else
-        s_geometry = capi.screen[c.screen].geometry
+        s_geometry = capi.screen[screen].geometry
     end
     return c:geometry({ x = s_geometry.x + (s_geometry.width - c_geometry.width) / 2 })
 end
@@ -225,11 +230,12 @@ end
 function center_vertical(c, p)
     local c = c or capi.client.focus
     local c_geometry = c:geometry()
+    local screen = c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y)
     local s_geometry
     if p then
         s_geometry = p:geometry()
     else
-        s_geometry = capi.screen[c.screen].geometry
+        s_geometry = capi.screen[screen].geometry
     end
     return c:geometry({ y = s_geometry.y + (s_geometry.height - c_geometry.height) / 2 })
 end
-- 
1.7.8.2

Reply via email to