X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.c;h=ec7464a1e2280b22fef99e1dd52801f298740bc5;hb=322fc41e496022b1fdfc4753424146496148f232;hp=50534823b44edf5a7d3dc979c709a899a9e087a6;hpb=ebe3091560a859996a9904c342c62b512b39bee0;p=chaz%2Fopenbox diff --git a/openbox/frame.c b/openbox/frame.c index 50534823..ec7464a1 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -20,9 +20,11 @@ #include "client.h" #include "openbox.h" #include "extensions.h" +#include "prop.h" #include "config.h" #include "framerender.h" #include "mainloop.h" +#include "focus.h" #include "moveresize.h" #include "render/theme.h" @@ -59,12 +61,9 @@ ObFrame *frame_new() unsigned long mask; ObFrame *self; - self = g_new(ObFrame, 1); + self = g_new0(ObFrame, 1); - self->visible = FALSE; self->obscured = TRUE; - self->decorations = 0; - self->flashing = FALSE; /* create all of the decor windows */ mask = CWOverrideRedirect | CWEventMask; @@ -184,17 +183,17 @@ static void frame_free(ObFrame *self) void frame_show(ObFrame *self) { if (!self->visible) { - self->visible = TRUE; - XMapWindow(ob_display, self->window); + self->visible = TRUE; + XMapWindow(ob_display, self->window); } } void frame_hide(ObFrame *self) { if (self->visible) { - self->visible = FALSE; - self->client->ignore_unmaps++; - XUnmapWindow(ob_display, self->window); + self->visible = FALSE; + self->client->ignore_unmaps++; + XUnmapWindow(ob_display, self->window); } } @@ -253,6 +252,10 @@ void frame_adjust_shape(ObFrame *self) void frame_adjust_area(ObFrame *self, gboolean moved, gboolean resized, gboolean fake) { + Strut oldsize; + + oldsize = self->size; + if (resized) { self->decorations = self->client->decorations; self->max_horz = self->client->max_horz; @@ -408,6 +411,21 @@ void frame_adjust_area(ObFrame *self, gboolean moved, frame_adjust_shape(self); } + + if (!STRUT_EQUAL(self->size, oldsize)) { + guint32 vals[4]; + vals[0] = self->size.left; + vals[1] = self->size.right; + vals[2] = self->size.top; + vals[3] = self->size.bottom; + PROP_SETA32(self->client->window, kde_net_wm_frame_strut, + cardinal, vals, 4); + } + + /* 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(); } } @@ -855,12 +873,9 @@ static gboolean flash_timeout(gpointer data) return FALSE; /* we are done */ self->flash_on = !self->flash_on; - { - gboolean focused; - - focused = self->focused; /* save the focused flag */ + if (!self->focused) { frame_adjust_focus(self, self->flash_on); - self->focused = focused; + self->focused = FALSE; } return TRUE; /* go again */ @@ -872,7 +887,7 @@ void frame_flash_start(ObFrame *self) if (!self->flashing) ob_main_loop_timeout_add(ob_main_loop, - G_USEC_PER_SEC * 0.75, + G_USEC_PER_SEC * 0.6, flash_timeout, self, flash_done);