attrib_create.background_pixmap = None;
attrib_create.colormap = screen->getColormap();
attrib_create.override_redirect = True;
- attrib_create.event_mask = EnterWindowMask | LeaveWindowMask;
+ attrib_create.event_mask = EnterWindowMask | LeaveWindowMask |
+ ButtonPress;
+ /*
+ We catch button presses because other wise they get passed down to the
+ root window, which will then cause root menus to show when you click the
+ window's frame.
+ */
return XCreateWindow(blackbox->getXDisplay(), screen->getRootWindow(),
0, 0, 1, 1, frame.border_w, screen->getDepth(),
if (frame.stick_button)
destroyStickyButton();
-
+
if (frame.ftitle)
screen->getImageControl()->removeImage(frame.ftitle);
XSetWindowBackground(blackbox->getXDisplay(),
frame.iconify_button, frame.pbutton_pixel);
}
- XClearWindow(blackbox->getXDisplay(), frame.iconify_button);
+ XClearWindow(blackbox->getXDisplay(), frame.iconify_button);
BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus :
- screen->getWindowStyle()->b_pic_unfocus);
- XDrawRectangle(blackbox->getXDisplay(), frame.iconify_button, pen.gc(),
- 2, (frame.button_w - 5), (frame.button_w - 5), 2);
+ screen->getWindowStyle()->b_pic_unfocus);
+
+ PixmapMask pm = screen->getWindowStyle()->icon_button;
+
+ if (screen->getWindowStyle()->icon_button.mask != None) {
+ XSetClipMask(blackbox->getXDisplay(), pen.gc(), pm.mask);
+ XSetClipOrigin(blackbox->getXDisplay(), pen.gc(),
+ (frame.button_w - pm.w)/2, (frame.button_w - pm.h)/2);
+
+ XFillRectangle(blackbox->getXDisplay(), frame.iconify_button, pen.gc(),
+ (frame.button_w - pm.w)/2, (frame.button_w - pm.h)/2,
+ (frame.button_w + pm.w)/2, (frame.button_w + pm.h)/2);
+
+ XSetClipMask(blackbox->getXDisplay(), pen.gc(), None);
+ XSetClipOrigin(blackbox->getXDisplay(), pen.gc(), 0, 0);
+ } else {
+
+ XDrawRectangle(blackbox->getXDisplay(), frame.iconify_button, pen.gc(),
+ 2, (frame.button_w - 5), (frame.button_w - 5), 2);
+ }
}
BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus :
screen->getWindowStyle()->b_pic_unfocus);
- XDrawRectangle(blackbox->getXDisplay(), frame.maximize_button, pen.gc(),
- 2, 2, (frame.button_w - 5), (frame.button_w - 5));
- XDrawLine(blackbox->getXDisplay(), frame.maximize_button, pen.gc(),
- 2, 3, (frame.button_w - 3), 3);
+
+ PixmapMask pm = screen->getWindowStyle()->max_button;
+
+ if (pm.mask != None) {
+ XSetClipMask(blackbox->getXDisplay(), pen.gc(), pm.mask);
+ XSetClipOrigin(blackbox->getXDisplay(), pen.gc(),
+ (frame.button_w - pm.w)/2, (frame.button_w - pm.h)/2);
+
+ XFillRectangle(blackbox->getXDisplay(), frame.maximize_button, pen.gc(),
+ (frame.button_w - pm.w)/2, (frame.button_w - pm.h)/2,
+ (frame.button_w + pm.w)/2, (frame.button_w + pm.h)/2);
+
+ XSetClipOrigin(blackbox->getXDisplay(), pen.gc(), 0, 0 );
+ XSetClipMask( blackbox->getXDisplay(), pen.gc(), None );
+ } else {
+ XDrawRectangle(blackbox->getXDisplay(), frame.maximize_button, pen.gc(),
+ 2, 2, (frame.button_w - 5), (frame.button_w - 5));
+ XDrawLine(blackbox->getXDisplay(), frame.maximize_button, pen.gc(),
+ 2, 3, (frame.button_w - 3), 3);
+ }
}
if (! pressed) {
if (flags.focused) {
if (frame.fbutton)
- XSetWindowBackgroundPixmap(blackbox->getXDisplay(), frame.close_button,
- frame.fbutton);
+ XSetWindowBackgroundPixmap(blackbox->getXDisplay(),
+ frame.close_button, frame.fbutton);
else
XSetWindowBackground(blackbox->getXDisplay(), frame.close_button,
frame.fbutton_pixel);
BPen pen((flags.focused) ? screen->getWindowStyle()->b_pic_focus :
screen->getWindowStyle()->b_pic_unfocus);
+
+ PixmapMask pm = screen->getWindowStyle()->stick_button;
+
+ if (pm.mask != None) {
+ XSetClipMask(blackbox->getXDisplay(), pen.gc(), pm.mask);
+ XSetClipOrigin(blackbox->getXDisplay(), pen.gc(),
+ (frame.button_w - pm.w)/2, (frame.button_w - pm.h)/2);
+
+ XFillRectangle(blackbox->getXDisplay(), frame.stick_button, pen.gc(),
+ (frame.button_w - pm.w)/2, (frame.button_w - pm.h)/2,
+ (frame.button_w + pm.w)/2, (frame.button_w + pm.h)/2);
+
- XFillRectangle(blackbox->getXDisplay(), frame.stick_button, pen.gc(),
- frame.button_w/2 - 1, frame.button_w/2 -1, 2, 2 );
+ XSetClipOrigin(blackbox->getXDisplay(), pen.gc(), 0, 0 );
+ XSetClipMask( blackbox->getXDisplay(), pen.gc(), None );
+ } else {
+ XFillRectangle(blackbox->getXDisplay(), frame.stick_button, pen.gc(),
+ frame.button_w/2 - 1, frame.button_w/2 -1, 2, 2 );
+ }
}
void BlackboxWindow::mapRequestEvent(const XMapRequestEvent *re) {
frame.handle == me->window || frame.window == me->window)) {
beginMove(me->x_root, me->y_root);
} else if ((functions & Func_Resize) &&
- ((me->state & Button1Mask) && (me->window == frame.right_grip ||
- me->window == frame.left_grip)) ||
+ ((me->state & Button1Mask) &&
+ (me->window == frame.right_grip ||
+ me->window == frame.left_grip)) ||
((me->state & Button3Mask) && (me->state & mod_mask) &&
(frame.title == me->window || frame.label == me->window ||
- frame.handle == me->window || frame.window == me->window))) {
+ frame.handle == me->window || frame.window == me->window ||
+ frame.right_grip == me->window ||
+ frame.left_grip == me->window))) {
unsigned int zones = screen->getResizeZones();
Corner corner;