]> Dogcows Code - chaz/openbox/blobdiff - openbox/frame.c
consistant glib type usage
[chaz/openbox] / openbox / frame.c
index fda6c86b878cfa40dcb3b27038a67b6f28ea2ace..5d7ec6c1b22f12060ed5ecd50831b08e7a03ba3c 100644 (file)
 #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"
 
@@ -44,7 +46,7 @@ static gboolean flash_timeout(gpointer data);
 static void set_theme_statics(ObFrame *self);
 static void free_theme_statics(ObFrame *self);
 
-static Window createWindow(Window parent, unsigned long mask,
+static Window createWindow(Window parent, gulong mask,
                           XSetWindowAttributes *attrib)
 {
     return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0,
@@ -56,15 +58,12 @@ static Window createWindow(Window parent, unsigned long mask,
 ObFrame *frame_new()
 {
     XSetWindowAttributes attrib;
-    unsigned long mask;
+    gulong 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;
@@ -123,11 +122,16 @@ ObFrame *frame_new()
 static void set_theme_statics(ObFrame *self)
 {
     /* set colors/appearance/sizes for stuff that doesn't change */
-    XSetWindowBorder(ob_display, self->window, ob_rr_theme->b_color->pixel);
-    XSetWindowBorder(ob_display, self->title, ob_rr_theme->b_color->pixel);
-    XSetWindowBorder(ob_display, self->handle, ob_rr_theme->b_color->pixel);
-    XSetWindowBorder(ob_display, self->rgrip, ob_rr_theme->b_color->pixel);
-    XSetWindowBorder(ob_display, self->lgrip, ob_rr_theme->b_color->pixel);
+    XSetWindowBorder(ob_display, self->window,
+                     RrColorPixel(ob_rr_theme->b_color));
+    XSetWindowBorder(ob_display, self->title,
+                     RrColorPixel(ob_rr_theme->b_color));
+    XSetWindowBorder(ob_display, self->handle,
+                     RrColorPixel(ob_rr_theme->b_color));
+    XSetWindowBorder(ob_display, self->rgrip,
+                     RrColorPixel(ob_rr_theme->b_color));
+    XSetWindowBorder(ob_display, self->lgrip,
+                     RrColorPixel(ob_rr_theme->b_color));
 
     XResizeWindow(ob_display, self->max,
                   ob_rr_theme->button_size, ob_rr_theme->button_size);
@@ -184,17 +188,21 @@ 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->client->window);
+        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 += 2;
+        /* we unmap the client itself so that we can get MapRequest
+           events, and because the ICCCM tells us to! */
+        XUnmapWindow(ob_display, self->window);
+        XUnmapWindow(ob_display, self->client->window);
     }
 }
 
@@ -207,7 +215,7 @@ void frame_adjust_theme(ObFrame *self)
 void frame_adjust_shape(ObFrame *self)
 {
 #ifdef SHAPE
-    int num;
+    gint num;
     XRectangle xrect[2];
 
     if (!self->client->shaped) {
@@ -253,6 +261,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 +420,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();
     }
 }
 
@@ -525,8 +552,8 @@ void frame_release_client(ObFrame *self, ObClient *client)
 
 static void layout_title(ObFrame *self)
 {
-    char *lc;
-    int x;
+    gchar *lc;
+    gint x;
     gboolean n, d, i, l, m, c, s;
 
     n = d = i = l = m = c = s = FALSE;
@@ -646,7 +673,7 @@ static void layout_title(ObFrame *self)
     }
 }
 
-ObFrameContext frame_context_from_string(char *name)
+ObFrameContext frame_context_from_string(const gchar *name)
 {
     if (!g_ascii_strcasecmp("Desktop", name))
         return OB_FRAME_CONTEXT_DESKTOP;
@@ -728,7 +755,7 @@ ObFrameContext frame_context(ObClient *client, Window win)
     return OB_FRAME_CONTEXT_NONE;
 }
 
-void frame_client_gravity(ObFrame *self, int *x, int *y)
+void frame_client_gravity(ObFrame *self, gint *x, gint *y)
 {
     /* horizontal */
     switch (self->client->gravity) {
@@ -783,7 +810,7 @@ void frame_client_gravity(ObFrame *self, int *x, int *y)
     }
 }
 
-void frame_frame_gravity(ObFrame *self, int *x, int *y)
+void frame_frame_gravity(ObFrame *self, gint *x, gint *y)
 {
     /* horizontal */
     switch (self->client->gravity) {
@@ -855,12 +882,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 +896,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);
This page took 0.029687 seconds and 4 git commands to generate.