STRUT_SET(self->size,
self->cbwidth_l + (!self->max_horz ? self->bwidth : 0),
- self->cbwidth_t + self->bwidth,
+ self->cbwidth_t +
+ (!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));
if (self->decorations & OB_FRAME_DECOR_TITLEBAR)
self->size.top += ob_rr_theme->title_height + self->bwidth;
+ else if (self->max_horz && self->max_vert) {
+ /* A maximized and undecorated window needs a small border on the
+ top of the window to let the user still undecorate/unmaximize the
+ window via the client menu. */
+ /* XXX This size should probably be a theme option. */
+ self->size.top += 1;
+ }
+
if (self->decorations & OB_FRAME_DECOR_HANDLE &&
ob_rr_theme->handle_height > 0)
{
ObFrame *self = data;
GTimeVal now;
- g_get_current_time(&now);
- if (now.tv_sec > self->flash_end.tv_sec ||
- (now.tv_sec == self->flash_end.tv_sec &&
- now.tv_usec >= self->flash_end.tv_usec))
- self->flashing = FALSE;
+ if (config_frame_flash_duration != 0) {
+ g_get_current_time(&now);
+ if (now.tv_sec > self->flash_end.tv_sec ||
+ (now.tv_sec == self->flash_end.tv_sec &&
+ now.tv_usec >= self->flash_end.tv_usec))
+ self->flashing = FALSE;
+ }
if (!self->flashing)
return FALSE; /* we are done */
void frame_flash_start(ObFrame *self)
{
+ if (config_frame_flash_delay == 0) return;
+
self->flash_on = self->focused;
if (!self->flashing)
self->flash_timer = g_timeout_add_full(G_PRIORITY_DEFAULT,
- 600, flash_timeout, self,
+ config_frame_flash_delay, flash_timeout, self,
flash_done);
- g_get_current_time(&self->flash_end);
- g_time_val_add(&self->flash_end, G_USEC_PER_SEC * 5);
+
+ if (config_frame_flash_duration != 0) {
+ g_get_current_time(&self->flash_end);
+ g_time_val_add(&self->flash_end, 1000 * config_frame_flash_duration);
+ }
self->flashing = TRUE;
}