summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-09-24 17:17:59 +0000
committerDana Jansens <danakj@orodu.net>2003-09-24 17:17:59 +0000
commitf68cf94d35d023a36d434ee51236ed60e925afcf (patch)
tree9eaa8cefbea6dab7945509cdabc3d8050af9ef23
parent624033c32de25c684d015386fb2d3ae41e36bbb0 (diff)
support the _KDE_NET_WM_FRAME_STRUT hint
-rw-r--r--openbox/frame.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/openbox/frame.c b/openbox/frame.c
index 50534823..fdca7be7 100644
--- a/openbox/frame.c
+++ b/openbox/frame.c
@@ -20,6 +20,7 @@
#include "client.h"
#include "openbox.h"
#include "extensions.h"
+#include "prop.h"
#include "config.h"
#include "framerender.h"
#include "mainloop.h"
@@ -59,12 +60,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;
@@ -253,6 +251,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 +410,16 @@ 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);
+ }
}
}
@@ -855,12 +867,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 +881,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);