X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fframe.c;h=20697d32a091aa958ed3a0bb3b77e25f92db0ae0;hb=bafd9e9edcff0e18a03ef6f4e73d673e12a7c7ed;hp=ca5dbb6cf0b696403d69e519f7618e957e6b0ad0;hpb=5a45d4e7bc1139c1da62d0e5c8af98f5d7664cfe;p=chaz%2Fopenbox diff --git a/openbox/frame.c b/openbox/frame.c index ca5dbb6c..20697d32 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -23,6 +23,7 @@ #include "extensions.h" #include "prop.h" #include "grab.h" +#include "debug.h" #include "config.h" #include "framerender.h" #include "mainloop.h" @@ -267,25 +268,26 @@ void frame_adjust_theme(ObFrame *self) set_theme_statics(self); } -void frame_adjust_shape(ObFrame *self) -{ #ifdef SHAPE +void frame_adjust_shape_kind(ObFrame *self, int kind) +{ gint num; XRectangle xrect[2]; - if (!self->client->shaped) { + if (!((kind == ShapeBounding && self->client->shaped) || + (kind == ShapeInput && self->client->shaped_input))) { /* clear the shape on the frame window */ - XShapeCombineMask(ob_display, self->window, ShapeBounding, + XShapeCombineMask(ob_display, self->window, kind, self->size.left, self->size.top, None, ShapeSet); } else { /* make the frame's shape match the clients */ - XShapeCombineShape(ob_display, self->window, ShapeBounding, + XShapeCombineShape(ob_display, self->window, kind, self->size.left, self->size.top, self->client->window, - ShapeBounding, ShapeSet); + kind, ShapeSet); num = 0; if (self->decorations & OB_FRAME_DECOR_TITLEBAR) { @@ -308,9 +310,17 @@ void frame_adjust_shape(ObFrame *self) } XShapeCombineRectangles(ob_display, self->window, - ShapeBounding, 0, 0, xrect, num, + kind, 0, 0, xrect, num, ShapeUnion, Unsorted); } +} +#endif + +void frame_adjust_shape(ObFrame *self) +{ +#ifdef SHAPE + frame_adjust_shape_kind(self, ShapeBounding); + frame_adjust_shape_kind(self, ShapeInput); #endif } @@ -331,13 +341,14 @@ void frame_adjust_area(ObFrame *self, gboolean moved, self->max_vert = self->client->max_vert; self->shaded = self->client->shaded; - if (self->decorations & OB_FRAME_DECOR_BORDER || - (self->client->undecorated && config_theme_keepborder)) + if (self->decorations & OB_FRAME_DECOR_BORDER) self->bwidth = ob_rr_theme->fbwidth; else self->bwidth = 0; - if (self->decorations & OB_FRAME_DECOR_BORDER) { + if (self->decorations & OB_FRAME_DECOR_BORDER && + !self->client->undecorated) + { self->cbwidth_l = self->cbwidth_r = ob_rr_theme->cbwidthx; self->cbwidth_t = self->cbwidth_b = ob_rr_theme->cbwidthy; } else @@ -360,9 +371,7 @@ void frame_adjust_area(ObFrame *self, gboolean moved, STRUT_SET(self->size, self->cbwidth_l + (!self->max_horz ? self->bwidth : 0), - self->cbwidth_t + - (!self->max_horz || !self->max_vert || - !self->client->undecorated ? self->bwidth : 0), + self->cbwidth_t + self->bwidth, self->cbwidth_r + (!self->max_horz ? self->bwidth : 0), self->cbwidth_b + (!self->max_horz || !self->max_vert ? self->bwidth : 0)); @@ -590,7 +599,6 @@ void frame_adjust_area(ObFrame *self, gboolean moved, sidebwidth) * 2, self->bwidth); - if (sidebwidth) { XMoveResizeWindow(ob_display, self->lgripleft, 0, @@ -852,7 +860,7 @@ void frame_adjust_area(ObFrame *self, gboolean moved, /* if this occurs while we are focus cycling, the indicator needs to match the changes */ if (focus_cycle_target == self->client) - focus_cycle_draw_indicator(self->client); + focus_cycle_update_indicator(self->client); } if (resized && (self->decorations & OB_FRAME_DECOR_TITLEBAR)) XResizeWindow(ob_display, self->label, self->label_width, @@ -941,6 +949,9 @@ void frame_adjust_state(ObFrame *self) void frame_adjust_focus(ObFrame *self, gboolean hilite) { + ob_debug_type(OB_DEBUG_FOCUS, + "Frame for 0x%x has focus: %d\n", + self->client->window, hilite); self->focused = hilite; self->need_render = TRUE; framerender_frame(self);