}
OtkWidget::OtkWidget(OtkEventDispatcher *event_dispatcher, Style *style,
- Direction direction, Cursor cursor, int bevel_width)
+ Direction direction, Cursor cursor, int bevel_width,
+ bool override_redirect)
: OtkEventHandler(),
_dirty(false),_focused(false),
_parent(0), _style(style), _direction(direction), _cursor(cursor),
{
assert(event_dispatcher);
assert(style);
- create();
+ create(override_redirect);
_event_dispatcher->registerHandler(_window, this);
setStyle(_style); // let the widget initialize stuff
}
XDestroyWindow(otk::OBDisplay::display, _window);
}
-void OtkWidget::create(void)
+void OtkWidget::create(bool override_redirect)
{
const ScreenInfo *scr_info = otk::OBDisplay::screenInfo(_screen);
Window p_window = _parent ? _parent->window() : scr_info->rootWindow();
attrib_create.event_mask = ButtonPressMask | ButtonReleaseMask |
ButtonMotionMask | ExposureMask | StructureNotifyMask;
+ if (override_redirect) {
+ create_mask |= CWOverrideRedirect;
+ attrib_create.override_redirect = true;
+ }
+
if (_cursor) {
create_mask |= CWCursor;
attrib_create.cursor = _cursor;
{
if (!_texture) return;
- printf("rendering %lx\n", _texture);
-
_bg_pixmap = _texture->render(_rect.width(), _rect.height(), _bg_pixmap);
- if (_bg_pixmap)
+ if (_bg_pixmap) {
XSetWindowBackgroundPixmap(otk::OBDisplay::display, _window, _bg_pixmap);
- else {
+ _bg_pixel = None;
+ } else {
unsigned int pix = _texture->color().pixel();
if (pix != _bg_pixel) {
_bg_pixel = pix;
void OtkWidget::update(void)
{
if (_dirty) {
- printf("widget dirty, redrawing\n");
adjust();
render();
XClearWindow(OBDisplay::display, _window);