diff options
author | Sam James <sam@gentoo.org> | 2024-08-15 20:04:41 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2024-08-15 20:07:03 +0100 |
commit | a7ff4695abec63c8ef91b29d533ec89c80636190 (patch) | |
tree | 7693a2e4d5e87791de66b99b69230c7f3f3c4095 /x11-wm | |
parent | net-mail/dovecot: Stabilize 2.3.21.1 amd64, #937959 (diff) | |
download | gentoo-a7ff4695abec63c8ef91b29d533ec89c80636190.tar.gz gentoo-a7ff4695abec63c8ef91b29d533ec89c80636190.tar.bz2 gentoo-a7ff4695abec63c8ef91b29d533ec89c80636190.zip |
x11-wm/fvwm: fix patches
* Use rebased ar, translucent-menus patches from bug #898918, thanks
to Gianni Ceccarelli <dakkar@thenautilus.net>
* Filter LTO for bug #864957 (fvwm 2.x is EOL) so unlikely to be fixed
upstream. If 3.x gets fixed (bug #864959), we can always look at
backporting it.
Bug: https://bugs.gentoo.org/864959
Closes: https://bugs.gentoo.org/864957
Closes: https://bugs.gentoo.org/898918
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'x11-wm')
-rw-r--r-- | x11-wm/fvwm/files/fvwm-2.7.0-ar.patch | 41 | ||||
-rw-r--r-- | x11-wm/fvwm/files/fvwm-2.7.0-translucent-menus.diff | 507 | ||||
-rw-r--r-- | x11-wm/fvwm/fvwm-2.7.0-r5.ebuild | 172 |
3 files changed, 720 insertions, 0 deletions
diff --git a/x11-wm/fvwm/files/fvwm-2.7.0-ar.patch b/x11-wm/fvwm/files/fvwm-2.7.0-ar.patch new file mode 100644 index 000000000000..80ceca36f3b2 --- /dev/null +++ b/x11-wm/fvwm/files/fvwm-2.7.0-ar.patch @@ -0,0 +1,41 @@ +diff --git i/configure.ac w/configure.ac +index 97ab9e7..8cd2efb 100644 +--- i/configure.ac ++++ w/configure.ac +@@ -208,6 +208,10 @@ AC_MSG_RESULT($val) + # optional libraries. + AC_PROG_CC + AC_PROG_CPP ++AN_MAKEVAR([AR], [AC_PROG_AR]) ++AN_PROGRAM([ar], [AC_PROG_AR]) ++AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)]) ++AC_PROG_AR + + # added -Wall for gcc, what about for others? + if test "x$GCC" = "xyes"; then +diff --git i/libs/Makefile.in w/libs/Makefile.in +index 28b6732..c66d3e4 100644 +--- i/libs/Makefile.in ++++ w/libs/Makefile.in +@@ -100,7 +100,7 @@ CONFIG_HEADER = $(top_builddir)/config.h + CONFIG_CLEAN_FILES = + CONFIG_CLEAN_VPATH_FILES = + LIBRARIES = $(noinst_LIBRARIES) +-AR = ar ++AR = @AR@ + ARFLAGS = cru + AM_V_AR = $(am__v_AR_@AM_V@) + am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +diff --git i/modules/FvwmScript/Widgets/Makefile.in w/modules/FvwmScript/Widgets/Makefile.in +index 8bda02d..582b046 100644 +--- i/modules/FvwmScript/Widgets/Makefile.in ++++ w/modules/FvwmScript/Widgets/Makefile.in +@@ -100,7 +100,7 @@ CONFIG_HEADER = $(top_builddir)/config.h + CONFIG_CLEAN_FILES = + CONFIG_CLEAN_VPATH_FILES = + LIBRARIES = $(noinst_LIBRARIES) +-AR = ar ++AR = @AR@ + ARFLAGS = cru + AM_V_AR = $(am__v_AR_@AM_V@) + am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) diff --git a/x11-wm/fvwm/files/fvwm-2.7.0-translucent-menus.diff b/x11-wm/fvwm/files/fvwm-2.7.0-translucent-menus.diff new file mode 100644 index 000000000000..67f0a3bf0cd5 --- /dev/null +++ b/x11-wm/fvwm/files/fvwm-2.7.0-translucent-menus.diff @@ -0,0 +1,507 @@ +diff --git i/fvwm/colorset.c w/fvwm/colorset.c +index e10f1d1..0217cc3 100644 +--- i/fvwm/colorset.c ++++ w/fvwm/colorset.c +@@ -164,6 +164,8 @@ static char *csetopts[] = + "NoIconTint", + "IconAlpha", + ++ "Translucent", ++ "NoTranslucent", + NULL + }; + +@@ -625,6 +627,7 @@ void parse_colorset(int n, char *line) + char *fg_tint = NULL; + char *bg_tint = NULL; + char *icon_tint = NULL; ++ char *translucent_tint = NULL; + Bool have_pixels_changed = False; + Bool has_icon_pixels_changed = False; + Bool has_fg_changed = False; +@@ -637,6 +640,7 @@ void parse_colorset(int n, char *line) + Bool has_fg_tint_changed = False; + Bool has_bg_tint_changed = False; + Bool has_icon_tint_changed = False; ++ Bool has_translucent_tint_changed = False; + Bool has_pixmap_changed = False; + Bool has_shape_changed = False; + Bool has_image_alpha_changed = False; +@@ -764,6 +768,10 @@ void parse_colorset(int n, char *line) + case 21: /* Plain */ + has_pixmap_changed = True; + free_colorset_background(cs, True); ++ cs->is_translucent = False; ++ cs->translucent_tint_percent = 0; ++ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED; ++ has_translucent_tint_changed = True; + break; + case 22: /* NoShape */ + has_shape_changed = True; +@@ -930,6 +938,24 @@ void parse_colorset(int n, char *line) + cs->icon_alpha_percent = tmp; + } + break; ++ case 42: /* Translucent */ ++ cs->is_translucent = True; ++ parse_simple_tint( ++ cs, args, &translucent_tint, ++ TRANSLUCENT_TINT_SUPPLIED, ++ &has_translucent_tint_changed, &percent, ++ "Translucent"); ++ if (has_translucent_tint_changed) ++ { ++ cs->translucent_tint_percent = percent; ++ } ++ break; ++ case 43: /* NoTranslucent */ ++ cs->is_translucent = False; ++ cs->translucent_tint_percent = 0; ++ cs->color_flags &= ~TRANSLUCENT_TINT_SUPPLIED; ++ has_translucent_tint_changed = True; ++ break; + default: + /* test for ?Gradient */ + if (option[0] && StrEquals(&option[1], "Gradient")) +@@ -1632,6 +1658,27 @@ void parse_colorset(int n, char *line) + } + } + ++ /* ++ * ---------- change the translucent tint colour ---------- ++ */ ++ if (has_translucent_tint_changed) ++ { ++ /* user specified colour */ ++ if (translucent_tint != NULL) ++ { ++ PictureFreeColors( ++ dpy, Pcmap, &cs->translucent_tint, 1, 0, True); ++ cs->translucent_tint = GetColor(translucent_tint); ++ } ++ else ++ { ++ /* default */ ++ PictureFreeColors( ++ dpy, Pcmap, &cs->translucent_tint, 1, 0, True); ++ cs->translucent_tint = GetColor(black); ++ } ++ } ++ + /* + * ---------- send new colorset to fvwm and clean up ---------- + */ +@@ -1728,6 +1775,7 @@ void alloc_colorset(int n) + ncs->fgsh = GetColor(white); + ncs->tint = GetColor(black); + ncs->icon_tint = GetColor(black); ++ ncs->translucent_tint = GetColor(black); + ncs->pixmap = XCreatePixmapFromBitmapData( + dpy, Scr.NoFocusWin, + &g_bits[4 * (nColorsets % 3)], 4, 4, +@@ -1745,6 +1793,7 @@ void alloc_colorset(int n) + ncs->fgsh = GetForeShadow(ncs->fg, ncs->bg); + ncs->tint = GetColor(black); + ncs->icon_tint = GetColor(black); ++ ncs->translucent_tint = GetColor(black); + } + ncs->fg_tint = ncs->bg_tint = GetColor(black); + /* set flags for fg contrast, bg average */ +@@ -1756,6 +1805,7 @@ void alloc_colorset(int n) + ncs->icon_alpha_percent = 100; + ncs->tint_percent = 0; + ncs->icon_tint_percent = 0; ++ ncs->translucent_tint_percent = 0; + ncs->fg_tint_percent = ncs->bg_tint_percent = 0; + ncs->dither = (PictureDitherByDefault())? True:False; + nColorsets++; +diff --git i/fvwm/menuroot.h w/fvwm/menuroot.h +index d9f33d6..de5e2d6 100644 +--- i/fvwm/menuroot.h ++++ w/fvwm/menuroot.h +@@ -146,6 +146,9 @@ typedef struct MenuRootDynamic + int d_npixels; + } stored_pixels; + /* alloc pixels when dithering is used for gradients */ ++ /* x,y XMapRaise */ ++ int x; ++ int y; + } MenuRootDynamic; + + /* access macros to dynamic menu members */ +diff --git i/fvwm/menus.c w/fvwm/menus.c +index 345ac06..6daf035 100644 +--- i/fvwm/menus.c ++++ w/fvwm/menus.c +@@ -78,6 +78,19 @@ + #define SCTX_GET_MR(ctx) ((ctx).type == SCTX_MENU_ROOT ? \ + (ctx).menu_root.menu_root : NULL) + ++#define MENU_IS_TRANSLUCENT(mr,cs) \ ++ (!MR_IS_TEAR_OFF_MENU(mr) && CSET_IS_TRANSLUCENT(cs)) ++#define MENU_IS_TRANSPARENT(mr,cs) \ ++ (MENU_IS_TRANSLUCENT(mr,cs) || CSET_IS_TRANSPARENT(cs)) ++#define MR_IS_TRANSLUCENT_MENU(mr) \ ++ (!MR_IS_TEAR_OFF_MENU(mr) && MR_STYLE(mr) && \ ++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSLUCENT( \ ++ ST_CSET_MENU(MR_STYLE(mr)))) ++#define MR_IS_TRANSPARENT_MENU(mr) \ ++ (MR_IS_TRANSLUCENT_MENU(mr) || (MR_STYLE(mr) && \ ++ ST_HAS_MENU_CSET(MR_STYLE(mr)) && CSET_IS_TRANSPARENT( \ ++ ST_CSET_MENU(MR_STYLE(mr))))) ++ + /* ---------------------------- imports ------------------------------------ */ + + /* This external is safe. It's written only during startup. */ +@@ -220,6 +233,8 @@ typedef struct mloop_static_info_t + } mloop_static_info_t; + + /* ---------------------------- forward declarations ----------------------- */ ++static MenuRoot *seek_submenu_instance( ++ MenuRoot *parent_menu, MenuItem *parent_item); + + /* ---------------------------- local variables ---------------------------- */ + +@@ -381,12 +396,22 @@ static void animated_move_back( + Bool transparent_bg = False; + + /* move it back */ +- if (ST_HAS_MENU_CSET(MR_STYLE(mr)) && +- CSET_IS_TRANSPARENT(ST_CSET_MENU(MR_STYLE(mr)))) ++ if (MR_IS_TRANSPARENT_MENU(mr)) + { + transparent_bg = True; + get_menu_repaint_transparent_parameters( + &mrtp, mr, fw); ++ if (MR_IS_TRANSLUCENT_MENU(mr) && MR_SUBMENU_ITEM(mr)) ++ { ++ MenuRoot *smr; ++ smr = seek_submenu_instance( ++ mr, MR_SUBMENU_ITEM(mr)); ++ if (smr) ++ { ++ /* just unmap it here, popdown later */ ++ XUnmapWindow(dpy, MR_WINDOW(smr)); ++ } ++ } + } + AnimatedMoveOfWindow( + MR_WINDOW(mr), act_x, act_y, act_x - MR_XANIMATION(mr), +@@ -1912,6 +1937,7 @@ static void make_menu_window(MenuRoot *mr, Bool is_tear_off) + /* Doh. Use the standard display instead. */ + MR_CREATE_DPY(mr) = dpy; + } ++ MR_IS_TEAR_OFF_MENU(mr) = 1; + } + else + { +@@ -2716,7 +2742,37 @@ static void paint_menu( + } + MR_IS_PAINTED(mr) = 1; + /* paint the menu background */ +- if (ms && ST_HAS_MENU_CSET(ms)) ++ if (MR_IS_TRANSLUCENT_MENU(mr)) ++ { ++ Pixmap trans = None; ++ FvwmRenderAttributes fra; ++ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)]; ++ ++ fra.mask = 0; ++ if (colorset->translucent_tint_percent > 0) ++ { ++ fra.mask = FRAM_HAVE_TINT; ++ fra.tint = colorset->translucent_tint; ++ fra.tint_percent = colorset->translucent_tint_percent; ++ } ++ if (MR_IS_BACKGROUND_SET(mr) == False) ++ { ++ trans = PGraphicsCreateTranslucent( ++ dpy, MR_WINDOW(mr), &fra, ++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), ++ MR_X(mr), MR_Y(mr), MR_WIDTH(mr), MR_HEIGHT(mr)); ++ XMapRaised(dpy, MR_WINDOW(mr)); ++ if (trans != None) ++ { ++ XSetWindowBackgroundPixmap( ++ dpy, MR_WINDOW(mr), trans); ++ MR_IS_BACKGROUND_SET(mr) = True; ++ clear_expose_menu_area(MR_WINDOW(mr), pevent); ++ XFreePixmap(dpy, trans); ++ } ++ } ++ } ++ else if (ms && ST_HAS_MENU_CSET(ms)) + { + if (MR_IS_BACKGROUND_SET(mr) == False) + { +@@ -3525,10 +3581,7 @@ static int pop_menu_up( + MR_HAS_POPPED_UP_RIGHT(mr) = 0; + } + MR_XANIMATION(parent_menu) += end_x - prev_x; +- if (ST_HAS_MENU_CSET(MR_STYLE(parent_menu)) && +- CSET_IS_TRANSPARENT( +- ST_CSET_MENU( +- MR_STYLE(parent_menu)))) ++ if (MR_IS_TRANSPARENT_MENU(parent_menu)) + { + transparent_bg = True; + get_menu_repaint_transparent_parameters( +@@ -3707,10 +3760,21 @@ static int pop_menu_up( + */ + + XMoveWindow(dpy, MR_WINDOW(mr), x, y); ++ MR_X(mr) = x; ++ MR_Y(mr) = y; + XSelectInput(dpy, MR_WINDOW(mr), event_mask); +- XMapRaised(dpy, MR_WINDOW(mr)); +- if (popdown_window) +- XUnmapWindow(dpy, popdown_window); ++ if (MR_IS_TRANSLUCENT_MENU(mr)) ++ { ++ if (popdown_window) ++ XUnmapWindow(dpy, popdown_window); ++ paint_menu(mr, NULL, fw); ++ } ++ else ++ { ++ XMapRaised(dpy, MR_WINDOW(mr)); ++ if (popdown_window) ++ XUnmapWindow(dpy, popdown_window); ++ } + XFlush(dpy); + MR_MAPPED_COPIES(mr)++; + MST_USAGE_COUNT(mr)++; +@@ -6274,16 +6338,122 @@ void update_transparent_menu_bg( + { + last = True; + } +- if (!last && CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms))) ++ if (!last && ++ (CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms)) || ++ MR_IS_TRANSLUCENT_MENU(mr))) + { + /* too slow ... */ + return; + } +- SetWindowBackgroundWithOffset( +- dpy, MR_WINDOW(mr), step_x - current_x, step_y - current_y, +- MR_WIDTH(mr), MR_HEIGHT(mr), +- &Colorset[ST_CSET_MENU(ms)], Pdepth, +- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); ++ if (MR_IS_TRANSLUCENT_MENU(mr)) ++ { ++ Pixmap trans, tmp; ++ FvwmRenderAttributes fra; ++ colorset_t *colorset = &Colorset[ST_CSET_MENU(ms)]; ++ ++ fra.mask = 0; ++ if (colorset->translucent_tint_percent > 0) ++ { ++ fra.mask = FRAM_HAVE_TINT; ++ fra.tint = colorset->translucent_tint; ++ fra.tint_percent = colorset->translucent_tint_percent; ++ } ++ if (current_x == step_x) ++ { ++ /* Reuse the old pixmap for the part of the menu ++ * that has not moved. (This can be extended to get ++ * two new rectangles, one in each direction) ++ * ++ * It saves the unmapping of the window and makes ++ * Things less flickering. ++ */ ++ GC my_gc; ++ unsigned long valuemask = GCSubwindowMode; ++ XGCValues values; ++ int out_y=0; ++ values.subwindow_mode = IncludeInferiors; ++ if (step_y < 0) ++ { ++ out_y = -step_y; ++ } ++ trans = XCreatePixmap(dpy, MR_WINDOW(mr), MR_WIDTH(mr), ++ MR_HEIGHT(mr), Pdepth); ++ my_gc = fvwmlib_XCreateGC(dpy, MR_WINDOW(mr), 0, NULL); ++ XChangeGC(dpy, my_gc, valuemask, &values); ++ ++ XClearWindow(dpy, MR_WINDOW(mr)); ++ ++ if (current_y < step_y) ++ { ++ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0, ++ step_y-current_y, MR_WIDTH(mr), ++ MR_HEIGHT(mr)-(step_y-current_y), ++ 0,0); ++ tmp = PGraphicsCreateTranslucent( ++ dpy, MR_WINDOW(mr), &fra, ++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), ++ current_x, current_y+MR_HEIGHT(mr), ++ MR_WIDTH(mr), step_y-current_y); ++ ++ XCopyArea(dpy, tmp, trans, my_gc, 0, 0, ++ MR_WIDTH(mr), step_y-current_y,0, ++ MR_HEIGHT(mr)-(step_y-current_y)); ++ } ++ else ++ { ++ XCopyArea(dpy, MR_WINDOW(mr), trans, my_gc, 0, ++ 0, MR_WIDTH(mr), ++ MR_HEIGHT(mr)-(current_y-step_y), 0, ++ current_y-step_y); ++ tmp = PGraphicsCreateTranslucent( ++ dpy, MR_WINDOW(mr), &fra, ++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), ++ current_x,step_y, MR_WIDTH(mr), ++ current_y-step_y); ++ XCopyArea(dpy, tmp, trans, my_gc, 0, 0, ++ MR_WIDTH(mr), current_y-step_y,0, ++ out_y); ++ } ++ MR_X(mr) = step_x; ++ MR_Y(mr) = step_y; ++ XFreePixmap(dpy, tmp); ++ XFreeGC(dpy,my_gc); ++ } ++ else ++ { ++ XUnmapWindow(dpy, MR_WINDOW(mr)); ++ MR_X(mr) = step_x; ++ MR_Y(mr) = step_y; ++ trans = PGraphicsCreateTranslucent( ++ dpy, MR_WINDOW(mr), &fra, ++ BACK_GC(ST_MENU_INACTIVE_GCS(ms)), ++ step_x, step_y, MR_WIDTH(mr), ++ MR_HEIGHT(mr)); ++ XMapRaised(dpy, MR_WINDOW(mr)); ++ } ++ XSetWindowBackgroundPixmap( ++ dpy, MR_WINDOW(mr), trans); ++ XFreePixmap(dpy, trans); ++ if (current_x == step_x) ++ { ++ /* Redraw the border */ ++ RelieveRectangle( ++ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr) - 1, ++ MR_HEIGHT(mr) - 1, (Pdepth < 2) ? ++ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)) : ++ HILIGHT_GC(MST_MENU_INACTIVE_GCS(mr)), ++ SHADOW_GC(MST_MENU_INACTIVE_GCS(mr)), ++ MST_BORDER_WIDTH(mr)); ++ } ++ } ++ else ++ { ++ SetWindowBackgroundWithOffset( ++ dpy, MR_WINDOW(mr), step_x - current_x, ++ step_y - current_y, MR_WIDTH(mr), MR_HEIGHT(mr), ++ &Colorset[ST_CSET_MENU(ms)], Pdepth, ++ FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); ++ } + } + + +@@ -6324,10 +6494,7 @@ void repaint_transparent_menu( + } + if (!is_bg_set) + { +- SetWindowBackground( +- dpy, MR_WINDOW(mr), MR_WIDTH(mr), MR_HEIGHT(mr), +- &Colorset[ST_CSET_MENU(ms)], Pdepth, +- FORE_GC(MST_MENU_INACTIVE_GCS(mr)), False); ++ update_transparent_menu_bg(prtm, x, y, x, y, end_x, end_y); + } + /* redraw the background of non active item */ + for (mi = MR_FIRST_ITEM(mr); mi != NULL; mi = MI_NEXT_ITEM(mi)) +@@ -6951,10 +7118,12 @@ void UpdateMenuColorset(int cset) + SetWindowBackground( + dpy, MR_WINDOW(mr), MR_WIDTH(mr), + MR_HEIGHT(mr), +- &Colorset[ST_CSET_MENU(ms)], +- Pdepth, ++ &Colorset[ST_CSET_MENU(ms)], Pdepth, + FORE_GC(MST_MENU_INACTIVE_GCS(mr)), +- True); ++ False); ++ XClearArea( ++ dpy, MR_WINDOW(mr), 0, 0, MR_WIDTH(mr), ++ MR_HEIGHT(mr), True); + } + else if ((ST_HAS_ACTIVE_CSET(ms) && + ST_CSET_ACTIVE(ms) == cset) || +diff --git i/fvwm/menus.h w/fvwm/menus.h +index 28e9db3..6b620b2 100644 +--- i/fvwm/menus.h ++++ w/fvwm/menus.h +@@ -15,6 +15,9 @@ + #define IS_MENU_RETURN(x) \ + ((x)==MENU_DONE || (x)==MENU_ABORTED || (x)==MENU_SUBMENU_TORN_OFF) + ++#define MR_X(m) ((m)->d->x) ++#define MR_Y(m) ((m)->d->y) ++ + struct MenuRoot; + struct MenuStyle; + struct MenuReturn; +diff --git i/libs/Colorset.h w/libs/Colorset.h +index d610b52..6c1892e 100644 +--- i/libs/Colorset.h ++++ w/libs/Colorset.h +@@ -51,6 +51,10 @@ typedef struct + Bool dither; + Bool allows_buffered_transparency; + Bool is_maybe_root_transparent; ++ /* only use by fvwm menu (non tear-off) */ ++ Bool is_translucent; ++ Pixel translucent_tint; ++ unsigned int translucent_tint_percent : 7; + #endif + } colorset_t; + +@@ -78,6 +82,7 @@ typedef struct + #define FG_TINT_SUPPLIED 0x100 + #define BG_TINT_SUPPLIED 0x200 + #define ICON_TINT_SUPPLIED 0x400 ++#define TRANSLUCENT_TINT_SUPPLIED 0x800 + #endif + + /* colorsets are stored as an array of structs to permit fast dereferencing */ +@@ -153,6 +158,11 @@ extern colorset_t *Colorset; + (cset != NULL && cset->pixmap == ParentRelative && \ + cset->tint_percent > 0) + ++#define CSET_IS_TRANSLUCENT(cset) \ ++ (cset >= 0 && Colorset[cset].is_translucent) ++#define CSETS_IS_TRANSLUCENT(cset) \ ++ (cset && cset->is_translucent) ++ + #ifndef FVWM_COLORSET_PRIVATE + /* Create n new colorsets, fvwm/colorset.c does its own thing (different size) + */ +diff --git i/libs/PictureGraphics.c w/libs/PictureGraphics.c +index f861726..a2fdbea 100644 +--- i/libs/PictureGraphics.c ++++ w/libs/PictureGraphics.c +@@ -1360,7 +1360,7 @@ void PGraphicsTintRectangle( + } + } + +-#if 0 /* humm... maybe useful one day with menus */ ++#if 1 /* humm... maybe useful one day with menus */ + Pixmap PGraphicsCreateTranslucent( + Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc, + int x, int y, int width, int height) +diff --git i/libs/PictureGraphics.h w/libs/PictureGraphics.h +index ec75601..5e0001d 100644 +--- i/libs/PictureGraphics.h ++++ w/libs/PictureGraphics.h +@@ -122,7 +122,9 @@ void PGraphicsTintRectangle( + Display *dpy, Window win, Pixel tint, int tint_percent, + Drawable dest, Bool dest_is_a_window, GC gc, GC mono_gc, GC alpha_gc, + int dest_x, int dest_y, int dest_w, int dest_h); +- ++Pixmap PGraphicsCreateTranslucent( ++ Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc, ++ int x, int y, int width, int height); + /* never used ! */ + Pixmap PGraphicsCreateDitherPixmap( + Display *dpy, Window win, Drawable src, Pixmap mask, int depth, GC gc, diff --git a/x11-wm/fvwm/fvwm-2.7.0-r5.ebuild b/x11-wm/fvwm/fvwm-2.7.0-r5.ebuild new file mode 100644 index 000000000000..56c10d559740 --- /dev/null +++ b/x11-wm/fvwm/fvwm-2.7.0-r5.ebuild @@ -0,0 +1,172 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{10..12} ) +inherit autotools flag-o-matic python-single-r1 desktop + +DESCRIPTION="An extremely powerful ICCCM-compliant multiple virtual desktop window manager" +HOMEPAGE="https://www.fvwm.org/" +SRC_URI="https://github.com/fvwmorg/fvwm/releases/download/${PV}/${P}.tar.gz" + +LICENSE="GPL-2+ FVWM" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~ppc ~ppc64 ~riscv ~sparc ~x86" +IUSE="bidi debug doc netpbm nls perl png readline stroke svg tk truetype +vanilla xinerama lock" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +COMMON_DEPEND=" + sys-libs/zlib + x11-libs/libICE + x11-libs/libSM + x11-libs/libX11 + x11-libs/libXau + x11-libs/libxcb + x11-libs/libXcursor + x11-libs/libXdmcp + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXpm + x11-libs/libXrandr + x11-libs/libXrender + virtual/libiconv + $(python_gen_cond_dep ' + dev-python/pyxdg[${PYTHON_USEDEP}] + ') + bidi? ( dev-libs/fribidi ) + nls? ( virtual/libintl ) + png? ( media-libs/libpng:0= ) + readline? ( + sys-libs/ncurses:0= + sys-libs/readline:0= + ) + stroke? ( dev-libs/libstroke ) + svg? ( gnome-base/librsvg ) + truetype? ( + media-libs/fontconfig + x11-libs/libXft + ) + xinerama? ( x11-libs/libXinerama ) +" +RDEPEND=" + ${COMMON_DEPEND} + ${PYTHON_DEPS} + dev-lang/perl + perl? ( tk? ( + dev-lang/tk + dev-perl/Tk + >=dev-perl/X11-Protocol-0.56 + ) + ) + lock? ( x11-misc/xlockmore ) + netpbm? ( media-libs/netpbm ) +" +DEPEND=" + ${COMMON_DEPEND} + x11-base/xorg-proto +" +BDEPEND=" + dev-lang/perl + dev-libs/libxslt + virtual/pkgconfig +" + +src_prepare() { + if ! use vanilla; then + # Enables fast translucent menus; patch from fvwm-user mailing list. + eapply "${FILESDIR}/${PN}-2.7.0-translucent-menus.diff" + fi + + eapply "${FILESDIR}"/fvwm-2.7.0-ar.patch # bug #474528 + eapply "${FILESDIR}"/fvwm-2.7.0-c99.patch + eapply "${FILESDIR}"/fvwm-2.7.0-fix-docdir.patch + + default + + eautoreconf +} + +src_configure() { + local myeconfargs=( + --libexecdir="${EPREFIX}"/usr/$(get_libdir) + --with-imagepath=/usr/include/X11/bitmaps:/usr/include/X11/pixmaps:/usr/share/icons/fvwm + --enable-iconv + --enable-package-subdirs + --enable-mandoc + --without-rplay-library + $(use_enable bidi) + $(use_enable debug debug-msgs) + $(use_enable debug command-log) + $(use_enable doc htmldoc) + $(use_enable nls) + $(use_enable perl perllib) + $(use_enable png) + $(use_with readline readline-library) + $(use_with stroke stroke-library) + $(use_enable svg rsvg) + $(use_enable truetype xft) + $(use_enable xinerama) + ) + + # Non-upstream email where bugs should be sent; used in fvwm-bug. + export FVWM_BUGADDR="maintainer-needed@gentoo.org" + + # Recommended by upstream, reference ???? + append-flags -fno-strict-aliasing + + # bug #864959 + filter-lto + + # Signed chars are required. + use ppc && append-flags -fsigned-char + + use readline && myeconfargs+=( --without-termcap-library ) + + export ac_cv_path_PYTHON="${PYTHON}" + + econf "${myeconfargs[@]}" +} + +src_install() { + default + make_session_desktop fvwm /usr/bin/fvwm + + if ! use lock; then + find "${ED}" -name '*fvwm-menu-xlock' -delete || die + fi + + if use perl; then + if ! use tk; then + rm "${ED}"/usr/share/fvwm/perllib/FVWM/Module/Tk.pm || die + rm "${ED}"/usr/share/fvwm/perllib/FVWM/Module/Toolkit.pm || die + find "${ED}"/usr/share/fvwm/perllib -depth -type d -exec rmdir '{}' \; || die + fi + else + # Completely wipe it if ! use perl + rm -r "${ED}"/usr/bin/fvwm-perllib "${ED}"/usr/share/man/man1/fvwm-perllib.1 || die + fi + + # Utility for testing FVWM behaviour by creating a simple window with + # configurable hints. + if use debug; then + dobin tests/hints/hints_test + newdoc tests/hints/README README.hints + fi + + exeinto /etc/X11/Sessions + newexe - ${PN} <<-EOF + #!/bin/sh + ${PN} + EOF + + dodoc docs/{COMMANDS,DEVELOPERS.md} + + # README file for translucent menus patch. + if ! use vanilla; then + dodoc "${FILESDIR}"/README.translucency + ewarn "You are using a patched build, so, please, don't" + ewarn "report bugs at the fvwm-workers list unless you are" + ewarn "also able to reproduce them with a vanilla build (USE=vanilla)." + fi +} |