1 |
commit: e0676d323821ce5660feec809a9f8018a2ab58c3 |
2 |
Author: Matt Jolly <Matt.Jolly <AT> footclan <DOT> ninja> |
3 |
AuthorDate: Fri May 20 13:02:46 2022 +0000 |
4 |
Commit: Sam James <sam <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Jun 4 02:19:19 2022 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e0676d32 |
7 |
|
8 |
x11-wm/fvwm3: new package, add 1.0.4, 9999 |
9 |
|
10 |
Closes: https://bugs.gentoo.org/760012 |
11 |
|
12 |
Signed-off-by: Matt Jolly <Matt.Jolly <AT> footclan.ninja> |
13 |
Signed-off-by: Sam James <sam <AT> gentoo.org> |
14 |
|
15 |
x11-wm/fvwm3/Manifest | 3 + |
16 |
x11-wm/fvwm3/files/README.translucency | 94 ++++ |
17 |
x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch | 70 +++ |
18 |
.../files/fvwm3-1.0.4-translucent-menus.patch | 487 ++++++++++++++++++++ |
19 |
x11-wm/fvwm3/files/fvwm3-9999-goflags.patch | 11 + |
20 |
x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch | 43 ++ |
21 |
.../fvwm3/files/fvwm3-9999-translucent-menus.patch | 489 +++++++++++++++++++++ |
22 |
x11-wm/fvwm3/fvwm3-1.0.4.ebuild | 204 +++++++++ |
23 |
x11-wm/fvwm3/fvwm3-9999.ebuild | 204 +++++++++ |
24 |
x11-wm/fvwm3/metadata.xml | 27 ++ |
25 |
10 files changed, 1632 insertions(+) |
26 |
|
27 |
diff --git a/x11-wm/fvwm3/Manifest b/x11-wm/fvwm3/Manifest |
28 |
new file mode 100644 |
29 |
index 000000000000..6ba89565ed08 |
30 |
--- /dev/null |
31 |
+++ b/x11-wm/fvwm3/Manifest |
32 |
@@ -0,0 +1,3 @@ |
33 |
+DIST fvwm3-1.0.4-deps.tar.xz 2847880 BLAKE2B 245a5fa7846ffd74679ecd280b7f31cdcc58dfb765923750b22905caecdea0a1b2a322eeecc8133996414be37026de9f859222b78d93ed6c974005456ee953d1 SHA512 c93e5d4706a6261d8ebafcb5d2576377d79dfb693cc2b4a7608c3657b1c612b7c17a2554a6cef30c80ed5ffc9d0efd16f9adc33b2a9b906ece812fdf4fa8ab86 |
34 |
+DIST fvwm3-1.0.4.tar.gz 4691719 BLAKE2B 4ce93b1a2d110b570b5fc8b253f9ff8ea1f44e5470c6e1bc136a53ebe53a23abe3d075bf351fca54ac110ea5731f9b44c59c83186d320e7509bf26e5144436ca SHA512 b72a1ebeba7c55214603fd43ea439f7283b3c79e39d2671a67b9512c67dcea111377eab2131ed0b18a72f6b772b0d048abe08f52565708367465ed9bb14e85f6 |
35 |
+DIST fvwm3-9999-deps.tar.xz 3712984 BLAKE2B 389f70dbadbe2fe6accd4793ed71e17cb2ff2f72e318e1744204344902145e5050ace5379f4de89991907199b7b354a9690e6546382d1eedfcdb676b28f1ff13 SHA512 444b1ea17b31d477ae12b4ef84a9f5fb85aae1158aead1bc3a4d8e96a18dde6a13e41e3e3552bd652eb58fe42958ad45791a1d4ef70242e9d6d80060067cef86 |
36 |
|
37 |
diff --git a/x11-wm/fvwm3/files/README.translucency b/x11-wm/fvwm3/files/README.translucency |
38 |
new file mode 100644 |
39 |
index 000000000000..a60b5f668acd |
40 |
--- /dev/null |
41 |
+++ b/x11-wm/fvwm3/files/README.translucency |
42 |
@@ -0,0 +1,94 @@ |
43 |
+From owner-fvwm@××××××.edu Sun Aug 31 22:52:59 2003 |
44 |
+Received: from sina.hpc.uh.edu ([129.7.128.10] ident=lists) |
45 |
+ by malifon.math.uh.edu with esmtp (Exim 3.20 #1) |
46 |
+ id 19tb0F-0006NY-00; Sun, 31 Aug 2003 17:48:59 -0500 |
47 |
+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) |
48 |
+Received: from epithumia.math.uh.edu (epithumia.math.uh.edu [129.7.128.2]) |
49 |
+ by sina.hpc.uh.edu (8.9.3/8.9.3) with ESMTP id RAA16575 |
50 |
+ for <fvwm@××××××.edu>; Sun, 31 Aug 2003 17:50:24 -0500 (CDT) |
51 |
+Received: from epithumia.math.uh.edu (epithumia.math.uh.edu [127.0.0.1]) |
52 |
+ by epithumia.math.uh.edu (8.12.8/8.12.5) with ESMTP id h7VMml6M025095 |
53 |
+ for <fvwm@××××××.edu>; Sun, 31 Aug 2003 17:48:47 -0500 |
54 |
+Received: (from tibbs@localhost) |
55 |
+ by epithumia.math.uh.edu (8.12.8/8.12.8/Submit) id h7VMmlVC025093 |
56 |
+ for fvwm@××××××.edu; Sun, 31 Aug 2003 17:48:47 -0500 |
57 |
+Received: from util2.math.uh.edu (util2.math.uh.edu [129.7.128.23]) |
58 |
+ by sina.hpc.uh.edu (8.9.3/8.9.3) with ESMTP id QAA16418 |
59 |
+ for <fvwm@××××××.edu>; Sun, 31 Aug 2003 16:02:07 -0500 (CDT) |
60 |
+Received: from postfix4-2.free.fr ([213.228.0.176]) |
61 |
+ by util2.math.uh.edu with esmtp (Exim 4.20) |
62 |
+ id 19tZIm-00079F-6t |
63 |
+ for fvwm@××××.org; Sun, 31 Aug 2003 16:00:00 -0500 |
64 |
+Received: from snoopy.folie (nas-p19-3-62-147-221-172.dial.proxad.net [62.147.221.172]) |
65 |
+ by postfix4-2.free.fr (Postfix) with ESMTP id 59DE6C386 |
66 |
+ for <fvwm@××××.org>; Sun, 31 Aug 2003 22:59:34 +0200 (CEST) |
67 |
+Received: by snoopy.folie (Postfix, from userid 501) |
68 |
+ id A4D1D48784; Sun, 31 Aug 2003 22:39:19 +0200 (CEST) |
69 |
+Date: Sun, 31 Aug 2003 22:39:19 +0200 |
70 |
+From: Olivier Chapuis <olivier.chapuis@××××.fr> |
71 |
+To: fvwm@××××.org |
72 |
+Subject: Re: FVWM: Transparency/Translucency revisited... |
73 |
+Message-ID: <20030831203919.GA6205@××××××.folie> |
74 |
+Mail-Followup-To: fvwm@××××.org |
75 |
+References: <Pine.LNX.4.44.0308251817370.1980-100000@×××××××××××××××××××.pl> |
76 |
+Mime-Version: 1.0 |
77 |
+Content-Type: multipart/mixed; boundary="Nq2Wo0NMKNjxTN9z" |
78 |
+Content-Disposition: inline |
79 |
+In-Reply-To: <Pine.LNX.4.44.0308251817370.1980-100000@×××××××××××××××××××.pl> |
80 |
+User-Agent: Mutt/1.4i |
81 |
+X-Spam-Score: -9.3 (---------) |
82 |
+Sender: owner-fvwm@××××××.edu |
83 |
+Precedence: list |
84 |
+X-Majordomo: 1.94.jlt7 |
85 |
+Status: RO |
86 |
+Content-Length: 6519 |
87 |
+Lines: 122 |
88 |
+ |
89 |
+ |
90 |
+--Nq2Wo0NMKNjxTN9z |
91 |
+Content-Type: text/plain; charset=us-ascii |
92 |
+Content-Disposition: inline |
93 |
+ |
94 |
+On Mon, Aug 25, 2003 at 09:00:32PM +0200, Dawid Kuroczko wrote: |
95 |
+> Hello. :-) |
96 |
+> |
97 |
+> I did manage to make pseudo-transparent menus, but now I'd like |
98 |
+> to make something more "real". What I'd like to do is to have |
99 |
+> something like there is in KDE. |
100 |
+> |
101 |
+> It should work like this: |
102 |
+> 1. user clicks thus calling a Menu. |
103 |
+> 2. current screen dump is taken (with all the windows, but |
104 |
+> without a menu just as yet). |
105 |
+> 3. this screen dump is made available to Menu as |
106 |
+> root background pixmap. |
107 |
+> 4. Menu is displayed with tinted real background. |
108 |
+> |
109 |
+> This way it's pretty easy to make an illusion of real |
110 |
+> transparency (and looks "l33t", as some may say). |
111 |
+> |
112 |
+ |
113 |
+Here a new version of the patch for current cvs/snapshot. |
114 |
+This patch add a new options to Colorset: Translucent/NoTranslucent. |
115 |
+These options has effects only with (non tear-off) menu. |
116 |
+Also menu animation is "handled". |
117 |
+ |
118 |
+For example with: |
119 |
+ |
120 |
+ Colorset 5 fg yellow, bg blue, HGradient 200 lightblue darkblue, \ |
121 |
+ Translucent blue 60 |
122 |
+ Style * MenuColorset 5, PopupOffset 0 100, AnimationOff |
123 |
+ |
124 |
+you get translucent menus (with a 60% blue tint) and if you tear-off |
125 |
+a menu the menu use the gradient. |
126 |
+ |
127 |
+Regards, Olivier |
128 |
+ |
129 |
+<snip patch> |
130 |
+ |
131 |
+-- |
132 |
+Visit the official FVWM web page at <URL: http://www.fvwm.org/>. |
133 |
+To unsubscribe from the list, send "unsubscribe fvwm" in the body of a |
134 |
+message to majordomo@××××.org. |
135 |
+To report problems, send mail to fvwm-owner@××××.org. |
136 |
+ |
137 |
|
138 |
diff --git a/x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch b/x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch |
139 |
new file mode 100644 |
140 |
index 000000000000..67abc9febfa4 |
141 |
--- /dev/null |
142 |
+++ b/x11-wm/fvwm3/files/fvwm3-1.0.4-htmldoc.patch |
143 |
@@ -0,0 +1,70 @@ |
144 |
+This patch enables HTML documentation output |
145 |
+--- a/doc/Makefile.am |
146 |
++++ b/doc/Makefile.am |
147 |
+@@ -1,29 +1,39 @@ |
148 |
+ docdir = @FVWM_DOCDIR@ |
149 |
+-MODULE_ADOCS = $(wildcard fvwm3/fvwm3.adoc bin/*.adoc modules/*.adoc) |
150 |
++DOC_SRC = $(wildcard fvwm3/fvwm3.adoc bin/*.adoc modules/*.adoc) |
151 |
+ |
152 |
+-EXTRA_DIST = $(MODULE_ADOCS) |
153 |
++EXTRA_DIST = $(DOC_SRC) |
154 |
+ |
155 |
+ if FVWM_BUILD_MANDOC |
156 |
+-BUILD_MANS = $(patsubst %.adoc,%, $(MODULE_ADOCS)) |
157 |
++BUILD_MANS = $(DOC_SRC:.adoc=.1) |
158 |
++BUILD_HTML = $(DOC_SRC:.adoc=.html) |
159 |
+ else |
160 |
+ BUILD_MANS = |
161 |
+ endif |
162 |
+ |
163 |
+-all: docs |
164 |
+-docs: $(BUILD_MANS) |
165 |
++all: man html |
166 |
++ |
167 |
++man: $(BUILD_MANS) |
168 |
++ |
169 |
++html: $(BUILD_HTML) |
170 |
+ |
171 |
+ clean: |
172 |
+ rm -fr man1/ |
173 |
++ rm -fr html/ |
174 |
+ |
175 |
+ distclean-local: clean |
176 |
+ |
177 |
+ if FVWM_BUILD_MANDOC |
178 |
+ QUIET_ASCIIDOC = @echo ' ' DOC ' ' $@'.1'; |
179 |
+ |
180 |
+-%: %.adoc |
181 |
++%.1: %.adoc |
182 |
+ $(QUIET_ASCIIDOC) \ |
183 |
+ NAME=`basename "$@" | "$(SED)" -e "${transform}"`; \ |
184 |
+- $(ASCIIDOC) -b manpage $< -o "man1/$$NAME.1" |
185 |
++ $(ASCIIDOC) -b manpage $^ -o "man1/$$NAME" |
186 |
++ |
187 |
++%.html: %.adoc |
188 |
++ $(QUIET_ASCIIDOC:.1=.html) \ |
189 |
++ NAME=`basename "$@" | "$(SED)" -e "${transform}"`; \ |
190 |
++ $(ASCIIDOC) -b html5 $^ -o "html/$$NAME" |
191 |
+ |
192 |
+ install-data-local: |
193 |
+ install -d -m 755 $(DESTDIR)$(mandir)/man1/ |
194 |
+@@ -31,10 +41,19 @@ install-data-local: |
195 |
+ NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \ |
196 |
+ install -m 644 "man1/$$NAME.1" $(DESTDIR)$(mandir)/man1/; \ |
197 |
+ done |
198 |
++ install -d -m 755 $(DESTDIR)$(mandir)/html/ |
199 |
++ @for i in $(notdir $(BUILD_HTML)); do \ |
200 |
++ NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \ |
201 |
++ install -m 644 "html/$$NAME.html" $(DESTDIR)$(mandir)/html/; \ |
202 |
++ done |
203 |
+ |
204 |
+ uninstall-local: |
205 |
+ @for i in $(notdir $(BUILD_MANS)); do \ |
206 |
+ NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \ |
207 |
+ rm -f "$(DESTDIR)$(mandir)/man1/$$NAME.1"; \ |
208 |
+ done |
209 |
++ @for i in $(notdir $(BUILD_HTML)); do \ |
210 |
++ NAME=`basename "$$i" | "$(SED)" -e "${transform}"`; \ |
211 |
++ rm -f "$(DESTDIR)$(mandir)/html/$$NAME.html"; \ |
212 |
++ done |
213 |
+ endif |
214 |
|
215 |
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 |
216 |
new file mode 100644 |
217 |
index 000000000000..5ead9b09aff5 |
218 |
--- /dev/null |
219 |
+++ b/x11-wm/fvwm3/files/fvwm3-1.0.4-translucent-menus.patch |
220 |
@@ -0,0 +1,487 @@ |
221 |
+--- a/fvwm/colorset.c |
222 |
++++ b/fvwm/colorset.c |
223 |
+@@ -162,6 +162,8 @@ static char *csetopts[] = |
224 |
+ "NoIconTint", |
225 |
+ "IconAlpha", |
226 |
+ |
227 |
++ "Translucent", |
228 |
++ "NoTranslucent", |
229 |
+ NULL |
230 |
+ }; |
231 |
+ |
232 |
+@@ -620,6 +622,7 @@ void parse_colorset(int n, char *line) |
233 |
+ char *fg_tint = NULL; |
234 |
+ char *bg_tint = NULL; |
235 |
+ char *icon_tint = NULL; |
236 |
++ char *translucent_tint = NULL; |
237 |
+ Bool have_pixels_changed = False; |
238 |
+ Bool has_icon_pixels_changed = False; |
239 |
+ Bool has_fg_changed = False; |
240 |
+@@ -632,6 +635,7 @@ void parse_colorset(int n, char *line) |
241 |
+ Bool has_fg_tint_changed = False; |
242 |
+ Bool has_bg_tint_changed = False; |
243 |
+ Bool has_icon_tint_changed = False; |
244 |
++ Bool has_translucent_tint_changed = False; |
245 |
+ Bool has_pixmap_changed = False; |
246 |
+ Bool has_shape_changed = False; |
247 |
+ Bool has_image_alpha_changed = False; |
248 |
+@@ -758,6 +762,10 @@ void parse_colorset(int n, char *line) |
249 |
+ case 21: /* Plain */ |
250 |
+ has_pixmap_changed = True; |
251 |
+ free_colorset_background(cs, True); |
252 |
++ cs->is_translucent = False; |
253 |
++ cs->translucent_tint_percent = 0; |
254 |
++ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED; |
255 |
++ has_translucent_tint_changed = True; |
256 |
+ break; |
257 |
+ case 22: /* NoShape */ |
258 |
+ has_shape_changed = True; |
259 |
+@@ -923,6 +931,24 @@ void parse_colorset(int n, char *line) |
260 |
+ cs->icon_alpha_percent = tmp; |
261 |
+ } |
262 |
+ break; |
263 |
++ case 42: /* Translucent */ |
264 |
++ cs->is_translucent = True; |
265 |
++ parse_simple_tint( |
266 |
++ cs, args, &translucent_tint, |
267 |
++ TRANSLUCENT_TINT_SUPPLIED, |
268 |
++ &has_translucent_tint_changed, &percent, |
269 |
++ "Translucent"); |
270 |
++ if (has_translucent_tint_changed) |
271 |
++ { |
272 |
++ cs->translucent_tint_percent = percent; |
273 |
++ } |
274 |
++ break; |
275 |
++ case 43: /* NoTranslucent */ |
276 |
++ cs->is_translucent = False; |
277 |
++ cs->translucent_tint_percent = 0; |
278 |
++ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED; |
279 |
++ has_translucent_tint_changed = True; |
280 |
++ break; |
281 |
+ default: |
282 |
+ /* test for ?Gradient */ |
283 |
+ if (option[0] && StrEquals(&option[1], "Gradient")) |
284 |
+@@ -1624,6 +1650,27 @@ void parse_colorset(int n, char *line) |
285 |
+ } |
286 |
+ } |
287 |
+ |
288 |
++ /* |
289 |
++ * ---------- change the translucent tint colour ---------- |
290 |
++ */ |
291 |
++ if (has_translucent_tint_changed) |
292 |
++ { |
293 |
++ /* user specified colour */ |
294 |
++ if (translucent_tint != NULL) |
295 |
++ { |
296 |
++ PictureFreeColors( |
297 |
++ dpy, Pcmap, &cs->translucent_tint, 1, 0, True); |
298 |
++ cs->translucent_tint = GetColor(translucent_tint); |
299 |
++ } |
300 |
++ else |
301 |
++ { |
302 |
++ /* default */ |
303 |
++ PictureFreeColors( |
304 |
++ dpy, Pcmap, &cs->translucent_tint, 1, 0, True); |
305 |
++ cs->translucent_tint = GetColor(black); |
306 |
++ } |
307 |
++ } |
308 |
++ |
309 |
+ /* |
310 |
+ * ---------- send new colorset to fvwm and clean up ---------- |
311 |
+ */ |
312 |
+@@ -1720,6 +1767,7 @@ void alloc_colorset(int n) |
313 |
+ ncs->fgsh = GetColor(white); |
314 |
+ ncs->tint = GetColor(black); |
315 |
+ ncs->icon_tint = GetColor(black); |
316 |
++ ncs->translucent_tint = GetColor(black); |
317 |
+ ncs->pixmap = XCreatePixmapFromBitmapData( |
318 |
+ dpy, Scr.NoFocusWin, |
319 |
+ &g_bits[4 * (nColorsets % 3)], 4, 4, |
320 |
+@@ -1737,6 +1785,7 @@ void alloc_colorset(int n) |
321 |
+ ncs->fgsh = GetForeShadow(ncs->fg, ncs->bg); |
322 |
+ ncs->tint = GetColor(black); |
323 |
+ ncs->icon_tint = GetColor(black); |
324 |
++ ncs->translucent_tint = GetColor(black); |
325 |
+ } |
326 |
+ ncs->fg_tint = ncs->bg_tint = GetColor(black); |
327 |
+ /* set flags for fg contrast, bg average */ |
328 |
+@@ -1748,6 +1797,7 @@ void alloc_colorset(int n) |
329 |
+ ncs->icon_alpha_percent = 100; |
330 |
+ ncs->tint_percent = 0; |
331 |
+ ncs->icon_tint_percent = 0; |
332 |
++ ncs->translucent_tint_percent = 0; |
333 |
+ ncs->fg_tint_percent = ncs->bg_tint_percent = 0; |
334 |
+ ncs->dither = (PictureDitherByDefault())? True:False; |
335 |
+ nColorsets++; |
336 |
+--- a/fvwm/menuroot.h |
337 |
++++ b/fvwm/menuroot.h |
338 |
+@@ -147,6 +147,9 @@ typedef struct MenuRootDynamic |
339 |
+ int d_npixels; |
340 |
+ } stored_pixels; |
341 |
+ /* alloc pixels when dithering is used for gradients */ |
342 |
++ /* x,y XMapRaise */ |
343 |
++ int x; |
344 |
++ int y; |
345 |
+ } MenuRootDynamic; |
346 |
+ |
347 |
+ /* access macros to dynamic menu members */ |
348 |
+--- a/fvwm/menus.c |
349 |
++++ b/fvwm/menus.c |
350 |
+@@ -75,6 +75,18 @@ |
351 |
+ (ctx).menu_root.menu_root = (root)) |
352 |
+ #define SCTX_GET_MR(ctx) ((ctx).type == SCTX_MENU_ROOT ? \ |
353 |
+ (ctx).menu_root.menu_root : NULL) |
354 |
++#define MENU_IS_TRANSLUCENT(mr,cs) \ |
355 |
++ (!MR_IS_TEAR_OFF_MENU(mr) && CSET_IS_TRANSLUCENT(cs)) |
356 |
++#define MENU_IS_TRANSPARENT(mr,cs) \ |
357 |
++ (MENU_IS_TRANSLUCENT(mr,cs) || CSET_IS_TRANSPARENT(cs)) |
358 |
++#define MR_IS_TRANSLUCENT_MENU(mr) \ |
359 |
++ (!MR_IS_TEAR_OFF_MENU(mr) && MR_STYLE(mr) && \ |
360 |
++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSLUCENT( \ |
361 |
++ ST_CSET_MENU(MR_STYLE(mr)))) |
362 |
++#define MR_IS_TRANSPARENT_MENU(mr) \ |
363 |
++ (MR_IS_TRANSLUCENT_MENU(mr) || (MR_STYLE(mr) && \ |
364 |
++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSPARENT( \ |
365 |
++ ST_CSET_MENU(MR_STYLE(mr))))) |
366 |
+ |
367 |
+ /* ---------------------------- imports ------------------------------------ */ |
368 |
+ |
369 |
+@@ -218,6 +230,8 @@ typedef struct mloop_static_info_t |
370 |
+ } mloop_static_info_t; |
371 |
+ |
372 |
+ /* ---------------------------- forward declarations ----------------------- */ |
373 |
++static MenuRoot *seek_submenu_instance( |
374 |
++ MenuRoot *parent_menu, MenuItem *parent_item); |
375 |
+ |
376 |
+ /* ---------------------------- local variables ---------------------------- */ |
377 |
+ |
378 |
+@@ -379,12 +393,22 @@ static void animated_move_back( |
379 |
+ Bool transparent_bg = False; |
380 |
+ |
381 |
+ /* move it back */ |
382 |
+- if (ST_HAS_MENU_CSET(MR_STYLE(mr)) && |
383 |
+- CSET_IS_TRANSPARENT(ST_CSET_MENU(MR_STYLE(mr)))) |
384 |
++ if (MR_IS_TRANSPARENT_MENU(mr)) |
385 |
+ { |
386 |
+ transparent_bg = True; |
387 |
+ get_menu_repaint_transparent_parameters( |
388 |
+ &mrtp, mr, fw); |
389 |
++ if (MR_IS_TRANSLUCENT_MENU(mr) && MR_SUBMENU_ITEM(mr)) |
390 |
++ { |
391 |
++ MenuRoot *smr; |
392 |
++ smr = seek_submenu_instance( |
393 |
++ mr, MR_SUBMENU_ITEM(mr)); |
394 |
++ if (smr) |
395 |
++ { |
396 |
++ /* just unmap it here, popdown later */ |
397 |
++ XUnmapWindow(dpy, MR_WINDOW(smr)); |
398 |
++ } |
399 |
++ } |
400 |
+ } |
401 |
+ AnimatedMoveOfWindow( |
402 |
+ MR_WINDOW(mr), act_x, act_y, act_x - MR_XANIMATION(mr), |
403 |
+@@ -1910,6 +1934,7 @@ static void make_menu_window(MenuRoot *mr, Bool is_tear_off) |
404 |
+ /* Doh. Use the standard display instead. */ |
405 |
+ MR_CREATE_DPY(mr) = dpy; |
406 |
+ } |
407 |
++ MR_IS_TEAR_OFF_MENU(mr) = 1; |
408 |
+ } |
409 |
+ else |
410 |
+ { |
411 |
+@@ -2714,7 +2739,37 @@ static void paint_menu( |
412 |
+ } |
413 |
+ MR_IS_PAINTED(mr) = 1; |
414 |
+ /* paint the menu background */ |
415 |
+- if (ms && ST_HAS_MENU_CSET(ms)) |
416 |
++ if (MR_IS_TRANSLUCENT_MENU(mr)) |
417 |
++ { |
418 |
++ Pixmap trans = None; |
419 |
++ FvwmRenderAttributes fra; |
420 |
++ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)]; |
421 |
++ |
422 |
++ fra.mask = 0; |
423 |
++ if (colorset->translucent_tint_percent > 0) |
424 |
++ { |
425 |
++ fra.mask = FRAM_HAVE_TINT; |
426 |
++ fra.tint = colorset->translucent_tint; |
427 |
++ fra.tint_percent = colorset->translucent_tint_percent; |
428 |
++ } |
429 |
++ if (MR_IS_BACKGROUND_SET(mr) == False) |
430 |
++ { |
431 |
++ trans = PGraphicsCreateTranslucent( |
432 |
++ dpy, MR_WINDOW(mr), &fra, |
433 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
434 |
++ MR_X(mr), MR_Y(mr), MR_WIDTH(mr), MR_HEIGHT(mr)); |
435 |
++ XMapRaised(dpy, MR_WINDOW(mr)); |
436 |
++ if (trans != None) |
437 |
++ { |
438 |
++ XSetWindowBackgroundPixmap( |
439 |
++ dpy, MR_WINDOW(mr), trans); |
440 |
++ MR_IS_BACKGROUND_SET(mr) = True; |
441 |
++ clear_expose_menu_area(MR_WINDOW(mr), pevent); |
442 |
++ XFreePixmap(dpy, trans); |
443 |
++ } |
444 |
++ } |
445 |
++ } |
446 |
++ else if (ms && ST_HAS_MENU_CSET(ms)) |
447 |
+ { |
448 |
+ if (MR_IS_BACKGROUND_SET(mr) == False) |
449 |
+ { |
450 |
+@@ -3523,10 +3578,7 @@ static int pop_menu_up( |
451 |
+ MR_HAS_POPPED_UP_RIGHT(mr) = 0; |
452 |
+ } |
453 |
+ MR_XANIMATION(parent_menu) += end_x - prev_x; |
454 |
+- if (ST_HAS_MENU_CSET(MR_STYLE(parent_menu)) && |
455 |
+- CSET_IS_TRANSPARENT( |
456 |
+- ST_CSET_MENU( |
457 |
+- MR_STYLE(parent_menu)))) |
458 |
++ if (MR_IS_TRANSPARENT_MENU(parent_menu)) |
459 |
+ { |
460 |
+ transparent_bg = True; |
461 |
+ get_menu_repaint_transparent_parameters( |
462 |
+@@ -3705,10 +3757,21 @@ static int pop_menu_up( |
463 |
+ */ |
464 |
+ |
465 |
+ XMoveWindow(dpy, MR_WINDOW(mr), x, y); |
466 |
++ MR_X(mr) = x; |
467 |
++ MR_Y(mr) = y; |
468 |
+ XSelectInput(dpy, MR_WINDOW(mr), event_mask); |
469 |
+- XMapRaised(dpy, MR_WINDOW(mr)); |
470 |
+- if (popdown_window) |
471 |
+- XUnmapWindow(dpy, popdown_window); |
472 |
++ if (MR_IS_TRANSLUCENT_MENU(mr)) |
473 |
++ { |
474 |
++ if (popdown_window) |
475 |
++ XUnmapWindow(dpy, popdown_window); |
476 |
++ paint_menu(mr, NULL, fw); |
477 |
++ } |
478 |
++ else |
479 |
++ { |
480 |
++ XMapRaised(dpy, MR_WINDOW(mr)); |
481 |
++ if (popdown_window) |
482 |
++ XUnmapWindow(dpy, popdown_window); |
483 |
++ } |
484 |
+ XFlush(dpy); |
485 |
+ MR_MAPPED_COPIES(mr)++; |
486 |
+ MST_USAGE_COUNT(mr)++; |
487 |
+@@ -6277,16 +6340,122 @@ void update_transparent_menu_bg( |
488 |
+ { |
489 |
+ last = True; |
490 |
+ } |
491 |
+- if (!last && CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms))) |
492 |
++ if (!last && |
493 |
++ (CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms)) || |
494 |
++ MR_IS_TRANSLUCENT_MENU(mr))) |
495 |
+ { |
496 |
+ /* too slow ... */ |
497 |
+ return; |
498 |
+ } |
499 |
+- SetWindowBackgroundWithOffset( |
500 |
+- dpy, MR_WINDOW(mr), step_x - current_x, step_y - current_y, |
501 |
+- MR_WIDTH(mr), MR_HEIGHT(mr), |
502 |
+- &Colorset[ST_CSET_MENU(ms)], Pdepth, |
503 |
+- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); |
504 |
++ if (MR_IS_TRANSLUCENT_MENU(mr)) |
505 |
++ { |
506 |
++ Pixmap trans, tmp; |
507 |
++ FvwmRenderAttributes fra; |
508 |
++ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)]; |
509 |
++ |
510 |
++ fra.mask = 0; |
511 |
++ if (colorset->translucent_tint_percent > 0) |
512 |
++ { |
513 |
++ fra.mask = FRAM_HAVE_TINT; |
514 |
++ fra.tint = colorset->translucent_tint; |
515 |
++ fra.tint_percent = colorset->translucent_tint_percent; |
516 |
++ } |
517 |
++ if (current_x == step_x) |
518 |
++ { |
519 |
++ /* Reuse the old pixmap for the part of the menu |
520 |
++ * that has not moved. (This can be extended to get |
521 |
++ * two new rectangles, one in each direction) |
522 |
++ * |
523 |
++ * It saves the unmapping of the window and makes |
524 |
++ * Things less flickering. |
525 |
++ */ |
526 |
++ GC my_gc; |
527 |
++ unsigned long valuemask = GCSubwindowMode; |
528 |
++ XGCValues values; |
529 |
++ int out_y=0; |
530 |
++ values.subwindow_mode = IncludeInferiors; |
531 |
++ if (step_y < 0) |
532 |
++ { |
533 |
++ out_y = -step_y; |
534 |
++ } |
535 |
++ trans = XCreatePixmap(dpy, MR_WINDOW(mr), MR_WIDTH(mr), |
536 |
++ MR_HEIGHT(mr), Pdepth); |
537 |
++ my_gc = fvwmlib_XCreateGC(dpy, MR_WINDOW(mr), 0, NULL); |
538 |
++ XChangeGC(dpy, my_gc, valuemask, &values); |
539 |
++ |
540 |
++ XClearWindow(dpy, MR_WINDOW(mr)); |
541 |
++ |
542 |
++ if (current_y < step_y) |
543 |
++ { |
544 |
++ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0, |
545 |
++ step_y-current_y, MR_WIDTH(mr), |
546 |
++ MR_HEIGHT(mr)-(step_y-current_y), |
547 |
++ 0,0); |
548 |
++ tmp = PGraphicsCreateTranslucent( |
549 |
++ dpy, MR_WINDOW(mr), &fra, |
550 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
551 |
++ current_x, current_y+MR_HEIGHT(mr), |
552 |
++ MR_WIDTH(mr), step_y-current_y); |
553 |
++ |
554 |
++ XCopyArea(dpy, tmp, trans, my_gc, 0, 0, |
555 |
++ MR_WIDTH(mr), step_y-current_y,0, |
556 |
++ MR_HEIGHT(mr)-(step_y-current_y)); |
557 |
++ } |
558 |
++ else |
559 |
++ { |
560 |
++ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0, |
561 |
++ 0, MR_WIDTH(mr), |
562 |
++ MR_HEIGHT(mr)-(current_y-step_y), 0, |
563 |
++ current_y-step_y); |
564 |
++ tmp = PGraphicsCreateTranslucent( |
565 |
++ dpy, MR_WINDOW(mr), &fra, |
566 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
567 |
++ current_x,step_y, MR_WIDTH(mr), |
568 |
++ current_y-step_y); |
569 |
++ XCopyArea(dpy, tmp, trans, my_gc, 0, 0, |
570 |
++ MR_WIDTH(mr), current_y-step_y,0, |
571 |
++ out_y); |
572 |
++ } |
573 |
++ MR_X(mr) = step_x; |
574 |
++ MR_Y(mr) = step_y; |
575 |
++ XFreePixmap(dpy, tmp); |
576 |
++ XFreeGC(dpy,my_gc); |
577 |
++ } |
578 |
++ else |
579 |
++ { |
580 |
++ XUnmapWindow(dpy, MR_WINDOW(mr)); |
581 |
++ MR_X(mr) = step_x; |
582 |
++ MR_Y(mr) = step_y; |
583 |
++ trans = PGraphicsCreateTranslucent( |
584 |
++ dpy, MR_WINDOW(mr), &fra, |
585 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
586 |
++ step_x, step_y, MR_WIDTH(mr), |
587 |
++ MR_HEIGHT(mr)); |
588 |
++ XMapRaised(dpy, MR_WINDOW(mr)); |
589 |
++ } |
590 |
++ XSetWindowBackgroundPixmap( |
591 |
++ dpy, MR_WINDOW(mr), trans); |
592 |
++ XFreePixmap(dpy, trans); |
593 |
++ if (current_x == step_x) |
594 |
++ { |
595 |
++ /* Redraw the border */ |
596 |
++ RelieveRectangle( |
597 |
++ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr) - 1, |
598 |
++ MR_HEIGHT(mr) - 1, (Pdepth < 2) ? |
599 |
++ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)) : |
600 |
++ HILIGHT_GC(MST_MENU_INACTIVE_GCS(mr)), |
601 |
++ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)), |
602 |
++ MST_BORDER_WIDTH(mr)); |
603 |
++ } |
604 |
++ } |
605 |
++ else |
606 |
++ { |
607 |
++ SetWindowBackgroundWithOffset( |
608 |
++ dpy, MR_WINDOW(mr), step_x - current_x, |
609 |
++ step_y - current_y, MR_WIDTH(mr), MR_HEIGHT(mr), |
610 |
++ &Colorset[ST_CSET_MENU(ms)], Pdepth, |
611 |
++ FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); |
612 |
++ } |
613 |
+ } |
614 |
+ |
615 |
+ |
616 |
+@@ -6327,10 +6496,7 @@ void repaint_transparent_menu( |
617 |
+ } |
618 |
+ if (!is_bg_set) |
619 |
+ { |
620 |
+- SetWindowBackground( |
621 |
+- dpy, MR_WINDOW(mr), MR_WIDTH(mr), MR_HEIGHT(mr), |
622 |
+- &Colorset[ST_CSET_MENU(ms)], Pdepth, |
623 |
+- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); |
624 |
++ update_transparent_menu_bg(prtm, x, y, x, y, end_x, end_y); |
625 |
+ } |
626 |
+ /* redraw the background of non active item */ |
627 |
+ for (mi = MR_FIRST_ITEM(mr); mi != NULL; mi = MI_NEXT_ITEM(mi)) |
628 |
+@@ -6969,7 +7135,10 @@ void UpdateMenuColorset(int cset) |
629 |
+ &Colorset[ST_CSET_MENU(ms)], |
630 |
+ Pdepth, |
631 |
+ FORE_GC(MST_MENU_INACTIVE_GCS(mr)), |
632 |
+- True); |
633 |
++ False); |
634 |
++ XClearArea( |
635 |
++ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr), |
636 |
++ MR_HEIGHT(mr), True); |
637 |
+ } |
638 |
+ else if ((ST_HAS_ACTIVE_CSET(ms) && |
639 |
+ ST_CSET_ACTIVE(ms) == cset) || |
640 |
+--- a/fvwm/menus.h |
641 |
++++ b/fvwm/menus.h |
642 |
+@@ -19,6 +19,9 @@ |
643 |
+ #define IS_MENU_RETURN(x) \ |
644 |
+ ((x)==MENU_DONE || (x)==MENU_ABORTED || (x)==MENU_SUBMENU_TORN_OFF) |
645 |
+ |
646 |
++#define MR_X(m) ((m)->d->x) |
647 |
++#define MR_Y(m) ((m)->d->y) |
648 |
++ |
649 |
+ struct MenuRoot; |
650 |
+ struct MenuStyle; |
651 |
+ struct MenuReturn; |
652 |
+--- a/libs/Colorset.h |
653 |
++++ b/libs/Colorset.h |
654 |
+@@ -53,6 +53,10 @@ typedef struct Colorset |
655 |
+ Bool dither; |
656 |
+ Bool allows_buffered_transparency; |
657 |
+ Bool is_maybe_root_transparent; |
658 |
++ /* only use by fvwm menu (non tear-off) */ |
659 |
++ Bool is_translucent; |
660 |
++ Pixel translucent_tint; |
661 |
++ unsigned int translucent_tint_percent : 7; |
662 |
+ #endif |
663 |
+ } colorset_t; |
664 |
+ |
665 |
+@@ -80,6 +84,7 @@ typedef struct Colorset |
666 |
+ #define FG_TINT_SUPPLIED 0x100 |
667 |
+ #define BG_TINT_SUPPLIED 0x200 |
668 |
+ #define ICON_TINT_SUPPLIED 0x400 |
669 |
++#define TRANSLUCENT_TINT_SUPPLIED 0x800 |
670 |
+ #endif |
671 |
+ |
672 |
+ /* colorsets are stored as an array of structs to permit fast dereferencing */ |
673 |
+@@ -154,6 +159,10 @@ extern colorset_t *Colorset; |
674 |
+ #define CSETS_IS_TRANSPARENT_PR_TINT(cset) \ |
675 |
+ (cset != NULL && cset->pixmap == ParentRelative && \ |
676 |
+ cset->tint_percent > 0) |
677 |
++#define CSET_IS_TRANSLUCENT(cset) \ |
678 |
++ (cset >= 0 && Colorset[cset].is_translucent) |
679 |
++#define CSETS_IS_TRANSLUCENT(cset) \ |
680 |
++ (cset && cset->is_translucent) |
681 |
+ |
682 |
+ #ifndef FVWM_COLORSET_PRIVATE |
683 |
+ /* Create n new colorsets, fvwm/colorset.c does its own thing (different size) |
684 |
+--- a/libs/PictureGraphics.c |
685 |
++++ b/libs/PictureGraphics.c |
686 |
+@@ -1361,7 +1361,7 @@ void PGraphicsTintRectangle( |
687 |
+ } |
688 |
+ } |
689 |
+ |
690 |
+-#if 0 /* humm... maybe useful one day with menus */ |
691 |
++#if 1 /* humm... maybe useful one day with menus */ |
692 |
+ Pixmap PGraphicsCreateTranslucent( |
693 |
+ Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc, |
694 |
+ int x, int y, int width, int height) |
695 |
+--- a/libs/PictureGraphics.h |
696 |
++++ b/libs/PictureGraphics.h |
697 |
+@@ -124,7 +124,9 @@ void PGraphicsTintRectangle( |
698 |
+ Display *dpy, Window win, Pixel tint, int tint_percent, |
699 |
+ Drawable dest, Bool dest_is_a_window, GC gc, GC mono_gc, GC alpha_gc, |
700 |
+ int dest_x, int dest_y, int dest_w, int dest_h); |
701 |
+- |
702 |
++Pixmap PGraphicsCreateTranslucent( |
703 |
++ Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc, |
704 |
++ int x, int y, int width, int height); |
705 |
+ /* never used ! */ |
706 |
+ Pixmap PGraphicsCreateDitherPixmap( |
707 |
+ Display *dpy, Window win, Drawable src, Pixmap mask, int depth, GC gc, |
708 |
|
709 |
diff --git a/x11-wm/fvwm3/files/fvwm3-9999-goflags.patch b/x11-wm/fvwm3/files/fvwm3-9999-goflags.patch |
710 |
new file mode 100644 |
711 |
index 000000000000..fa74f6fb734c |
712 |
--- /dev/null |
713 |
+++ b/x11-wm/fvwm3/files/fvwm3-9999-goflags.patch |
714 |
@@ -0,0 +1,11 @@ |
715 |
+--- a/bin/FvwmPrompt/Makefile.am |
716 |
++++ b/bin/FvwmPrompt/Makefile.am |
717 |
+@@ -1,7 +1,7 @@ |
718 |
+ if FVWM_BUILD_GOLANG |
719 |
+ GOCMD=go |
720 |
+ GOBUILD=$(GOCMD) build |
721 |
+-GOFLAGS=-ldflags="-s -w" |
722 |
++GOFLAGS= |
723 |
+ GOCLEAN=$(GOCMD) clean |
724 |
+ BINARY_NAME=FvwmPrompt |
725 |
+ |
726 |
|
727 |
diff --git a/x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch b/x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch |
728 |
new file mode 100644 |
729 |
index 000000000000..abf6fadc614e |
730 |
--- /dev/null |
731 |
+++ b/x11-wm/fvwm3/files/fvwm3-9999-htmldoc.patch |
732 |
@@ -0,0 +1,43 @@ |
733 |
+This patch enables html documentation in >= 1.0.5 of fvwm3 |
734 |
+--- a/doc/Makefile.am |
735 |
++++ b/doc/Makefile.am |
736 |
+@@ -13,22 +13,27 @@ EXTRA_DIST = $(MODULE_ADOC) |
737 |
+ nothing: |
738 |
+ |
739 |
+ clean: |
740 |
+- rm -f *.1 *.ad |
741 |
++ rm -f *.1 *.ad *.html |
742 |
+ |
743 |
+ distclean-local: clean |
744 |
+ |
745 |
+ if FVWM_BUILD_MANDOC |
746 |
+-man1_MANS = $(patsubst %.adoc,%.1, $(MODULE_ADOC)) |
747 |
++man1_MANS = $(MODULE_ADOC:.adoc=.1) |
748 |
++man1_HTML = $(MODULE_ADOC:.adoc=.html) |
749 |
+ EXTRACT_SECTIONS = \ |
750 |
+ commands \ |
751 |
+ menus \ |
752 |
+ styles |
753 |
+ SECTION_FILES = $(patsubst %,fvwm3_%.ad, $(EXTRACT_SECTIONS)) |
754 |
+ |
755 |
+-all: docs |
756 |
++all: docs html |
757 |
++ |
758 |
+ docs: $(man1_MANS) |
759 |
+ $(man1_MANS): $(SECTION_FILES) |
760 |
+ |
761 |
++html: $(man1_HTML) |
762 |
++$(man1_HTML): $(SECTION_FILES) |
763 |
++ |
764 |
+ %.ad: fvwm3_manpage_source.adoc |
765 |
+ SECTION=$(patsubst fvwm3_%.ad,%,$@); \ |
766 |
+ cat "$<" | \ |
767 |
+@@ -38,4 +43,8 @@ $(man1_MANS): $(SECTION_FILES) |
768 |
+ |
769 |
+ %.1: %.adoc |
770 |
+ "$(ASCIIDOC)" -b manpage -a "$(patsubst %.1,%,$@)" "$<" -o "$@" |
771 |
++ |
772 |
++%.html: %.adoc |
773 |
++ "$(ASCIIDOC)" -b html5 -a "$(patsubst %.html,%,$@)" "$<" -o "$@" |
774 |
++ |
775 |
+ endif |
776 |
|
777 |
diff --git a/x11-wm/fvwm3/files/fvwm3-9999-translucent-menus.patch b/x11-wm/fvwm3/files/fvwm3-9999-translucent-menus.patch |
778 |
new file mode 100644 |
779 |
index 000000000000..43b5b0a14403 |
780 |
--- /dev/null |
781 |
+++ b/x11-wm/fvwm3/files/fvwm3-9999-translucent-menus.patch |
782 |
@@ -0,0 +1,489 @@ |
783 |
+This patch enables some additional translucency "stuff", ported from a series of patches in 2003 (see readme) |
784 |
+--- a/fvwm/colorset.c |
785 |
++++ b/fvwm/colorset.c |
786 |
+@@ -162,6 +162,8 @@ static char *csetopts[] = |
787 |
+ "NoIconTint", |
788 |
+ "IconAlpha", |
789 |
+ |
790 |
++ "Translucent", |
791 |
++ "NoTranslucent", |
792 |
+ NULL |
793 |
+ }; |
794 |
+ |
795 |
+@@ -620,6 +622,7 @@ void parse_colorset(int n, char *line) |
796 |
+ char *fg_tint = NULL; |
797 |
+ char *bg_tint = NULL; |
798 |
+ char *icon_tint = NULL; |
799 |
++ char *translucent_tint = NULL; |
800 |
+ Bool have_pixels_changed = False; |
801 |
+ Bool has_icon_pixels_changed = False; |
802 |
+ Bool has_fg_changed = False; |
803 |
+@@ -632,6 +635,7 @@ void parse_colorset(int n, char *line) |
804 |
+ Bool has_fg_tint_changed = False; |
805 |
+ Bool has_bg_tint_changed = False; |
806 |
+ Bool has_icon_tint_changed = False; |
807 |
++ Bool has_translucent_tint_changed = False; |
808 |
+ Bool has_pixmap_changed = False; |
809 |
+ Bool has_shape_changed = False; |
810 |
+ Bool has_image_alpha_changed = False; |
811 |
+@@ -758,6 +762,10 @@ void parse_colorset(int n, char *line) |
812 |
+ case 21: /* Plain */ |
813 |
+ has_pixmap_changed = True; |
814 |
+ free_colorset_background(cs, True); |
815 |
++ cs->is_translucent = False; |
816 |
++ cs->translucent_tint_percent = 0; |
817 |
++ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED; |
818 |
++ has_translucent_tint_changed = True; |
819 |
+ break; |
820 |
+ case 22: /* NoShape */ |
821 |
+ has_shape_changed = True; |
822 |
+@@ -923,6 +931,24 @@ void parse_colorset(int n, char *line) |
823 |
+ cs->icon_alpha_percent = tmp; |
824 |
+ } |
825 |
+ break; |
826 |
++ case 42: /* Translucent */ |
827 |
++ cs->is_translucent = True; |
828 |
++ parse_simple_tint( |
829 |
++ cs, args, &translucent_tint, |
830 |
++ TRANSLUCENT_TINT_SUPPLIED, |
831 |
++ &has_translucent_tint_changed, &percent, |
832 |
++ "Translucent"); |
833 |
++ if (has_translucent_tint_changed) |
834 |
++ { |
835 |
++ cs->translucent_tint_percent = percent; |
836 |
++ } |
837 |
++ break; |
838 |
++ case 43: /* NoTranslucent */ |
839 |
++ cs->is_translucent = False; |
840 |
++ cs->translucent_tint_percent = 0; |
841 |
++ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED; |
842 |
++ has_translucent_tint_changed = True; |
843 |
++ break; |
844 |
+ default: |
845 |
+ /* test for ?Gradient */ |
846 |
+ if (option[0] && StrEquals(&option[1], "Gradient")) |
847 |
+@@ -1624,6 +1650,27 @@ void parse_colorset(int n, char *line) |
848 |
+ } |
849 |
+ } |
850 |
+ |
851 |
++ /* |
852 |
++ * ---------- change the translucent tint colour ---------- |
853 |
++ */ |
854 |
++ if (has_translucent_tint_changed) |
855 |
++ { |
856 |
++ /* user specified colour */ |
857 |
++ if (translucent_tint != NULL) |
858 |
++ { |
859 |
++ PictureFreeColors( |
860 |
++ dpy, Pcmap, &cs->translucent_tint, 1, 0, True); |
861 |
++ cs->translucent_tint = GetColor(translucent_tint); |
862 |
++ } |
863 |
++ else |
864 |
++ { |
865 |
++ /* default */ |
866 |
++ PictureFreeColors( |
867 |
++ dpy, Pcmap, &cs->translucent_tint, 1, 0, True); |
868 |
++ cs->translucent_tint = GetColor(black); |
869 |
++ } |
870 |
++ } |
871 |
++ |
872 |
+ /* |
873 |
+ * ---------- send new colorset to fvwm and clean up ---------- |
874 |
+ */ |
875 |
+@@ -1720,6 +1767,7 @@ void alloc_colorset(int n) |
876 |
+ ncs->fgsh = GetColor(white); |
877 |
+ ncs->tint = GetColor(black); |
878 |
+ ncs->icon_tint = GetColor(black); |
879 |
++ ncs->translucent_tint = GetColor(black); |
880 |
+ ncs->pixmap = XCreatePixmapFromBitmapData( |
881 |
+ dpy, Scr.NoFocusWin, |
882 |
+ &g_bits[4 * (nColorsets % 3)], 4, 4, |
883 |
+@@ -1737,6 +1785,7 @@ void alloc_colorset(int n) |
884 |
+ ncs->fgsh = GetForeShadow(ncs->fg, ncs->bg); |
885 |
+ ncs->tint = GetColor(black); |
886 |
+ ncs->icon_tint = GetColor(black); |
887 |
++ ncs->translucent_tint = GetColor(black); |
888 |
+ } |
889 |
+ ncs->fg_tint = ncs->bg_tint = GetColor(black); |
890 |
+ /* set flags for fg contrast, bg average */ |
891 |
+@@ -1748,6 +1797,7 @@ void alloc_colorset(int n) |
892 |
+ ncs->icon_alpha_percent = 100; |
893 |
+ ncs->tint_percent = 0; |
894 |
+ ncs->icon_tint_percent = 0; |
895 |
++ ncs->translucent_tint_percent = 0; |
896 |
+ ncs->fg_tint_percent = ncs->bg_tint_percent = 0; |
897 |
+ ncs->dither = (PictureDitherByDefault())? True:False; |
898 |
+ nColorsets++; |
899 |
+--- a/fvwm/menuroot.h |
900 |
++++ b/fvwm/menuroot.h |
901 |
+@@ -147,6 +147,9 @@ typedef struct MenuRootDynamic |
902 |
+ int d_npixels; |
903 |
+ } stored_pixels; |
904 |
+ /* alloc pixels when dithering is used for gradients */ |
905 |
++ /* x,y XMapRaise */ |
906 |
++ int x; |
907 |
++ int y; |
908 |
+ } MenuRootDynamic; |
909 |
+ |
910 |
+ /* access macros to dynamic menu members */ |
911 |
+--- a/fvwm/menus.c |
912 |
++++ b/fvwm/menus.c |
913 |
+@@ -76,6 +76,18 @@ |
914 |
+ (ctx).menu_root.menu_root = (root)) |
915 |
+ #define SCTX_GET_MR(ctx) ((ctx).type == SCTX_MENU_ROOT ? \ |
916 |
+ (ctx).menu_root.menu_root : NULL) |
917 |
++#define MENU_IS_TRANSLUCENT(mr,cs) \ |
918 |
++ (!MR_IS_TEAR_OFF_MENU(mr) && CSET_IS_TRANSLUCENT(cs)) |
919 |
++#define MENU_IS_TRANSPARENT(mr,cs) \ |
920 |
++ (MENU_IS_TRANSLUCENT(mr,cs) || CSET_IS_TRANSPARENT(cs)) |
921 |
++#define MR_IS_TRANSLUCENT_MENU(mr) \ |
922 |
++ (!MR_IS_TEAR_OFF_MENU(mr) && MR_STYLE(mr) && \ |
923 |
++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSLUCENT( \ |
924 |
++ ST_CSET_MENU(MR_STYLE(mr)))) |
925 |
++#define MR_IS_TRANSPARENT_MENU(mr) \ |
926 |
++ (MR_IS_TRANSLUCENT_MENU(mr) || (MR_STYLE(mr) && \ |
927 |
++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSPARENT( \ |
928 |
++ ST_CSET_MENU(MR_STYLE(mr))))) |
929 |
+ |
930 |
+ /* ---------------------------- imports ------------------------------------ */ |
931 |
+ |
932 |
+@@ -219,6 +231,8 @@ typedef struct mloop_static_info_t |
933 |
+ } mloop_static_info_t; |
934 |
+ |
935 |
+ /* ---------------------------- forward declarations ----------------------- */ |
936 |
++static MenuRoot *seek_submenu_instance( |
937 |
++ MenuRoot *parent_menu, MenuItem *parent_item); |
938 |
+ |
939 |
+ /* ---------------------------- local variables ---------------------------- */ |
940 |
+ |
941 |
+@@ -380,12 +394,22 @@ static void animated_move_back( |
942 |
+ Bool transparent_bg = False; |
943 |
+ |
944 |
+ /* move it back */ |
945 |
+- if (ST_HAS_MENU_CSET(MR_STYLE(mr)) && |
946 |
+- CSET_IS_TRANSPARENT(ST_CSET_MENU(MR_STYLE(mr)))) |
947 |
++ if (MR_IS_TRANSPARENT_MENU(mr)) |
948 |
+ { |
949 |
+ transparent_bg = True; |
950 |
+ get_menu_repaint_transparent_parameters( |
951 |
+ &mrtp, mr, fw); |
952 |
++ if (MR_IS_TRANSLUCENT_MENU(mr) && MR_SUBMENU_ITEM(mr)) |
953 |
++ { |
954 |
++ MenuRoot *smr; |
955 |
++ smr = seek_submenu_instance( |
956 |
++ mr, MR_SUBMENU_ITEM(mr)); |
957 |
++ if (smr) |
958 |
++ { |
959 |
++ /* just unmap it here, popdown later */ |
960 |
++ XUnmapWindow(dpy, MR_WINDOW(smr)); |
961 |
++ } |
962 |
++ } |
963 |
+ } |
964 |
+ end.x = start.x - MR_XANIMATION(mr); |
965 |
+ end.y = start.y; |
966 |
+@@ -1914,6 +1938,7 @@ static void make_menu_window(MenuRoot *mr, Bool is_tear_off) |
967 |
+ /* Doh. Use the standard display instead. */ |
968 |
+ MR_CREATE_DPY(mr) = dpy; |
969 |
+ } |
970 |
++ MR_IS_TEAR_OFF_MENU(mr) = 1; |
971 |
+ } |
972 |
+ else |
973 |
+ { |
974 |
+@@ -2718,7 +2743,37 @@ static void paint_menu( |
975 |
+ } |
976 |
+ MR_IS_PAINTED(mr) = 1; |
977 |
+ /* paint the menu background */ |
978 |
+- if (ms && ST_HAS_MENU_CSET(ms)) |
979 |
++ if (MR_IS_TRANSLUCENT_MENU(mr)) |
980 |
++ { |
981 |
++ Pixmap trans = None; |
982 |
++ FvwmRenderAttributes fra; |
983 |
++ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)]; |
984 |
++ |
985 |
++ fra.mask = 0; |
986 |
++ if (colorset->translucent_tint_percent > 0) |
987 |
++ { |
988 |
++ fra.mask = FRAM_HAVE_TINT; |
989 |
++ fra.tint = colorset->translucent_tint; |
990 |
++ fra.tint_percent = colorset->translucent_tint_percent; |
991 |
++ } |
992 |
++ if (MR_IS_BACKGROUND_SET(mr) == False) |
993 |
++ { |
994 |
++ trans = PGraphicsCreateTranslucent( |
995 |
++ dpy, MR_WINDOW(mr), &fra, |
996 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
997 |
++ MR_X(mr), MR_Y(mr), MR_WIDTH(mr), MR_HEIGHT(mr)); |
998 |
++ XMapRaised(dpy, MR_WINDOW(mr)); |
999 |
++ if (trans != None) |
1000 |
++ { |
1001 |
++ XSetWindowBackgroundPixmap( |
1002 |
++ dpy, MR_WINDOW(mr), trans); |
1003 |
++ MR_IS_BACKGROUND_SET(mr) = True; |
1004 |
++ clear_expose_menu_area(MR_WINDOW(mr), pevent); |
1005 |
++ XFreePixmap(dpy, trans); |
1006 |
++ } |
1007 |
++ } |
1008 |
++ } |
1009 |
++ else if (ms && ST_HAS_MENU_CSET(ms)) |
1010 |
+ { |
1011 |
+ if (MR_IS_BACKGROUND_SET(mr) == False) |
1012 |
+ { |
1013 |
+@@ -3527,10 +3582,7 @@ static int pop_menu_up( |
1014 |
+ MR_HAS_POPPED_UP_RIGHT(mr) = 0; |
1015 |
+ } |
1016 |
+ MR_XANIMATION(parent_menu) += end_x - prev_x; |
1017 |
+- if (ST_HAS_MENU_CSET(MR_STYLE(parent_menu)) && |
1018 |
+- CSET_IS_TRANSPARENT( |
1019 |
+- ST_CSET_MENU( |
1020 |
+- MR_STYLE(parent_menu)))) |
1021 |
++ if (MR_IS_TRANSPARENT_MENU(parent_menu)) |
1022 |
+ { |
1023 |
+ transparent_bg = True; |
1024 |
+ get_menu_repaint_transparent_parameters( |
1025 |
+@@ -3713,10 +3765,21 @@ static int pop_menu_up( |
1026 |
+ */ |
1027 |
+ |
1028 |
+ XMoveWindow(dpy, MR_WINDOW(mr), x, y); |
1029 |
++ MR_X(mr) = x; |
1030 |
++ MR_Y(mr) = y; |
1031 |
+ XSelectInput(dpy, MR_WINDOW(mr), event_mask); |
1032 |
+- XMapRaised(dpy, MR_WINDOW(mr)); |
1033 |
+- if (popdown_window) |
1034 |
+- XUnmapWindow(dpy, popdown_window); |
1035 |
++ if (MR_IS_TRANSLUCENT_MENU(mr)) |
1036 |
++ { |
1037 |
++ if (popdown_window) |
1038 |
++ XUnmapWindow(dpy, popdown_window); |
1039 |
++ paint_menu(mr, NULL, fw); |
1040 |
++ } |
1041 |
++ else |
1042 |
++ { |
1043 |
++ XMapRaised(dpy, MR_WINDOW(mr)); |
1044 |
++ if (popdown_window) |
1045 |
++ XUnmapWindow(dpy, popdown_window); |
1046 |
++ } |
1047 |
+ XFlush(dpy); |
1048 |
+ MR_MAPPED_COPIES(mr)++; |
1049 |
+ MST_USAGE_COUNT(mr)++; |
1050 |
+@@ -6286,16 +6349,122 @@ void update_transparent_menu_bg( |
1051 |
+ { |
1052 |
+ last = True; |
1053 |
+ } |
1054 |
+- if (!last && CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms))) |
1055 |
++ if (!last && |
1056 |
++ (CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms)) || |
1057 |
++ MR_IS_TRANSLUCENT_MENU(mr))) |
1058 |
+ { |
1059 |
+ /* too slow ... */ |
1060 |
+ return; |
1061 |
+ } |
1062 |
+- SetWindowBackgroundWithOffset( |
1063 |
+- dpy, MR_WINDOW(mr), step_x - current_x, step_y - current_y, |
1064 |
+- MR_WIDTH(mr), MR_HEIGHT(mr), |
1065 |
+- &Colorset[ST_CSET_MENU(ms)], Pdepth, |
1066 |
+- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); |
1067 |
++ if (MR_IS_TRANSLUCENT_MENU(mr)) |
1068 |
++ { |
1069 |
++ Pixmap trans, tmp; |
1070 |
++ FvwmRenderAttributes fra; |
1071 |
++ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)]; |
1072 |
++ |
1073 |
++ fra.mask = 0; |
1074 |
++ if (colorset->translucent_tint_percent > 0) |
1075 |
++ { |
1076 |
++ fra.mask = FRAM_HAVE_TINT; |
1077 |
++ fra.tint = colorset->translucent_tint; |
1078 |
++ fra.tint_percent = colorset->translucent_tint_percent; |
1079 |
++ } |
1080 |
++ if (current_x == step_x) |
1081 |
++ { |
1082 |
++ /* Reuse the old pixmap for the part of the menu |
1083 |
++ * that has not moved. (This can be extended to get |
1084 |
++ * two new rectangles, one in each direction) |
1085 |
++ * |
1086 |
++ * It saves the unmapping of the window and makes |
1087 |
++ * Things less flickering. |
1088 |
++ */ |
1089 |
++ GC my_gc; |
1090 |
++ unsigned long valuemask = GCSubwindowMode; |
1091 |
++ XGCValues values; |
1092 |
++ int out_y=0; |
1093 |
++ values.subwindow_mode = IncludeInferiors; |
1094 |
++ if (step_y < 0) |
1095 |
++ { |
1096 |
++ out_y = -step_y; |
1097 |
++ } |
1098 |
++ trans = XCreatePixmap(dpy, MR_WINDOW(mr), MR_WIDTH(mr), |
1099 |
++ MR_HEIGHT(mr), Pdepth); |
1100 |
++ my_gc = fvwmlib_XCreateGC(dpy, MR_WINDOW(mr), 0, NULL); |
1101 |
++ XChangeGC(dpy, my_gc, valuemask, &values); |
1102 |
++ |
1103 |
++ XClearWindow(dpy, MR_WINDOW(mr)); |
1104 |
++ |
1105 |
++ if (current_y < step_y) |
1106 |
++ { |
1107 |
++ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0, |
1108 |
++ step_y-current_y, MR_WIDTH(mr), |
1109 |
++ MR_HEIGHT(mr)-(step_y-current_y), |
1110 |
++ 0,0); |
1111 |
++ tmp = PGraphicsCreateTranslucent( |
1112 |
++ dpy, MR_WINDOW(mr), &fra, |
1113 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
1114 |
++ current_x, current_y+MR_HEIGHT(mr), |
1115 |
++ MR_WIDTH(mr), step_y-current_y); |
1116 |
++ |
1117 |
++ XCopyArea(dpy, tmp, trans, my_gc, 0, 0, |
1118 |
++ MR_WIDTH(mr), step_y-current_y,0, |
1119 |
++ MR_HEIGHT(mr)-(step_y-current_y)); |
1120 |
++ } |
1121 |
++ else |
1122 |
++ { |
1123 |
++ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0, |
1124 |
++ 0, MR_WIDTH(mr), |
1125 |
++ MR_HEIGHT(mr)-(current_y-step_y), 0, |
1126 |
++ current_y-step_y); |
1127 |
++ tmp = PGraphicsCreateTranslucent( |
1128 |
++ dpy, MR_WINDOW(mr), &fra, |
1129 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
1130 |
++ current_x,step_y, MR_WIDTH(mr), |
1131 |
++ current_y-step_y); |
1132 |
++ XCopyArea(dpy, tmp, trans, my_gc, 0, 0, |
1133 |
++ MR_WIDTH(mr), current_y-step_y,0, |
1134 |
++ out_y); |
1135 |
++ } |
1136 |
++ MR_X(mr) = step_x; |
1137 |
++ MR_Y(mr) = step_y; |
1138 |
++ XFreePixmap(dpy, tmp); |
1139 |
++ XFreeGC(dpy,my_gc); |
1140 |
++ } |
1141 |
++ else |
1142 |
++ { |
1143 |
++ XUnmapWindow(dpy, MR_WINDOW(mr)); |
1144 |
++ MR_X(mr) = step_x; |
1145 |
++ MR_Y(mr) = step_y; |
1146 |
++ trans = PGraphicsCreateTranslucent( |
1147 |
++ dpy, MR_WINDOW(mr), &fra, |
1148 |
++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), |
1149 |
++ step_x, step_y, MR_WIDTH(mr), |
1150 |
++ MR_HEIGHT(mr)); |
1151 |
++ XMapRaised(dpy, MR_WINDOW(mr)); |
1152 |
++ } |
1153 |
++ XSetWindowBackgroundPixmap( |
1154 |
++ dpy, MR_WINDOW(mr), trans); |
1155 |
++ XFreePixmap(dpy, trans); |
1156 |
++ if (current_x == step_x) |
1157 |
++ { |
1158 |
++ /* Redraw the border */ |
1159 |
++ RelieveRectangle( |
1160 |
++ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr) - 1, |
1161 |
++ MR_HEIGHT(mr) - 1, (Pdepth < 2) ? |
1162 |
++ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)) : |
1163 |
++ HILIGHT_GC(MST_MENU_INACTIVE_GCS(mr)), |
1164 |
++ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)), |
1165 |
++ MST_BORDER_WIDTH(mr)); |
1166 |
++ } |
1167 |
++ } |
1168 |
++ else |
1169 |
++ { |
1170 |
++ SetWindowBackgroundWithOffset( |
1171 |
++ dpy, MR_WINDOW(mr), step_x - current_x, |
1172 |
++ step_y - current_y, MR_WIDTH(mr), MR_HEIGHT(mr), |
1173 |
++ &Colorset[ST_CSET_MENU(ms)], Pdepth, |
1174 |
++ FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); |
1175 |
++ } |
1176 |
+ } |
1177 |
+ |
1178 |
+ |
1179 |
+@@ -6336,10 +6505,7 @@ void repaint_transparent_menu( |
1180 |
+ } |
1181 |
+ if (!is_bg_set) |
1182 |
+ { |
1183 |
+- SetWindowBackground( |
1184 |
+- dpy, MR_WINDOW(mr), MR_WIDTH(mr), MR_HEIGHT(mr), |
1185 |
+- &Colorset[ST_CSET_MENU(ms)], Pdepth, |
1186 |
+- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); |
1187 |
++ update_transparent_menu_bg(prtm, x, y, x, y, end_x, end_y); |
1188 |
+ } |
1189 |
+ /* redraw the background of non active item */ |
1190 |
+ for (mi = MR_FIRST_ITEM(mr); mi != NULL; mi = MI_NEXT_ITEM(mi)) |
1191 |
+@@ -6978,7 +7144,10 @@ void UpdateMenuColorset(int cset) |
1192 |
+ &Colorset[ST_CSET_MENU(ms2)], |
1193 |
+ Pdepth, |
1194 |
+ FORE_GC(MST_MENU_INACTIVE_GCS(mr)), |
1195 |
+- True); |
1196 |
++ False); |
1197 |
++ XClearArea( |
1198 |
++ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr), |
1199 |
++ MR_HEIGHT(mr), True); |
1200 |
+ } |
1201 |
+ else if ((ST_HAS_ACTIVE_CSET(ms2) && |
1202 |
+ ST_CSET_ACTIVE(ms2) == cset) || |
1203 |
+--- a/fvwm/menus.h |
1204 |
++++ b/fvwm/menus.h |
1205 |
+@@ -19,6 +19,9 @@ |
1206 |
+ #define IS_MENU_RETURN(x) \ |
1207 |
+ ((x)==MENU_DONE || (x)==MENU_ABORTED || (x)==MENU_SUBMENU_TORN_OFF) |
1208 |
+ |
1209 |
++#define MR_X(m) ((m)->d->x) |
1210 |
++#define MR_Y(m) ((m)->d->y) |
1211 |
++ |
1212 |
+ struct MenuRoot; |
1213 |
+ struct MenuStyle; |
1214 |
+ struct MenuReturn; |
1215 |
+--- a/libs/Colorset.h |
1216 |
++++ b/libs/Colorset.h |
1217 |
+@@ -53,6 +53,10 @@ typedef struct Colorset |
1218 |
+ Bool dither; |
1219 |
+ Bool allows_buffered_transparency; |
1220 |
+ Bool is_maybe_root_transparent; |
1221 |
++ /* only use by fvwm menu (non tear-off) */ |
1222 |
++ Bool is_translucent; |
1223 |
++ Pixel translucent_tint; |
1224 |
++ unsigned int translucent_tint_percent : 7; |
1225 |
+ #endif |
1226 |
+ } colorset_t; |
1227 |
+ |
1228 |
+@@ -80,6 +84,7 @@ typedef struct Colorset |
1229 |
+ #define FG_TINT_SUPPLIED 0x100 |
1230 |
+ #define BG_TINT_SUPPLIED 0x200 |
1231 |
+ #define ICON_TINT_SUPPLIED 0x400 |
1232 |
++#define TRANSLUCENT_TINT_SUPPLIED 0x800 |
1233 |
+ #endif |
1234 |
+ |
1235 |
+ /* colorsets are stored as an array of structs to permit fast dereferencing */ |
1236 |
+@@ -155,6 +160,11 @@ extern colorset_t *Colorset; |
1237 |
+ (cset != NULL && cset->pixmap == ParentRelative && \ |
1238 |
+ cset->tint_percent > 0) |
1239 |
+ |
1240 |
++#define CSET_IS_TRANSLUCENT(cset) \ |
1241 |
++ (cset >= 0 && Colorset[cset].is_translucent) |
1242 |
++#define CSETS_IS_TRANSLUCENT(cset) \ |
1243 |
++ (cset && cset->is_translucent) |
1244 |
++ |
1245 |
+ #ifndef FVWM_COLORSET_PRIVATE |
1246 |
+ /* Create n new colorsets, fvwm/colorset.c does its own thing (different size) |
1247 |
+ */ |
1248 |
+--- a/libs/PictureGraphics.c |
1249 |
++++ b/libs/PictureGraphics.c |
1250 |
+@@ -1361,7 +1361,7 @@ void PGraphicsTintRectangle( |
1251 |
+ } |
1252 |
+ } |
1253 |
+ |
1254 |
+-#if 0 /* humm... maybe useful one day with menus */ |
1255 |
++#if 1 /* humm... maybe useful one day with menus */ |
1256 |
+ Pixmap PGraphicsCreateTranslucent( |
1257 |
+ Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc, |
1258 |
+ int x, int y, int width, int height) |
1259 |
+--- a/libs/PictureGraphics.h |
1260 |
++++ b/libs/PictureGraphics.h |
1261 |
+@@ -124,7 +124,9 @@ void PGraphicsTintRectangle( |
1262 |
+ Display *dpy, Window win, Pixel tint, int tint_percent, |
1263 |
+ Drawable dest, Bool dest_is_a_window, GC gc, GC mono_gc, GC alpha_gc, |
1264 |
+ int dest_x, int dest_y, int dest_w, int dest_h); |
1265 |
+- |
1266 |
++Pixmap PGraphicsCreateTranslucent( |
1267 |
++ Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc, |
1268 |
++ int x, int y, int width, int height); |
1269 |
+ /* never used ! */ |
1270 |
+ Pixmap PGraphicsCreateDitherPixmap( |
1271 |
+ Display *dpy, Window win, Drawable src, Pixmap mask, int depth, GC gc, |
1272 |
|
1273 |
diff --git a/x11-wm/fvwm3/fvwm3-1.0.4.ebuild b/x11-wm/fvwm3/fvwm3-1.0.4.ebuild |
1274 |
new file mode 100644 |
1275 |
index 000000000000..cbafa1cafe1d |
1276 |
--- /dev/null |
1277 |
+++ b/x11-wm/fvwm3/fvwm3-1.0.4.ebuild |
1278 |
@@ -0,0 +1,204 @@ |
1279 |
+# Copyright 1999-2022 Gentoo Authors |
1280 |
+# Distributed under the terms of the GNU General Public License v2 |
1281 |
+ |
1282 |
+EAPI=8 |
1283 |
+ |
1284 |
+PYTHON_COMPAT=( python3_{8..11} ) |
1285 |
+GO_OPTIONAL=1 |
1286 |
+inherit autotools desktop flag-o-matic go-module python-single-r1 |
1287 |
+ |
1288 |
+DESCRIPTION="A multiple large virtual desktop window manager derived from fvwm" |
1289 |
+HOMEPAGE="http://www.fvwm.org/" |
1290 |
+ |
1291 |
+if [[ ${PV} == 9999 ]]; then |
1292 |
+ inherit git-r3 |
1293 |
+ EGIT_REPO_URI="https://github.com/fvwmorg/fvwm3.git" |
1294 |
+ EGIT_BRANCH="master" |
1295 |
+else |
1296 |
+ SRC_URI="https://github.com/fvwmorg/fvwm3/releases/download/${PV}/${P}.tar.gz" |
1297 |
+ KEYWORDS="~amd64" |
1298 |
+fi |
1299 |
+ |
1300 |
+SRC_URI+=" https://gitlab.com/Matt.Jolly/fvwm3-go-deps/-/raw/${PV}/${P}-deps.tar.xz?inline=false -> ${P}-deps.tar.xz" |
1301 |
+ |
1302 |
+LICENSE="GPL-2+ FVWM |
1303 |
+ go? ( |
1304 |
+ Apache-2.0 |
1305 |
+ BSD |
1306 |
+ MIT |
1307 |
+ )" |
1308 |
+ |
1309 |
+SLOT="0" |
1310 |
+ |
1311 |
+IUSE="bidi debug doc go netpbm nls perl png readline rplay stroke svg tk truetype vanilla lock" |
1312 |
+REQUIRED_USE=" |
1313 |
+ ${PYTHON_REQUIRED_USE}" |
1314 |
+ |
1315 |
+DOCS=( NEWS ) |
1316 |
+ |
1317 |
+if [[ ${PV} == 9999 ]]; then |
1318 |
+ 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 ) |
1319 |
+fi |
1320 |
+ |
1321 |
+BDEPEND=" |
1322 |
+ virtual/pkgconfig |
1323 |
+ doc? ( dev-libs/libxslt |
1324 |
+ dev-ruby/asciidoctor ) |
1325 |
+ app-arch/unzip |
1326 |
+ go? ( >=dev-lang/go-1.14 ) |
1327 |
+" |
1328 |
+ |
1329 |
+RDEPEND="${PYTHON_DEPS} |
1330 |
+ ${COMMON_DEPEND} |
1331 |
+ !x11-wm/fvwm |
1332 |
+ dev-libs/glib:2 |
1333 |
+ dev-libs/libevent:= |
1334 |
+ dev-lang/perl |
1335 |
+ sys-libs/zlib |
1336 |
+ x11-libs/libICE |
1337 |
+ x11-libs/libSM |
1338 |
+ x11-libs/libX11 |
1339 |
+ x11-libs/libXau |
1340 |
+ x11-libs/libxcb |
1341 |
+ x11-libs/libXcursor |
1342 |
+ x11-libs/libXdmcp |
1343 |
+ x11-libs/libXext |
1344 |
+ x11-libs/libXfixes |
1345 |
+ x11-libs/libXpm |
1346 |
+ x11-libs/libXrandr |
1347 |
+ x11-libs/libXrender |
1348 |
+ bidi? ( dev-libs/fribidi ) |
1349 |
+ lock? ( x11-misc/xlockmore ) |
1350 |
+ netpbm? ( media-libs/netpbm ) |
1351 |
+ perl? ( tk? ( |
1352 |
+ dev-lang/tk |
1353 |
+ dev-perl/Tk |
1354 |
+ >=dev-perl/X11-Protocol-0.56 |
1355 |
+ ) |
1356 |
+ ) |
1357 |
+ png? ( media-libs/libpng:= ) |
1358 |
+ readline? ( |
1359 |
+ sys-libs/ncurses:= |
1360 |
+ sys-libs/readline:= |
1361 |
+ ) |
1362 |
+ rplay? ( media-sound/rplay ) |
1363 |
+ stroke? ( dev-libs/libstroke ) |
1364 |
+ svg? ( |
1365 |
+ gnome-base/librsvg:2 |
1366 |
+ x11-libs/cairo |
1367 |
+ ) |
1368 |
+ truetype? ( |
1369 |
+ media-libs/fontconfig |
1370 |
+ x11-libs/libXft |
1371 |
+ ) |
1372 |
+ userland_GNU? ( sys-apps/debianutils )" |
1373 |
+ |
1374 |
+DEPEND="${COMMON_DEPEND} |
1375 |
+ x11-base/xorg-proto" |
1376 |
+ |
1377 |
+PATCHES=( |
1378 |
+ "${FILESDIR}/${P}-translucent-menus.patch" |
1379 |
+) |
1380 |
+ |
1381 |
+if [[ ${PV} == 9999 ]]; then |
1382 |
+ PATCHES+=( |
1383 |
+ "${FILESDIR}/${P}-goflags.patch" |
1384 |
+ ) |
1385 |
+fi |
1386 |
+ |
1387 |
+src_unpack() { |
1388 |
+ if [[ ${PV} == 9999 ]]; then |
1389 |
+ einfo "The branch ${EGIT_BRANCH} will be installed." |
1390 |
+ git-r3_src_unpack |
1391 |
+ else |
1392 |
+ unpack "${P}".tar.gz |
1393 |
+ fi |
1394 |
+ unpack "${P}"-deps.tar.xz |
1395 |
+ mv go-mod ${P}/bin/FvwmPrompt/ || die |
1396 |
+} |
1397 |
+ |
1398 |
+src_prepare() { |
1399 |
+ default |
1400 |
+ if use doc; then |
1401 |
+ eapply "${FILESDIR}/${P}-htmldoc.patch" |
1402 |
+ fi |
1403 |
+ |
1404 |
+ sed -i '/^@FVWM_BUILD_GOLANG_TRUE@GOBUILD = $(GOCMD) build/s/$/ -mod=mod/' \ |
1405 |
+ bin/FvwmPrompt/Makefile.in || die "Updating go build paramaters failed." |
1406 |
+ |
1407 |
+ eautoreconf |
1408 |
+} |
1409 |
+ |
1410 |
+src_configure() { |
1411 |
+ # Non-upstream email where bugs should be sent; used in fvwm-bug. |
1412 |
+ export FVWM_BUGADDR="desktop-wm@××××××××.org" |
1413 |
+ |
1414 |
+ # Recommended by upstream for release. Doesn't really matter for live ebuilds. |
1415 |
+ append-flags -fno-strict-aliasing |
1416 |
+ |
1417 |
+ # Signed chars are required. |
1418 |
+ for arch in arm arm64 ppc ppc64; do |
1419 |
+ use $arch && append-flags -fsigned-chars |
1420 |
+ done |
1421 |
+ |
1422 |
+ local myconf=( |
1423 |
+ --prefix=/usr |
1424 |
+ --with-imagepath=/usr/include/X11/bitmaps:/usr/include/X11/pixmaps:/usr/share/icons/fvwm |
1425 |
+ --enable-package-subdirs |
1426 |
+ $(use_enable bidi) |
1427 |
+ $(use_enable doc mandoc) |
1428 |
+ $(use_enable go golang) |
1429 |
+ $(use_enable nls) |
1430 |
+ $(use_enable nls iconv) |
1431 |
+ $(use_enable perl perllib) |
1432 |
+ $(use_enable png) |
1433 |
+ $(use_with readline readline-library) |
1434 |
+ $(use_enable svg rsvg) |
1435 |
+ $(use_enable truetype xft) |
1436 |
+ --docdir=/usr/share/doc/${P} |
1437 |
+ ) |
1438 |
+ |
1439 |
+ use readline && myconf+=( --without-termcap-library ) |
1440 |
+ |
1441 |
+ econf ${myconf[@]} |
1442 |
+} |
1443 |
+ |
1444 |
+src_compile() { |
1445 |
+ PREFIX="/usr" emake |
1446 |
+ if [[ ${PV} == *9999 ]]; then |
1447 |
+ use doc && emake -C doc html |
1448 |
+ fi |
1449 |
+} |
1450 |
+ |
1451 |
+src_install() { |
1452 |
+ emake DESTDIR="${ED}" prefix="/usr" exec_prefix="/usr" datarootdir="/usr/share" install |
1453 |
+ |
1454 |
+ dodir /etc/X11/Sessions |
1455 |
+ echo "/usr/bin/fvwm3" > "${ED}/etc/X11/Sessions/${PN}" || die |
1456 |
+ fperms a+x /etc/X11/Sessions/${PN} || die |
1457 |
+ |
1458 |
+ python_scriptinto "/usr/bin" |
1459 |
+ python_doscript "${ED}/usr/bin/FvwmCommand" "${ED}/usr/bin/fvwm-menu-desktop" |
1460 |
+ if use doc; then |
1461 |
+ if [[ ${PV} == *9999 ]]; then |
1462 |
+ HTML_DOCS=( doc/*.html ) |
1463 |
+ else |
1464 |
+ HTML_DOCS=( doc/html/*.html ) |
1465 |
+ fi |
1466 |
+ fi |
1467 |
+ einstalldocs |
1468 |
+ |
1469 |
+ make_session_desktop fvwm3 /usr/bin/fvwm3 |
1470 |
+} |
1471 |
+ |
1472 |
+pkg_postinst() { |
1473 |
+ if use go; then |
1474 |
+ ewarn "FvwmPrompt has been installed, it provides the functionality of both FvwmCommand and FvwmConsole." |
1475 |
+ ewarn "For compatibility with the existing fvwm2 configurations, the ebuild will install a FvwmCommand wrapper script." |
1476 |
+ ewarn "If you need FvwmConsole, install ${PN} with USE=\"-go\", but FvwmPrompt and FvwmCommnd will not be installed." |
1477 |
+ else |
1478 |
+ ewarn "Fvwmconsole has been installed, but FvwmCommand and FvwmPrompt are no longer included in this ebuild." |
1479 |
+ ewarn "If you need FvwmPrompt or FvwmCommand, install ${PN} with USE=\"go\"." |
1480 |
+ ewarn "In that case, FvwmPrompt will replace FvwmConsole and provide the same functionality in a more flexible way." |
1481 |
+ fi |
1482 |
+} |
1483 |
|
1484 |
diff --git a/x11-wm/fvwm3/fvwm3-9999.ebuild b/x11-wm/fvwm3/fvwm3-9999.ebuild |
1485 |
new file mode 100644 |
1486 |
index 000000000000..cbafa1cafe1d |
1487 |
--- /dev/null |
1488 |
+++ b/x11-wm/fvwm3/fvwm3-9999.ebuild |
1489 |
@@ -0,0 +1,204 @@ |
1490 |
+# Copyright 1999-2022 Gentoo Authors |
1491 |
+# Distributed under the terms of the GNU General Public License v2 |
1492 |
+ |
1493 |
+EAPI=8 |
1494 |
+ |
1495 |
+PYTHON_COMPAT=( python3_{8..11} ) |
1496 |
+GO_OPTIONAL=1 |
1497 |
+inherit autotools desktop flag-o-matic go-module python-single-r1 |
1498 |
+ |
1499 |
+DESCRIPTION="A multiple large virtual desktop window manager derived from fvwm" |
1500 |
+HOMEPAGE="http://www.fvwm.org/" |
1501 |
+ |
1502 |
+if [[ ${PV} == 9999 ]]; then |
1503 |
+ inherit git-r3 |
1504 |
+ EGIT_REPO_URI="https://github.com/fvwmorg/fvwm3.git" |
1505 |
+ EGIT_BRANCH="master" |
1506 |
+else |
1507 |
+ SRC_URI="https://github.com/fvwmorg/fvwm3/releases/download/${PV}/${P}.tar.gz" |
1508 |
+ KEYWORDS="~amd64" |
1509 |
+fi |
1510 |
+ |
1511 |
+SRC_URI+=" https://gitlab.com/Matt.Jolly/fvwm3-go-deps/-/raw/${PV}/${P}-deps.tar.xz?inline=false -> ${P}-deps.tar.xz" |
1512 |
+ |
1513 |
+LICENSE="GPL-2+ FVWM |
1514 |
+ go? ( |
1515 |
+ Apache-2.0 |
1516 |
+ BSD |
1517 |
+ MIT |
1518 |
+ )" |
1519 |
+ |
1520 |
+SLOT="0" |
1521 |
+ |
1522 |
+IUSE="bidi debug doc go netpbm nls perl png readline rplay stroke svg tk truetype vanilla lock" |
1523 |
+REQUIRED_USE=" |
1524 |
+ ${PYTHON_REQUIRED_USE}" |
1525 |
+ |
1526 |
+DOCS=( NEWS ) |
1527 |
+ |
1528 |
+if [[ ${PV} == 9999 ]]; then |
1529 |
+ 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 ) |
1530 |
+fi |
1531 |
+ |
1532 |
+BDEPEND=" |
1533 |
+ virtual/pkgconfig |
1534 |
+ doc? ( dev-libs/libxslt |
1535 |
+ dev-ruby/asciidoctor ) |
1536 |
+ app-arch/unzip |
1537 |
+ go? ( >=dev-lang/go-1.14 ) |
1538 |
+" |
1539 |
+ |
1540 |
+RDEPEND="${PYTHON_DEPS} |
1541 |
+ ${COMMON_DEPEND} |
1542 |
+ !x11-wm/fvwm |
1543 |
+ dev-libs/glib:2 |
1544 |
+ dev-libs/libevent:= |
1545 |
+ dev-lang/perl |
1546 |
+ sys-libs/zlib |
1547 |
+ x11-libs/libICE |
1548 |
+ x11-libs/libSM |
1549 |
+ x11-libs/libX11 |
1550 |
+ x11-libs/libXau |
1551 |
+ x11-libs/libxcb |
1552 |
+ x11-libs/libXcursor |
1553 |
+ x11-libs/libXdmcp |
1554 |
+ x11-libs/libXext |
1555 |
+ x11-libs/libXfixes |
1556 |
+ x11-libs/libXpm |
1557 |
+ x11-libs/libXrandr |
1558 |
+ x11-libs/libXrender |
1559 |
+ bidi? ( dev-libs/fribidi ) |
1560 |
+ lock? ( x11-misc/xlockmore ) |
1561 |
+ netpbm? ( media-libs/netpbm ) |
1562 |
+ perl? ( tk? ( |
1563 |
+ dev-lang/tk |
1564 |
+ dev-perl/Tk |
1565 |
+ >=dev-perl/X11-Protocol-0.56 |
1566 |
+ ) |
1567 |
+ ) |
1568 |
+ png? ( media-libs/libpng:= ) |
1569 |
+ readline? ( |
1570 |
+ sys-libs/ncurses:= |
1571 |
+ sys-libs/readline:= |
1572 |
+ ) |
1573 |
+ rplay? ( media-sound/rplay ) |
1574 |
+ stroke? ( dev-libs/libstroke ) |
1575 |
+ svg? ( |
1576 |
+ gnome-base/librsvg:2 |
1577 |
+ x11-libs/cairo |
1578 |
+ ) |
1579 |
+ truetype? ( |
1580 |
+ media-libs/fontconfig |
1581 |
+ x11-libs/libXft |
1582 |
+ ) |
1583 |
+ userland_GNU? ( sys-apps/debianutils )" |
1584 |
+ |
1585 |
+DEPEND="${COMMON_DEPEND} |
1586 |
+ x11-base/xorg-proto" |
1587 |
+ |
1588 |
+PATCHES=( |
1589 |
+ "${FILESDIR}/${P}-translucent-menus.patch" |
1590 |
+) |
1591 |
+ |
1592 |
+if [[ ${PV} == 9999 ]]; then |
1593 |
+ PATCHES+=( |
1594 |
+ "${FILESDIR}/${P}-goflags.patch" |
1595 |
+ ) |
1596 |
+fi |
1597 |
+ |
1598 |
+src_unpack() { |
1599 |
+ if [[ ${PV} == 9999 ]]; then |
1600 |
+ einfo "The branch ${EGIT_BRANCH} will be installed." |
1601 |
+ git-r3_src_unpack |
1602 |
+ else |
1603 |
+ unpack "${P}".tar.gz |
1604 |
+ fi |
1605 |
+ unpack "${P}"-deps.tar.xz |
1606 |
+ mv go-mod ${P}/bin/FvwmPrompt/ || die |
1607 |
+} |
1608 |
+ |
1609 |
+src_prepare() { |
1610 |
+ default |
1611 |
+ if use doc; then |
1612 |
+ eapply "${FILESDIR}/${P}-htmldoc.patch" |
1613 |
+ fi |
1614 |
+ |
1615 |
+ sed -i '/^@FVWM_BUILD_GOLANG_TRUE@GOBUILD = $(GOCMD) build/s/$/ -mod=mod/' \ |
1616 |
+ bin/FvwmPrompt/Makefile.in || die "Updating go build paramaters failed." |
1617 |
+ |
1618 |
+ eautoreconf |
1619 |
+} |
1620 |
+ |
1621 |
+src_configure() { |
1622 |
+ # Non-upstream email where bugs should be sent; used in fvwm-bug. |
1623 |
+ export FVWM_BUGADDR="desktop-wm@××××××××.org" |
1624 |
+ |
1625 |
+ # Recommended by upstream for release. Doesn't really matter for live ebuilds. |
1626 |
+ append-flags -fno-strict-aliasing |
1627 |
+ |
1628 |
+ # Signed chars are required. |
1629 |
+ for arch in arm arm64 ppc ppc64; do |
1630 |
+ use $arch && append-flags -fsigned-chars |
1631 |
+ done |
1632 |
+ |
1633 |
+ local myconf=( |
1634 |
+ --prefix=/usr |
1635 |
+ --with-imagepath=/usr/include/X11/bitmaps:/usr/include/X11/pixmaps:/usr/share/icons/fvwm |
1636 |
+ --enable-package-subdirs |
1637 |
+ $(use_enable bidi) |
1638 |
+ $(use_enable doc mandoc) |
1639 |
+ $(use_enable go golang) |
1640 |
+ $(use_enable nls) |
1641 |
+ $(use_enable nls iconv) |
1642 |
+ $(use_enable perl perllib) |
1643 |
+ $(use_enable png) |
1644 |
+ $(use_with readline readline-library) |
1645 |
+ $(use_enable svg rsvg) |
1646 |
+ $(use_enable truetype xft) |
1647 |
+ --docdir=/usr/share/doc/${P} |
1648 |
+ ) |
1649 |
+ |
1650 |
+ use readline && myconf+=( --without-termcap-library ) |
1651 |
+ |
1652 |
+ econf ${myconf[@]} |
1653 |
+} |
1654 |
+ |
1655 |
+src_compile() { |
1656 |
+ PREFIX="/usr" emake |
1657 |
+ if [[ ${PV} == *9999 ]]; then |
1658 |
+ use doc && emake -C doc html |
1659 |
+ fi |
1660 |
+} |
1661 |
+ |
1662 |
+src_install() { |
1663 |
+ emake DESTDIR="${ED}" prefix="/usr" exec_prefix="/usr" datarootdir="/usr/share" install |
1664 |
+ |
1665 |
+ dodir /etc/X11/Sessions |
1666 |
+ echo "/usr/bin/fvwm3" > "${ED}/etc/X11/Sessions/${PN}" || die |
1667 |
+ fperms a+x /etc/X11/Sessions/${PN} || die |
1668 |
+ |
1669 |
+ python_scriptinto "/usr/bin" |
1670 |
+ python_doscript "${ED}/usr/bin/FvwmCommand" "${ED}/usr/bin/fvwm-menu-desktop" |
1671 |
+ if use doc; then |
1672 |
+ if [[ ${PV} == *9999 ]]; then |
1673 |
+ HTML_DOCS=( doc/*.html ) |
1674 |
+ else |
1675 |
+ HTML_DOCS=( doc/html/*.html ) |
1676 |
+ fi |
1677 |
+ fi |
1678 |
+ einstalldocs |
1679 |
+ |
1680 |
+ make_session_desktop fvwm3 /usr/bin/fvwm3 |
1681 |
+} |
1682 |
+ |
1683 |
+pkg_postinst() { |
1684 |
+ if use go; then |
1685 |
+ ewarn "FvwmPrompt has been installed, it provides the functionality of both FvwmCommand and FvwmConsole." |
1686 |
+ ewarn "For compatibility with the existing fvwm2 configurations, the ebuild will install a FvwmCommand wrapper script." |
1687 |
+ ewarn "If you need FvwmConsole, install ${PN} with USE=\"-go\", but FvwmPrompt and FvwmCommnd will not be installed." |
1688 |
+ else |
1689 |
+ ewarn "Fvwmconsole has been installed, but FvwmCommand and FvwmPrompt are no longer included in this ebuild." |
1690 |
+ ewarn "If you need FvwmPrompt or FvwmCommand, install ${PN} with USE=\"go\"." |
1691 |
+ ewarn "In that case, FvwmPrompt will replace FvwmConsole and provide the same functionality in a more flexible way." |
1692 |
+ fi |
1693 |
+} |
1694 |
|
1695 |
diff --git a/x11-wm/fvwm3/metadata.xml b/x11-wm/fvwm3/metadata.xml |
1696 |
new file mode 100644 |
1697 |
index 000000000000..3711144d46ea |
1698 |
--- /dev/null |
1699 |
+++ b/x11-wm/fvwm3/metadata.xml |
1700 |
@@ -0,0 +1,27 @@ |
1701 |
+<?xml version="1.0" encoding="UTF-8"?> |
1702 |
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> |
1703 |
+<pkgmetadata> |
1704 |
+ <longdescription lang="en"> |
1705 |
+ fvwm3 is a multiple large virtual desktop window manager. |
1706 |
+ The successor to fvwm-2.6, Fvwm3 is intended to be extremely customizable and extendible while consuming a relatively small amount of resources. |
1707 |
+ </longdescription> |
1708 |
+ <maintainer type="person" proxied="yes"> |
1709 |
+ <email>Matt.Jolly@××××××××.ninja</email> |
1710 |
+ <name>Matthew Jolly</name> |
1711 |
+ </maintainer> |
1712 |
+ <maintainer type="project" proxied="proxy"> |
1713 |
+ <email>proxy-maint@g.o</email> |
1714 |
+ <name>Proxy Maintainers</name> |
1715 |
+ </maintainer> |
1716 |
+ <use> |
1717 |
+ <flag name="go">Enable building <pkg>dev-lang/go</pkg> code (FvwmPrompt)</flag> |
1718 |
+ <flag name="lock">Enable screen locking</flag> |
1719 |
+ <flag name="netpbm">Enable NetPBM support (used by FvwmScript-ScreenDump)</flag> |
1720 |
+ <flag name="rplay">Enable rplay support</flag> |
1721 |
+ <flag name="stroke">Mouse Gesture support</flag> |
1722 |
+ </use> |
1723 |
+ <upstream> |
1724 |
+ <bugs-to>https://github.com/fvwmorg/fvwm3/issues</bugs-to> |
1725 |
+ <changelog>https://raw.githubusercontent.com/fvwmorg/fvwm3/master/CHANGELOG.md</changelog> |
1726 |
+ </upstream> |
1727 |
+</pkgmetadata> |