From 0f558761aa2dee1017b4751e4017205e015a9560 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Wed, 29 Jun 2022 12:04:12 +0100 Subject: gentoo resync : 29.12.2022 --- x11-wm/fvwm3/Manifest | 10 + x11-wm/fvwm3/files/README.translucency | 94 ++++ x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch | 73 +++ .../files/fvwm3-1.0.4-translucent-menus.patch | 487 ++++++++++++++++++++ x11-wm/fvwm3/files/fvwm3-9999-goflags.patch | 11 + x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch | 43 ++ .../fvwm3/files/fvwm3-9999-translucent-menus.patch | 489 +++++++++++++++++++++ x11-wm/fvwm3/fvwm3-1.0.4-r2.ebuild | 178 ++++++++ x11-wm/fvwm3/fvwm3-9999.ebuild | 178 ++++++++ x11-wm/fvwm3/metadata.xml | 27 ++ 10 files changed, 1590 insertions(+) create mode 100644 x11-wm/fvwm3/Manifest create mode 100644 x11-wm/fvwm3/files/README.translucency create mode 100644 x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch create mode 100644 x11-wm/fvwm3/files/fvwm3-1.0.4-translucent-menus.patch create mode 100644 x11-wm/fvwm3/files/fvwm3-9999-goflags.patch create mode 100644 x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch create mode 100644 x11-wm/fvwm3/files/fvwm3-9999-translucent-menus.patch create mode 100644 x11-wm/fvwm3/fvwm3-1.0.4-r2.ebuild create mode 100644 x11-wm/fvwm3/fvwm3-9999.ebuild create mode 100644 x11-wm/fvwm3/metadata.xml (limited to 'x11-wm/fvwm3') diff --git a/x11-wm/fvwm3/Manifest b/x11-wm/fvwm3/Manifest new file mode 100644 index 000000000000..4fcd657555c7 --- /dev/null +++ b/x11-wm/fvwm3/Manifest @@ -0,0 +1,10 @@ +AUX README.translucency 3723 BLAKE2B aae37e9dbdf8f7b730b6947d55f0e286c1269d5cacc9ce6d2481562b054c2fa9010acf6ee0d6c994ea3cee64d3df99ef6d08dfa8c6b58706bc9bb8b477095e1b SHA512 a64ef5147e52e07d4cec8a2f3ebd1340827d0139031ef7ddaf27fc144fcc58858c3ec40eee854034423f853b2c7bdd813f66236c8a9679977084f4a2176a8ffa +AUX fvwm3-1.0.4-htmldoc.patch 2024 BLAKE2B 247d05e606e55515b800143a103e5521cf6cc1568f760bb4f703ca7b5ecfb83c305341f8bc249545830295b686c78c7241cc4167a40834aadb3b57fc27caef18 SHA512 bbe197296ffaae8af6d26a0ad92f28e3a9628a1a3653a481d8279ff0fc85922efc084696ae3e2a1527457007bfbb0e17173d942d5f08285ff48a92427f96a4a2 +AUX fvwm3-1.0.4-translucent-menus.patch 14629 BLAKE2B d9aa8b8f2fbde6bf37d39d9fa78f959405dff6518cf1819bbffc70b3d7583618638a3df77beb96925dcf4540b834ba63c2ff1e2cefce49743d73154b9fe58d74 SHA512 4519fba0386b3d1b207540c4916fd18e989189d50b3e1aaa1a02d34774c406fcd8dfa53592882694fdc2e1bb6e3d1e3cd0ada2656222df037bbcdeccf1f04fbe +AUX fvwm3-9999-goflags.patch 224 BLAKE2B 9050c078af7506d821777de92b93bff4b4458106f7df30bf4758528ca27da8504a509329b18a0aae60195f8dd5376ccf04b8661be7a24bc4ec0871446c100291 SHA512 e81d47474c073e1c4c8e13de4888c840cf5c4ee8d98517526fbb24ab7ee13f4f1c3db1f1153eff2d59e9a446963d89687abbc2e53a4086f878b2e63f48e83e86 +AUX fvwm3-9999-htmldoc.patch 960 BLAKE2B 69e4ce716cb09dde50b168d6cd14cd7c01ea4a591fa9baa8d33311276906912e9011f3cd3c42dd30e07fe28776d7638821c17001b8e56601cd42ad1159e36c59 SHA512 07258f4ae3e2d232e1e81ea885f64b14d23ece217317f06c9dccc29b15ad356f36976e570df1420132c1ff3acb08adc668194ad6cabfb453cb01cadaf933491f +AUX fvwm3-9999-translucent-menus.patch 14684 BLAKE2B 52915fde481c6b821b7bf9f5b90f2b7a7f0e96f46cb3f54d39304abefd3db5f2937e6b8eb16c27c4b017d8bbcf6ec1362bf0e7f842ecaa878cc97ec59e88a6ff SHA512 2c1d36e84542be65270595b8ce8e5ed624fa62594446ffe597f18ae85bbfcf3bfbf3030dc0bbcf31dbd43d01411af053a8daa86797540d5a8dcdaee4341fd2ba +DIST fvwm3-1.0.4.tar.gz 4691719 BLAKE2B 4ce93b1a2d110b570b5fc8b253f9ff8ea1f44e5470c6e1bc136a53ebe53a23abe3d075bf351fca54ac110ea5731f9b44c59c83186d320e7509bf26e5144436ca SHA512 b72a1ebeba7c55214603fd43ea439f7283b3c79e39d2671a67b9512c67dcea111377eab2131ed0b18a72f6b772b0d048abe08f52565708367465ed9bb14e85f6 +EBUILD fvwm3-1.0.4-r2.ebuild 4354 BLAKE2B 526dec95d79529d348a3549968539a1025b4efa5aee9434526599d6446ca27fbc0cd70b789a7f74181cb9a31bc4c701632119d56c56002164992fe81d169dac1 SHA512 f12d1e1ce627e080104572fb197704b3e4b62d1ef1a715c3c35e4c189f70f167ba62a7fe702097bf2af537af1ea1c52a70a50e5ec4c3e0cbcce95d99e486fe1b +EBUILD fvwm3-9999.ebuild 4360 BLAKE2B d3ce88da402256e299e0bee907abe9bd18cbae9002f3cf1248b0bdd94ae9b967f4b460d294b7ace29e8a224fcaafe1e5afe8a0cb477c4b8b46a2a8d13bf06a78 SHA512 3ab7e2e26d3d77286cd5678f34d94f0dc9520f5a6ac3b100d8500539199766d29e7f3ff1d1cc7dfd39716a5b41f65c221d3fa119c7a6d374919b46ca464cd4e6 +MISC metadata.xml 1166 BLAKE2B 4b0c18409516f163635b2e08d09bec54257b0ee0dc3d4f2c29a7f272f63339906115963f1724c4eaff5ca10b617297d4204fdeef01131030a89ee0165f88eda8 SHA512 d84e3990b912ac5302e5d1e5f89d068776ca4d002fdb2dd8b8d2df80f82570cd2fdf53332ae06884ce9d1df99c86f9b55d62ad81a4792d46e51688f31146bca8 diff --git a/x11-wm/fvwm3/files/README.translucency b/x11-wm/fvwm3/files/README.translucency new file mode 100644 index 000000000000..a60b5f668acd --- /dev/null +++ b/x11-wm/fvwm3/files/README.translucency @@ -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 ; 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 ; 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 ; 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 ; 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 +To: fvwm@fvwm.org +Subject: Re: FVWM: Transparency/Translucency revisited... +Message-ID: <20030831203919.GA6205@snoopy.folie> +Mail-Followup-To: fvwm@fvwm.org +References: +Mime-Version: 1.0 +Content-Type: multipart/mixed; boundary="Nq2Wo0NMKNjxTN9z" +Content-Disposition: inline +In-Reply-To: +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 + + + +-- +Visit the official FVWM web page at . +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. + diff --git a/x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch b/x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch new file mode 100644 index 000000000000..ef277e902faa --- /dev/null +++ b/x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch @@ -0,0 +1,73 @@ +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 diff --git a/x11-wm/fvwm3/files/fvwm3-1.0.4-translucent-menus.patch b/x11-wm/fvwm3/files/fvwm3-1.0.4-translucent-menus.patch new file mode 100644 index 000000000000..5ead9b09aff5 --- /dev/null +++ b/x11-wm/fvwm3/files/fvwm3-1.0.4-translucent-menus.patch @@ -0,0 +1,487 @@ +--- 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, diff --git a/x11-wm/fvwm3/files/fvwm3-9999-goflags.patch b/x11-wm/fvwm3/files/fvwm3-9999-goflags.patch new file mode 100644 index 000000000000..fa74f6fb734c --- /dev/null +++ b/x11-wm/fvwm3/files/fvwm3-9999-goflags.patch @@ -0,0 +1,11 @@ +--- a/bin/FvwmPrompt/Makefile.am ++++ b/bin/FvwmPrompt/Makefile.am +@@ -1,7 +1,7 @@ + if FVWM_BUILD_GOLANG + GOCMD=go + GOBUILD=$(GOCMD) build +-GOFLAGS=-ldflags="-s -w" ++GOFLAGS= + GOCLEAN=$(GOCMD) clean + BINARY_NAME=FvwmPrompt + diff --git a/x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch b/x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch new file mode 100644 index 000000000000..abf6fadc614e --- /dev/null +++ b/x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch @@ -0,0 +1,43 @@ +This patch enables html documentation in >= 1.0.5 of fvwm3 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -13,22 +13,27 @@ EXTRA_DIST = $(MODULE_ADOC) + nothing: + + clean: +- rm -f *.1 *.ad ++ rm -f *.1 *.ad *.html + + distclean-local: clean + + if FVWM_BUILD_MANDOC +-man1_MANS = $(patsubst %.adoc,%.1, $(MODULE_ADOC)) ++man1_MANS = $(MODULE_ADOC:.adoc=.1) ++man1_HTML = $(MODULE_ADOC:.adoc=.html) + EXTRACT_SECTIONS = \ + commands \ + menus \ + styles + SECTION_FILES = $(patsubst %,fvwm3_%.ad, $(EXTRACT_SECTIONS)) + +-all: docs ++all: docs html ++ + docs: $(man1_MANS) + $(man1_MANS): $(SECTION_FILES) + ++html: $(man1_HTML) ++$(man1_HTML): $(SECTION_FILES) ++ + %.ad: fvwm3_manpage_source.adoc + SECTION=$(patsubst fvwm3_%.ad,%,$@); \ + cat "$<" | \ +@@ -38,4 +43,8 @@ $(man1_MANS): $(SECTION_FILES) + + %.1: %.adoc + "$(ASCIIDOC)" -b manpage -a "$(patsubst %.1,%,$@)" "$<" -o "$@" ++ ++%.html: %.adoc ++ "$(ASCIIDOC)" -b html5 -a "$(patsubst %.html,%,$@)" "$<" -o "$@" ++ + endif diff --git a/x11-wm/fvwm3/files/fvwm3-9999-translucent-menus.patch b/x11-wm/fvwm3/files/fvwm3-9999-translucent-menus.patch new file mode 100644 index 000000000000..43b5b0a14403 --- /dev/null +++ b/x11-wm/fvwm3/files/fvwm3-9999-translucent-menus.patch @@ -0,0 +1,489 @@ +This patch enables some additional translucency "stuff", ported from a series of patches in 2003 (see readme) +--- 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 +@@ -76,6 +76,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 ------------------------------------ */ + +@@ -219,6 +231,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 ---------------------------- */ + +@@ -380,12 +394,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)); ++ } ++ } + } + end.x = start.x - MR_XANIMATION(mr); + end.y = start.y; +@@ -1914,6 +1938,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 + { +@@ -2718,7 +2743,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) + { +@@ -3527,10 +3582,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( +@@ -3713,10 +3765,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)++; +@@ -6286,16 +6349,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); ++ } + } + + +@@ -6336,10 +6505,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)) +@@ -6978,7 +7144,10 @@ void UpdateMenuColorset(int cset) + &Colorset[ST_CSET_MENU(ms2)], + 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(ms2) && + ST_CSET_ACTIVE(ms2) == 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 */ +@@ -155,6 +160,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) + */ +--- 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, diff --git a/x11-wm/fvwm3/fvwm3-1.0.4-r2.ebuild b/x11-wm/fvwm3/fvwm3-1.0.4-r2.ebuild new file mode 100644 index 000000000000..afd245eccd27 --- /dev/null +++ b/x11-wm/fvwm3/fvwm3-1.0.4-r2.ebuild @@ -0,0 +1,178 @@ +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{8..11} ) +GO_OPTIONAL=1 +inherit autotools desktop flag-o-matic go-module python-single-r1 toolchain-funcs + +DESCRIPTION="A multiple large virtual desktop window manager derived from fvwm" +HOMEPAGE="http://www.fvwm.org/" + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/fvwmorg/fvwm3.git" + EGIT_BRANCH="master" +else + SRC_URI="https://github.com/fvwmorg/fvwm3/releases/download/${PV}/${P}.tar.gz" + KEYWORDS="~amd64 ~riscv" +fi + +LICENSE="GPL-2+ FVWM + go? ( Apache-2.0 BSD MIT )" +SLOT="0" +IUSE="bidi debug doc go netpbm nls perl readline rplay stroke svg tk vanilla lock" +REQUIRED_USE=" + ${PYTHON_REQUIRED_USE}" + +DOCS=( NEWS ) + +if [[ ${PV} == 9999 ]]; then + DOCS+=( dev-docs/COMMANDS dev-docs/DEVELOPERS.md dev-docs/INSTALL.md dev-docs/PARSING.md dev-docs/TODO.md dev-docs/NEW-COMMANDS.md ) +fi + +BDEPEND=" + virtual/pkgconfig + doc? ( dev-libs/libxslt + dev-ruby/asciidoctor ) + app-arch/unzip + go? ( >=dev-lang/go-1.14 ) +" + +RDEPEND="${PYTHON_DEPS} + ${COMMON_DEPEND} + !x11-wm/fvwm + dev-lang/perl + dev-libs/glib:2 + dev-libs/libevent:= + media-libs/fontconfig + media-libs/libpng:= + sys-apps/debianutils + 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/libXft + x11-libs/libXpm + x11-libs/libXrandr + x11-libs/libXrender + bidi? ( dev-libs/fribidi ) + lock? ( x11-misc/xlockmore ) + netpbm? ( media-libs/netpbm ) + perl? ( tk? ( + dev-lang/tk + dev-perl/Tk + >=dev-perl/X11-Protocol-0.56 + ) + ) + readline? ( + sys-libs/ncurses:= + sys-libs/readline:= + ) + rplay? ( media-sound/rplay ) + stroke? ( dev-libs/libstroke ) + svg? ( + gnome-base/librsvg:2 + x11-libs/cairo + )" + +DEPEND="${COMMON_DEPEND} + x11-base/xorg-proto" + +PATCHES=( + "${FILESDIR}/${P}-translucent-menus.patch" +) + +if [[ ${PV} == 9999 ]]; then + PATCHES+=( + "${FILESDIR}/${P}-goflags.patch" + ) +fi + +src_prepare() { + default + if use doc; then + eapply "${FILESDIR}/${P}-htmldoc.patch" + fi + + eautoreconf +} + +src_configure() { + # Non-upstream email where bugs should be sent; used in fvwm-bug. + export FVWM_BUGADDR="desktop-wm@nogentoo.org" + + # Recommended by upstream for release. Doesn't really matter for live ebuilds. + append-flags -fno-strict-aliasing + + # Signed chars are required. + for arch in arm arm64 ppc ppc64; do + use $arch && append-flags -fsigned-chars + done + + local myconf=( + --with-imagepath=/usr/include/X11/bitmaps:/usr/include/X11/pixmaps:/usr/share/icons/fvwm + --enable-package-subdirs + $(use_enable bidi) + $(use_enable doc mandoc) + $(use_enable go golang) + $(use_enable nls) + $(use_enable nls iconv) + $(use_enable perl perllib) + $(use_with readline readline-library) + $(use_enable svg rsvg) + --enable-png + --enable-xft + ) + + use readline && myconf+=( --without-termcap-library ) + + econf ${myconf[@]} +} + +src_compile() { + PREFIX="${EPREFIX}/usr" emake AR="$(tc-getAR)" + if [[ ${PV} == *9999 ]]; then + use doc && emake -C doc html + fi +} + +src_install() { + emake DESTDIR="${ED}" prefix="/usr" exec_prefix="/usr" datarootdir="/usr/share" install + + dodir /etc/X11/Sessions + echo "/usr/bin/fvwm3" > "${ED}/etc/X11/Sessions/${PN}" || die + fperms a+x /etc/X11/Sessions/${PN} || die + + python_scriptinto "/usr/bin" + python_doscript "${ED}/usr/bin/FvwmCommand" "${ED}/usr/bin/fvwm-menu-desktop" + if use doc; then + if [[ ${PV} == *9999 ]]; then + HTML_DOCS=( doc/*.html ) + else + HTML_DOCS=( doc/html/*.html ) + fi + fi + einstalldocs + + make_session_desktop fvwm3 /usr/bin/fvwm3 +} + +pkg_postinst() { + if use go; then + ewarn "FvwmPrompt has been installed, it provides the functionality of both FvwmCommand and FvwmConsole." + ewarn "For compatibility with the existing fvwm2 configurations, the ebuild will install a FvwmCommand wrapper script." + ewarn "If you need FvwmConsole, install ${PN} with USE=\"-go\", but FvwmPrompt and FvwmCommnd will not be installed." + else + ewarn "Fvwmconsole has been installed, but FvwmCommand and FvwmPrompt are no longer included in this ebuild." + ewarn "If you need FvwmPrompt or FvwmCommand, install ${PN} with USE=\"go\"." + ewarn "In that case, FvwmPrompt will replace FvwmConsole and provide the same functionality in a more flexible way." + fi +} diff --git a/x11-wm/fvwm3/fvwm3-9999.ebuild b/x11-wm/fvwm3/fvwm3-9999.ebuild new file mode 100644 index 000000000000..65fdb8f91459 --- /dev/null +++ b/x11-wm/fvwm3/fvwm3-9999.ebuild @@ -0,0 +1,178 @@ +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{8..11} ) +GO_OPTIONAL=1 +inherit autotools desktop flag-o-matic go-module python-single-r1 toolchain-funcs + +DESCRIPTION="A multiple large virtual desktop window manager derived from fvwm" +HOMEPAGE="http://www.fvwm.org/" + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/fvwmorg/fvwm3.git" + EGIT_BRANCH="master" +else + SRC_URI="https://github.com/fvwmorg/fvwm3/releases/download/${PV}/${P}.tar.gz" + KEYWORDS="~amd64 ~riscv" +fi + +LICENSE="GPL-2+ FVWM + go? ( Apache-2.0 BSD MIT )" +SLOT="0" +IUSE="bidi debug doc go netpbm nls perl readline rplay stroke svg tk vanilla lock" +REQUIRED_USE=" + ${PYTHON_REQUIRED_USE}" + +DOCS=( NEWS ) + +if [[ ${PV} == 9999 ]]; then + DOCS+=( dev-docs/COMMANDS dev-docs/DEVELOPERS.md dev-docs/INSTALL.md dev-docs/PARSING.md dev-docs/TODO.md dev-docs/NEW-COMMANDS.md ) +fi + +BDEPEND=" + virtual/pkgconfig + doc? ( dev-libs/libxslt + dev-ruby/asciidoctor ) + app-arch/unzip + go? ( >=dev-lang/go-1.14 ) +" + +RDEPEND="${PYTHON_DEPS} + ${COMMON_DEPEND} + !x11-wm/fvwm + dev-lang/perl + dev-libs/glib:2 + dev-libs/libevent:= + media-libs/fontconfig + media-libs/libpng:= + sys-apps/debianutils + 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/libXft + x11-libs/libXpm + x11-libs/libXrandr + x11-libs/libXrender + bidi? ( dev-libs/fribidi ) + lock? ( x11-misc/xlockmore ) + netpbm? ( media-libs/netpbm ) + perl? ( tk? ( + dev-lang/tk + dev-perl/Tk + >=dev-perl/X11-Protocol-0.56 + ) + ) + media-libs/libpng:= + readline? ( + sys-libs/ncurses:= + sys-libs/readline:= + ) + rplay? ( media-sound/rplay ) + stroke? ( dev-libs/libstroke ) + svg? ( + gnome-base/librsvg:2 + x11-libs/cairo + )" + +DEPEND="${COMMON_DEPEND} + x11-base/xorg-proto" + +PATCHES=( + "${FILESDIR}/${P}-translucent-menus.patch" +) + +if [[ ${PV} == 9999 ]]; then + PATCHES+=( + "${FILESDIR}/${P}-goflags.patch" + ) +fi + +src_prepare() { + default + if use doc; then + eapply "${FILESDIR}/${P}-htmldoc.patch" + fi + + eautoreconf +} + +src_configure() { + # Non-upstream email where bugs should be sent; used in fvwm-bug. + export FVWM_BUGADDR="desktop-wm@nogentoo.org" + + # Recommended by upstream for release. Doesn't really matter for live ebuilds. + append-flags -fno-strict-aliasing + + # Signed chars are required. + for arch in arm arm64 ppc ppc64; do + use $arch && append-flags -fsigned-chars + done + + local myconf=( + --with-imagepath=/usr/include/X11/bitmaps:/usr/include/X11/pixmaps:/usr/share/icons/fvwm + --enable-package-subdirs + $(use_enable bidi) + $(use_enable doc mandoc) + $(use_enable go golang) + $(use_enable nls) + $(use_enable nls iconv) + $(use_enable perl perllib) + $(use_with readline readline-library) + $(use_enable svg rsvg) + --enable-png + ) + + use readline && myconf+=( --without-termcap-library ) + + econf ${myconf[@]} +} + +src_compile() { + PREFIX="${EPREFIX}/usr" emake AR="$(tc-getAR)" + if [[ ${PV} == *9999 ]]; then + use doc && emake -C doc html + fi +} + +src_install() { + emake DESTDIR="${ED}" prefix="/usr" exec_prefix="/usr" datarootdir="/usr/share" install + + dodir /etc/X11/Sessions + echo "/usr/bin/fvwm3" > "${ED}/etc/X11/Sessions/${PN}" || die + fperms a+x /etc/X11/Sessions/${PN} || die + + python_scriptinto "/usr/bin" + python_doscript "${ED}/usr/bin/FvwmCommand" "${ED}/usr/bin/fvwm-menu-desktop" + if use doc; then + if [[ ${PV} == *9999 ]]; then + HTML_DOCS=( doc/*.html ) + else + HTML_DOCS=( doc/html/*.html ) + fi + fi + einstalldocs + + make_session_desktop fvwm3 /usr/bin/fvwm3 +} + +pkg_postinst() { + if use go; then + ewarn "FvwmPrompt has been installed, it provides the functionality of both FvwmCommand and FvwmConsole." + ewarn "For compatibility with the existing fvwm2 configurations, the ebuild will install a FvwmCommand wrapper script." + ewarn "If you need FvwmConsole, install ${PN} with USE=\"-go\", but FvwmPrompt and FvwmCommnd will not be installed." + else + ewarn "Fvwmconsole has been installed, but FvwmCommand and FvwmPrompt are no longer included in this ebuild." + ewarn "If you need FvwmPrompt or FvwmCommand, install ${PN} with USE=\"go\"." + ewarn "In that case, FvwmPrompt will replace FvwmConsole and provide the same functionality in a more flexible way." + fi +} diff --git a/x11-wm/fvwm3/metadata.xml b/x11-wm/fvwm3/metadata.xml new file mode 100644 index 000000000000..3711144d46ea --- /dev/null +++ b/x11-wm/fvwm3/metadata.xml @@ -0,0 +1,27 @@ + + + + + fvwm3 is a multiple large virtual desktop window manager. + The successor to fvwm-2.6, Fvwm3 is intended to be extremely customizable and extendible while consuming a relatively small amount of resources. + + + Matt.Jolly@footclan.ninja + Matthew Jolly + + + proxy-maint@gentoo.org + Proxy Maintainers + + + Enable building dev-lang/go code (FvwmPrompt) + Enable screen locking + Enable NetPBM support (used by FvwmScript-ScreenDump) + Enable rplay support + Mouse Gesture support + + + https://github.com/fvwmorg/fvwm3/issues + https://raw.githubusercontent.com/fvwmorg/fvwm3/master/CHANGELOG.md + + -- cgit v1.2.3