x11-wm/fvwm3: remove unused patches

Signed-off-by: Matt Jolly <Matt.Jolly@footclan.ninja>
Closes: https://github.com/gentoo/gentoo/pull/33367
Signed-off-by: Joonas Niilola <juippis@gentoo.org>
This commit is contained in:
Matt Jolly 2023-10-17 16:19:29 +10:00 committed by Joonas Niilola
parent 37f573a1be
commit f09882c3ba
No known key found for this signature in database
GPG Key ID: 7383942B8DC06962
3 changed files with 0 additions and 654 deletions

View File

@ -1,94 +0,0 @@
From owner-fvwm@hpc.uh.edu Sun Aug 31 22:52:59 2003
Received: from sina.hpc.uh.edu ([129.7.128.10] ident=lists)
by malifon.math.uh.edu with esmtp (Exim 3.20 #1)
id 19tb0F-0006NY-00; Sun, 31 Aug 2003 17:48:59 -0500
Received: by sina.hpc.uh.edu (TLB v0.09a (1.20 tibbs 1996/10/09 22:03:07)); Sun, 31 Aug 2003 17:50:31 -0500 (CDT)
Received: from epithumia.math.uh.edu (epithumia.math.uh.edu [129.7.128.2])
by sina.hpc.uh.edu (8.9.3/8.9.3) with ESMTP id RAA16575
for <fvwm@hpc.uh.edu>; Sun, 31 Aug 2003 17:50:24 -0500 (CDT)
Received: from epithumia.math.uh.edu (epithumia.math.uh.edu [127.0.0.1])
by epithumia.math.uh.edu (8.12.8/8.12.5) with ESMTP id h7VMml6M025095
for <fvwm@hpc.uh.edu>; Sun, 31 Aug 2003 17:48:47 -0500
Received: (from tibbs@localhost)
by epithumia.math.uh.edu (8.12.8/8.12.8/Submit) id h7VMmlVC025093
for fvwm@hpc.uh.edu; Sun, 31 Aug 2003 17:48:47 -0500
Received: from util2.math.uh.edu (util2.math.uh.edu [129.7.128.23])
by sina.hpc.uh.edu (8.9.3/8.9.3) with ESMTP id QAA16418
for <fvwm@hpc.uh.edu>; Sun, 31 Aug 2003 16:02:07 -0500 (CDT)
Received: from postfix4-2.free.fr ([213.228.0.176])
by util2.math.uh.edu with esmtp (Exim 4.20)
id 19tZIm-00079F-6t
for fvwm@fvwm.org; Sun, 31 Aug 2003 16:00:00 -0500
Received: from snoopy.folie (nas-p19-3-62-147-221-172.dial.proxad.net [62.147.221.172])
by postfix4-2.free.fr (Postfix) with ESMTP id 59DE6C386
for <fvwm@fvwm.org>; Sun, 31 Aug 2003 22:59:34 +0200 (CEST)
Received: by snoopy.folie (Postfix, from userid 501)
id A4D1D48784; Sun, 31 Aug 2003 22:39:19 +0200 (CEST)
Date: Sun, 31 Aug 2003 22:39:19 +0200
From: Olivier Chapuis <olivier.chapuis@free.fr>
To: fvwm@fvwm.org
Subject: Re: FVWM: Transparency/Translucency revisited...
Message-ID: <20030831203919.GA6205@snoopy.folie>
Mail-Followup-To: fvwm@fvwm.org
References: <Pine.LNX.4.44.0308251817370.1980-100000@atlantis.ssw.krakow.pl>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="Nq2Wo0NMKNjxTN9z"
Content-Disposition: inline
In-Reply-To: <Pine.LNX.4.44.0308251817370.1980-100000@atlantis.ssw.krakow.pl>
User-Agent: Mutt/1.4i
X-Spam-Score: -9.3 (---------)
Sender: owner-fvwm@hpc.uh.edu
Precedence: list
X-Majordomo: 1.94.jlt7
Status: RO
Content-Length: 6519
Lines: 122
--Nq2Wo0NMKNjxTN9z
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Mon, Aug 25, 2003 at 09:00:32PM +0200, Dawid Kuroczko wrote:
> Hello. :-)
>
> I did manage to make pseudo-transparent menus, but now I'd like
> to make something more "real". What I'd like to do is to have
> something like there is in KDE.
>
> It should work like this:
> 1. user clicks thus calling a Menu.
> 2. current screen dump is taken (with all the windows, but
> without a menu just as yet).
> 3. this screen dump is made available to Menu as
> root background pixmap.
> 4. Menu is displayed with tinted real background.
>
> This way it's pretty easy to make an illusion of real
> transparency (and looks "l33t", as some may say).
>
Here a new version of the patch for current cvs/snapshot.
This patch add a new options to Colorset: Translucent/NoTranslucent.
These options has effects only with (non tear-off) menu.
Also menu animation is "handled".
For example with:
Colorset 5 fg yellow, bg blue, HGradient 200 lightblue darkblue, \
Translucent blue 60
Style * MenuColorset 5, PopupOffset 0 100, AnimationOff
you get translucent menus (with a 60% blue tint) and if you tear-off
a menu the menu use the gradient.
Regards, Olivier
<snip patch>
--
Visit the official FVWM web page at <URL: http://www.fvwm.org/>.
To unsubscribe from the list, send "unsubscribe fvwm" in the body of a
message to majordomo@fvwm.org.
To report problems, send mail to fvwm-owner@fvwm.org.

View File

@ -1,73 +0,0 @@
This patch enables html documentation output for fvwm3 1.0.4
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,40 +1,59 @@
docdir = @FVWM_DOCDIR@
-MODULE_ADOCS = $(wildcard fvwm3/fvwm3.adoc bin/*.adoc modules/*.adoc)
+DOC_SRC = $(wildcard fvwm3/fvwm3.adoc bin/*.adoc modules/*.adoc)
-EXTRA_DIST = $(MODULE_ADOCS)
+EXTRA_DIST = $(DOC_SRC)
if FVWM_BUILD_MANDOC
-BUILD_MANS = $(patsubst %.adoc,%, $(MODULE_ADOCS))
+BUILD_MANS = $(DOC_SRC:.adoc=.1)
+BUILD_HTML = $(DOC_SRC:.adoc=.html)
else
BUILD_MANS =
endif
-all: docs
-docs: $(BUILD_MANS)
+all: man html
+
+man: $(BUILD_MANS)
+
+html: $(BUILD_HTML)
clean:
rm -fr man1/
+ rm -fr html/
distclean-local: clean
if FVWM_BUILD_MANDOC
-QUIET_ASCIIDOC = @echo ' ' DOC ' ' $@'.1';
+QUIET_ASCIIDOC = @echo ' ' DOC ' ' $@;
-%: %.adoc
+%.1: %.adoc
$(QUIET_ASCIIDOC) \
NAME=`basename "$@" | "$(SED)" -e "${transform}"`; \
- $(ASCIIDOC) -b manpage $< -o "man1/$$NAME.1"
+ $(ASCIIDOC) -b manpage $^ -o "man1/$$NAME"
+
+%.html: %.adoc
+ $(QUIET_ASCIIDOC:.1=.html) \
+ NAME=`basename "$@" | "$(SED)" -e "${transform}"`; \
+ $(ASCIIDOC) -b html5 $^ -o "html/$$NAME"
install-data-local:
install -d -m 755 $(DESTDIR)$(mandir)/man1/
@for i in $(notdir $(BUILD_MANS)); do \
NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \
- install -m 644 "man1/$$NAME.1" $(DESTDIR)$(mandir)/man1/; \
+ install -m 644 "man1/$$NAME" $(DESTDIR)$(mandir)/man1/; \
+ done
+ install -d -m 755 $(DESTDIR)$(mandir)/html/
+ @for i in $(notdir $(BUILD_HTML)); do \
+ NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \
+ install -m 644 "html/$$NAME" $(DESTDIR)$(mandir)/html/; \
done
uninstall-local:
@for i in $(notdir $(BUILD_MANS)); do \
NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \
- rm -f "$(DESTDIR)$(mandir)/man1/$$NAME.1"; \
+ rm -f "$(DESTDIR)$(mandir)/man1/$$NAME"; \
+ done
+ @for i in $(notdir $(BUILD_HTML)); do \
+ NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \
+ rm -f "$(DESTDIR)$(mandir)/html/$$NAME"; \
done
endif

View File

@ -1,487 +0,0 @@
--- a/fvwm/colorset.c
+++ b/fvwm/colorset.c
@@ -162,6 +162,8 @@ static char *csetopts[] =
"NoIconTint",
"IconAlpha",
+ "Translucent",
+ "NoTranslucent",
NULL
};
@@ -620,6 +622,7 @@ void parse_colorset(int n, char *line)
char *fg_tint = NULL;
char *bg_tint = NULL;
char *icon_tint = NULL;
+ char *translucent_tint = NULL;
Bool have_pixels_changed = False;
Bool has_icon_pixels_changed = False;
Bool has_fg_changed = False;
@@ -632,6 +635,7 @@ void parse_colorset(int n, char *line)
Bool has_fg_tint_changed = False;
Bool has_bg_tint_changed = False;
Bool has_icon_tint_changed = False;
+ Bool has_translucent_tint_changed = False;
Bool has_pixmap_changed = False;
Bool has_shape_changed = False;
Bool has_image_alpha_changed = False;
@@ -758,6 +762,10 @@ void parse_colorset(int n, char *line)
case 21: /* Plain */
has_pixmap_changed = True;
free_colorset_background(cs, True);
+ cs->is_translucent = False;
+ cs->translucent_tint_percent = 0;
+ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED;
+ has_translucent_tint_changed = True;
break;
case 22: /* NoShape */
has_shape_changed = True;
@@ -923,6 +931,24 @@ void parse_colorset(int n, char *line)
cs->icon_alpha_percent = tmp;
}
break;
+ case 42: /* Translucent */
+ cs->is_translucent = True;
+ parse_simple_tint(
+ cs, args, &translucent_tint,
+ TRANSLUCENT_TINT_SUPPLIED,
+ &has_translucent_tint_changed, &percent,
+ "Translucent");
+ if (has_translucent_tint_changed)
+ {
+ cs->translucent_tint_percent = percent;
+ }
+ break;
+ case 43: /* NoTranslucent */
+ cs->is_translucent = False;
+ cs->translucent_tint_percent = 0;
+ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED;
+ has_translucent_tint_changed = True;
+ break;
default:
/* test for ?Gradient */
if (option[0] && StrEquals(&option[1], "Gradient"))
@@ -1624,6 +1650,27 @@ void parse_colorset(int n, char *line)
}
}
+ /*
+ * ---------- change the translucent tint colour ----------
+ */
+ if (has_translucent_tint_changed)
+ {
+ /* user specified colour */
+ if (translucent_tint != NULL)
+ {
+ PictureFreeColors(
+ dpy, Pcmap, &cs->translucent_tint, 1, 0, True);
+ cs->translucent_tint = GetColor(translucent_tint);
+ }
+ else
+ {
+ /* default */
+ PictureFreeColors(
+ dpy, Pcmap, &cs->translucent_tint, 1, 0, True);
+ cs->translucent_tint = GetColor(black);
+ }
+ }
+
/*
* ---------- send new colorset to fvwm and clean up ----------
*/
@@ -1720,6 +1767,7 @@ void alloc_colorset(int n)
ncs->fgsh = GetColor(white);
ncs->tint = GetColor(black);
ncs->icon_tint = GetColor(black);
+ ncs->translucent_tint = GetColor(black);
ncs->pixmap = XCreatePixmapFromBitmapData(
dpy, Scr.NoFocusWin,
&g_bits[4 * (nColorsets % 3)], 4, 4,
@@ -1737,6 +1785,7 @@ void alloc_colorset(int n)
ncs->fgsh = GetForeShadow(ncs->fg, ncs->bg);
ncs->tint = GetColor(black);
ncs->icon_tint = GetColor(black);
+ ncs->translucent_tint = GetColor(black);
}
ncs->fg_tint = ncs->bg_tint = GetColor(black);
/* set flags for fg contrast, bg average */
@@ -1748,6 +1797,7 @@ void alloc_colorset(int n)
ncs->icon_alpha_percent = 100;
ncs->tint_percent = 0;
ncs->icon_tint_percent = 0;
+ ncs->translucent_tint_percent = 0;
ncs->fg_tint_percent = ncs->bg_tint_percent = 0;
ncs->dither = (PictureDitherByDefault())? True:False;
nColorsets++;
--- a/fvwm/menuroot.h
+++ b/fvwm/menuroot.h
@@ -147,6 +147,9 @@ typedef struct MenuRootDynamic
int d_npixels;
} stored_pixels;
/* alloc pixels when dithering is used for gradients */
+ /* x,y XMapRaise */
+ int x;
+ int y;
} MenuRootDynamic;
/* access macros to dynamic menu members */
--- a/fvwm/menus.c
+++ b/fvwm/menus.c
@@ -75,6 +75,18 @@
(ctx).menu_root.menu_root = (root))
#define SCTX_GET_MR(ctx) ((ctx).type == SCTX_MENU_ROOT ? \
(ctx).menu_root.menu_root : NULL)
+#define MENU_IS_TRANSLUCENT(mr,cs) \
+ (!MR_IS_TEAR_OFF_MENU(mr) && CSET_IS_TRANSLUCENT(cs))
+#define MENU_IS_TRANSPARENT(mr,cs) \
+ (MENU_IS_TRANSLUCENT(mr,cs) || CSET_IS_TRANSPARENT(cs))
+#define MR_IS_TRANSLUCENT_MENU(mr) \
+ (!MR_IS_TEAR_OFF_MENU(mr) && MR_STYLE(mr) && \
+ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSLUCENT( \
+ ST_CSET_MENU(MR_STYLE(mr))))
+#define MR_IS_TRANSPARENT_MENU(mr) \
+ (MR_IS_TRANSLUCENT_MENU(mr) || (MR_STYLE(mr) && \
+ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSPARENT( \
+ ST_CSET_MENU(MR_STYLE(mr)))))
/* ---------------------------- imports ------------------------------------ */
@@ -218,6 +230,8 @@ typedef struct mloop_static_info_t
} mloop_static_info_t;
/* ---------------------------- forward declarations ----------------------- */
+static MenuRoot *seek_submenu_instance(
+ MenuRoot *parent_menu, MenuItem *parent_item);
/* ---------------------------- local variables ---------------------------- */
@@ -379,12 +393,22 @@ static void animated_move_back(
Bool transparent_bg = False;
/* move it back */
- if (ST_HAS_MENU_CSET(MR_STYLE(mr)) &&
- CSET_IS_TRANSPARENT(ST_CSET_MENU(MR_STYLE(mr))))
+ if (MR_IS_TRANSPARENT_MENU(mr))
{
transparent_bg = True;
get_menu_repaint_transparent_parameters(
&mrtp, mr, fw);
+ if (MR_IS_TRANSLUCENT_MENU(mr) && MR_SUBMENU_ITEM(mr))
+ {
+ MenuRoot *smr;
+ smr = seek_submenu_instance(
+ mr, MR_SUBMENU_ITEM(mr));
+ if (smr)
+ {
+ /* just unmap it here, popdown later */
+ XUnmapWindow(dpy, MR_WINDOW(smr));
+ }
+ }
}
AnimatedMoveOfWindow(
MR_WINDOW(mr), act_x, act_y, act_x - MR_XANIMATION(mr),
@@ -1910,6 +1934,7 @@ static void make_menu_window(MenuRoot *mr, Bool is_tear_off)
/* Doh. Use the standard display instead. */
MR_CREATE_DPY(mr) = dpy;
}
+ MR_IS_TEAR_OFF_MENU(mr) = 1;
}
else
{
@@ -2714,7 +2739,37 @@ static void paint_menu(
}
MR_IS_PAINTED(mr) = 1;
/* paint the menu background */
- if (ms && ST_HAS_MENU_CSET(ms))
+ if (MR_IS_TRANSLUCENT_MENU(mr))
+ {
+ Pixmap trans = None;
+ FvwmRenderAttributes fra;
+ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)];
+
+ fra.mask = 0;
+ if (colorset->translucent_tint_percent > 0)
+ {
+ fra.mask = FRAM_HAVE_TINT;
+ fra.tint = colorset->translucent_tint;
+ fra.tint_percent = colorset->translucent_tint_percent;
+ }
+ if (MR_IS_BACKGROUND_SET(mr) == False)
+ {
+ trans = PGraphicsCreateTranslucent(
+ dpy, MR_WINDOW(mr), &fra,
+ BACK_GC(ST_MENU_INACTIVE_GCS(ms)),
+ MR_X(mr), MR_Y(mr), MR_WIDTH(mr), MR_HEIGHT(mr));
+ XMapRaised(dpy, MR_WINDOW(mr));
+ if (trans != None)
+ {
+ XSetWindowBackgroundPixmap(
+ dpy, MR_WINDOW(mr), trans);
+ MR_IS_BACKGROUND_SET(mr) = True;
+ clear_expose_menu_area(MR_WINDOW(mr), pevent);
+ XFreePixmap(dpy, trans);
+ }
+ }
+ }
+ else if (ms && ST_HAS_MENU_CSET(ms))
{
if (MR_IS_BACKGROUND_SET(mr) == False)
{
@@ -3523,10 +3578,7 @@ static int pop_menu_up(
MR_HAS_POPPED_UP_RIGHT(mr) = 0;
}
MR_XANIMATION(parent_menu) += end_x - prev_x;
- if (ST_HAS_MENU_CSET(MR_STYLE(parent_menu)) &&
- CSET_IS_TRANSPARENT(
- ST_CSET_MENU(
- MR_STYLE(parent_menu))))
+ if (MR_IS_TRANSPARENT_MENU(parent_menu))
{
transparent_bg = True;
get_menu_repaint_transparent_parameters(
@@ -3705,10 +3757,21 @@ static int pop_menu_up(
*/
XMoveWindow(dpy, MR_WINDOW(mr), x, y);
+ MR_X(mr) = x;
+ MR_Y(mr) = y;
XSelectInput(dpy, MR_WINDOW(mr), event_mask);
- XMapRaised(dpy, MR_WINDOW(mr));
- if (popdown_window)
- XUnmapWindow(dpy, popdown_window);
+ if (MR_IS_TRANSLUCENT_MENU(mr))
+ {
+ if (popdown_window)
+ XUnmapWindow(dpy, popdown_window);
+ paint_menu(mr, NULL, fw);
+ }
+ else
+ {
+ XMapRaised(dpy, MR_WINDOW(mr));
+ if (popdown_window)
+ XUnmapWindow(dpy, popdown_window);
+ }
XFlush(dpy);
MR_MAPPED_COPIES(mr)++;
MST_USAGE_COUNT(mr)++;
@@ -6277,16 +6340,122 @@ void update_transparent_menu_bg(
{
last = True;
}
- if (!last && CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms)))
+ if (!last &&
+ (CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms)) ||
+ MR_IS_TRANSLUCENT_MENU(mr)))
{
/* too slow ... */
return;
}
- SetWindowBackgroundWithOffset(
- dpy, MR_WINDOW(mr), step_x - current_x, step_y - current_y,
- MR_WIDTH(mr), MR_HEIGHT(mr),
- &Colorset[ST_CSET_MENU(ms)], Pdepth,
- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False);
+ if (MR_IS_TRANSLUCENT_MENU(mr))
+ {
+ Pixmap trans, tmp;
+ FvwmRenderAttributes fra;
+ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)];
+
+ fra.mask = 0;
+ if (colorset->translucent_tint_percent > 0)
+ {
+ fra.mask = FRAM_HAVE_TINT;
+ fra.tint = colorset->translucent_tint;
+ fra.tint_percent = colorset->translucent_tint_percent;
+ }
+ if (current_x == step_x)
+ {
+ /* Reuse the old pixmap for the part of the menu
+ * that has not moved. (This can be extended to get
+ * two new rectangles, one in each direction)
+ *
+ * It saves the unmapping of the window and makes
+ * Things less flickering.
+ */
+ GC my_gc;
+ unsigned long valuemask = GCSubwindowMode;
+ XGCValues values;
+ int out_y=0;
+ values.subwindow_mode = IncludeInferiors;
+ if (step_y < 0)
+ {
+ out_y = -step_y;
+ }
+ trans = XCreatePixmap(dpy, MR_WINDOW(mr), MR_WIDTH(mr),
+ MR_HEIGHT(mr), Pdepth);
+ my_gc = fvwmlib_XCreateGC(dpy, MR_WINDOW(mr), 0, NULL);
+ XChangeGC(dpy, my_gc, valuemask, &values);
+
+ XClearWindow(dpy, MR_WINDOW(mr));
+
+ if (current_y < step_y)
+ {
+ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0,
+ step_y-current_y, MR_WIDTH(mr),
+ MR_HEIGHT(mr)-(step_y-current_y),
+ 0,0);
+ tmp = PGraphicsCreateTranslucent(
+ dpy, MR_WINDOW(mr), &fra,
+ BACK_GC(ST_MENU_INACTIVE_GCS(ms)),
+ current_x, current_y+MR_HEIGHT(mr),
+ MR_WIDTH(mr), step_y-current_y);
+
+ XCopyArea(dpy, tmp, trans, my_gc, 0, 0,
+ MR_WIDTH(mr), step_y-current_y,0,
+ MR_HEIGHT(mr)-(step_y-current_y));
+ }
+ else
+ {
+ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0,
+ 0, MR_WIDTH(mr),
+ MR_HEIGHT(mr)-(current_y-step_y), 0,
+ current_y-step_y);
+ tmp = PGraphicsCreateTranslucent(
+ dpy, MR_WINDOW(mr), &fra,
+ BACK_GC(ST_MENU_INACTIVE_GCS(ms)),
+ current_x,step_y, MR_WIDTH(mr),
+ current_y-step_y);
+ XCopyArea(dpy, tmp, trans, my_gc, 0, 0,
+ MR_WIDTH(mr), current_y-step_y,0,
+ out_y);
+ }
+ MR_X(mr) = step_x;
+ MR_Y(mr) = step_y;
+ XFreePixmap(dpy, tmp);
+ XFreeGC(dpy,my_gc);
+ }
+ else
+ {
+ XUnmapWindow(dpy, MR_WINDOW(mr));
+ MR_X(mr) = step_x;
+ MR_Y(mr) = step_y;
+ trans = PGraphicsCreateTranslucent(
+ dpy, MR_WINDOW(mr), &fra,
+ BACK_GC(ST_MENU_INACTIVE_GCS(ms)),
+ step_x, step_y, MR_WIDTH(mr),
+ MR_HEIGHT(mr));
+ XMapRaised(dpy, MR_WINDOW(mr));
+ }
+ XSetWindowBackgroundPixmap(
+ dpy, MR_WINDOW(mr), trans);
+ XFreePixmap(dpy, trans);
+ if (current_x == step_x)
+ {
+ /* Redraw the border */
+ RelieveRectangle(
+ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr) - 1,
+ MR_HEIGHT(mr) - 1, (Pdepth < 2) ?
+ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)) :
+ HILIGHT_GC(MST_MENU_INACTIVE_GCS(mr)),
+ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)),
+ MST_BORDER_WIDTH(mr));
+ }
+ }
+ else
+ {
+ SetWindowBackgroundWithOffset(
+ dpy, MR_WINDOW(mr), step_x - current_x,
+ step_y - current_y, MR_WIDTH(mr), MR_HEIGHT(mr),
+ &Colorset[ST_CSET_MENU(ms)], Pdepth,
+ FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False);
+ }
}
@@ -6327,10 +6496,7 @@ void repaint_transparent_menu(
}
if (!is_bg_set)
{
- SetWindowBackground(
- dpy, MR_WINDOW(mr), MR_WIDTH(mr), MR_HEIGHT(mr),
- &Colorset[ST_CSET_MENU(ms)], Pdepth,
- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False);
+ update_transparent_menu_bg(prtm, x, y, x, y, end_x, end_y);
}
/* redraw the background of non active item */
for (mi = MR_FIRST_ITEM(mr); mi != NULL; mi = MI_NEXT_ITEM(mi))
@@ -6969,7 +7135,10 @@ void UpdateMenuColorset(int cset)
&Colorset[ST_CSET_MENU(ms)],
Pdepth,
FORE_GC(MST_MENU_INACTIVE_GCS(mr)),
- True);
+ False);
+ XClearArea(
+ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr),
+ MR_HEIGHT(mr), True);
}
else if ((ST_HAS_ACTIVE_CSET(ms) &&
ST_CSET_ACTIVE(ms) == cset) ||
--- a/fvwm/menus.h
+++ b/fvwm/menus.h
@@ -19,6 +19,9 @@
#define IS_MENU_RETURN(x) \
((x)==MENU_DONE || (x)==MENU_ABORTED || (x)==MENU_SUBMENU_TORN_OFF)
+#define MR_X(m) ((m)->d->x)
+#define MR_Y(m) ((m)->d->y)
+
struct MenuRoot;
struct MenuStyle;
struct MenuReturn;
--- a/libs/Colorset.h
+++ b/libs/Colorset.h
@@ -53,6 +53,10 @@ typedef struct Colorset
Bool dither;
Bool allows_buffered_transparency;
Bool is_maybe_root_transparent;
+ /* only use by fvwm menu (non tear-off) */
+ Bool is_translucent;
+ Pixel translucent_tint;
+ unsigned int translucent_tint_percent : 7;
#endif
} colorset_t;
@@ -80,6 +84,7 @@ typedef struct Colorset
#define FG_TINT_SUPPLIED 0x100
#define BG_TINT_SUPPLIED 0x200
#define ICON_TINT_SUPPLIED 0x400
+#define TRANSLUCENT_TINT_SUPPLIED 0x800
#endif
/* colorsets are stored as an array of structs to permit fast dereferencing */
@@ -154,6 +159,10 @@ extern colorset_t *Colorset;
#define CSETS_IS_TRANSPARENT_PR_TINT(cset) \
(cset != NULL && cset->pixmap == ParentRelative && \
cset->tint_percent > 0)
+#define CSET_IS_TRANSLUCENT(cset) \
+ (cset >= 0 && Colorset[cset].is_translucent)
+#define CSETS_IS_TRANSLUCENT(cset) \
+ (cset && cset->is_translucent)
#ifndef FVWM_COLORSET_PRIVATE
/* Create n new colorsets, fvwm/colorset.c does its own thing (different size)
--- a/libs/PictureGraphics.c
+++ b/libs/PictureGraphics.c
@@ -1361,7 +1361,7 @@ void PGraphicsTintRectangle(
}
}
-#if 0 /* humm... maybe useful one day with menus */
+#if 1 /* humm... maybe useful one day with menus */
Pixmap PGraphicsCreateTranslucent(
Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc,
int x, int y, int width, int height)
--- a/libs/PictureGraphics.h
+++ b/libs/PictureGraphics.h
@@ -124,7 +124,9 @@ void PGraphicsTintRectangle(
Display *dpy, Window win, Pixel tint, int tint_percent,
Drawable dest, Bool dest_is_a_window, GC gc, GC mono_gc, GC alpha_gc,
int dest_x, int dest_y, int dest_w, int dest_h);
-
+Pixmap PGraphicsCreateTranslucent(
+ Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc,
+ int x, int y, int width, int height);
/* never used ! */
Pixmap PGraphicsCreateDitherPixmap(
Display *dpy, Window win, Drawable src, Pixmap mask, int depth, GC gc,