Merge branch 'backport' into work
[dana/openbox.git] / openbox / frame.c
index 8a7b1ae..72eab32 100644 (file)
@@ -265,25 +265,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(obt_display, self->window, ShapeBounding,
+        XShapeCombineMask(obt_display, self->window, kind,
                           self->size.left,
                           self->size.top,
                           None, ShapeSet);
     } else {
         /* make the frame's shape match the clients */
-        XShapeCombineShape(obt_display, self->window, ShapeBounding,
+        XShapeCombineShape(obt_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) {
@@ -309,6 +310,14 @@ void frame_adjust_shape(ObFrame *self)
                                 ShapeBounding, 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
 }
 
@@ -329,13 +338,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
@@ -359,8 +369,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->max_horz || !self->max_vert ? self->bwidth : 0),
                   self->cbwidth_r + (!self->max_horz ? self->bwidth : 0),
                   self->cbwidth_b +
                   (!self->max_horz || !self->max_vert ? self->bwidth : 0));
@@ -850,7 +859,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(obt_display, self->label, self->label_width,