drawin: Don't cause X11 errors during allocation

We were only creating an X11 window for a new drawin after we handled all the
options that were passed in. However, this means that drawin({ height = 4 })
would try to resize the window before we created a window, which caused an X11
error.

Fix this by moving our initialization before of the handling of construction
arguments.

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2011-09-12 19:38:20 +02:00
parent c2ea920ca0
commit e40bfedd30
1 changed files with 19 additions and 22 deletions

View File

@ -333,6 +333,24 @@ drawin_set_visible(lua_State *L, int udx, bool v)
}
}
static drawin_t *
drawin_allocator(lua_State *L)
{
drawin_t *w = drawin_new(L);
w->visible = false;
w->opacity = -1;
w->cursor = a_strdup("left_ptr");
w->geometry.width = 1;
w->geometry.height = 1;
w->type = _NET_WM_WINDOW_TYPE_NORMAL;
drawin_init(w);
return w;
}
/** Create a new drawin.
* \param L The Lua VM state.
* \return The number of elements pushed on stack.
@ -342,27 +360,6 @@ luaA_drawin_new(lua_State *L)
{
luaA_class_new(L, &drawin_class);
drawin_t *w = luaA_checkudata(L, -1, &drawin_class);
w->visible = false;
if(!w->opacity)
w->opacity = -1;
if(!w->cursor)
w->cursor = a_strdup("left_ptr");
if(!w->geometry.width)
w->geometry.width = 1;
if(!w->geometry.height)
w->geometry.height = 1;
if(w->type == 0)
w->type = _NET_WM_WINDOW_TYPE_NORMAL;
drawin_init(w);
return 1;
}
@ -596,7 +593,7 @@ drawin_class_setup(lua_State *L)
};
luaA_class_setup(L, &drawin_class, "drawin", &window_class,
(lua_class_allocator_t) drawin_new,
(lua_class_allocator_t) drawin_allocator,
(lua_class_collector_t) drawin_wipe,
NULL,
luaA_class_index_miss_property, luaA_class_newindex_miss_property,