diff options
Diffstat (limited to '02-ColourBorders.patch')
-rw-r--r-- | 02-ColourBorders.patch | 1614 |
1 files changed, 1614 insertions, 0 deletions
diff --git a/02-ColourBorders.patch b/02-ColourBorders.patch new file mode 100644 index 000000000000..dfcda12aee9f --- /dev/null +++ b/02-ColourBorders.patch @@ -0,0 +1,1614 @@ +diff -U3 -r fvwm/borders.c fvwm/borders.c +--- fvwm/borders.c 2011-08-07 00:03:31.000000000 +0200 ++++ fvwm/borders.c 2011-12-09 18:29:08.005127939 +0100 +@@ -124,14 +124,71 @@ + int relief_width; + GC relief_gc; + GC shadow_gc; ++ GC relief_gc_north; ++ GC shadow_gc_north; ++ GC relief_gc_south; ++ GC shadow_gc_south; ++ GC relief_gc_east; ++ GC shadow_gc_east; ++ GC relief_gc_west; ++ GC shadow_gc_west; ++ GC relief_gc_nw; ++ GC shadow_gc_nw; ++ GC relief_gc_ne; ++ GC shadow_gc_ne; ++ GC relief_gc_sw; ++ GC shadow_gc_sw; ++ GC relief_gc_se; ++ GC shadow_gc_se; ++ + Pixel fore_color; + Pixel back_color; +- int cs; ++ Pixel fore_color_north; ++ Pixel back_color_north; ++ Pixel fore_color_south; ++ Pixel back_color_south; ++ Pixel fore_color_east; ++ Pixel back_color_east; ++ Pixel fore_color_west; ++ Pixel back_color_west; ++ Pixel fore_color_nw; ++ Pixel back_color_nw; ++ Pixel fore_color_ne; ++ Pixel back_color_ne; ++ Pixel fore_color_sw; ++ Pixel back_color_sw; ++ Pixel fore_color_se; ++ Pixel back_color_se; ++ ++ int cs; ++ int cs_north; ++ int cs_south; ++ int cs_east; ++ int cs_west; + int border_cs; /* for UseBorderStyle */ ++ int border_cs_north; ++ int border_cs_south; ++ int border_cs_east; ++ int border_cs_west; ++ ++ int cs_nw; ++ int cs_ne; ++ int cs_sw; ++ int cs_se; + int bg_border_cs; /* for UseBorderStyle */ + Pixmap back_pixmap; +- XSetWindowAttributes attributes; +- unsigned long valuemask; ++ ++ XSetWindowAttributes attributes; ++ XSetWindowAttributes attributes_north; ++ XSetWindowAttributes attributes_ne; ++ XSetWindowAttributes attributes_nw; ++ XSetWindowAttributes attributes_sw; ++ XSetWindowAttributes attributes_se; ++ XSetWindowAttributes attributes_south; ++ XSetWindowAttributes attributes_east; ++ XSetWindowAttributes attributes_west; ++ ++ unsigned long valuemask; + Pixmap texture_pixmap; + int texture_pixmap_width; + int texture_pixmap_height; +@@ -329,10 +386,29 @@ + { + DecorFace *df; + color_quad *draw_colors; ++ color_quad *draw_colors_north; ++ color_quad *draw_colors_south; ++ color_quad *draw_colors_east; ++ color_quad *draw_colors_west; ++ ++ color_quad *draw_colors_nw; ++ color_quad *draw_colors_ne; ++ color_quad *draw_colors_sw; ++ color_quad *draw_colors_se; + + df = border_get_border_style(t, has_focus); + cd->bg_border_cs = -1; + cd->cs = -1; ++ cd->cs_north = -1; ++ cd->cs_south = -1; ++ cd->cs_east = -1; ++ cd->cs_west = -1; ++ ++ cd->cs_nw = -1; ++ cd->cs_ne = -1; ++ cd->cs_sw = -1; ++ cd->cs_se = -1; ++ + if (has_focus) + { + /* are we using textured borders? */ +@@ -356,11 +432,61 @@ + { + draw_colors = &(t->border_hicolors); + cd->cs = t->border_cs_hi; ++ ++ draw_colors_north = &(t->border_hicolors_north); ++ cd->cs_north = t->border_cs_hi_north; ++ ++ draw_colors_south = &(t->border_hicolors_south); ++ cd->cs_south = t->border_cs_hi_south; ++ ++ draw_colors_east = &(t->border_hicolors_east); ++ cd->cs_east = t->border_cs_hi_east; ++ ++ draw_colors_west = &(t->border_hicolors_west); ++ cd->cs_west = t->border_cs_hi_west; ++ ++ /* handles */ ++ draw_colors_nw = &(t->border_hicolors_handles_nw); ++ cd->cs_nw = t->border_cs_hi_handles_nw; ++ ++ draw_colors_ne = &(t->border_hicolors_handles_ne); ++ cd->cs_ne = t->border_cs_hi_handles_ne; ++ ++ draw_colors_sw = &(t->border_hicolors_handles_sw); ++ cd->cs_sw = t->border_cs_hi_handles_sw; ++ ++ draw_colors_se = &(t->border_hicolors_handles_se); ++ cd->cs_se = t->border_cs_hi_handles_se; + } + else + { + draw_colors = &(t->hicolors); + cd->cs = t->cs_hi; ++ ++ draw_colors_north = &(t->hicolors); ++ cd->cs_north = t->cs_hi; ++ ++ draw_colors_south = &(t->hicolors); ++ cd->cs_south = t->cs_hi; ++ ++ draw_colors_east = &(t->hicolors); ++ cd->cs_east = t->cs_hi; ++ ++ draw_colors_west = &(t->hicolors); ++ cd->cs_west = t->cs_hi; ++ ++ /* handles */ ++ draw_colors_nw = &(t->hicolors); ++ cd->cs_nw = t->cs_hi; ++ ++ draw_colors_ne = &(t->hicolors); ++ cd->cs_ne = t->cs_hi; ++ ++ draw_colors_sw = &(t->hicolors); ++ cd->cs_sw = t->cs_hi; ++ ++ draw_colors_se = &(t->hicolors); ++ cd->cs_se = t->cs_hi; + } + } + else +@@ -392,24 +518,167 @@ + { + draw_colors = &(t->border_colors); + cd->cs = t->border_cs; ++ ++ draw_colors_north = &(t->border_colors_north); ++ cd->cs_north = t->border_cs_north; ++ ++ draw_colors_south = &(t->border_colors_south); ++ cd->cs_south = t->border_cs_south; ++ ++ draw_colors_east = &(t->border_colors_east); ++ cd->cs_east = t->border_cs_east; ++ ++ draw_colors_west = &(t->border_colors_west); ++ cd->cs_west = t->border_cs_west; ++ ++ /* handles */ ++ draw_colors_nw = &(t->border_colors_handles_nw); ++ cd->cs_nw = t->border_cs_handles_nw; ++ ++ draw_colors_ne = &(t->border_colors_handles_ne); ++ cd->cs_ne = t->border_cs_handles_ne; ++ ++ draw_colors_sw = &(t->border_colors_handles_sw); ++ cd->cs_sw = t->border_cs_handles_sw; ++ ++ draw_colors_se = &(t->border_colors_handles_se); ++ cd->cs_se = t->border_cs_handles_se; ++ + } + else + { + draw_colors = &(t->colors); + cd->cs = t->cs; ++ ++ draw_colors_north = &(t->border_colors_north); ++ cd->cs_north = t->cs; ++ ++ draw_colors_south = &(t->border_colors_south); ++ cd->cs_south = t->cs; ++ ++ draw_colors_east = &(t->border_colors_east); ++ cd->cs_east = t->cs; ++ ++ draw_colors_west = &(t->border_colors_west); ++ cd->cs_west = t->cs; ++ ++ /* handles */ ++ draw_colors_nw = &(t->border_colors_handles_nw); ++ cd->cs_nw = t->border_cs_handles_nw; ++ ++ draw_colors_ne = &(t->border_colors_handles_ne); ++ cd->cs_ne = t->border_cs_handles_ne; ++ ++ draw_colors_sw = &(t->border_colors_handles_sw); ++ cd->cs_sw = t->border_cs_handles_sw; ++ ++ draw_colors_se = &(t->border_colors_handles_se); ++ cd->cs_se = t->border_cs_handles_se; + } + } + cd->fore_color = draw_colors->fore; + cd->back_color = draw_colors->back; +- if (do_change_gcs) ++ ++ cd->fore_color_north = draw_colors_north->fore; ++ cd->back_color_north = draw_colors_north->back; ++ ++ cd->fore_color_south = draw_colors_south->fore; ++ cd->back_color_south = draw_colors_south->back; ++ ++ cd->fore_color_east = draw_colors_east->fore; ++ cd->back_color_east = draw_colors_east->back; ++ ++ cd->fore_color_west = draw_colors_west->fore; ++ cd->back_color_west = draw_colors_west->back; ++ ++ cd->fore_color_nw = draw_colors_nw->fore; ++ cd->back_color_nw = draw_colors_nw->back; ++ ++ cd->fore_color_ne = draw_colors_ne->fore; ++ cd->back_color_ne = draw_colors_ne->back; ++ ++ cd->fore_color_sw = draw_colors_nw->fore; ++ cd->back_color_sw = draw_colors_nw->back; ++ ++ cd->fore_color_se = draw_colors_se->fore; ++ cd->back_color_se = draw_colors_se->back; ++ ++ if (do_change_gcs) + { + Globalgcv.foreground = draw_colors->hilight; + Globalgcm = GCForeground; + XChangeGC(dpy, Scr.ScratchGC1, Globalgcm, &Globalgcv); + Globalgcv.foreground = draw_colors->shadow; + XChangeGC(dpy, Scr.ScratchGC2, Globalgcm, &Globalgcv); ++ ++ Globalgcv.foreground = draw_colors_north->hilight; ++ XChangeGC(dpy, Scr.ScratchGC3, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_north->shadow; ++ XChangeGC(dpy, Scr.ScratchGC4, Globalgcm, &Globalgcv); ++ ++ Globalgcv.foreground = draw_colors_south->hilight; ++ XChangeGC(dpy, Scr.ScratchGC5, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_south->shadow; ++ XChangeGC(dpy, Scr.ScratchGC6, Globalgcm, &Globalgcv); ++ ++ Globalgcv.foreground = draw_colors_east->hilight; ++ XChangeGC(dpy, Scr.ScratchGC7, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_east->shadow; ++ XChangeGC(dpy, Scr.ScratchGC8, Globalgcm, &Globalgcv); ++ ++ Globalgcv.foreground = draw_colors_west->hilight; ++ XChangeGC(dpy, Scr.ScratchGC9, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_west->shadow; ++ XChangeGC(dpy, Scr.ScratchGC10, Globalgcm, &Globalgcv); ++ ++ /* handles. */ ++ Globalgcv.foreground = draw_colors_nw->hilight; ++ XChangeGC(dpy, Scr.ScratchGC11, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_nw->shadow; ++ XChangeGC(dpy, Scr.ScratchGC12, Globalgcm, &Globalgcv); ++ ++ Globalgcv.foreground = draw_colors_ne->hilight; ++ XChangeGC(dpy, Scr.ScratchGC13, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_ne->shadow; ++ XChangeGC(dpy, Scr.ScratchGC14, Globalgcm, &Globalgcv); ++ ++ Globalgcv.foreground = draw_colors_sw->hilight; ++ XChangeGC(dpy, Scr.ScratchGC15, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_sw->shadow; ++ XChangeGC(dpy, Scr.ScratchGC16, Globalgcm, &Globalgcv); ++ ++ Globalgcv.foreground = draw_colors_se->hilight; ++ XChangeGC(dpy, Scr.ScratchGC17, Globalgcm, &Globalgcv); ++ Globalgcv.foreground = draw_colors_se->shadow; ++ XChangeGC(dpy, Scr.ScratchGC18, Globalgcm, &Globalgcv); ++ + cd->relief_gc = Scr.ScratchGC1; + cd->shadow_gc = Scr.ScratchGC2; ++ ++ cd->relief_gc_north = Scr.ScratchGC3; ++ cd->shadow_gc_north = Scr.ScratchGC4; ++ ++ cd->relief_gc_south = Scr.ScratchGC5; ++ cd->shadow_gc_south = Scr.ScratchGC6; ++ ++ cd->relief_gc_east = Scr.ScratchGC7; ++ cd->shadow_gc_east = Scr.ScratchGC8; ++ ++ cd->relief_gc_west = Scr.ScratchGC9; ++ cd->shadow_gc_west = Scr.ScratchGC10; ++ ++ /* Handles */ ++ cd->relief_gc_nw = Scr.ScratchGC11; ++ cd->shadow_gc_nw = Scr.ScratchGC12; ++ ++ cd->relief_gc_ne = Scr.ScratchGC13; ++ cd->shadow_gc_ne = Scr.ScratchGC14; ++ ++ cd->relief_gc_sw = Scr.ScratchGC15; ++ cd->shadow_gc_sw = Scr.ScratchGC16; ++ ++ cd->relief_gc_se = Scr.ScratchGC17; ++ cd->shadow_gc_se = Scr.ScratchGC18; + } + + /* MWMBorder style means thin 3d effects */ +@@ -430,6 +699,17 @@ + else + { + cd->attributes.background_pixel = cd->back_color; ++ cd->attributes_north.background_pixel = cd->back_color_north; ++ cd->attributes_south.background_pixel = cd->back_color_south; ++ cd->attributes_east.background_pixel = cd->back_color_east; ++ cd->attributes_west.background_pixel = cd->back_color_west; ++ ++ /* handles */ ++ cd->attributes_nw.background_pixel = cd->back_color_nw; ++ cd->attributes_ne.background_pixel = cd->back_color_ne; ++ cd->attributes_sw.background_pixel = cd->back_color_sw; ++ cd->attributes_se.background_pixel = cd->back_color_se; ++ + cd->valuemask = CWBackPixel; + } + } +@@ -799,7 +1079,7 @@ + + static void border_get_border_gcs( + draw_border_gcs *ret_gcs, common_decorations_type *cd, FvwmWindow *fw, +- Bool do_hilight) ++ Bool do_hilight, window_parts part) + { + static GC transparent_gc = None; + DecorFaceStyle *borderstyle; +@@ -823,17 +1103,102 @@ + { + is_reversed = True; + } +- if (is_reversed) +- { +- ret_gcs->shadow = cd->relief_gc; +- ret_gcs->relief = cd->shadow_gc; +- } +- else +- { +- ret_gcs->relief = cd->relief_gc; +- ret_gcs->shadow = cd->shadow_gc; +- } +- ++ ++ switch ( part ) ++ { ++ case PART_BORDER_N: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_north; ++ ret_gcs->relief = cd->shadow_gc_north; ++ } else { ++ ret_gcs->relief = cd->relief_gc_north; ++ ret_gcs->shadow = cd->shadow_gc_north; ++ } ++ break; ++ case PART_BORDER_S: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_south; ++ ret_gcs->relief = cd->shadow_gc_south; ++ } else { ++ ret_gcs->relief = cd->relief_gc_south; ++ ret_gcs->shadow = cd->shadow_gc_south; ++ } ++ break; ++ case PART_BORDER_E: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_east; ++ ret_gcs->relief = cd->shadow_gc_east; ++ } else { ++ ret_gcs->relief = cd->relief_gc_east; ++ ret_gcs->shadow = cd->shadow_gc_east; ++ } ++ break; ++ case PART_BORDER_W: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_west; ++ ret_gcs->relief = cd->shadow_gc_west; ++ } else { ++ ret_gcs->relief = cd->relief_gc_west; ++ ret_gcs->shadow = cd->shadow_gc_west; ++ } ++ break; ++ case PART_BORDER_NW: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_nw; ++ ret_gcs->relief = cd->shadow_gc_nw; ++ } else { ++ ret_gcs->relief = cd->relief_gc_nw; ++ ret_gcs->shadow = cd->shadow_gc_nw; ++ } ++ break; ++ case PART_BORDER_NE: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_ne; ++ ret_gcs->relief = cd->shadow_gc_ne; ++ } else { ++ ret_gcs->relief = cd->relief_gc_ne; ++ ret_gcs->shadow = cd->shadow_gc_ne; ++ } ++ break; ++ case PART_BORDER_SW: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_sw; ++ ret_gcs->relief = cd->shadow_gc_sw; ++ } else { ++ ret_gcs->relief = cd->relief_gc_sw; ++ ret_gcs->shadow = cd->shadow_gc_sw; ++ } ++ break; ++ case PART_BORDER_SE: ++ if( is_reversed ) ++ { ++ ret_gcs->shadow = cd->relief_gc_se; ++ ret_gcs->relief = cd->shadow_gc_se; ++ } else { ++ ret_gcs->relief = cd->relief_gc_se; ++ ret_gcs->shadow = cd->shadow_gc_se; ++ } ++ break; ++ default: ++ if (is_reversed) ++ { ++ ret_gcs->shadow = cd->relief_gc; ++ ret_gcs->relief = cd->shadow_gc; ++ } ++ else ++ { ++ ret_gcs->relief = cd->relief_gc; ++ ret_gcs->shadow = cd->shadow_gc; ++ } ++ break; ++ } + return; + } + +@@ -1135,12 +1500,13 @@ + } + if (do_draw_shadow) + { +- x1 = x + k; ++ //x1 = x + k; ++ x1 = x; + y1 = y - 1 - k; + } + else + { +- x1 = x; ++ x1 = x - k; + y1 = y + k; + } + x2 = x1 + length; +@@ -1291,9 +1657,11 @@ + valuemask |= GCForeground | GCClipMask | GCClipXOrigin | + GCClipYOrigin; + XChangeGC(dpy, Scr.BordersGC, valuemask, &xgcv); +- XFillRectangle( ++ ++ XFillRectangle( + dpy, dest_pix, Scr.BordersGC, dest_g->x, dest_g->y, + dest_g->width - dest_g->x, dest_g->height - dest_g->y); ++ + return; + } + +@@ -1453,7 +1821,7 @@ + + static void border_get_border_background( + pixmap_background_type *bg, common_decorations_type *cd, +- rectangle *part_g, rectangle *relative_g, int *free_bg_pixmap, Window w) ++ rectangle *part_g, rectangle *relative_g, int *free_bg_pixmap, Window w, window_parts part) + { + *free_bg_pixmap = False; + +@@ -1519,9 +1887,38 @@ + else + { + bg->flags.use_pixmap = 0; +- bg->pixel = cd->attributes.background_pixel; +- } + ++ switch ( part ) ++ { ++ case PART_BORDER_N: ++ bg->pixel = cd->attributes_north.background_pixel; ++ break; ++ case PART_BORDER_S: ++ bg->pixel = cd->attributes_south.background_pixel; ++ break; ++ case PART_BORDER_E: ++ bg->pixel = cd->attributes_east.background_pixel; ++ break; ++ case PART_BORDER_W: ++ bg->pixel = cd->attributes_west.background_pixel; ++ break; ++ case PART_BORDER_NW: ++ bg->pixel = cd->attributes_nw.background_pixel; ++ break; ++ case PART_BORDER_NE: ++ bg->pixel = cd->attributes_ne.background_pixel; ++ break; ++ case PART_BORDER_SW: ++ bg->pixel = cd->attributes_sw.background_pixel; ++ break; ++ case PART_BORDER_SE: ++ bg->pixel = cd->attributes_se.background_pixel; ++ break; ++ default: ++ bg->pixel = cd->attributes.background_pixel; ++ break; ++ } ++ } + return; + } + +@@ -1551,7 +1948,7 @@ + relative_g.x = part_g.x; + relative_g.y = part_g.y; + border_get_border_background( +- &bg, cd, &part_g, &relative_g, &free_bg_pixmap, w); ++ &bg, cd, &part_g, &relative_g, &free_bg_pixmap, w, part); + if (cd->texture_pixmap) + { + switch (part) +@@ -1638,7 +2035,7 @@ + border_get_border_relief_size_descr(&br->relief, fw, do_hilight); + border_get_border_marks_descr(cd, br, fw); + /* fetch the gcs used to draw the border */ +- border_get_border_gcs(&br->gcs, cd, fw, do_hilight); ++ //border_get_border_gcs(&br->gcs, cd, fw, do_hilight); + /* draw everything in a big loop */ + draw_parts &= (PART_FRAME | PART_HANDLES); + draw_handles = (draw_parts & PART_HANDLES); +@@ -1647,11 +2044,12 @@ + { + if (part & draw_parts) + { +- border_draw_one_border_part( +- cd, fw, &br->sidebar_g, frame_g, br, part, +- draw_handles, +- (pressed_parts & part) ? True : False, +- do_clear); ++ border_get_border_gcs(&br->gcs, cd, fw, do_hilight, part); ++ border_draw_one_border_part( ++ cd, fw, &br->sidebar_g, frame_g, br, part, ++ draw_handles, ++ (pressed_parts & part) ? True : False, ++ do_clear); + } + } + +@@ -3279,7 +3677,7 @@ + relative_g.x = button_g->x; + relative_g.y = button_g->y; + border_get_border_background( +- &bg, td->cd, button_g, &relative_g, &free_bg_pixmap, w); ++ &bg, td->cd, button_g, &relative_g, &free_bg_pixmap, w, PART_NONE); + bg.pixmap.g.x = 0; + bg.pixmap.g.y = 0; + /* set the geometry for drawing the Tiled pixmap; +@@ -3723,7 +4121,7 @@ + relative_g.y = td->layout.title_g.y; + border_get_border_background( + &bg, td->cd, &td->layout.title_g, &relative_g, +- &free_bg_pixmap, w); ++ &free_bg_pixmap, w, PART_NONE); + bg.pixmap.g.x = 0; + bg.pixmap.g.y = 0; + /* set the geometry for drawing the Tiled pixmap; +diff -U3 -r fvwm/fvwm.c fvwm/fvwm.c +--- fvwm/fvwm.c 2011-08-07 00:03:31.000000000 +0200 ++++ fvwm/fvwm.c 2011-12-09 18:29:08.005127939 +0100 +@@ -1083,7 +1083,22 @@ + Scr.ScratchGC2 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); + Scr.ScratchGC3 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); + Scr.ScratchGC4 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); +- Scr.TitleGC = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC5 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC6 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC7 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC8 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC9 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC10 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC11 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC12 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC13 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC14 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC15 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC16 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC17 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ Scr.ScratchGC18 = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); ++ ++ Scr.TitleGC = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); + Scr.BordersGC = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); + Scr.TransMaskGC = fvwmlib_XCreateGC(dpy, Scr.NoFocusWin, gcm, &gcv); + Scr.ScratchMonoPixmap = XCreatePixmap(dpy, Scr.Root, 1, 1, 1); +diff -U3 -r fvwm/fvwm.h fvwm/fvwm.h +--- fvwm/fvwm.h 2011-09-11 00:19:51.000000000 +0200 ++++ fvwm/fvwm.h 2011-12-09 18:29:08.008461188 +0100 +@@ -577,7 +577,23 @@ + unsigned use_colorset : 1; + unsigned use_colorset_hi : 1; + unsigned use_border_colorset : 1; ++ unsigned use_border_colorset_north : 1; ++ unsigned use_border_colorset_south : 1; ++ unsigned use_border_colorset_east : 1; ++ unsigned use_border_colorset_west : 1; ++ unsigned use_border_colorset_handles_nw : 1; ++ unsigned use_border_colorset_handles_ne : 1; ++ unsigned use_border_colorset_handles_sw : 1; ++ unsigned use_border_colorset_handles_se : 1; + unsigned use_border_colorset_hi : 1; ++ unsigned use_border_colorset_hi_north : 1; ++ unsigned use_border_colorset_hi_south : 1; ++ unsigned use_border_colorset_hi_east : 1; ++ unsigned use_border_colorset_hi_west : 1; ++ unsigned use_border_colorset_hi_handles_nw : 1; ++ unsigned use_border_colorset_hi_handles_ne : 1; ++ unsigned use_border_colorset_hi_handles_sw : 1; ++ unsigned use_border_colorset_hi_handles_se : 1; + unsigned use_icon_title_colorset : 1; + unsigned use_icon_title_colorset_hi : 1; + unsigned use_icon_background_colorset : 1; +@@ -668,7 +684,23 @@ + int colorset; + int colorset_hi; + int border_colorset; ++ int border_colorset_north; ++ int border_colorset_south; ++ int border_colorset_east; ++ int border_colorset_west; ++ int border_colorset_handles_nw; ++ int border_colorset_handles_ne; ++ int border_colorset_handles_sw; ++ int border_colorset_handles_se; + int border_colorset_hi; ++ int border_colorset_hi_north; ++ int border_colorset_hi_south; ++ int border_colorset_hi_east; ++ int border_colorset_hi_west; ++ int border_colorset_hi_handles_nw; ++ int border_colorset_hi_handles_ne; ++ int border_colorset_hi_handles_sw; ++ int border_colorset_hi_handles_se; + int icon_title_colorset; + int icon_title_colorset_hi; + int icon_background_colorset; +@@ -883,12 +915,51 @@ + color_quad colors; + color_quad hicolors; + color_quad border_colors; ++ color_quad border_colors_north; ++ color_quad border_colors_south; ++ color_quad border_colors_east; ++ color_quad border_colors_west; ++ ++ color_quad border_colors_handles_nw; ++ color_quad border_colors_handles_ne; ++ color_quad border_colors_handles_sw; ++ color_quad border_colors_handles_se; ++ + color_quad border_hicolors; ++ color_quad border_hicolors_north; ++ color_quad border_hicolors_south; ++ color_quad border_hicolors_east; ++ color_quad border_hicolors_west; ++ ++ color_quad border_hicolors_handles_nw; ++ color_quad border_hicolors_handles_ne; ++ color_quad border_hicolors_handles_sw; ++ color_quad border_hicolors_handles_se; + + int cs; + int cs_hi; + int border_cs; ++ int border_cs_north; ++ int border_cs_south; ++ int border_cs_east; ++ int border_cs_west; ++ ++ int border_cs_handles_nw; ++ int border_cs_handles_ne; ++ int border_cs_handles_sw; ++ int border_cs_handles_se; ++ + int border_cs_hi; ++ int border_cs_hi_north; ++ int border_cs_hi_south; ++ int border_cs_hi_east; ++ int border_cs_hi_west; ++ ++ int border_cs_hi_handles_nw; ++ int border_cs_hi_handles_ne; ++ int border_cs_hi_handles_sw; ++ int border_cs_hi_handles_se; ++ + int icon_title_cs; + int icon_title_cs_hi; + int icon_background_cs; +diff -U3 -r fvwm/screen.h fvwm/screen.h +--- fvwm/screen.h 2009-12-31 18:35:47.000000000 +0100 ++++ fvwm/screen.h 2011-12-09 18:29:08.008461188 +0100 +@@ -409,6 +409,21 @@ + GC ScratchGC2; + GC ScratchGC3; + GC ScratchGC4; ++ GC ScratchGC5; ++ GC ScratchGC6; ++ GC ScratchGC7; ++ GC ScratchGC8; ++ GC ScratchGC9; ++ GC ScratchGC10; ++ GC ScratchGC11; ++ GC ScratchGC12; ++ GC ScratchGC13; ++ GC ScratchGC14; ++ GC ScratchGC15; ++ GC ScratchGC16; ++ GC ScratchGC17; ++ GC ScratchGC18; ++ + GC TitleGC; + GC BordersGC; + /* minimum width of size window */ +diff -U3 -r fvwm/style.c fvwm/style.c +--- fvwm/style.c 2011-09-27 23:05:00.000000000 +0200 ++++ fvwm/style.c 2011-12-09 18:29:08.011794436 +0100 +@@ -675,11 +675,91 @@ + SSET_BORDER_COLORSET( + *merged_style, SGET_BORDER_COLORSET(*add_style)); + } ++ if (add_style->flags.use_border_colorset_north) ++ { ++ SSET_BORDER_COLORSET_NORTH( ++ *merged_style,SGET_BORDER_COLORSET_NORTH(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_south) ++ { ++ SSET_BORDER_COLORSET_SOUTH( ++ *merged_style,SGET_BORDER_COLORSET_SOUTH(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_east) ++ { ++ SSET_BORDER_COLORSET_EAST( ++ *merged_style,SGET_BORDER_COLORSET_EAST(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_west) ++ { ++ SSET_BORDER_COLORSET_WEST( ++ *merged_style,SGET_BORDER_COLORSET_WEST(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_handles_nw) ++ { ++ SSET_BORDER_COLORSET_HANDLES_NW( ++ *merged_style,SGET_BORDER_COLORSET_HANDLES_NW(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_handles_ne) ++ { ++ SSET_BORDER_COLORSET_HANDLES_NE( ++ *merged_style,SGET_BORDER_COLORSET_HANDLES_NE(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_handles_sw) ++ { ++ SSET_BORDER_COLORSET_HANDLES_SW( ++ *merged_style,SGET_BORDER_COLORSET_HANDLES_SW(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_handles_se) ++ { ++ SSET_BORDER_COLORSET_HANDLES_SE( ++ *merged_style,SGET_BORDER_COLORSET_HANDLES_SE(*add_style)); ++ } + if (add_style->flags.use_border_colorset_hi) + { + SSET_BORDER_COLORSET_HI( + *merged_style,SGET_BORDER_COLORSET_HI(*add_style)); + } ++ if (add_style->flags.use_border_colorset_hi_north) ++ { ++ SSET_BORDER_COLORSET_HI_NORTH( ++ *merged_style,SGET_BORDER_COLORSET_HI_NORTH(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_hi_south) ++ { ++ SSET_BORDER_COLORSET_HI_SOUTH( ++ *merged_style,SGET_BORDER_COLORSET_HI_SOUTH(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_hi_east) ++ { ++ SSET_BORDER_COLORSET_HI_EAST( ++ *merged_style,SGET_BORDER_COLORSET_HI_EAST(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_hi_west) ++ { ++ SSET_BORDER_COLORSET_HI_WEST( ++ *merged_style,SGET_BORDER_COLORSET_HI_WEST(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_hi_handles_nw) ++ { ++ SSET_BORDER_COLORSET_HI_HANDLES_NW( ++ *merged_style,SGET_BORDER_COLORSET_HI_HANDLES_NW(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_hi_handles_ne) ++ { ++ SSET_BORDER_COLORSET_HI_HANDLES_NE( ++ *merged_style,SGET_BORDER_COLORSET_HI_HANDLES_NE(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_hi_handles_sw) ++ { ++ SSET_BORDER_COLORSET_HI_HANDLES_SW( ++ *merged_style,SGET_BORDER_COLORSET_HI_HANDLES_SW(*add_style)); ++ } ++ if (add_style->flags.use_border_colorset_hi_handles_se) ++ { ++ SSET_BORDER_COLORSET_HI_HANDLES_SE( ++ *merged_style,SGET_BORDER_COLORSET_HI_HANDLES_SE(*add_style)); ++ } + if (add_style->flags.use_icon_title_colorset) + { + SSET_ICON_TITLE_COLORSET( +@@ -2223,6 +2303,120 @@ + ps->flag_mask.use_border_colorset = 1; + ps->change_mask.use_border_colorset = 1; + } ++ else if (StrEquals(token, "BorderColorsetRegions")) ++ { ++ int f[4] = {-1, -1, -1, -1}; ++ Bool bad = False; ++ ++ num = 0; ++ if (on != 0) ++ { ++ num = GetIntegerArguments(rest, &rest, val, 4); ++ ++ for (i=0; i < num; i++) ++ { ++ if (val[i] < 0) ++ { ++ bad = True; ++ } else { ++ f[i] = val[i]; ++ } ++ } ++ } ++ if (bad) ++ { ++ fvwm_msg( ++ ERR, "style_parse_one_style_option", ++ "Bad argument to BorderColorsetRegions" ++ ": %s", rest); ++ break; ++ } ++ ++ /* If 'f' defines our array of colorsets then dispatch ++ * them here. ++ */ ++ ++ SSET_BORDER_COLORSET_NORTH(*ps, f[0]); ++ alloc_colorset(f[0]); ++ ps->flags.use_border_colorset_north = (f[0] >= 0); ++ ps->flag_mask.use_border_colorset_north = 1; ++ ps->change_mask.use_border_colorset_north = 1; ++ ++ ++ SSET_BORDER_COLORSET_SOUTH(*ps, f[1]); ++ alloc_colorset(f[1]); ++ ps->flags.use_border_colorset_south = (f[1] >= 0); ++ ps->flag_mask.use_border_colorset_south = 1; ++ ps->change_mask.use_border_colorset_south = 1; ++ ++ SSET_BORDER_COLORSET_EAST(*ps, f[2]); ++ alloc_colorset(f[2]); ++ ps->flags.use_border_colorset_east = (f[2] >= 0); ++ ps->flag_mask.use_border_colorset_east = 1; ++ ps->change_mask.use_border_colorset_east = 1; ++ ++ SSET_BORDER_COLORSET_WEST(*ps, f[3]); ++ alloc_colorset(f[3]); ++ ps->flags.use_border_colorset_west = (f[3] >= 0); ++ ps->flag_mask.use_border_colorset_west = 1; ++ ps->change_mask.use_border_colorset_west = 1; ++ } ++ else if (StrEquals(token, "BorderHandlesColorsetRegions")) ++ { ++ int f[4] = {-1, -1, -1, -1}; ++ Bool bad = False; ++ ++ num = 0; ++ if (on != 0) ++ { ++ num = GetIntegerArguments(rest, &rest, val, 4); ++ ++ for (i=0; i < num; i++) ++ { ++ if (val[i] < 0) ++ bad = True; ++ f[i] = val[i]; ++ } ++ } ++ if (bad) ++ { ++ fvwm_msg( ++ ERR, "style_parse_one_style_option", ++ "Bad argument to HandlesColorsetRegions" ++ ": %s", rest); ++ break; ++ } ++ ++ /* If 'f' defines our array of colorsets then dispatch ++ * them here. ++ */ ++ ++ SSET_BORDER_COLORSET_HANDLES_NW(*ps, f[0]); ++ alloc_colorset(f[0]); ++ ps->flags.use_border_colorset_handles_nw = (f[0] >= 0); ++ ps->flag_mask.use_border_colorset_handles_nw = 1; ++ ps->change_mask.use_border_colorset_handles_nw = 1; ++ ++ SSET_BORDER_COLORSET_HANDLES_NE(*ps, f[1]); ++ alloc_colorset(f[1]); ++ ps->flags.use_border_colorset_handles_ne = (f[1] >= 0); ++ ps->flag_mask.use_border_colorset_handles_ne = 1; ++ ps->change_mask.use_border_colorset_handles_ne = 1; ++ ++ SSET_BORDER_COLORSET_HANDLES_SW(*ps, f[2]); ++ alloc_colorset(f[2]); ++ ps->flags.use_border_colorset_handles_sw = (f[2] >= 0); ++ ps->flag_mask.use_border_colorset_handles_sw = 1; ++ ps->change_mask.use_border_colorset_handles_sw = 1; ++ ++ SSET_BORDER_COLORSET_HANDLES_SE(*ps, f[3]); ++ alloc_colorset(f[3]); ++ ps->flags.use_border_colorset_handles_se = (f[3] >= 0); ++ ps->flag_mask.use_border_colorset_handles_se = 1; ++ ps->change_mask.use_border_colorset_handles_se = 1; ++ ++ } ++ + else if (StrEquals(token, "BottomTitleRotated")) + { + S_SET_IS_BOTTOM_TITLE_ROTATED(SCF(*ps), on); +@@ -2871,7 +3065,117 @@ + ps->flag_mask.use_border_colorset_hi = 1; + ps->change_mask.use_border_colorset_hi = 1; + } +- else if (StrEquals(token, "HilightIconTitleColorset")) ++ else if (StrEquals(token, "HilightBorderColorsetRegions")) ++ { ++ int f[4] = {-1, -1, -1, -1}; ++ Bool bad = False; ++ ++ num = 0; ++ if (on != 0) ++ { ++ num = GetIntegerArguments(rest, &rest, val, 4); ++ ++ for (i=0; i < num; i++) ++ { ++ if (val[i] < 0) ++ bad = True; ++ f[i] = val[i]; ++ } ++ } ++ if (bad) ++ { ++ fvwm_msg( ++ ERR, "style_parse_one_style_option", ++ "Bad argument to HilightBorderColorsetRegions" ++ ": %s", rest); ++ break; ++ } ++ ++ /* If 'f' defines our array of colorsets then dispatch ++ * them here. ++ */ ++ ++ SSET_BORDER_COLORSET_HI_NORTH(*ps, f[0]); ++ alloc_colorset(f[0]); ++ ps->flags.use_border_colorset_hi_north = (f[0] >= 0); ++ ps->flag_mask.use_border_colorset_hi_north = 1; ++ ps->change_mask.use_border_colorset_hi_north = 1; ++ ++ SSET_BORDER_COLORSET_HI_SOUTH(*ps, f[1]); ++ alloc_colorset(f[1]); ++ ps->flags.use_border_colorset_hi_south = (f[1] >= 0); ++ ps->flag_mask.use_border_colorset_hi_south = 1; ++ ps->change_mask.use_border_colorset_hi_south = 1; ++ ++ SSET_BORDER_COLORSET_HI_EAST(*ps, f[2]); ++ alloc_colorset(f[2]); ++ ps->flags.use_border_colorset_hi_east = (f[2] >= 0); ++ ps->flag_mask.use_border_colorset_hi_east = 1; ++ ps->change_mask.use_border_colorset_hi_east = 1; ++ ++ SSET_BORDER_COLORSET_HI_WEST(*ps, f[3]); ++ alloc_colorset(f[3]); ++ ps->flags.use_border_colorset_hi_west = (f[3] >= 0); ++ ps->flag_mask.use_border_colorset_hi_west = 1; ++ ps->change_mask.use_border_colorset_hi_west = 1; ++ ++ } ++ else if (StrEquals(token, "HilightHandlesColorsetRegions")) ++ { ++ int f[4] = {-1, -1, -1, -1}; ++ Bool bad = False; ++ ++ num = 0; ++ if (on != 0) ++ { ++ num = GetIntegerArguments(rest, &rest, val, 4); ++ ++ for (i=0; i < num; i++) ++ { ++ if (val[i] < 0) ++ bad = True; ++ f[i] = val[i]; ++ } ++ } ++ if (bad) ++ { ++ fvwm_msg( ++ ERR, "style_parse_one_style_option", ++ "Bad argument to HilightHandlesColorsetRegions" ++ ": %s", rest); ++ break; ++ } ++ ++ /* If 'f' defines our array of colorsets then dispatch ++ * them here. ++ */ ++ ++ SSET_BORDER_COLORSET_HI_HANDLES_NW(*ps, f[0]); ++ alloc_colorset(f[0]); ++ ps->flags.use_border_colorset_hi_handles_nw = (f[0] >= 0); ++ ps->flag_mask.use_border_colorset_hi_handles_nw = 1; ++ ps->change_mask.use_border_colorset_hi_handles_nw = 1; ++ ++ SSET_BORDER_COLORSET_HI_HANDLES_NE(*ps, f[1]); ++ alloc_colorset(f[1]); ++ ps->flags.use_border_colorset_hi_handles_ne = (f[1] >= 0); ++ ps->flag_mask.use_border_colorset_hi_handles_ne = 1; ++ ps->change_mask.use_border_colorset_hi_handles_ne = 1; ++ ++ SSET_BORDER_COLORSET_HI_HANDLES_SW(*ps, f[2]); ++ alloc_colorset(f[2]); ++ ps->flags.use_border_colorset_hi_handles_sw = (f[2] >= 0); ++ ps->flag_mask.use_border_colorset_hi_handles_sw = 1; ++ ps->change_mask.use_border_colorset_hi_handles_sw = 1; ++ ++ SSET_BORDER_COLORSET_HI_HANDLES_SE(*ps, f[3]); ++ alloc_colorset(f[3]); ++ ps->flags.use_border_colorset_hi_handles_se = (f[3] >= 0); ++ ps->flag_mask.use_border_colorset_hi_handles_se = 1; ++ ps->change_mask.use_border_colorset_hi_handles_se = 1; ++ ++ } ++ else if (StrEquals(token, "HilightIconTitleColorset")) + { + *val = -1; + GetIntegerArguments(rest, &rest, val, 1); +@@ -5290,6 +5594,62 @@ + temp->change_mask.use_border_colorset = 1; + Scr.flags.do_need_window_update = 1; + } ++ if (SUSE_BORDER_COLORSET_NORTH(&temp->flags) && ++ SGET_BORDER_COLORSET_NORTH(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_north = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_SOUTH(&temp->flags) && ++ SGET_BORDER_COLORSET_SOUTH(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_south = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_EAST(&temp->flags) && ++ SGET_BORDER_COLORSET_EAST(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_east = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_WEST(&temp->flags) && ++ SGET_BORDER_COLORSET_WEST(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_west = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HANDLES_NW(&temp->flags) && ++ SGET_BORDER_COLORSET_HANDLES_NW(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_handles_nw = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HANDLES_NE(&temp->flags) && ++ SGET_BORDER_COLORSET_HANDLES_NE(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_handles_ne = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HANDLES_SW(&temp->flags) && ++ SGET_BORDER_COLORSET_HANDLES_SW(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_handles_sw = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HANDLES_SE(&temp->flags) && ++ SGET_BORDER_COLORSET_HANDLES_SE(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_handles_se = 1; ++ Scr.flags.do_need_window_update = 1; ++ } + if (SUSE_BORDER_COLORSET_HI(&temp->flags) && + SGET_BORDER_COLORSET_HI(*temp) == colorset) + { +@@ -5297,6 +5657,62 @@ + temp->change_mask.use_border_colorset_hi = 1; + Scr.flags.do_need_window_update = 1; + } ++ if (SUSE_BORDER_COLORSET_HI_NORTH(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_NORTH(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_north = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HI_SOUTH(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_SOUTH(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_south = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HI_EAST(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_EAST(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_east = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HI_WEST(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_WEST(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_west = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_NW(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_HANDLES_NW(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_handles_nw = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_NE(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_HANDLES_NE(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_handles_ne = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_SW(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_HANDLES_SW(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_handles_sw = 1; ++ Scr.flags.do_need_window_update = 1; ++ } ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_SE(&temp->flags) && ++ SGET_BORDER_COLORSET_HI_HANDLES_SE(*temp) == colorset) ++ { ++ temp->has_style_changed = 1; ++ temp->change_mask.use_border_colorset_hi_handles_se = 1; ++ Scr.flags.do_need_window_update = 1; ++ } + if (SUSE_ICON_TITLE_COLORSET(&temp->flags) && + SGET_ICON_TITLE_COLORSET(*temp) == colorset) + { +@@ -5374,7 +5790,129 @@ + fw->border_colors.shadow = fw->colors.shadow; + fw->border_colors.back = fw->colors.back; + } +-} ++ if (SUSE_BORDER_COLORSET_NORTH(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_NORTH(*pstyle); ++ fw->border_cs_north = cs; ++ fw->border_colors_north.hilight = Colorset[cs].hilite; ++ fw->border_colors_north.shadow = Colorset[cs].shadow; ++ fw->border_colors_north.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_north = -1; ++ fw->border_colors_north.hilight = fw->colors.hilight; ++ fw->border_colors_north.shadow = fw->colors.shadow; ++ fw->border_colors_north.back = fw->colors.back; ++ } ++ if (SUSE_BORDER_COLORSET_SOUTH(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_SOUTH(*pstyle); ++ fw->border_cs_south = cs; ++ fw->border_colors_south.hilight = Colorset[cs].hilite; ++ fw->border_colors_south.shadow = Colorset[cs].shadow; ++ fw->border_colors_south.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_south = -1; ++ fw->border_colors_south.hilight = fw->colors.hilight; ++ fw->border_colors_south.shadow = fw->colors.shadow; ++ fw->border_colors_south.back = fw->colors.back; ++ } ++ if (SUSE_BORDER_COLORSET_EAST(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_EAST(*pstyle); ++ fw->border_cs_east = cs; ++ fw->border_colors_east.hilight = Colorset[cs].hilite; ++ fw->border_colors_east.shadow = Colorset[cs].shadow; ++ fw->border_colors_east.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_east = -1; ++ fw->border_colors_east.hilight = fw->colors.hilight; ++ fw->border_colors_east.shadow = fw->colors.shadow; ++ fw->border_colors_east.back = fw->colors.back; ++ } ++ if (SUSE_BORDER_COLORSET_WEST(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_WEST(*pstyle); ++ fw->border_cs_west = cs; ++ fw->border_colors_west.hilight = Colorset[cs].hilite; ++ fw->border_colors_west.shadow = Colorset[cs].shadow; ++ fw->border_colors_west.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_west = -1; ++ fw->border_colors_west.hilight = fw->colors.hilight; ++ fw->border_colors_west.shadow = fw->colors.shadow; ++ fw->border_colors_west.back = fw->colors.back; ++ } ++ /* handles */ ++ if (SUSE_BORDER_COLORSET_HANDLES_NW(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HANDLES_NW(*pstyle); ++ fw->border_cs_handles_nw = cs; ++ fw->border_colors_handles_nw.hilight = Colorset[cs].hilite; ++ fw->border_colors_handles_nw.shadow = Colorset[cs].shadow; ++ fw->border_colors_handles_nw.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_handles_nw = -1; ++ fw->border_colors_handles_nw.hilight = fw->colors.hilight; ++ fw->border_colors_handles_nw.shadow = fw->colors.shadow; ++ fw->border_colors_handles_nw.back = fw->colors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HANDLES_NE(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HANDLES_NE(*pstyle); ++ fw->border_cs_handles_ne = cs; ++ fw->border_colors_handles_ne.hilight = Colorset[cs].hilite; ++ fw->border_colors_handles_ne.shadow = Colorset[cs].shadow; ++ fw->border_colors_handles_ne.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_handles_ne = -1; ++ fw->border_colors_handles_ne.hilight = fw->colors.hilight; ++ fw->border_colors_handles_ne.shadow = fw->colors.shadow; ++ fw->border_colors_handles_ne.back = fw->colors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HANDLES_SW(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HANDLES_SW(*pstyle); ++ fw->border_cs_handles_sw = cs; ++ fw->border_colors_handles_sw.hilight = Colorset[cs].hilite; ++ fw->border_colors_handles_sw.shadow = Colorset[cs].shadow; ++ fw->border_colors_handles_sw.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_handles_sw = -1; ++ fw->border_colors_handles_sw.hilight = fw->colors.hilight; ++ fw->border_colors_handles_sw.shadow = fw->colors.shadow; ++ fw->border_colors_handles_sw.back = fw->colors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HANDLES_SE(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HANDLES_SE(*pstyle); ++ fw->border_cs_handles_se = cs; ++ fw->border_colors_handles_se.hilight = Colorset[cs].hilite; ++ fw->border_colors_handles_se.shadow = Colorset[cs].shadow; ++ fw->border_colors_handles_se.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_handles_se = -1; ++ fw->border_colors_handles_se.hilight = fw->colors.hilight; ++ fw->border_colors_handles_se.shadow = fw->colors.shadow; ++ fw->border_colors_handles_se.back = fw->colors.back; ++ } ++ ++} + + void update_window_color_hi_style(FvwmWindow *fw, window_style *pstyle) + { +@@ -5428,6 +5966,127 @@ + fw->border_hicolors.shadow = fw->hicolors.shadow; + fw->border_hicolors.back = fw->hicolors.back; + } ++ if (SUSE_BORDER_COLORSET_HI_NORTH(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_NORTH(*pstyle); ++ fw->border_cs_hi_north = cs; ++ fw->border_hicolors_north.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_north.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_north.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_north = -1; ++ fw->border_hicolors_north.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_north.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_north.back = fw->hicolors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HI_SOUTH(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_SOUTH(*pstyle); ++ fw->border_cs_hi_south = cs; ++ fw->border_hicolors_south.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_south.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_south.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_south = -1; ++ fw->border_hicolors_south.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_south.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_south.back = fw->hicolors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HI_EAST(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_EAST(*pstyle); ++ fw->border_cs_hi_east = cs; ++ fw->border_hicolors_east.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_east.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_east.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_east = -1; ++ fw->border_hicolors_east.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_east.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_east.back = fw->hicolors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HI_WEST(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_WEST(*pstyle); ++ fw->border_cs_hi_west = cs; ++ fw->border_hicolors_west.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_west.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_west.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_west = -1; ++ fw->border_hicolors_west.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_west.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_west.back = fw->hicolors.back; ++ } ++ /* Handles */ ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_NW(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_HANDLES_NW(*pstyle); ++ fw->border_cs_hi_handles_nw = cs; ++ fw->border_hicolors_handles_nw.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_handles_nw.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_handles_nw.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_handles_nw = -1; ++ fw->border_hicolors_handles_nw.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_handles_nw.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_handles_nw.back = fw->hicolors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_NE(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_HANDLES_NE(*pstyle); ++ fw->border_cs_hi_handles_ne = cs; ++ fw->border_hicolors_handles_ne.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_handles_ne.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_handles_ne.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_handles_ne = -1; ++ fw->border_hicolors_handles_ne.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_handles_ne.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_handles_ne.back = fw->hicolors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_SW(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_HANDLES_SW(*pstyle); ++ fw->border_cs_hi_handles_sw = cs; ++ fw->border_hicolors_handles_sw.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_handles_sw.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_handles_sw.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_handles_sw = -1; ++ fw->border_hicolors_handles_sw.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_handles_sw.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_handles_sw.back = fw->hicolors.back; ++ } ++ if (SUSE_BORDER_COLORSET_HI_HANDLES_SE(&pstyle->flags)) ++ { ++ cs = SGET_BORDER_COLORSET_HI_HANDLES_SE(*pstyle); ++ fw->border_cs_hi_handles_se = cs; ++ fw->border_hicolors_handles_se.hilight = Colorset[cs].hilite; ++ fw->border_hicolors_handles_se.shadow = Colorset[cs].shadow; ++ fw->border_hicolors_handles_se.back = Colorset[cs].bg; ++ } ++ else ++ { ++ fw->border_cs_hi_handles_se = -1; ++ fw->border_hicolors_handles_se.hilight = fw->hicolors.hilight; ++ fw->border_hicolors_handles_se.shadow = fw->hicolors.shadow; ++ fw->border_hicolors_handles_se.back = fw->hicolors.back; ++ } + } + + void update_icon_title_cs_style(FvwmWindow *fw, window_style *pstyle) +diff -U3 -r fvwm/style.h fvwm/style.h +--- fvwm/style.h 2011-08-15 18:26:17.000000000 +0200 ++++ fvwm/style.h 2011-12-09 18:29:08.015127684 +0100 +@@ -72,8 +72,40 @@ + ((sf)->use_colorset_hi) + #define SUSE_BORDER_COLORSET(sf) \ + ((sf)->use_border_colorset) ++#define SUSE_BORDER_COLORSET_NORTH(sf) \ ++ ((sf)->use_border_colorset_north) ++#define SUSE_BORDER_COLORSET_SOUTH(sf) \ ++ ((sf)->use_border_colorset_south) ++#define SUSE_BORDER_COLORSET_EAST(sf) \ ++ ((sf)->use_border_colorset_east) ++#define SUSE_BORDER_COLORSET_WEST(sf) \ ++ ((sf)->use_border_colorset_west) ++#define SUSE_BORDER_COLORSET_HANDLES_NW(sf) \ ++ ((sf)->use_border_colorset_handles_nw) ++#define SUSE_BORDER_COLORSET_HANDLES_NE(sf) \ ++ ((sf)->use_border_colorset_handles_ne) ++#define SUSE_BORDER_COLORSET_HANDLES_SW(sf) \ ++ ((sf)->use_border_colorset_handles_sw) ++#define SUSE_BORDER_COLORSET_HANDLES_SE(sf) \ ++ ((sf)->use_border_colorset_handles_se) + #define SUSE_BORDER_COLORSET_HI(sf) \ + ((sf)->use_border_colorset_hi) ++#define SUSE_BORDER_COLORSET_HI_NORTH(sf) \ ++ ((sf)->use_border_colorset_hi_north) ++#define SUSE_BORDER_COLORSET_HI_SOUTH(sf) \ ++ ((sf)->use_border_colorset_hi_south) ++#define SUSE_BORDER_COLORSET_HI_EAST(sf) \ ++ ((sf)->use_border_colorset_hi_east) ++#define SUSE_BORDER_COLORSET_HI_WEST(sf) \ ++ ((sf)->use_border_colorset_hi_west) ++#define SUSE_BORDER_COLORSET_HI_HANDLES_NW(sf) \ ++ ((sf)->use_border_colorset_hi_handles_nw) ++#define SUSE_BORDER_COLORSET_HI_HANDLES_NE(sf) \ ++ ((sf)->use_border_colorset_hi_handles_ne) ++#define SUSE_BORDER_COLORSET_HI_HANDLES_SW(sf) \ ++ ((sf)->use_border_colorset_hi_handles_sw) ++#define SUSE_BORDER_COLORSET_HI_HANDLES_SE(sf) \ ++ ((sf)->use_border_colorset_hi_handles_se) + #define SUSE_ICON_TITLE_COLORSET(sf) \ + ((sf)->use_icon_title_colorset) + #define SUSE_ICON_TITLE_COLORSET_HI(sf) \ +@@ -464,6 +496,38 @@ + ((s).border_colorset = (x)) + #define SGET_BORDER_COLORSET(s) \ + ((s).border_colorset) ++#define SSET_BORDER_COLORSET_NORTH(s,x) \ ++ ((s).border_colorset_north = (x)) ++#define SGET_BORDER_COLORSET_NORTH(s) \ ++ ((s).border_colorset_north) ++#define SSET_BORDER_COLORSET_SOUTH(s,x) \ ++ ((s).border_colorset_south = (x)) ++#define SGET_BORDER_COLORSET_SOUTH(s) \ ++ ((s).border_colorset_south) ++#define SSET_BORDER_COLORSET_EAST(s,x) \ ++ ((s).border_colorset_east = (x)) ++#define SGET_BORDER_COLORSET_EAST(s) \ ++ ((s).border_colorset_east) ++#define SSET_BORDER_COLORSET_WEST(s,x) \ ++ ((s).border_colorset_west = (x)) ++#define SGET_BORDER_COLORSET_WEST(s) \ ++ ((s).border_colorset_west) ++#define SSET_BORDER_COLORSET_HANDLES_NW(s,x) \ ++ ((s).border_colorset_handles_nw = (x)) ++#define SGET_BORDER_COLORSET_HANDLES_NW(s) \ ++ ((s).border_colorset_handles_nw) ++#define SSET_BORDER_COLORSET_HANDLES_NE(s,x) \ ++ ((s).border_colorset_handles_ne = (x)) ++#define SGET_BORDER_COLORSET_HANDLES_NE(s) \ ++ ((s).border_colorset_handles_ne) ++#define SSET_BORDER_COLORSET_HANDLES_SW(s,x) \ ++ ((s).border_colorset_handles_sw = (x)) ++#define SGET_BORDER_COLORSET_HANDLES_SW(s) \ ++ ((s).border_colorset_handles_sw) ++#define SSET_BORDER_COLORSET_HANDLES_SE(s,x) \ ++ ((s).border_colorset_handles_se = (x)) ++#define SGET_BORDER_COLORSET_HANDLES_SE(s) \ ++ ((s).border_colorset_handles_se) + #define SGET_COLORSET_HI(s) \ + ((s).colorset_hi) + #define SSET_COLORSET_HI(s,x) \ +@@ -472,8 +536,40 @@ + ((s).border_colorset_hi) + #define SSET_BORDER_COLORSET_HI(s,x) \ + ((s).border_colorset_hi = (x)) ++#define SGET_BORDER_COLORSET_HI_NORTH(s) \ ++ ((s).border_colorset_hi_north) ++#define SSET_BORDER_COLORSET_HI_NORTH(s,x) \ ++ ((s).border_colorset_hi_north = (x)) ++#define SGET_BORDER_COLORSET_HI_SOUTH(s) \ ++ ((s).border_colorset_hi_south) ++#define SSET_BORDER_COLORSET_HI_SOUTH(s,x) \ ++ ((s).border_colorset_hi_south = (x)) ++#define SGET_BORDER_COLORSET_HI_EAST(s) \ ++ ((s).border_colorset_hi_east) ++#define SSET_BORDER_COLORSET_HI_EAST(s,x) \ ++ ((s).border_colorset_hi_east = (x)) ++#define SGET_BORDER_COLORSET_HI_WEST(s) \ ++ ((s).border_colorset_hi_west) ++#define SSET_BORDER_COLORSET_HI_WEST(s,x) \ ++ ((s).border_colorset_hi_west = (x)) ++#define SSET_BORDER_COLORSET_HI_HANDLES_NW(s,x) \ ++ ((s).border_colorset_hi_handles_nw = (x)) ++#define SGET_BORDER_COLORSET_HI_HANDLES_NW(s) \ ++ ((s).border_colorset_hi_handles_nw) ++#define SSET_BORDER_COLORSET_HI_HANDLES_NE(s,x) \ ++ ((s).border_colorset_hi_handles_ne = (x)) ++#define SGET_BORDER_COLORSET_HI_HANDLES_NE(s) \ ++ ((s).border_colorset_hi_handles_ne) ++#define SSET_BORDER_COLORSET_HI_HANDLES_SW(s,x) \ ++ ((s).border_colorset_hi_handles_sw = (x)) ++#define SGET_BORDER_COLORSET_HI_HANDLES_SW(s) \ ++ ((s).border_colorset_hi_handles_sw) ++#define SSET_BORDER_COLORSET_HI_HANDLES_SE(s,x) \ ++ ((s).border_colorset_hi_handles_se = (x)) ++#define SGET_BORDER_COLORSET_HI_HANDLES_SE(s) \ ++ ((s).border_colorset_hi_handles_se) + #define SSET_ICON_TITLE_COLORSET(s,x) \ +- ((s).icon_title_colorset = (x)) ++ ((s).icon_title_colorset = (x)) + #define SGET_ICON_TITLE_COLORSET(s) \ + ((s).icon_title_colorset) + #define SSET_ICON_TITLE_COLORSET_HI(s,x) \ +Seulement dans libs: PictureGraphics.c.orig |