all repos — openbox @ 271761db53b38e9235ad492812552f625049dd90

openbox fork - make it a bit more like ryudo

i forgot to add these
Dana Jansens danakj@orodu.net
commit

271761db53b38e9235ad492812552f625049dd90

parent

fa6f70ce3a1e5aff0cdafb4b641128f360278f2a

2 files changed, 86 insertions(+), 0 deletions(-)

jump to
A openbox/composite.c

@@ -0,0 +1,72 @@

+#include "composite.h" +#include "openbox.h" +#include "extensions.h" + +#ifndef USE_XCOMPOSITE +void composite_startup(gboolean reconfig) {} +void composite_shutdown(gboolean reconfig) {} +gboolean composite_window_has_alpha(Visual *vis) { return FALSE; } +XID composite_get_window_picture(Window win, Visual *vis) { return None; } +Pixmap composite_get_window_pixmap(Window win) { return None; } +#else + +static Picture root_picture = None; + +void composite_startup(gboolean reconfig) +{ + if (reconfig) return; + if (!extensions_comp) return; + + /* Redirect window contents to offscreen pixmaps */ + XCompositeRedirectSubwindows(ob_display, + RootWindow(ob_display, ob_screen), + CompositeRedirectAutomatic); +} + +void composite_shutdown(gboolean reconfig) +{ + if (reconfig) return; + if (!extensions_comp) return; +} + +void composite_setup_root_window() +{ + if (root_picture) + XRenderFreePicture(ob_display, root_picture); + + root_picture = + composite_get_window_picture(RootWindow(ob_display, ob_screen), + RrVisual(ob_rr_inst)); +} + +gboolean composite_window_has_alpha(Visual *vis) +{ + XRenderPictFormat *format; + + if (!extensions_comp) return FALSE; + + format = XRenderFindVisualFormat(ob_display, vis); + return format->type == PictTypeDirect && format->direct.alphaMask; +} + +XID composite_get_window_picture(Window win, Visual *vis) +{ + XRenderPictureAttributes pa; + XRenderPictFormat *format; + + if (!extensions_comp) return None; + + format = XRenderFindVisualFormat(ob_display, vis); + + pa.subwindow_mode = IncludeInferiors; + return XRenderCreatePicture(ob_display, win, format, CPSubwindowMode, &pa); +} + +Pixmap composite_get_window_pixmap(Window win) +{ + if (!extensions_comp) return None; + + return XCompositeNameWindowPixmap(ob_display, win); +} + +#endif
A openbox/composite.h

@@ -0,0 +1,14 @@

+#ifndef __composite_h +#define __composite_h + +#include <glib.h> +#include <X11/Xlib.h> + +void composite_startup(gboolean reconfig); +void composite_shutdown(gboolean reconfig); + +gboolean composite_window_has_alpha(Visual *vis); +XID composite_get_window_picture(Window win, Visual *vis); +Pixmap composite_get_window_pixmap(Window win); + +#endif