client: store _NET_WM_OPACITY

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2009-08-10 11:59:17 +02:00
parent ab361ffe85
commit 71f24097c0
3 changed files with 28 additions and 16 deletions

View File

@ -552,6 +552,9 @@ client_manage(xcb_window_t w, xcb_get_geometry_reply_t *wgeom, int phys_screen,
property_update_wm_window_role(c); property_update_wm_window_role(c);
property_update_net_wm_pid(c, NULL); property_update_net_wm_pid(c, NULL);
/* get opacity */
c->opacity = window_opacity_get(c->win);
/* Then check clients hints */ /* Then check clients hints */
ewmh_client_check_hints(c); ewmh_client_check_hints(c);
@ -1527,12 +1530,18 @@ luaA_client_newindex(lua_State *L)
break; break;
case A_TK_OPACITY: case A_TK_OPACITY:
if(lua_isnil(L, 3)) if(lua_isnil(L, 3))
{
window_opacity_set(c->win, -1); window_opacity_set(c->win, -1);
c->opacity = -1;
}
else else
{ {
d = luaL_checknumber(L, 3); d = luaL_checknumber(L, 3);
if(d >= 0 && d <= 1) if(d >= 0 && d <= 1)
{
window_opacity_set(c->win, d); window_opacity_set(c->win, d);
c->opacity = d;
}
} }
break; break;
case A_TK_STICKY: case A_TK_STICKY:
@ -1633,7 +1642,6 @@ luaA_client_index(lua_State *L)
size_t len; size_t len;
client_t *c = luaA_client_checkudata(L, 1); client_t *c = luaA_client_checkudata(L, 1);
const char *buf = luaL_checklstring(L, 2, &len); const char *buf = luaL_checklstring(L, 2, &len);
double d;
if(luaA_usemetatable(L, 1, 2)) if(luaA_usemetatable(L, 1, 2))
return 1; return 1;
@ -1749,10 +1757,7 @@ luaA_client_index(lua_State *L)
luaA_object_push_item(L, 1, c->icon); luaA_object_push_item(L, 1, c->icon);
break; break;
case A_TK_OPACITY: case A_TK_OPACITY:
if((d = window_opacity_get(c->win)) >= 0) lua_pushnumber(L, c->opacity);
lua_pushnumber(L, d);
else
return 0;
break; break;
case A_TK_ONTOP: case A_TK_ONTOP:
lua_pushboolean(L, c->isontop); lua_pushboolean(L, c->isontop);

View File

@ -156,6 +156,8 @@ struct client_t
uint32_t pid; uint32_t pid;
/** Window it is transient for */ /** Window it is transient for */
client_t *transient_for; client_t *transient_for;
/** Window opacity */
double opacity;
}; };
client_t * luaA_client_checkudata(lua_State *, int); client_t * luaA_client_checkudata(lua_State *, int);

View File

@ -557,17 +557,24 @@ property_handle_xrootpmap_id(void *data __attribute__ ((unused)),
} }
static int static int
property_handle_opacity(void *data __attribute__ ((unused)), property_handle_net_wm_opacity(void *data __attribute__ ((unused)),
xcb_connection_t *connection, xcb_connection_t *connection,
uint8_t state, uint8_t state,
xcb_window_t window, xcb_window_t window,
xcb_atom_t name, xcb_atom_t name,
xcb_get_property_reply_t *reply) xcb_get_property_reply_t *reply)
{ {
wibox_t *wibox = wibox_getbywin(window); wibox_t *wibox = wibox_getbywin(window);
if (wibox) if(wibox)
wibox->opacity = window_opacity_get_from_reply(reply); wibox->opacity = window_opacity_get_from_reply(reply);
else
{
client_t *c = client_getbywin(window);
if(c)
c->opacity = window_opacity_get_from_reply(reply);
}
return 0; return 0;
} }
@ -613,14 +620,12 @@ void a_xcb_set_property_handlers(void)
property_handle_net_wm_icon, NULL); property_handle_net_wm_icon, NULL);
xcb_property_set_handler(&globalconf.prophs, _NET_WM_PID, UINT_MAX, xcb_property_set_handler(&globalconf.prophs, _NET_WM_PID, UINT_MAX,
property_handle_net_wm_pid, NULL); property_handle_net_wm_pid, NULL);
xcb_property_set_handler(&globalconf.prophs, _NET_WM_WINDOW_OPACITY, 1,
property_handle_net_wm_opacity, NULL);
/* background change */ /* background change */
xcb_property_set_handler(&globalconf.prophs, _XROOTPMAP_ID, 1, xcb_property_set_handler(&globalconf.prophs, _XROOTPMAP_ID, 1,
property_handle_xrootpmap_id, NULL); property_handle_xrootpmap_id, NULL);
/* Opacity */
xcb_property_set_handler(&globalconf.prophs, _NET_WM_WINDOW_OPACITY, 1,
property_handle_opacity, NULL);
} }
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80