]> Dogcows Code - chaz/openbox/commitdiff
add decoration state to the frame struct. make client_configure adjust the frame...
authorDana Jansens <danakj@orodu.net>
Sat, 21 Jun 2003 18:59:35 +0000 (18:59 +0000)
committerDana Jansens <danakj@orodu.net>
Sat, 21 Jun 2003 18:59:35 +0000 (18:59 +0000)
openbox/client.c
openbox/frame.c
openbox/frame.h

index a5c29a3b76f0443c0354fc5d5a39af8ceae5766a..87cdba96973d61b55cef4f8f76bcff33ea6bbcee 100644 (file)
@@ -1027,10 +1027,7 @@ void client_setup_decor_and_functions(Client *self)
         if (self->type == Type_Desktop && self->desktop != DESKTOP_ALL)
             client_set_desktop(self, DESKTOP_ALL, FALSE);
 
-       /* change the decors on the frame, and with more/less decorations,
-           we may also need to be repositioned */
-       frame_adjust_area(self->frame, TRUE, TRUE);
-       /* with new decor, the window's maximized size may change */
+       /* adjust the client's decorations, etc. */
        client_reconfigure(self);
     } else {
         /* this makes sure that these windows appear on all desktops */
@@ -1775,6 +1772,9 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h,
 
     /* move/resize the frame to match the request */
     if (self->frame) {
+        if (self->decorations != self->frame->decorations)
+            moved = resized = TRUE;
+
         if (moved || resized)
             frame_adjust_area(self->frame, moved, resized);
 
index 65e116c854850622825a29a2889e2a957f39a4ae..5409fc762675e2d5f7db23c4fdf060c97768f937 100644 (file)
@@ -38,6 +38,7 @@ Frame *frame_new()
     self = g_new(Frame, 1);
 
     self->visible = FALSE;
+    self->decorations = 0;
 
     /* create all of the decor windows */
     mask = CWOverrideRedirect | CWEventMask;
@@ -165,7 +166,7 @@ void frame_adjust_shape(Frame *self)
                           ShapeBounding, ShapeSet);
 
        num = 0;
-       if (self->client->decorations & Decor_Titlebar) {
+       if (self->decorations & Decor_Titlebar) {
            xrect[0].x = -ob_rr_theme->bevel;
            xrect[0].y = -ob_rr_theme->bevel;
            xrect[0].width = self->width + self->bwidth * 2;
@@ -174,7 +175,7 @@ void frame_adjust_shape(Frame *self)
            ++num;
        }
 
-       if (self->client->decorations & Decor_Handle) {
+       if (self->decorations & Decor_Handle) {
            xrect[1].x = -ob_rr_theme->bevel;
            xrect[1].y = FRAME_HANDLE_Y(self);
            xrect[1].width = self->width + self->bwidth * 2;
@@ -193,7 +194,8 @@ void frame_adjust_shape(Frame *self)
 void frame_adjust_area(Frame *self, gboolean moved, gboolean resized)
 {
     if (resized) {
-        if (self->client->decorations & Decor_Border) {
+        self->decorations = self->client->decorations;
+        if (self->decorations & Decor_Border) {
             self->bwidth = ob_rr_theme->bwidth;
             self->cbwidth = ob_rr_theme->cbwidth;
         } else {
@@ -223,7 +225,7 @@ void frame_adjust_area(Frame *self, gboolean moved, gboolean resized)
         self->max_x = -1;
         self->close_x = -1;
 
-        if (self->client->decorations & Decor_Titlebar) {
+        if (self->decorations & Decor_Titlebar) {
             XMoveResizeWindow(ob_display, self->title,
                               -self->bwidth, -self->bwidth,
                               self->width, ob_rr_theme->title_height);
@@ -235,7 +237,7 @@ void frame_adjust_area(Frame *self, gboolean moved, gboolean resized)
         } else
             XUnmapWindow(ob_display, self->title);
 
-        if (self->client->decorations & Decor_Handle) {
+        if (self->decorations & Decor_Handle) {
             XMoveResizeWindow(ob_display, self->handle,
                               -self->bwidth, FRAME_HANDLE_Y(self),
                               self->width, ob_rr_theme->handle_height);
@@ -425,28 +427,28 @@ static void layout_title(Frame *self)
     for (lc = ob_rr_theme->title_layout; *lc != '\0'; ++lc) {
        switch (*lc) {
        case 'N':
-           if (!(self->client->decorations & Decor_Icon)) break;
+           if (!(self->decorations & Decor_Icon)) break;
             if (n) { *lc = ' '; break; } /* rm duplicates */
            n = TRUE;
            self->label_width -= (ob_rr_theme->button_size + 2 +
                                   ob_rr_theme->bevel + 1);
            break;
        case 'D':
-           if (!(self->client->decorations & Decor_AllDesktops)) break;
+           if (!(self->decorations & Decor_AllDesktops)) break;
             if (d) { *lc = ' '; break; } /* rm duplicates */
            d = TRUE;
            self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->bevel + 1);
            break;
        case 'S':
-           if (!(self->client->decorations & Decor_Shade)) break;
+           if (!(self->decorations & Decor_Shade)) break;
             if (s) { *lc = ' '; break; } /* rm duplicates */
            s = TRUE;
            self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->bevel + 1);
            break;
        case 'I':
-           if (!(self->client->decorations & Decor_Iconify)) break;
+           if (!(self->decorations & Decor_Iconify)) break;
             if (i) { *lc = ' '; break; } /* rm duplicates */
            i = TRUE;
            self->label_width -= (ob_rr_theme->button_size +
@@ -457,14 +459,14 @@ static void layout_title(Frame *self)
            l = TRUE;
            break;
        case 'M':
-           if (!(self->client->decorations & Decor_Maximize)) break;
+           if (!(self->decorations & Decor_Maximize)) break;
             if (m) { *lc = ' '; break; } /* rm duplicates */
            m = TRUE;
            self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->bevel + 1);
            break;
        case 'C':
-           if (!(self->client->decorations & Decor_Close)) break;
+           if (!(self->decorations & Decor_Close)) break;
             if (c) { *lc = ' '; break; } /* rm duplicates */
            c = TRUE;
            self->label_width -= (ob_rr_theme->button_size +
index bfce4a7d266233a2f4349bc7cb287adf2b059cf0..2720de91eff38bbcdeaa7fad1b7b083f00eb057d 100644 (file)
@@ -37,6 +37,7 @@ typedef struct Frame {
     Strut  size;
     Rect   area;
     gboolean visible;
+    int    decorations;
 
     Window title;
     Window label;
This page took 0.03522 seconds and 4 git commands to generate.