]> Dogcows Code - chaz/openbox/commitdiff
set the resize cursors only when the window can be resized
authorDana Jansens <danakj@orodu.net>
Sun, 20 May 2007 05:01:00 +0000 (05:01 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 20 May 2007 05:01:00 +0000 (05:01 +0000)
openbox/frame.c
openbox/frame.h

index 5417992882bd20e262e48cdf4fd865df11e78100..1286d471d8ae0bba6ea5907765dd607a6abd8a34 100644 (file)
@@ -132,22 +132,15 @@ ObFrame *frame_new(ObClient *client)
     attrib.event_mask = ELEMENT_EVENTMASK;
     self->title = createWindow(self->window, NULL, mask, &attrib);
 
-    mask |= CWCursor;
-    attrib.cursor = ob_cursor(OB_CURSOR_NORTH);
     self->topresize = createWindow(self->title, NULL, mask, &attrib);
-    attrib.cursor = ob_cursor(OB_CURSOR_NORTHWEST);
     self->tltresize = createWindow(self->title, NULL, mask, &attrib);
     self->tllresize = createWindow(self->title, NULL, mask, &attrib);
-    attrib.cursor = ob_cursor(OB_CURSOR_NORTHEAST);
     self->trtresize = createWindow(self->title, NULL, mask, &attrib);
     self->trrresize = createWindow(self->title, NULL, mask, &attrib);
 
-    attrib.cursor = ob_cursor(OB_CURSOR_WEST);
     self->leftresize = createWindow(self->inner, NULL, mask, &attrib);
-    attrib.cursor = ob_cursor(OB_CURSOR_EAST);
     self->rightresize = createWindow(self->inner, NULL, mask, &attrib);
 
-    mask &= ~CWCursor;
     self->label = createWindow(self->title, NULL, mask, &attrib);
     self->max = createWindow(self->title, NULL, mask, &attrib);
     self->close = createWindow(self->title, NULL, mask, &attrib);
@@ -156,12 +149,8 @@ ObFrame *frame_new(ObClient *client)
     self->icon = createWindow(self->title, NULL, mask, &attrib);
     self->iconify = createWindow(self->title, NULL, mask, &attrib);
 
-    mask |= CWCursor;
-    attrib.cursor = ob_cursor(OB_CURSOR_SOUTH);
     self->handle = createWindow(self->window, NULL, mask, &attrib);
-    attrib.cursor = ob_cursor(OB_CURSOR_SOUTHWEST);
     self->lgrip = createWindow(self->handle, NULL, mask, &attrib);
-    attrib.cursor = ob_cursor(OB_CURSOR_SOUTHEAST);
     self->rgrip = createWindow(self->handle, NULL, mask, &attrib); 
 
     self->focused = FALSE;
@@ -548,6 +537,36 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
     if (resized && (self->decorations & OB_FRAME_DECOR_TITLEBAR))
         XResizeWindow(ob_display, self->label, self->label_width,
                       ob_rr_theme->label_height);
+
+    /* set up cursors */
+    if (!fake &&
+        (self->functions & OB_CLIENT_FUNC_RESIZE) !=
+        (self->client->functions & OB_CLIENT_FUNC_RESIZE))
+    {
+        gboolean r = self->client->functions & OB_CLIENT_FUNC_RESIZE;
+        XSetWindowAttributes a;
+
+        a.cursor = ob_cursor(r ? OB_CURSOR_NORTH : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->topresize, CWCursor, &a);
+        a.cursor = ob_cursor(r ? OB_CURSOR_NORTHWEST : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->tltresize, CWCursor, &a);
+        XChangeWindowAttributes(ob_display, self->tllresize, CWCursor, &a);
+        a.cursor = ob_cursor(r ? OB_CURSOR_NORTHEAST : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->trtresize, CWCursor, &a);
+        XChangeWindowAttributes(ob_display, self->trrresize, CWCursor, &a);
+        a.cursor = ob_cursor(r ? OB_CURSOR_WEST : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->leftresize, CWCursor, &a);
+        a.cursor = ob_cursor(r ? OB_CURSOR_EAST : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->rightresize, CWCursor, &a);
+        a.cursor = ob_cursor(r ? OB_CURSOR_SOUTH : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->handle, CWCursor, &a);
+        a.cursor = ob_cursor(r ? OB_CURSOR_SOUTHWEST : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->lgrip, CWCursor, &a);
+        a.cursor = ob_cursor(r ? OB_CURSOR_SOUTHEAST : OB_CURSOR_NONE);
+        XChangeWindowAttributes(ob_display, self->rgrip, CWCursor, &a);
+
+        self->functions = self->client->functions;
+    }
 }
 
 void frame_adjust_client_area(ObFrame *self)
index b5b8a9cf0ad593686e7150197bfc6d0f4c111f46..0cce4068c2ae9f3f662a3b2f267f778b662e40d1 100644 (file)
@@ -83,6 +83,7 @@ struct _ObFrame
     Rect      area;
     gboolean  visible;
 
+    guint     functions;
     guint     decorations;
     gboolean  max_horz;
 
This page took 0.026579 seconds and 4 git commands to generate.