swindow: cache the opacity

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2009-05-25 16:27:17 +02:00 committed by Julien Danjou
parent b2ad584c7b
commit 0b93a6a6a8
3 changed files with 26 additions and 2 deletions

View File

@ -28,6 +28,7 @@
#include "wibox.h" #include "wibox.h"
#include "common/atoms.h" #include "common/atoms.h"
#include "common/xutil.h" #include "common/xutil.h"
#include "window.h"
void void
property_update_wm_transient_for(client_t *c, xcb_get_property_reply_t *reply) property_update_wm_transient_for(client_t *c, xcb_get_property_reply_t *reply)
@ -405,6 +406,21 @@ property_handle_xrootpmap_id(void *data __attribute__ ((unused)),
return 0; return 0;
} }
static int
property_handle_opacity(void *data __attribute__ ((unused)),
xcb_connection_t *connection,
uint8_t state,
xcb_window_t window,
xcb_atom_t name,
xcb_get_property_reply_t *reply)
{
wibox_t *wibox = wibox_getbywin(window);
if (wibox)
wibox->sw.opacity = window_opacity_get_from_reply(reply);
return 0;
}
void a_xcb_set_property_handlers(void) void a_xcb_set_property_handlers(void)
{ {
/* init */ /* init */
@ -443,6 +459,10 @@ void a_xcb_set_property_handlers(void)
/* 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

View File

@ -106,7 +106,8 @@ simplewindow_init(simple_window_t *sw,
| XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_ENTER_WINDOW
| XCB_EVENT_MASK_LEAVE_WINDOW | XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_LEAVE_WINDOW | XCB_EVENT_MASK_STRUCTURE_NOTIFY
| XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE
| XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE; | XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE
| XCB_EVENT_MASK_PROPERTY_CHANGE;
sw->window = xcb_generate_id(globalconf.connection); sw->window = xcb_generate_id(globalconf.connection);
xcb_create_window(globalconf.connection, s->root_depth, sw->window, s->root, xcb_create_window(globalconf.connection, s->root_depth, sw->window, s->root,

View File

@ -53,6 +53,8 @@ typedef struct simple_window_t
draw_context_t ctx; draw_context_t ctx;
/** Orientation */ /** Orientation */
orientation_t orientation; orientation_t orientation;
/** Opacity */
double opacity;
} simple_window_t; } simple_window_t;
void simplewindow_init(simple_window_t *s, void simplewindow_init(simple_window_t *s,
@ -85,6 +87,7 @@ simplewindow_refresh_pixmap(simple_window_t *sw)
static inline void static inline void
simplewindow_opacity_set(simple_window_t *sw, double opacity) simplewindow_opacity_set(simple_window_t *sw, double opacity)
{ {
sw->opacity = opacity;
window_opacity_set(sw->window, opacity); window_opacity_set(sw->window, opacity);
} }
@ -94,7 +97,7 @@ simplewindow_opacity_set(simple_window_t *sw, double opacity)
static inline double static inline double
simplewindow_opacity_get(simple_window_t *sw) simplewindow_opacity_get(simple_window_t *sw)
{ {
return window_opacity_get(sw->window); return sw->opacity;
} }
#endif #endif