summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Faulhammer <fauli@gentoo.org>2009-07-08 07:03:45 +0000
committerChristian Faulhammer <fauli@gentoo.org>2009-07-08 07:03:45 +0000
commit30392258f37ee9ac132445f762f429684a421913 (patch)
tree5e1e317139ae02eedae99b11db2498fdd82774bc /x11-wm/fvwm
parentVersion bump (diff)
downloadhistorical-30392258f37ee9ac132445f762f429684a421913.tar.gz
historical-30392258f37ee9ac132445f762f429684a421913.tar.bz2
historical-30392258f37ee9ac132445f762f429684a421913.zip
version bump (non-maintainer commit) for bug 261301, fixes bug 238905, too. Thanks to all the people who contributed
Package-Manager: portage-2.1.6.13/cvs/Linux i686
Diffstat (limited to 'x11-wm/fvwm')
-rw-r--r--x11-wm/fvwm/ChangeLog12
-rw-r--r--x11-wm/fvwm/Manifest19
-rw-r--r--x11-wm/fvwm/files/README.translucency (renamed from x11-wm/fvwm/files/README.transluceny)0
-rw-r--r--x11-wm/fvwm/files/fvwm-2.5.27-translucent-menus.diff528
-rw-r--r--x11-wm/fvwm/fvwm-2.5.27.ebuild176
-rw-r--r--x11-wm/fvwm/metadata.xml1
6 files changed, 731 insertions, 5 deletions
diff --git a/x11-wm/fvwm/ChangeLog b/x11-wm/fvwm/ChangeLog
index 569d89b37842..9539d253e968 100644
--- a/x11-wm/fvwm/ChangeLog
+++ b/x11-wm/fvwm/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for x11-wm/fvwm
-# Copyright 2002-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-wm/fvwm/ChangeLog,v 1.148 2009/01/09 15:06:36 remi Exp $
+# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/fvwm/ChangeLog,v 1.149 2009/07/08 07:03:45 fauli Exp $
+
+*fvwm-2.5.27 (08 Jul 2009)
+
+ 08 Jul 2009; Christian Faulhammer <fauli@gentoo.org> +fvwm-2.5.27.ebuild,
+ +files/fvwm-2.5.27-translucent-menus.diff, +files/README.translucency,
+ -files/README.transluceny, metadata.xml:
+ version bump (non-maintainer commit) for bug 261301, fixes bug 238905,
+ too. Thanks to all the people who contributed
09 Jan 2009; Rémi Cardona <remi@gentoo.org> fvwm-2.5.18-r1.ebuild,
fvwm-2.5.19.ebuild, fvwm-2.5.21.ebuild, fvwm-2.5.25.ebuild,
diff --git a/x11-wm/fvwm/Manifest b/x11-wm/fvwm/Manifest
index b876f84afa0c..8d9e87ecac2e 100644
--- a/x11-wm/fvwm/Manifest
+++ b/x11-wm/fvwm/Manifest
@@ -1,5 +1,9 @@
-AUX README.transluceny 3723 RMD160 f09c9cb205731ae97781dd8a59a9b1633851ef36 SHA1 d41ac01641797012ec9673d5233421d89914fb91 SHA256 099c57f9f323ba44e03b9edcfc17da7da08b0438dd5be3c6830f283030e75fe6
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+AUX README.translucency 3723 RMD160 f09c9cb205731ae97781dd8a59a9b1633851ef36 SHA1 d41ac01641797012ec9673d5233421d89914fb91 SHA256 099c57f9f323ba44e03b9edcfc17da7da08b0438dd5be3c6830f283030e75fe6
AUX fvwm-2.5.23-translucent-menus.diff 15765 RMD160 5629e1fcd6d41e7c9f5cfa0a62204d33d83d5c6f SHA1 2ff0c394e1e393cab8249efeeddf917d07a7ba78 SHA256 ad59f0aa1b73fb128143bf5a390185289c296e0d31a4e6e6ca5f046f414752cf
+AUX fvwm-2.5.27-translucent-menus.diff 15765 RMD160 5629e1fcd6d41e7c9f5cfa0a62204d33d83d5c6f SHA1 2ff0c394e1e393cab8249efeeddf917d07a7ba78 SHA256 ad59f0aa1b73fb128143bf5a390185289c296e0d31a4e6e6ca5f046f414752cf
AUX fvwm-menu-directory-security.diff 651 RMD160 4c33671109d1d1f0927bbb755b86691040535bfc SHA1 9b2609a33c85e72c7735de1b3d5fa0fd866819bb SHA256 5ad90a20f6d5f32d718e54347dde66f863971f46a05f6c83c9a294a74cfc24df
AUX fvwm-menu-xlock-xlockmore-compat.diff 550 RMD160 72af6f306e5869581fcd48c84edfe00adea4a5b9 SHA1 0eccf83c3046e3822737c5facb23f547a062bff8 SHA256 5db8bc279f618096b23fed04b70b626c6ff50c104283d5ece505200db1e5a8af
DIST fvwm-2.5.18-translucent-menus.diff.gz 82595 RMD160 175e2dc93ca4e265a5022655deeede32dd653b38 SHA1 58e7120717e9dc581d9c6b61770aa740ef33bcbe SHA256 ffdaf69a93f626a709541e15ecbbb8842c306543beebd4adc909a6edbda42516
@@ -10,10 +14,19 @@ DIST fvwm-2.5.21-translucent-menus.diff.gz 5144 RMD160 5211216b76bf68e23c5cb339d
DIST fvwm-2.5.21.tar.bz2 2062532 RMD160 4025f6c75c0919bffdaa9acbc7a4d987617d098b SHA1 a66746c38d392da826b0c6f880b486c1064ee734 SHA256 5549a3ad693f9ab523653738e493e95418626a6d2fd52465ce200ae4116b8800
DIST fvwm-2.5.25.tar.bz2 2516717 RMD160 bf77786a071838304eb4bf8cc14960196c235506 SHA1 8e0f0b1eb888f7fcc27a0dbcc32a5b0f2895df2b SHA256 212dafb5fbace4a72d7a2d2dd6df7445709bad6739162a72879e4a6e942d69fc
DIST fvwm-2.5.26.tar.bz2 2509177 RMD160 47be927e61ef5411b668baec0e9a00d5691b3784 SHA1 26d9054c0f148a397eeaa9939be9329fb002831f SHA256 84aca15165f600c5c09095c94b3ad1f0bfe16ba25cf2097f76312a0fba89251d
+DIST fvwm-2.5.27.tar.bz2 2524965 RMD160 3b08849931d026619a45583f26528088efc51f6f SHA1 52a3300c5f13468fa61205477a07f0e5d4767a6b SHA256 149fc5a0a170473b6bea79127eb9f2a19c507929500fd6560162d7a12461c855
EBUILD fvwm-2.5.18-r1.ebuild 5347 RMD160 9e2e404fb5d302d56bcd3734230bcd5feb038e2f SHA1 bced468578e28a59594e38e1123b1708444b1aa1 SHA256 a571df75165a3ea8516d8dfdb9b105bda9b212ec07890fe78df72960c7987ea8
EBUILD fvwm-2.5.19.ebuild 5311 RMD160 9bc6c0e99001d5c5407b4edb308062c1d43dd6d8 SHA1 1971d20580f63e8d8ba720f5068ba484ae17f8e6 SHA256 af29c8eb897e269697dc5cb0f49794603d0c30a032b4a43f00ad46552b6e740b
EBUILD fvwm-2.5.21.ebuild 5180 RMD160 84c9f6d4175694fb724cf40e7779ef15fe6a9a41 SHA1 dbd4ad298b0b11b6a2ffe281a72e0af677b3ec27 SHA256 ceb9d77e8d912bcabf671f3907c49d6e481e7051485e021ab18cace9ae258e5b
EBUILD fvwm-2.5.25.ebuild 4396 RMD160 356c644a5a32542c0e270834b56557b44c3db5d0 SHA1 5fdc5cc0c6b9109898a0d0ff3c40c11e67449742 SHA256 a418be99ec9d553cffed3a6dabfff1dea7782bcfc4d8a728d54367430795b445
EBUILD fvwm-2.5.26.ebuild 4840 RMD160 2b01847b9db40f22c69bf9c3a7bec80182ede45a SHA1 15811d2e7cc0e993ebc986203c96f7fb440b43ac SHA256 7e888246e3f4bfb25a9938b8e8af1fd166534ab62c231bb468e6194ea19605af
-MISC ChangeLog 23759 RMD160 625360c8504f84b83a5815c0d38a8a06d167912a SHA1 793236ae31976ed6c9eaa282d905735dcc80a590 SHA256 bb9b34d7fac5788a754df867cd06c068f9407e25aff75d40ffd7c7fc1edece8a
-MISC metadata.xml 725 RMD160 37556984b4dc76f120124ef02f14e266ca318057 SHA1 f55c03c1807d877ee2ad19845d47b08e00c8a6fc SHA256 0394cffcb0ba92f9b1f66db598c632309c30a606eac0817e6c2f0482f50e8d81
+EBUILD fvwm-2.5.27.ebuild 4893 RMD160 85d272f4f8fd34cfe35764e9aa8a2fd427e3caa1 SHA1 21a84fde1fa01e6489a8596cd4e26ad82bdc31d1 SHA256 7c7e9bab92b128533fa19246f1d3e9230f3357bcc5e5bfa3f3e63b6c8d6cf9e1
+MISC ChangeLog 24102 RMD160 e063d00d9c29833f6a247a993c5badd5d8f2096a SHA1 8962e495e6c8b49a4194ba328d3f6e82d0e2a310 SHA256 33a7e2d6f3b190ee1aae48b3618f23e6c994baaa1eadce8fdff20077b78f1d74
+MISC metadata.xml 776 RMD160 4672dd614625386745223a0635c43dd62f0006a9 SHA1 82658eae39230e1229616ed5e946b18962087f0f SHA256 af91361de7284e673e0dbea0d0cbec503ef6963c4b19d1858444d9a166a0b6cc
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.11 (GNU/Linux)
+
+iEYEARECAAYFAkpURNwACgkQNQqtfCuFneOLCACePHJsXyPxachdEhmiDmB1TJor
+eHQAnA16RFWRIYoc06+L+3R/u6lJm8Oh
+=pLx+
+-----END PGP SIGNATURE-----
diff --git a/x11-wm/fvwm/files/README.transluceny b/x11-wm/fvwm/files/README.translucency
index a60b5f668acd..a60b5f668acd 100644
--- a/x11-wm/fvwm/files/README.transluceny
+++ b/x11-wm/fvwm/files/README.translucency
diff --git a/x11-wm/fvwm/files/fvwm-2.5.27-translucent-menus.diff b/x11-wm/fvwm/files/fvwm-2.5.27-translucent-menus.diff
new file mode 100644
index 000000000000..1c49f69007d0
--- /dev/null
+++ b/x11-wm/fvwm/files/fvwm-2.5.27-translucent-menus.diff
@@ -0,0 +1,528 @@
+Index: fvwm/colorset.c
+===================================================================
+RCS file: /home/cvs/fvwm/fvwm/fvwm/colorset.c,v
+retrieving revision 1.52
+diff -u -r1.52 colorset.c
+--- fvwm/colorset.c 27 Jan 2007 11:33:15 -0000 1.52
++++ fvwm/colorset.c 5 Feb 2007 19:15:51 -0000
+@@ -164,6 +164,8 @@
+ "NoIconTint",
+ "IconAlpha",
+
++ "Translucent",
++ "NoTranslucent",
+ NULL
+ };
+
+@@ -625,6 +627,7 @@
+ char *fg_tint = NULL;
+ char *bg_tint = NULL;
+ char *icon_tint = NULL;
++ char *translucent_tint = NULL;
+ Bool have_pixels_changed = False;
+ Bool has_icon_pixels_changed = False;
+ Bool has_fg_changed = False;
+@@ -637,6 +640,7 @@
+ 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;
+@@ -763,6 +767,10 @@
+ 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;
+@@ -929,6 +937,24 @@
+ 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"))
+@@ -1615,6 +1641,27 @@
+ }
+
+ /*
++ * ---------- 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 ----------
+ */
+ /* make sure the server has this to avoid races */
+@@ -1710,6 +1757,7 @@
+ 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,
+@@ -1727,6 +1775,7 @@
+ 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 */
+@@ -1738,6 +1787,7 @@
+ 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++;
+Index: fvwm/menuroot.h
+===================================================================
+RCS file: /home/cvs/fvwm/fvwm/fvwm/menuroot.h,v
+retrieving revision 1.3
+diff -u -r1.3 menuroot.h
+--- fvwm/menuroot.h 13 Jan 2007 15:07:14 -0000 1.3
++++ fvwm/menuroot.h 5 Feb 2007 19:17:37 -0000
+@@ -146,6 +146,9 @@
+ 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 */
+Index: fvwm/menus.c
+===================================================================
+RCS file: /home/cvs/fvwm/fvwm/fvwm/menus.c,v
+retrieving revision 1.409
+diff -u -r1.409 menus.c
+--- fvwm/menus.c 27 Jan 2007 11:51:15 -0000 1.409
++++ fvwm/menus.c 5 Feb 2007 19:17:50 -0000
+@@ -75,6 +75,19 @@
+
+ /* ---------------------------- local macros ------------------------------- */
+
++#define MENU_IS_TRANSLUCENT(mr,cs) \
++ (!MR_IS_TEAR_OFF_MENU(mr) && CSET_IS_TRANSLUCENT(cs))
++#define MENU_IS_TRANSPARENT(mr,cs) \
++ (MENU_IS_TRANSLUCENT(mr,cs) || CSET_IS_TRANSPARENT(cs))
++#define MR_IS_TRANSLUCENT_MENU(mr) \
++ (!MR_IS_TEAR_OFF_MENU(mr) && MR_STYLE(mr) && \
++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSLUCENT( \
++ ST_CSET_MENU(MR_STYLE(mr))))
++#define MR_IS_TRANSPARENT_MENU(mr) \
++ (MR_IS_TRANSLUCENT_MENU(mr) || (MR_STYLE(mr) && \
++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSPARENT( \
++ ST_CSET_MENU(MR_STYLE(mr)))))
++
+ /* ---------------------------- imports ------------------------------------ */
+
+ /* This external is safe. It's written only during startup. */
+@@ -188,6 +201,8 @@
+ } mloop_static_info_t;
+
+ /* ---------------------------- forward declarations ----------------------- */
++static MenuRoot *seek_submenu_instance(
++ MenuRoot *parent_menu, MenuItem *parent_item);
+
+ /* ---------------------------- local variables ---------------------------- */
+
+@@ -353,12 +368,22 @@
+ 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),
+@@ -1779,6 +1804,7 @@
+ /* Doh. Use the standard display instead. */
+ MR_CREATE_DPY(mr) = dpy;
+ }
++ MR_IS_TEAR_OFF_MENU(mr) = 1;
+ }
+ else
+ {
+@@ -2594,7 +2620,37 @@
+ }
+ 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)
+ {
+@@ -3401,10 +3457,7 @@
+ 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(
+@@ -3583,10 +3636,21 @@
+ */
+
+ 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)++;
+@@ -6123,16 +6187,122 @@
+ {
+ 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);
++ }
+ }
+
+
+@@ -6173,10 +6343,7 @@
+ }
+ 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))
+@@ -6813,10 +6980,12 @@
+ SetWindowBackground(
+ dpy, MR_WINDOW(mr), MR_WIDTH(mr),
+ MR_HEIGHT(mr),
+- &Colorset[ST_CSET_MENU(ms)],
+- Pdepth,
++ &Colorset[ST_CSET_MENU(ms)], Pdepth,
+ FORE_GC(MST_MENU_INACTIVE_GCS(mr)),
+- True);
++ False);
++ XClearArea(
++ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr),
++ MR_HEIGHT(mr), True);
+ }
+ else if ((ST_HAS_ACTIVE_CSET(ms) &&
+ ST_CSET_ACTIVE(ms) == cset) ||
+Index: fvwm/menus.h
+===================================================================
+RCS file: /home/cvs/fvwm/fvwm/fvwm/menus.h,v
+retrieving revision 1.111
+diff -u -r1.111 menus.h
+--- fvwm/menus.h 27 Jan 2007 11:51:15 -0000 1.111
++++ fvwm/menus.h 5 Feb 2007 19:17:50 -0000
+@@ -15,6 +15,9 @@
+ #define IS_MENU_RETURN(x) \
+ ((x)==MENU_DONE || (x)==MENU_ABORTED || (x)==MENU_SUBMENU_TORN_OFF)
+
++#define MR_X(m) ((m)->d->x)
++#define MR_Y(m) ((m)->d->y)
++
+ struct MenuRoot;
+ struct MenuStyle;
+ struct MenuReturn;
+Index: libs/Colorset.h
+===================================================================
+RCS file: /home/cvs/fvwm/fvwm/libs/Colorset.h,v
+retrieving revision 1.38
+diff -u -r1.38 Colorset.h
+--- libs/Colorset.h 10 Jan 2007 00:34:27 -0000 1.38
++++ libs/Colorset.h 5 Feb 2007 19:19:00 -0000
+@@ -51,6 +51,10 @@
+ Bool dither;
+ Bool allows_buffered_transparency;
+ Bool is_maybe_root_transparent;
++ /* only use by fvwm menu (non tear-off) */
++ Bool is_translucent;
++ Pixel translucent_tint;
++ unsigned int translucent_tint_percent : 7;
+ #endif
+ } colorset_t;
+
+@@ -78,6 +82,7 @@
+ #define FG_TINT_SUPPLIED 0x100
+ #define BG_TINT_SUPPLIED 0x200
+ #define ICON_TINT_SUPPLIED 0x400
++#define TRANSLUCENT_TINT_SUPPLIED 0x800
+ #endif
+
+ /* colorsets are stored as an array of structs to permit fast dereferencing */
+@@ -153,6 +158,11 @@
+ (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)
+ */
+Index: libs/PictureGraphics.c
+===================================================================
+RCS file: /home/cvs/fvwm/fvwm/libs/PictureGraphics.c,v
+retrieving revision 1.29
+diff -u -r1.29 PictureGraphics.c
+--- libs/PictureGraphics.c 27 Jan 2007 11:33:16 -0000 1.29
++++ libs/PictureGraphics.c 5 Feb 2007 19:19:49 -0000
+@@ -1340,7 +1340,7 @@
+ }
+ }
+
+-#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)
+Index: libs/PictureGraphics.h
+===================================================================
+RCS file: /home/cvs/fvwm/fvwm/libs/PictureGraphics.h,v
+retrieving revision 1.13
+diff -u -r1.13 PictureGraphics.h
+--- libs/PictureGraphics.h 9 May 2006 20:46:29 -0000 1.13
++++ libs/PictureGraphics.h 5 Feb 2007 19:19:49 -0000
+@@ -122,7 +122,9 @@
+ 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/fvwm/fvwm-2.5.27.ebuild b/x11-wm/fvwm/fvwm-2.5.27.ebuild
new file mode 100644
index 000000000000..7373c3ea69ec
--- /dev/null
+++ b/x11-wm/fvwm/fvwm-2.5.27.ebuild
@@ -0,0 +1,176 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/fvwm/fvwm-2.5.27.ebuild,v 1.1 2009/07/08 07:03:45 fauli Exp $
+
+EAPI=2
+
+inherit eutils flag-o-matic
+
+DESCRIPTION="An extremely powerful ICCCM-compliant multiple virtual desktop window manager"
+HOMEPAGE="http://www.fvwm.org/"
+SRC_URI="ftp://ftp.fvwm.org/pub/fvwm/version-2/${P}.tar.bz2"
+
+LICENSE="GPL-2 FVWM"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+IUSE="bidi debug doc gtk gtk2-perl imlib netpbm nls perl png readline rplay stroke svg tk truetype vanilla xinerama lock"
+
+COMMON_DEPEND="
+ sys-libs/zlib
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libX11
+ x11-libs/libXau
+ x11-libs/libxcb
+ x11-libs/libXcursor
+ x11-libs/libXdmcp
+ x11-libs/libXext
+ x11-libs/libXfixes
+ x11-libs/libXpm
+ x11-libs/libXrandr
+ x11-libs/libXrender
+ bidi? ( dev-libs/fribidi )
+ gtk? (
+ =x11-libs/gtk+-1.2*
+ imlib? ( media-libs/imlib[gtk] )
+ )
+ png? ( media-libs/libpng )
+ readline? (
+ sys-libs/ncurses
+ sys-libs/readline
+ )
+ stroke? ( dev-libs/libstroke )
+ svg? ( gnome-base/librsvg )
+ truetype? (
+ media-libs/fontconfig
+ x11-libs/libXft
+ )
+ xinerama? (
+ x11-proto/xineramaproto
+ x11-libs/libXinerama
+ )"
+
+RDEPEND="${COMMON_DEPEND}
+ dev-lang/perl
+ gtk2-perl? ( dev-perl/gtk2-perl )
+ perl? ( tk? (
+ dev-lang/tk
+ dev-perl/perl-tk
+ >=dev-perl/X11-Protocol-0.56
+ )
+ )
+ rplay? ( media-sound/rplay )
+ lock? ( x11-misc/xlockmore )
+ userland_GNU? ( sys-apps/debianutils )
+ !x86-fbsd? ( netpbm? ( media-libs/netpbm ) )"
+
+DEPEND="${COMMON_DEPEND}
+ dev-util/pkgconfig
+ doc? ( dev-libs/libxslt )
+ x11-proto/xextproto
+ x11-proto/xproto"
+
+src_prepare() {
+ if ! use vanilla; then
+ # Enables fast translucent menus; patch from fvwm-user mailing list.
+ epatch "${FILESDIR}/${P}-translucent-menus.diff"
+
+ # A Gentoo-specific compatibility patch.
+ epatch "${FILESDIR}/fvwm-menu-xlock-xlockmore-compat.diff"
+ fi
+}
+
+src_configure() {
+ local myconf="--libexecdir=/usr/lib --with-imagepath=/usr/include/X11/bitmaps:/usr/include/X11/pixmaps:/usr/share/icons/fvwm --enable-package-subdirs --without-gnome"
+
+ # Non-upstream email where bugs should be sent; used in fvwm-bug.
+ export FVWM_BUGADDR="desktop-wm@gentoo.org"
+
+ # Recommended by upstream.
+ append-flags -fno-strict-aliasing
+
+ # Signed chars are required.
+ use ppc && append-flags -fsigned-char
+
+ if use gtk; then
+ if ! use imlib; then
+ einfo "ATTN: You can safely ignore any imlib related configure errors."
+ myconf="${myconf} --with-imlib-prefix=${T}"
+ fi
+ else
+ myconf="${myconf} --disable-gtk"
+ fi
+
+ use readline && myconf="${myconf} --without-termcap-library"
+
+ econf ${myconf} \
+ $(use_enable bidi) \
+ $(use_enable debug debug-msgs) \
+ $(use_enable debug command-log) \
+ $(use_enable doc htmldoc) \
+ $(use_enable nls) \
+ $(use_enable nls iconv) \
+ $(use_enable perl perllib) \
+ $(use_with png png-library) \
+ $(use_with readline readline-library) \
+ $(use_with rplay rplay-library) \
+ $(use_with stroke stroke-library) \
+ $(use_enable svg rsvg) \
+ $(use_enable truetype xft) \
+ $(use_enable xinerama) \
+ || die
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die
+
+ # These are always removed, because gentoo doesn't have anymore
+ # a dev-perl/gtk-perl package, so, these modules are pointless.
+ rm -f "${D}/usr/share/fvwm/perllib/FVWM/Module/Gtk.pm"
+ find "${D}" -name '*FvwmGtkDebug*' -exec rm -f '{}' \; 2>/dev/null
+
+ if ! use xlock; then
+ find "${D}" -name '*fvwm-menu-xlock' -exec rm -f '{}' \; 2>/dev/null
+ fi
+
+ if use perl; then
+ if ! use tk; then
+ rm -f "${D}/usr/share/fvwm/perllib/FVWM/Module/Tk.pm"
+ if ! use gtk2-perl; then # no tk and no gtk2 bindings
+ rm -f "${D}/usr/share/fvwm/perllib/FVWM/Module/Toolkit.pm"
+ find "${D}/usr/share/fvwm/perllib" -depth -type d -exec rmdir '{}' \; 2>/dev/null
+ fi
+ fi
+
+ # Now, the Gtk2.pm file, it will require dev-perl/gtk2-perl
+ # so it implies gtk2 as well. That's why we need another use flag.
+ if ! use gtk2-perl; then
+ rm -f "${D}/usr/share/fvwm/perllib/FVWM/Module/Gtk2.pm"
+ fi
+ else
+ # Completely wipe it if ! use perl
+ rm -rf "${D}/usr/bin/fvwm-perllib" \
+ "${D}/usr/share/man/man1/fvwm-perllib.1"
+ fi
+
+ # Utility for testing FVWM behaviour by creating a simple window with
+ # configurable hints.
+ if use debug; then
+ dobin "${S}/tests/hints/hints_test"
+ newdoc "${S}/tests/hints/README" README.hints
+ fi
+
+ # Remove fvwm-convert-2.6 as it does not contain any code.
+ rm -f "${D}/usr/bin/fvwm-convert-2.6" \
+ "${D}/usr/share/man/man1/fvwm-convert-2.6.1"
+
+ echo "/usr/bin/fvwm" > "${D}/etc/X11/Sessions/${PN}"
+ fperms a+x /etc/X11/Sessions/${PN}
+
+ dodoc AUTHORS ChangeLog NEWS README \
+ docs/{ANNOUNCE,BUGS,COMMANDS,CONVENTIONS} \
+ docs/{DEVELOPERS,error_codes,FAQ,TODO,fvwm.lsm}
+
+ # README file for translucent menus patch.
+ use vanilla || dodoc "${FILESDIR}"/README.translucency
+}
diff --git a/x11-wm/fvwm/metadata.xml b/x11-wm/fvwm/metadata.xml
index 134a39523023..a76a27dc5857 100644
--- a/x11-wm/fvwm/metadata.xml
+++ b/x11-wm/fvwm/metadata.xml
@@ -10,6 +10,7 @@
</longdescription>
<use>
<flag name="gtk2-perl">Enable GTK2 Perl bindings</flag>
+ <flag name="lock">Enable screen locking</flag>
<flag name="netpbm">Enable NetPBM support (used by FvwmScript-ScreenDump)</flag>
<flag name="rplay">Enable rplay support</flag>
<flag name="stroke">Mouse Gesture support</flag>