Added fvwm-2.7.0-r5.

Added fvwm_icons-1.0.
This commit is contained in:
László Valkó 2025-06-06 23:18:32 +02:00
parent 403ccf5926
commit 2b33a59775
11 changed files with 982 additions and 0 deletions

View file

@ -0,0 +1,3 @@
DIST fvwm_icons-1.0.tar.bz2 328620 BLAKE2B 3df1b64903601e1db420c09d80c2907ecddbfdd8fd235b9f1a833be9ccdf20e0e8889ef6259e1c5663e107c7e7625f26fc0d7432a46571ad906436948a01f561 SHA512 79bd47492bb3854c79b5ea144467732460a0dc97a975b4ddf273d60f97a51ac71c94004293c6e073cdcbde72e6f6b38da697df6849808314937384e280f3d6d4
EBUILD fvwm_icons-1.0.ebuild 435 BLAKE2B 83f96056398ff9c42129b50bda5b0f604955227759916fd9087e76552a164d94ec96493464246222be7fe5e0182fef5708b3c6e575aa6226bb4cad0c76bd4deb SHA512 c783dd02c95df96982a550433106b8c461a8c5bb66cc53e604c3f85783be3dec5606f264b858187c7d7acfdb2224bf9f98f3a95e52b3a69b92651e4701ec2bca
MISC metadata.xml 192 BLAKE2B fef49cb9e1dda8063c379e650d4897670410d2c0641f469b8a200d5e7ec8d3f505e692277d03b583790cb1340ece9c2e8f7e7c9ff5080d42a2e0ef3fc7138a44 SHA512 bece454b8da734c7a28ce25f8080b3fca56332e57cde854c50f0b884ba3836f1af7782a1ee9f63e6aeff4830e2bca71c5c466471fc82eee75339565aab6495d5

View file

@ -0,0 +1,20 @@
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DESCRIPTION="Icons for use with FVWM"
HOMEPAGE="https://www.fvwm.org/"
SRC_URI="mirror://gentoo/${P}.tar.bz2"
S="${WORKDIR}/${PN}"
LICENSE="GPL-2 FVWM"
SLOT="0"
KEYWORDS="amd64 ~ppc ~ppc64 ~riscv ~sparc x86"
RDEPEND="|| ( x11-wm/fvwm3 >=x11-wm/fvwm-2.6.2 )"
src_install() {
insinto /usr/share/icons/fvwm
doins -r .
}

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<!-- maintainer-needed -->
<stabilize-allarches/>
</pkgmetadata>

8
x11-wm/fvwm/Manifest Normal file
View file

@ -0,0 +1,8 @@
AUX README.translucency 3723 BLAKE2B aae37e9dbdf8f7b730b6947d55f0e286c1269d5cacc9ce6d2481562b054c2fa9010acf6ee0d6c994ea3cee64d3df99ef6d08dfa8c6b58706bc9bb8b477095e1b SHA512 a64ef5147e52e07d4cec8a2f3ebd1340827d0139031ef7ddaf27fc144fcc58858c3ec40eee854034423f853b2c7bdd813f66236c8a9679977084f4a2176a8ffa
AUX fvwm-2.7.0-ar.patch 1243 BLAKE2B 5d01137c867629e05f7a2c5c600b4b21d06b2c061e05a4389ad2c9ba456459020a972153594800c62e68c4411e1de1012ca32ccfe4feaa1233e90d65fa6c19c2 SHA512 533fd933c180e753e482684bfd68a0f6a95b71c622336be6080f09d4d354d16c4f7c758e79529ee873f2a39d0a6adbf73a586a3709dd8ad182c67ae5d8b50c1c
AUX fvwm-2.7.0-c99.patch 3294 BLAKE2B 930615bfde3168ca47c865badab133de33ad127c648f1a29424076b61e194a6dcf2b411e5198185acc057d49fc7fd4539397270f6610a7d80abb929dd50547cc SHA512 affc46823a1e2756b72819a08976496319a10fa43eb1089f57ac0630d3d919ba9f3a8c86c62a932be989b4f7b17dbbb3712da55d188af806396c2c18175b8cdb
AUX fvwm-2.7.0-fix-docdir.patch 361 BLAKE2B aefce92389f7ba8b8a85d67c9144e0ae6c4df6eb7ea9195ae1683a0be453e9eeaff1ad64fd1e4de174ee419c9636897639863d5d0f3f8e7fde8ade84b05358e4 SHA512 c21d5ded3ee488efc0595f44a09c9833189c5159494e96cf3c4f310aa5dfc9aba3f78452d4e9105e839e57a8a2361c9dc5840bc89e8ae67f5cf2209b6a3ab142
AUX fvwm-2.7.0-translucent-menus.diff 15303 BLAKE2B 9689b136bf17aff87bf9b2b872a8d746268849333d06595a5147be7dbc2b6e2a9f75643c67d28564663cf0571378612ebc96e1eff22e315305501cca438c9947 SHA512 34714e25ca5a30479174c1a75ef6441e9dd7e9506e52edced1c8658979059d03b07f5373b82178c2871034155e74a0bf16b55db30784575bc7e6f06555a321fd
DIST fvwm-2.7.0.tar.gz 3933529 BLAKE2B b4be7083c2946cb2a0c48673271d490a49aba5aec8407169bedc5a35f55fe8cd2724a9f6570c5e7ea110652c04956570c874256f96fa5d920a2a1ede152c0c25 SHA512 fc9076c3f07f36b0b2c7c4d2bdf7bb1a711000e39316e327173548bc99dc2b8a29b591e3644e1492f87603b576cd4a3f58ecbdd84a4384d294417b3c56c81808
EBUILD fvwm-2.7.0-r5.ebuild 4128 BLAKE2B 09311a9ec503cf02a2ec7cf1c7ad34c0a335e5d42f86f714aea3d750b34effd77394a31a304155f7e0c9744056d3c144caadab14309473664be4fadd285db431 SHA512 f3a33dcd0afee6598a7b2b4cc2aa0d1accb23b3842f9db2e63d188fcf387f333afcb8cb66e3439eb0c629bd9ca0aac4a35e5ac06bc892165fc033be31bc97257
MISC metadata.xml 736 BLAKE2B c9ff0661b5a87747a83a9d0f88f2a994e23e9e741e669fab4bd42351f74eb9dd8d55ae7d9a56d3a865eef344484a489f08359cc0e44874787fed0538f977c159 SHA512 5b06fe1d24d811fe7c408f38849c06360a5e59d98e5076214cdf041f95f5ed5ae4b625331337ce7c0d00db62fd4db6ca78f6cb2902409f340ba47d8204ab5692

View file

@ -0,0 +1,94 @@
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

@ -0,0 +1,41 @@
diff --git i/configure.ac w/configure.ac
index 97ab9e7..8cd2efb 100644
--- i/configure.ac
+++ w/configure.ac
@@ -208,6 +208,10 @@ AC_MSG_RESULT($val)
# optional libraries.
AC_PROG_CC
AC_PROG_CPP
+AN_MAKEVAR([AR], [AC_PROG_AR])
+AN_PROGRAM([ar], [AC_PROG_AR])
+AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
+AC_PROG_AR
# added -Wall for gcc, what about for others?
if test "x$GCC" = "xyes"; then
diff --git i/libs/Makefile.in w/libs/Makefile.in
index 28b6732..c66d3e4 100644
--- i/libs/Makefile.in
+++ w/libs/Makefile.in
@@ -100,7 +100,7 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
+AR = @AR@
ARFLAGS = cru
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
diff --git i/modules/FvwmScript/Widgets/Makefile.in w/modules/FvwmScript/Widgets/Makefile.in
index 8bda02d..582b046 100644
--- i/modules/FvwmScript/Widgets/Makefile.in
+++ w/modules/FvwmScript/Widgets/Makefile.in
@@ -100,7 +100,7 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
+AR = @AR@
ARFLAGS = cru
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)

View file

@ -0,0 +1,99 @@
https://github.com/fvwmorg/fvwm/pull/100
From 0b4daddf6b88b696daf54714448b8d89a615abf2 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Thu, 24 Nov 2022 13:06:50 +0100
Subject: [PATCH 1/3] configure: Do not require support for implicit ints
Implicit ints have not been part of C since 1999, and future
compilers will disable support for them by default. Fortunatenly,
only one configure check needs adjusting.
---
acinclude.m4 | 2 +-
configure.ac | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/acinclude.m4 b/acinclude.m4
index 8b74ff1e5..b66042f9f 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -30,7 +30,7 @@ if test "$ac_cv_func_select" = yes; then
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif],
-[extern select ($ac_cv_type_fd_set_size_t,
+[extern int select ($ac_cv_type_fd_set_size_t,
$ac_cv_type_fd_set *, $ac_cv_type_fd_set *, $ac_cv_type_fd_set *,
$ac_type_timeval *);],
[ac_found=yes ; break 3],ac_found=no)
diff --git a/configure.ac b/configure.ac
index 97ab9e7a1..c9fcede6a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -220,7 +220,7 @@ AC_MINIX
# catch -Werror and similar options when running configure
AC_TRY_COMPILE([#include <stdio.h>],
-[int i; static j; int *p; char *c;
+[int i; int *p; char *c;
switch (*p = p = *c) { case 0: printf("%Q", c, p); }
*c = &i; c = p;
while (1 || (unsigned int)3 >= 0 || ((int)-1) == ((unsigned int)1));
From 6b9d100ae4e784821b5189474dc58e646417bcf6 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Thu, 24 Nov 2022 13:07:56 +0100
Subject: [PATCH 2/3] acinclude.m4: Add missing <unistd.h> to
AM_SAFETY_CHECK_MKSTEMP
Otherwise, the check fails on a compiler which does not support
implicit function declarations (a language feature removed in 1999).
---
acinclude.m4 | 3 +++
1 file changed, 3 insertions(+)
diff --git a/acinclude.m4 b/acinclude.m4
index b66042f9f..4dee2abeb 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1154,6 +1154,9 @@ AC_DEFUN([AM_SAFETY_CHECK_MKSTEMP],[
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
int main(void)
{
char template[128];
From 33537b8ae5a302e4016dc1c6cfe5577fb3fa36c9 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Tue, 19 Dec 2023 13:24:50 +0100
Subject: [PATCH 3/3] configure: Further defang the -Werror check
Incompatible pointer types are actually errors (in the sense
that they are invalid C). Compilers have merely tolerated them as
warnings for backwards compatibility. This is changing with Clang 16
and GCC 14, so relax the check a little.
---
configure.ac | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index c9fcede6a..2e9615b2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -220,9 +220,8 @@ AC_MINIX
# catch -Werror and similar options when running configure
AC_TRY_COMPILE([#include <stdio.h>],
-[int i; int *p; char *c;
- switch (*p = p = *c) { case 0: printf("%Q", c, p); }
- *c = &i; c = p;
+[int unused; int *p; char *c;
+ printf("%Q", c, p);
while (1 || (unsigned int)3 >= 0 || ((int)-1) == ((unsigned int)1));
], , AC_MSG_ERROR("
configure is not able to compile programs with warnings. Please

View file

@ -0,0 +1,13 @@
https://bugs.gentoo.org/927863
--- a/configure.ac
+++ b/configure.ac
@@ -102,7 +102,7 @@
PPACKAGE=`echo "${PACKAGE}" | "$SED" -e "${transform}"`
FVWM_MODULESUBDIR=/${PPACKAGE}/${VERSION}
FVWM_DATASUBDIR=/${PPACKAGE}
-FVWM_DOCSUBDIR=/doc/${PPACKAGE}
+FVWM_DOCSUBDIR=/doc/${PF}
AC_ARG_ENABLE(package-subdirs,
AS_HELP_STRING([--disable-package-subdirs],

View file

@ -0,0 +1,507 @@
diff --git i/fvwm/colorset.c w/fvwm/colorset.c
index e10f1d1..0217cc3 100644
--- i/fvwm/colorset.c
+++ w/fvwm/colorset.c
@@ -164,6 +164,8 @@ static char *csetopts[] =
"NoIconTint",
"IconAlpha",
+ "Translucent",
+ "NoTranslucent",
NULL
};
@@ -625,6 +627,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;
@@ -637,6 +640,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;
@@ -764,6 +768,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;
@@ -930,6 +938,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"))
@@ -1632,6 +1658,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 ----------
*/
@@ -1728,6 +1775,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,
@@ -1745,6 +1793,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 */
@@ -1756,6 +1805,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++;
diff --git i/fvwm/menuroot.h w/fvwm/menuroot.h
index d9f33d6..de5e2d6 100644
--- i/fvwm/menuroot.h
+++ w/fvwm/menuroot.h
@@ -146,6 +146,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 */
diff --git i/fvwm/menus.c w/fvwm/menus.c
index 345ac06..6daf035 100644
--- i/fvwm/menus.c
+++ w/fvwm/menus.c
@@ -78,6 +78,19 @@
#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 ------------------------------------ */
/* This external is safe. It's written only during startup. */
@@ -220,6 +233,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 ---------------------------- */
@@ -381,12 +396,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),
@@ -1912,6 +1937,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
{
@@ -2716,7 +2742,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)
{
@@ -3525,10 +3581,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(
@@ -3707,10 +3760,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)++;
@@ -6274,16 +6338,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);
+ }
}
@@ -6324,10 +6494,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))
@@ -6951,10 +7118,12 @@ void UpdateMenuColorset(int cset)
SetWindowBackground(
dpy, MR_WINDOW(mr), MR_WIDTH(mr),
MR_HEIGHT(mr),
- &Colorset[ST_CSET_MENU(ms)],
- Pdepth,
+ &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) ||
diff --git i/fvwm/menus.h w/fvwm/menus.h
index 28e9db3..6b620b2 100644
--- i/fvwm/menus.h
+++ w/fvwm/menus.h
@@ -15,6 +15,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;
diff --git i/libs/Colorset.h w/libs/Colorset.h
index d610b52..6c1892e 100644
--- i/libs/Colorset.h
+++ w/libs/Colorset.h
@@ -51,6 +51,10 @@ typedef struct
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;
@@ -78,6 +82,7 @@ typedef struct
#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 */
@@ -153,6 +158,11 @@ extern colorset_t *Colorset;
(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)
*/
diff --git i/libs/PictureGraphics.c w/libs/PictureGraphics.c
index f861726..a2fdbea 100644
--- i/libs/PictureGraphics.c
+++ w/libs/PictureGraphics.c
@@ -1360,7 +1360,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)
diff --git i/libs/PictureGraphics.h w/libs/PictureGraphics.h
index ec75601..5e0001d 100644
--- i/libs/PictureGraphics.h
+++ w/libs/PictureGraphics.h
@@ -122,7 +122,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,

View file

@ -0,0 +1,172 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{10..13} )
inherit autotools flag-o-matic python-single-r1 desktop
DESCRIPTION="An extremely powerful ICCCM-compliant multiple virtual desktop window manager"
HOMEPAGE="https://www.fvwm.org/"
SRC_URI="https://github.com/fvwmorg/fvwm/releases/download/${PV}/${P}.tar.gz"
LICENSE="GPL-2+ FVWM"
SLOT="0"
KEYWORDS="~alpha amd64 ~arm ppc ~ppc64 ~riscv ~sparc x86"
IUSE="bidi debug doc netpbm nls perl png readline stroke svg tk truetype +vanilla xinerama lock"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
COMMON_DEPEND="
sys-libs/zlib
x11-libs/libICE
x11-libs/libSM
x11-libs/libX11
x11-libs/libXau
x11-libs/libxcb
x11-libs/libXcursor
x11-libs/libXdmcp
x11-libs/libXext
x11-libs/libXfixes
x11-libs/libXpm
x11-libs/libXrandr
x11-libs/libXrender
virtual/libiconv
$(python_gen_cond_dep '
dev-python/pyxdg[${PYTHON_USEDEP}]
')
bidi? ( dev-libs/fribidi )
nls? ( virtual/libintl )
png? ( media-libs/libpng:0= )
readline? (
sys-libs/ncurses:0=
sys-libs/readline:0=
)
stroke? ( dev-libs/libstroke )
svg? ( gnome-base/librsvg )
truetype? (
media-libs/fontconfig
x11-libs/libXft
)
xinerama? ( x11-libs/libXinerama )
"
RDEPEND="
${COMMON_DEPEND}
${PYTHON_DEPS}
dev-lang/perl
perl? ( tk? (
dev-lang/tk
dev-perl/Tk
>=dev-perl/X11-Protocol-0.56
)
)
lock? ( x11-misc/xlockmore )
netpbm? ( media-libs/netpbm )
"
DEPEND="
${COMMON_DEPEND}
x11-base/xorg-proto
"
BDEPEND="
dev-lang/perl
dev-libs/libxslt
virtual/pkgconfig
"
src_prepare() {
if ! use vanilla; then
# Enables fast translucent menus; patch from fvwm-user mailing list.
eapply "${FILESDIR}/${PN}-2.7.0-translucent-menus.diff"
fi
eapply "${FILESDIR}"/fvwm-2.7.0-ar.patch # bug #474528
eapply "${FILESDIR}"/fvwm-2.7.0-c99.patch
eapply "${FILESDIR}"/fvwm-2.7.0-fix-docdir.patch
default
eautoreconf
}
src_configure() {
local myeconfargs=(
--libexecdir="${EPREFIX}"/usr/$(get_libdir)
--with-imagepath=/usr/include/X11/bitmaps:/usr/include/X11/pixmaps:/usr/share/icons/fvwm
--enable-iconv
--enable-package-subdirs
--enable-mandoc
--without-rplay-library
$(use_enable bidi)
$(use_enable debug debug-msgs)
$(use_enable debug command-log)
$(use_enable doc htmldoc)
$(use_enable nls)
$(use_enable perl perllib)
$(use_enable png)
$(use_with readline readline-library)
$(use_with stroke stroke-library)
$(use_enable svg rsvg)
$(use_enable truetype xft)
$(use_enable xinerama)
)
# Non-upstream email where bugs should be sent; used in fvwm-bug.
export FVWM_BUGADDR="maintainer-needed@gentoo.org"
# Recommended by upstream, reference ????
append-flags -fno-strict-aliasing
# bug #864959
filter-lto
# Signed chars are required.
use ppc && append-flags -fsigned-char
use readline && myeconfargs+=( --without-termcap-library )
export ac_cv_path_PYTHON="${PYTHON}"
econf "${myeconfargs[@]}"
}
src_install() {
default
make_session_desktop fvwm /usr/bin/fvwm
if ! use lock; then
find "${ED}" -name '*fvwm-menu-xlock' -delete || die
fi
if use perl; then
if ! use tk; then
rm "${ED}"/usr/share/fvwm/perllib/FVWM/Module/Tk.pm || die
rm "${ED}"/usr/share/fvwm/perllib/FVWM/Module/Toolkit.pm || die
find "${ED}"/usr/share/fvwm/perllib -depth -type d -exec rmdir '{}' \; || die
fi
else
# Completely wipe it if ! use perl
rm -r "${ED}"/usr/bin/fvwm-perllib "${ED}"/usr/share/man/man1/fvwm-perllib.1 || die
fi
# Utility for testing FVWM behaviour by creating a simple window with
# configurable hints.
if use debug; then
dobin tests/hints/hints_test
newdoc tests/hints/README README.hints
fi
exeinto /etc/X11/Sessions
newexe - ${PN} <<-EOF
#!/bin/sh
${PN}
EOF
dodoc docs/{COMMANDS,DEVELOPERS.md}
# README file for translucent menus patch.
if ! use vanilla; then
dodoc "${FILESDIR}"/README.translucency
ewarn "You are using a patched build, so, please, don't"
ewarn "report bugs at the fvwm-workers list unless you are"
ewarn "also able to reproduce them with a vanilla build (USE=vanilla)."
fi
}

19
x11-wm/fvwm/metadata.xml Normal file
View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<!-- maintainer-needed -->
<longdescription lang="en">
fvwm is an ICCCM-compliant X window manager providing a 3D look for
window decorations, multiple discontiguous virtual desktops, a high
degree of configurability, and an external module interface for
implementing functional extensions.
</longdescription>
<use>
<flag name="lock">Enable screen locking</flag>
<flag name="netpbm">Enable NetPBM support (used by FvwmScript-ScreenDump)</flag>
<flag name="stroke">Mouse Gesture support</flag>
</use>
<upstream>
<remote-id type="github">fvwmorg/fvwm</remote-id>
</upstream>
</pkgmetadata>