diff -ruN fvwm-2.5.10/acconfig.h fvwm-unstable-2.5.10/acconfig.h --- fvwm-2.5.10/acconfig.h 2004-03-19 17:16:24.000000000 +0100 +++ fvwm-unstable-2.5.10/acconfig.h 2004-03-19 19:10:00.000000000 +0100 @@ -98,6 +98,9 @@ /* Define if MIT Shared Memory extension is used. */ #undef HAVE_XSHM +/* Define if transparency extension is used. */ +#undef HAVE_TRANSPARENCY + /* Define if fribidi library is used. */ #undef HAVE_BIDI diff -ruN fvwm-2.5.10/bin/Makefile.am fvwm-unstable-2.5.10/bin/Makefile.am --- fvwm-2.5.10/bin/Makefile.am 2002-11-09 11:54:51.000000000 +0100 +++ fvwm-unstable-2.5.10/bin/Makefile.am 2004-03-19 19:14:46.000000000 +0100 @@ -68,7 +68,7 @@ @$(LN_S) fvwm-root $(DESTDIR)$(bindir)/xpmroot || \ echo "Minor warning: $(bindir)/xpmroot symlink was not created" -install-data-local: +install-data-hook: @rm -f $(DESTDIR)$(mandir)/man1/xpmroot.1 @$(LN_S) fvwm-root.1 $(DESTDIR)$(mandir)/man1/xpmroot.1 || \ echo "Minor warning: $(mandir)/man1/xpmroot.1 symlink was not created" diff -ruN fvwm-2.5.10/config.h.in fvwm-unstable-2.5.10/config.h.in --- fvwm-2.5.10/config.h.in 2004-03-19 17:33:27.000000000 +0100 +++ fvwm-unstable-2.5.10/config.h.in 2004-03-19 19:10:00.000000000 +0100 @@ -99,6 +99,9 @@ /* Define if MIT Shared Memory extension is used. */ #undef HAVE_XSHM +/* Define if transparency extension is used. */ +#undef HAVE_TRANSPARENCY + /* Define if fribidi library is used. */ #undef HAVE_BIDI diff -ruN fvwm-2.5.10/configure.in fvwm-unstable-2.5.10/configure.in --- fvwm-2.5.10/configure.in 2004-03-19 17:28:22.000000000 +0100 +++ fvwm-unstable-2.5.10/configure.in 2004-03-19 19:12:20.000000000 +0100 @@ -280,6 +280,31 @@ [$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS]) fi +dnl ********* Transparency Extension +AC_ARG_ENABLE(transparency, + [ --disable-transparency disable Transparency Extension], + [ if test x"$enableval" = xyes; then + with_transparency="yes, check" + else + with_transparency="no" + problem_transparency=": Explicitly disabled" + fi ], + [ with_transparency="not specified, check" ] +) + +dnl ********* XTransparency +if test x"$with_transparency" != xno; then + $UNSET ac_cv_lib_XTransparency_XTransparencyQueryExtension + AC_CHECK_LIB(XTransparency, XTransparencyQueryExtension, + with_transparency=yes; XTransparency_LIBS=-lXTransparency + AC_DEFINE(HAVE_TRANSPARENCY), + with_transparency=no; XTransparency_LIBS= + problem_transparency=": Can't detect Transparency", + [$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_EXTRA_LIBS]) +fi +AC_SUBST(XTransparency_LIBS) +AC_SUBST(XTransparency_CFLAGS) + dnl ********* xinerama problem_xinerama="" @@ -988,7 +1013,6 @@ if test x"$enable_gtktest" = xyes; then AM_PATH_GTK(1.1.0,[ FVWMGTK=FvwmGtk AC_SUBST(FVWMGTK) - MANFVWMGTK=FvwmGtk.1 AC_SUBST(MANFVWMGTK) ],) if test x"$no_gtk" = x; then with_gtk=yes @@ -1068,6 +1092,7 @@ AC_SUBST(with_shm) AC_SUBST(with_sm) AC_SUBST(with_stroke) +AC_SUBST(with_transparency) AC_SUBST(with_xft) AC_SUBST(with_xinerama) AC_SUBST(with_xrender) @@ -1213,6 +1238,7 @@ With Shaped window support? $with_shape$problem_shape With Shared memory for XImage? $with_shm$problem_shm With Session Management support? $with_sm$problem_sm + With Transparent window? $with_transparency$problem_transparency With Xinerama multi-head support? $with_xinerama$problem_xinerama With Xft anti-alias font support? $with_xft$problem_xft With XPM image support? $with_xpm$problem_xpm diff -ruN fvwm-2.5.10/fvwm/add_window.c fvwm-unstable-2.5.10/fvwm/add_window.c --- fvwm-2.5.10/fvwm/add_window.c 2004-03-17 15:42:53.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/add_window.c 2004-03-19 19:10:00.000000000 +0100 @@ -2000,6 +2000,13 @@ return rc; } +void setup_window_transparency(FvwmWindow *fw, window_style *pstyle) +{ + fw->transparency = SGET_WINDOW_TRANSPARENCY(*pstyle); + fw->transparency_hi = SGET_HILIGHT_WINDOW_TRANSPARENCY(*pstyle); + fw->resize_transparency = SGET_RESIZE_TRANSPARENCY(*pstyle); +} + /* * * Procedure: @@ -2399,6 +2406,9 @@ /****** window colormap ******/ ReInstallActiveColormap(); + /****** transparency ******/ + setup_window_transparency(fw, &style); + /****** ewmh setup *******/ EWMH_WindowInit(fw); diff -ruN fvwm-2.5.10/fvwm/add_window.h fvwm-unstable-2.5.10/fvwm/add_window.h --- fvwm-2.5.10/fvwm/add_window.h 2004-03-16 09:54:56.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/add_window.h 2004-03-19 19:10:00.000000000 +0100 @@ -25,6 +25,7 @@ void setup_placement_penalty(FvwmWindow *fw, window_style *pstyle); void setup_focus_policy(FvwmWindow *fw); Bool setup_transientfor(FvwmWindow *fw); +void setup_window_transparency(FvwmWindow *fw, window_style *pstyle); void setup_icon_size_limits(FvwmWindow *fw, window_style *pstyle); void setup_icon_background_parameters(FvwmWindow *fw, window_style *pstyle); void setup_icon_title_parameters(FvwmWindow *fw, window_style *pstyle); diff -ruN fvwm-2.5.10/fvwm/borders.c fvwm-unstable-2.5.10/fvwm/borders.c --- fvwm-2.5.10/fvwm/borders.c 2004-02-16 10:51:30.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/borders.c 2004-03-19 19:10:00.000000000 +0100 @@ -4679,6 +4679,8 @@ border_draw_decorations( t, PART_ALL, False, True, CLEAR_ALL, NULL, NULL); + FTransparencySetTransparency( + dpy, FW_W_FRAME(t), t->transparency); } Scr.Hilite = fw; } diff -ruN fvwm-2.5.10/fvwm/colorset.c fvwm-unstable-2.5.10/fvwm/colorset.c --- fvwm-2.5.10/fvwm/colorset.c 2003-11-17 11:10:19.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/colorset.c 2004-03-19 19:10:00.000000000 +0100 @@ -160,6 +160,10 @@ "NoIconTint", "IconAlpha", + /* Translucent */ + "Translucent", + "NoTranslucent", + NULL }; @@ -616,6 +620,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; @@ -628,6 +633,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; @@ -754,6 +760,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; @@ -920,6 +930,24 @@ cs->icon_alpha_percent = tmp; } break; + case 42: /* Translucent */ /* is 42 still correct in 2.5.9? */ + 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")) @@ -1605,6 +1633,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 */ @@ -1700,6 +1749,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, @@ -1728,6 +1778,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++; diff -ruN fvwm-2.5.10/fvwm/events.c fvwm-unstable-2.5.10/fvwm/events.c --- fvwm-2.5.10/fvwm/events.c 2004-03-17 15:42:54.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/events.c 2004-03-19 19:10:00.000000000 +0100 @@ -266,6 +266,16 @@ XWindowChanges xwc; unsigned long xwcm; +#if 0 + fprintf(stderr, + "cre: %d(%d) %d(%d) %d(%d)x%d(%d) " + "ew 0x%08x\n", + cre->x, (int)(cre->value_mask & CWX), + cre->y, (int)(cre->value_mask & CWY), + cre->width, (int)(cre->value_mask & CWWidth), + cre->height, (int)(cre->value_mask & CWHeight), + (int)cre->window); +#endif xwcm = (cre->value_mask & CR_MOVERESIZE_MASK); xwc.x = cre->x; xwc.y = cre->y; @@ -583,7 +593,8 @@ if (!has_x && !has_y) { #ifdef CR_DETECT_MOTION_METHOD_DEBUG -fprintf(stderr,"_cdim: --- not moved 0x%08x '%s'\n", (int)fw, fw->visible_name); + fprintf(stderr,"_cdim: --- not moved 0x%08x '%s'\n", + (int)fw, fw->visible_name); #endif return; } @@ -1378,11 +1389,17 @@ } SetFocusWindow(exc->w.fw, True, set_by); focus_grab_buttons(exc->w.fw); - if (focus_is_focused(exc->w.fw) && !IS_ICONIFIED(exc->w.fw)) + if (focus_is_focused(exc->w.fw)) { - border_draw_decorations( - exc->w.fw, PART_ALL, True, True, CLEAR_ALL, NULL, - NULL); + FTransparencySetTransparency( + dpy, FW_W_FRAME(exc->w.fw), + (exc->w.fw)->transparency_hi); + if (!IS_ICONIFIED(exc->w.fw)) + { + border_draw_decorations( + exc->w.fw, PART_ALL, True, True, + CLEAR_ALL, NULL, NULL); + } } return focus_is_focused(exc->w.fw); @@ -2179,6 +2196,12 @@ border_draw_decorations( Scr.Hilite, PART_ALL, False, True, CLEAR_ALL, NULL, NULL); + if (Scr.Hilite) + { + FTransparencySetTransparency( + dpy, FW_W_FRAME(Scr.Hilite), + Scr.Hilite->transparency); + } if (Scr.ColormapFocus == COLORMAP_FOLLOWS_FOCUS) { if ((Scr.Hilite)&&(!IS_ICONIFIED(Scr.Hilite))) @@ -2211,6 +2234,8 @@ border_draw_decorations( fw, PART_ALL, True, True, CLEAR_ALL, NULL, NULL); + FTransparencySetTransparency( + dpy, FW_W_FRAME(fw), fw->transparency_hi); } focus_w = FW_W(fw); focus_fw = FW_W_FRAME(fw); @@ -2430,6 +2455,9 @@ border_draw_decorations( Scr.Hilite, PART_ALL, False, True, CLEAR_ALL, NULL, NULL); + FTransparencySetTransparency( + dpy, FW_W_FRAME(Scr.Hilite), + Scr.Hilite->transparency); } } } @@ -2534,6 +2562,10 @@ border_draw_decorations( fw, PART_ALL, (fw == get_focus_window()) ? True : False, True, CLEAR_ALL, NULL, NULL); + FTransparencySetTransparency( + dpy, FW_W_FRAME(fw), + (fw == get_focus_window()) ? + fw->transparency_hi:fw->transparency); MyXUngrabServer (dpy); SET_MAPPED(fw, 1); SET_ICONIFIED(fw, 0); diff -ruN fvwm-2.5.10/fvwm/focus.c fvwm-unstable-2.5.10/fvwm/focus.c --- fvwm-2.5.10/fvwm/focus.c 2004-01-12 10:55:10.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/focus.c 2004-03-19 19:10:00.000000000 +0100 @@ -136,6 +136,8 @@ /* make sure the window is not hilighted */ border_draw_decorations( fw, PART_ALL, False, False, CLEAR_ALL, NULL, NULL); + FTransparencySetTransparency( + dpy, FW_W_FRAME(fw), fw->transparency); } return True; diff -ruN fvwm-2.5.10/fvwm/fvwm.h fvwm-unstable-2.5.10/fvwm/fvwm.h --- fvwm-2.5.10/fvwm/fvwm.h 2004-02-16 14:45:59.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/fvwm.h 2004-03-19 19:10:00.000000000 +0100 @@ -530,6 +530,9 @@ unsigned recapture_honors_starts_on_page : 1; unsigned has_placement_penalty : 1; unsigned has_placement_percentage_penalty : 1; + unsigned has_hilight_window_transparency : 1; + unsigned has_window_transparency : 1; + unsigned has_resize_transparency : 1; } style_flags; typedef struct @@ -599,6 +602,9 @@ float norm_placement_penalty; float placement_penalty[6]; int placement_percentage_penalty[4]; + unsigned char hilight_window_transparency; + unsigned char window_transparency; + unsigned char resize_transparency; style_flags flags; style_flags flag_default; style_flags flag_mask; @@ -772,6 +778,10 @@ int icon_title_cs_hi; int icon_background_cs; + unsigned char transparency; + unsigned char transparency_hi; + unsigned char resize_transparency; + unsigned long buttons; /* zero or more iconboxes */ icon_boxes *IconBoxes; diff -ruN fvwm-2.5.10/fvwm/Makefile.am fvwm-unstable-2.5.10/fvwm/Makefile.am --- fvwm-2.5.10/fvwm/Makefile.am 2003-06-29 21:53:22.000000000 +0200 +++ fvwm-unstable-2.5.10/fvwm/Makefile.am 2004-03-19 19:15:07.000000000 +0100 @@ -36,12 +36,12 @@ -L$(top_builddir)/libs -lfvwm $(Xft_LIBS) $(X_LIBS) $(xpm_LIBS) \ $(stroke_LIBS) $(X_PRE_LIBS) $(Xinerama_LIBS) -lXext -lX11 \ $(X_EXTRA_LIBS) -lm $(iconv_LIBS) $(Xrender_LIBS) $(Bidi_LIBS) \ - $(png_LIBS) $(intl_LIBS) + $(png_LIBS) $(intl_LIBS) $(XTransparency_LIBS) INCLUDES = \ -I$(top_srcdir) -I$(top_srcdir)/libs $(stroke_CFLAGS) $(Xft_CFLAGS) \ $(xpm_CFLAGS) $(X_CFLAGS) $(iconv_CFLAGS) $(Xrender_CFLAGS) \ - $(Bidi_CFLAGS) $(png_CFLAGS) $(intl_CFLAGS) + $(Bidi_CFLAGS) $(png_CFLAGS) $(intl_CFLAGS) $(XTransparency_CFLAGS) AM_CFLAGS = \ -DFVWM_MODULEDIR=\"$(FVWM_MODULEDIR)\" \ @@ -57,7 +57,7 @@ @$(LN_S) fvwm $(DESTDIR)$(bindir)/fvwm2 || \ echo "Minor warning: $(bindir)/fvwm2 symlink was not created" -install-data-local: +install-data-hook: @rm -f $(DESTDIR)$(mandir)/man1/fvwm2.1 @$(LN_S) fvwm.1 $(DESTDIR)$(mandir)/man1/fvwm2.1 || \ echo "Minor warning: $(mandir)/man1/fvwm2.1 symlink was not created" diff -ruN fvwm-2.5.10/fvwm/menus.c fvwm-unstable-2.5.10/fvwm/menus.c --- fvwm-2.5.10/fvwm/menus.c 2004-01-06 15:05:01.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/menus.c 2004-03-19 19:10:00.000000000 +0100 @@ -65,6 +65,11 @@ /* ---------------------------- 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)) + /* ---------------------------- imports ------------------------------------ */ /* This external is safe. It's written only during startup. */ @@ -407,7 +412,7 @@ /* move it back */ if (ST_HAS_MENU_CSET(MR_STYLE(mr)) && - CSET_IS_TRANSPARENT(ST_CSET_MENU(MR_STYLE(mr)))) + MENU_IS_TRANSPARENT(mr,ST_CSET_MENU(MR_STYLE(mr)))) { transparent_bg = True; get_menu_repaint_transparent_parameters( @@ -2430,6 +2435,7 @@ /* Doh. Use the standard display instead. */ MR_CREATE_DPY(mr) = dpy; } + MR_IS_TEAR_OFF_MENU(mr) = 1; } else { @@ -3213,7 +3219,38 @@ } MR_IS_PAINTED(mr) = 1; /* paint the menu background */ - if (ms && ST_HAS_MENU_CSET(ms)) + if (ms && ST_HAS_MENU_CSET(ms) && + MENU_IS_TRANSLUCENT(mr,ST_CSET_MENU(ms))) + { + 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) { @@ -4007,8 +4044,8 @@ } 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(mr)))) + MENU_IS_TRANSPARENT( + mr,ST_CSET_MENU(MR_STYLE(mr)))) { transparent_bg = True; get_menu_repaint_transparent_parameters( @@ -4183,10 +4220,24 @@ */ 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_STYLE(mr) && ST_HAS_MENU_CSET(MR_STYLE(mr)) && + MENU_IS_TRANSLUCENT(mr,ST_CSET_MENU(MR_STYLE(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); + } + FTransparencySetTransparency( + dpy,MR_WINDOW(mr), MST_TRANSPARENCY(mr)); XFlush(dpy); MR_MAPPED_COPIES(mr)++; MST_USAGE_COUNT(mr)++; @@ -6626,15 +6677,45 @@ { last = True; } - if (!last && CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms))) + if (!last && + (CSET_IS_TRANSPARENT_PR_TINT(ST_CSET_MENU(ms)) || + MENU_IS_TRANSLUCENT(mr,ST_CSET_MENU(ms)))) { /* too slow ... */ return; } - 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); + if (MENU_IS_TRANSLUCENT(mr,ST_CSET_MENU(ms))) + { + Pixmap trans; + 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; + } + XUnmapWindow(dpy, MR_WINDOW(mr)); + MR_X(mr) = x; + MR_Y(mr) = y; + 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)); + XSetWindowBackgroundPixmap( + dpy, MR_WINDOW(mr), trans); + XFreePixmap(dpy, trans); + } + else + { + 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); + } /* redraw the background of non active item */ for (mi = MR_FIRST_ITEM(mr); mi != NULL; mi = MI_NEXT_ITEM(mi)) { @@ -7269,7 +7350,10 @@ &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 -ruN fvwm-2.5.10/fvwm/menus.h fvwm-unstable-2.5.10/fvwm/menus.h --- fvwm-2.5.10/fvwm/menus.h 2003-11-02 18:04:44.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/menus.h 2004-03-19 19:10:00.000000000 +0100 @@ -141,6 +141,9 @@ MenuItem *submenu_item; /* x distance window was moved by animation */ int xanimation; + /* x,y XMapRaise */ + int x; + int y; /* dynamic temp flags */ struct { @@ -182,6 +185,8 @@ #define MR_SELECTED_ITEM(m) ((m)->d->selected_item) #define MR_SUBMENU_ITEM(m) ((m)->d->submenu_item) #define MR_XANIMATION(m) ((m)->d->xanimation) +#define MR_X(m) ((m)->d->x) +#define MR_Y(m) ((m)->d->y) #define MR_STORED_ITEM(m) ((m)->d->stored_item) #define MR_STORED_PIXELS(m) ((m)->d->stored_pixels) /* flags */ diff -ruN fvwm-2.5.10/fvwm/menustyle.c fvwm-unstable-2.5.10/fvwm/menustyle.c --- fvwm-2.5.10/fvwm/menustyle.c 2003-11-03 18:41:20.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/menustyle.c 2004-03-19 19:10:00.000000000 +0100 @@ -348,6 +348,7 @@ "PopdownDelay", "PopupActiveArea", "PopupIgnore", "PopupClose", + "Transparency", NULL }; @@ -779,6 +780,7 @@ ST_CSET_GREYED(tmpms) = 0; ST_HAS_GREYED_CSET(tmpms) = 0; ST_BORDER_WIDTH(tmpms) = DEFAULT_MENU_BORDER_WIDTH; + ST_TRANSPARENCY(tmpms) = 0; ST_ACTIVE_AREA_PERCENT(tmpms) = DEFAULT_MENU_POPUP_NOW_RATIO; ST_ITEM_GAP_ABOVE(tmpms) = @@ -1287,6 +1289,17 @@ ST_DO_POPUP_AS(tmpms) = MDP_CLOSE; break; + case 56: /* Transparency */ + if (GetIntegerArguments(args, NULL, val, 1) == 0 || + *val < 0 || *val > 255) + { + ST_TRANSPARENCY(tmpms) = 0; + } + else + { + ST_TRANSPARENCY(tmpms) = *val; + } + break; #if 0 case 99: /* PositionHints */ /* to be implemented */ @@ -1506,6 +1519,8 @@ ST_USE_LEFT_SUBMENUS(destms) = ST_USE_LEFT_SUBMENUS(origms); /* BorderWidth */ ST_BORDER_WIDTH(destms) = ST_BORDER_WIDTH(origms); + /* Transparency */ + ST_TRANSPARENCY(destms) = ST_TRANSPARENCY(origms); /* Hilight3DThickness */ ST_IS_ITEM_RELIEF_REVERSED(destms) = ST_IS_ITEM_RELIEF_REVERSED(origms); diff -ruN fvwm-2.5.10/fvwm/menustyle.h fvwm-unstable-2.5.10/fvwm/menustyle.h --- fvwm-2.5.10/fvwm/menustyle.h 2003-11-03 18:41:20.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/menustyle.h 2004-03-19 19:10:00.000000000 +0100 @@ -54,6 +54,8 @@ #define MST_TITLE_UNDERLINES(m) ((m)->s->ms->look.TitleUnderlines) #define ST_BORDER_WIDTH(s) ((s)->look.BorderWidth) #define MST_BORDER_WIDTH(m) ((m)->s->ms->look.BorderWidth) +#define ST_TRANSPARENCY(s) ((s)->look.Transparency) +#define MST_TRANSPARENCY(m) ((m)->s->ms->look.Transparency) #define ST_ITEM_GAP_ABOVE(s) ((s)->look.vertical_spacing.item_above) #define MST_ITEM_GAP_ABOVE(m) ((m)->s->ms->look.vertical_spacing.item_above) #define ST_ITEM_GAP_BELOW(s) ((s)->look.vertical_spacing.item_below) @@ -233,6 +235,7 @@ unsigned char ReliefThickness; unsigned char TitleUnderlines; unsigned char BorderWidth; + unsigned char Transparency; struct { signed char item_above; diff -ruN fvwm-2.5.10/fvwm/move_resize.c fvwm-unstable-2.5.10/fvwm/move_resize.c --- fvwm-2.5.10/fvwm/move_resize.c 2004-03-17 15:42:54.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/move_resize.c 2004-03-19 19:10:00.000000000 +0100 @@ -1987,7 +1987,13 @@ if (move_w == FW_W_FRAME(fw) && do_move_opaque) { + FTransparencySetTransparency( + dpy, move_w, Scr.OpaqueTransparency); draw_parts = border_get_transparent_decorations_part(fw); + BroadcastPacket( + MX_STARTSTOP_OPERATION, 4, FW_W(fw), FW_W_FRAME(fw), + (unsigned long)MX_STARTSTOP_OPERATION_MOVE, + (unsigned long)MX_STARTSTOP_OPERATION_START); } DisplayPosition(fw, exc->x.elast, xl, yt, True); @@ -2356,8 +2362,9 @@ #ifdef FVWM_DEBUG_MSGS fvwm_msg( DBG, "frame_setup_window", - "Sent ConfigureNotify (w %d, h %d)", - Width, Height); + "Sent ConfigureNotify " + "(x %d, y %d, w %d, h %d)", + xl, yt, Width, Height); #endif } } @@ -2424,6 +2431,15 @@ { SET_ICON_MOVED(fw, 1); } + if (move_w == FW_W_FRAME(fw) && do_move_opaque) { + FTransparencySetTransparency( + dpy, move_w, ((fw == get_focus_window())) ? + fw->transparency_hi:fw->transparency); + BroadcastPacket( + MX_STARTSTOP_OPERATION, 4, FW_W(fw), FW_W_FRAME(fw), + (unsigned long)MX_STARTSTOP_OPERATION_MOVE, + (unsigned long)MX_STARTSTOP_OPERATION_STOP); + } UngrabEm(GRAB_NORMAL); if (!do_resize_too) { @@ -2456,6 +2472,7 @@ void CMD_OpaqueMoveSize(F_CMD_ARGS) { int val; + char *token; if (GetIntegerArguments(action, NULL, &val, 1) < 1) { @@ -2473,6 +2490,18 @@ Scr.OpaqueSize = val; } + Scr.OpaqueTransparency = 0; + token = PeekToken(action, &action); + if (action == NULL) + { + return; + } + if (GetIntegerArguments(action, NULL, &val, 1) == 1) + { + if (val < 0) val = 0; + if (val > 255) val = 255; + Scr.OpaqueTransparency = val; + } return; } @@ -3167,6 +3196,15 @@ draw_move_resize_grid( drag->x, drag->y, drag->width - 1, drag->height - 1); } + else + { + FTransparencySetTransparency( + dpy, FW_W_FRAME(fw), fw->resize_transparency); + BroadcastPacket( + MX_STARTSTOP_OPERATION, 4, FW_W(fw), FW_W_FRAME(fw), + (unsigned long)MX_STARTSTOP_OPERATION_RESIZE, + (unsigned long)MX_STARTSTOP_OPERATION_START); + } /* kick off resizing without requiring any motion if invoked with a key * press */ if (exc->x.elast->type == KeyPress) @@ -3380,6 +3418,16 @@ { switch_move_resize_grid(False); } + else + { + FTransparencySetTransparency( + dpy, FW_W_FRAME(fw), (fw == get_focus_window()) ? + fw->transparency_hi:fw->transparency); + BroadcastPacket( + MX_STARTSTOP_OPERATION, 4, FW_W(fw), FW_W_FRAME(fw), + (unsigned long)MX_STARTSTOP_OPERATION_RESIZE, + (unsigned long)MX_STARTSTOP_OPERATION_STOP); + } /* pop down the size window */ if (!Scr.gs.do_hide_resize_window) { diff -ruN fvwm-2.5.10/fvwm/screen.h fvwm-unstable-2.5.10/fvwm/screen.h --- fvwm-2.5.10/fvwm/screen.h 2004-03-17 15:42:54.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/screen.h 2004-03-19 19:10:00.000000000 +0100 @@ -468,6 +468,7 @@ /* snap grid Y size */ int SnapGridY; int OpaqueSize; + unsigned char OpaqueTransparency; /* The current desktop number */ int CurrentDesk; /* colormap focus style */ diff -ruN fvwm-2.5.10/fvwm/style.c fvwm-unstable-2.5.10/fvwm/style.c --- fvwm-2.5.10/fvwm/style.c 2004-02-16 14:45:59.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/style.c 2004-03-19 19:10:00.000000000 +0100 @@ -613,6 +613,25 @@ *merged_style, SGET_75_PLACEMENT_PERCENTAGE_PENALTY(*add_style)); } + if (add_style->flags.has_hilight_window_transparency) + { + SSET_HILIGHT_WINDOW_TRANSPARENCY( + *merged_style, + SGET_HILIGHT_WINDOW_TRANSPARENCY(*add_style)); + } + if (add_style->flags.has_window_transparency) + { + SSET_WINDOW_TRANSPARENCY( + *merged_style, + SGET_WINDOW_TRANSPARENCY(*add_style)); + } + if (add_style->flags.has_resize_transparency) + { + SSET_RESIZE_TRANSPARENCY( + *merged_style, + SGET_RESIZE_TRANSPARENCY(*add_style)); + } + /* merge the style flags */ /*** ATTENTION: @@ -2616,6 +2635,18 @@ ps->flag_mask.use_colorset_hi = 1; ps->change_mask.use_colorset_hi = 1; } + else if (StrEquals(token, "HilightWindowTransparency")) + { + *val = 0; + GetIntegerArguments(rest, NULL, val, 1); + if (*val < 0) *val = 0; + if (*val > 255) *val = 255; + SSET_HILIGHT_WINDOW_TRANSPARENCY( + *ps, (unsigned char)*val); + ps->flags.has_hilight_window_transparency = 1; + ps->flag_mask.has_hilight_window_transparency = 1; + ps->change_mask.has_hilight_window_transparency = 1; + } else if (StrEquals(token, "HilightBorderColorset")) { *val = -1; @@ -3371,6 +3402,18 @@ S_SET_DO_RESIZE_OPAQUE(SCM(*ps), 1); S_SET_DO_RESIZE_OPAQUE(SCC(*ps), 1); } + else if (StrEquals(token, "ResizeOpaqueTransparency")) + { + *val = 0; + GetIntegerArguments(rest, NULL, val, 1); + if (*val < 0) *val = 0; + if (*val > 255) *val = 255; + SSET_RESIZE_TRANSPARENCY( + *ps, (unsigned char)*val); + ps->flags.has_resize_transparency = 1; + ps->flag_mask.has_resize_transparency = 1; + ps->change_mask.has_resize_transparency = 1; + } else if (StrEquals(token, "ResizeOutline")) { S_SET_DO_RESIZE_OPAQUE(SCF(*ps), !on); @@ -3928,6 +3971,18 @@ S_SET_WINDOWSHADE_LAZINESS( SCC(*ps), WINDOWSHADE_LAZY_MASK); } + else if (StrEquals(token, "WindowTransparency")) + { + *val = 0; + GetIntegerArguments(rest, NULL, val, 1); + if (*val < 0) *val = 0; + if (*val > 255) *val = 255; + SSET_WINDOW_TRANSPARENCY(*ps, (unsigned char)*val); + fprintf(stderr,"WindowTransparency %i\n", *val); + ps->flags.has_window_transparency = 1; + ps->flag_mask.has_window_transparency = 1; + ps->change_mask.has_window_transparency = 1; + } else { found = False; @@ -4613,6 +4668,16 @@ flags->do_update_cr_motion_method = True; } + /* transparency */ + if (ret_style->change_mask.has_window_transparency || + ret_style->change_mask.has_hilight_window_transparency) + { + flags->do_update_window_transparency = True; + } + if (ret_style->change_mask.has_resize_transparency) + { + flags->do_update_resize_transparency = True; + } return; } diff -ruN fvwm-2.5.10/fvwm/style.h fvwm-unstable-2.5.10/fvwm/style.h --- fvwm-2.5.10/fvwm/style.h 2004-02-16 14:45:59.000000000 +0100 +++ fvwm-unstable-2.5.10/fvwm/style.h 2004-03-19 19:10:00.000000000 +0100 @@ -453,6 +453,18 @@ ((s).icon_background_colorset = (x)) #define SGET_ICON_BACKGROUND_COLORSET(s) \ ((s).icon_background_colorset) +#define SSET_WINDOW_TRANSPARENCY(s,x) \ + ((s).window_transparency = (x)) +#define SGET_WINDOW_TRANSPARENCY(s) \ + ((s).window_transparency) +#define SSET_HILIGHT_WINDOW_TRANSPARENCY(s,x) \ + ((s).hilight_window_transparency = (x)) +#define SGET_HILIGHT_WINDOW_TRANSPARENCY(s) \ + ((s).hilight_window_transparency) +#define SSET_RESIZE_TRANSPARENCY(s,x) \ + ((s).resize_transparency = (x)) +#define SGET_RESIZE_TRANSPARENCY(s) \ + ((s).resize_transparency) #define SGET_FLAGS_POINTER(s) \ (&((s).flags)) #define SGET_BORDER_WIDTH(s) \ diff -ruN fvwm-2.5.10/fvwm/update.c fvwm-unstable-2.5.10/fvwm/update.c --- fvwm-2.5.10/fvwm/update.c 2003-08-14 10:48:20.000000000 +0200 +++ fvwm-unstable-2.5.10/fvwm/update.c 2004-03-19 19:10:00.000000000 +0100 @@ -584,7 +584,24 @@ break; } } - + if (flags->do_update_window_transparency) + { + setup_window_transparency(t, pstyle); + if (t != Scr.Hilite) + { + FTransparencySetTransparency( + dpy, FW_W_FRAME(t), t->transparency); + } + else if (t == Scr.Hilite) + { + FTransparencySetTransparency( + dpy, FW_W_FRAME(t), t->transparency_hi); + } + } + if (flags->do_update_resize_transparency) + { + t->resize_transparency = SGET_RESIZE_TRANSPARENCY(*pstyle); + } return; } diff -ruN fvwm-2.5.10/fvwm/update.h fvwm-unstable-2.5.10/fvwm/update.h --- fvwm-2.5.10/fvwm/update.h 2003-07-06 21:14:06.000000000 +0200 +++ fvwm-unstable-2.5.10/fvwm/update.h 2004-03-19 19:10:00.000000000 +0100 @@ -37,6 +37,7 @@ unsigned do_update_mini_icon : 1; unsigned do_update_modules_flags : 1; unsigned do_update_placement_penalty : 1; + unsigned do_update_resize_transparency : 1; unsigned do_update_rotated_title : 1; unsigned do_update_stick : 1; unsigned do_update_stick_icon : 1; @@ -48,6 +49,7 @@ unsigned do_update_window_color_hi : 1; unsigned do_update_window_font : 1; unsigned do_update_window_font_height : 1; + unsigned do_update_window_transparency : 1; unsigned do_update_window_grabs : 1; unsigned do_update_working_area : 1; } update_win; diff -ruN fvwm-2.5.10/libs/Colorset.h fvwm-unstable-2.5.10/libs/Colorset.h --- fvwm-2.5.10/libs/Colorset.h 2003-06-29 21:53:23.000000000 +0200 +++ fvwm-unstable-2.5.10/libs/Colorset.h 2004-03-19 19:10:00.000000000 +0100 @@ -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 >= 0 && 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 -ruN fvwm-2.5.10/libs/FTransparency.c fvwm-unstable-2.5.10/libs/FTransparency.c --- fvwm-2.5.10/libs/FTransparency.c 1970-01-01 01:00:00.000000000 +0100 +++ fvwm-unstable-2.5.10/libs/FTransparency.c 2004-03-19 19:10:00.000000000 +0100 @@ -0,0 +1,88 @@ +/* -*-c-*- */ +/* This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ---------------------------- included header files ---------------------- */ + +#include "config.h" + +#include + +#include + +#include "fvwmrect.h" +#include "FTransparency.h" + +/* ---------------------------- local definitions -------------------------- */ + +/* ---------------------------- local macros ------------------------------- */ + +/* ---------------------------- imports ------------------------------------ */ + +/* ---------------------------- included code files ------------------------ */ + +/* ---------------------------- local types -------------------------------- */ + +/* ---------------------------- forward declarations ----------------------- */ + +/* ---------------------------- local variables ---------------------------- */ + +int FTransparencyEventBase = -10000; +int FTransparencyErrorBase = -10000; +Bool FTransparencyInitialized = False; +Bool FTransparencyExtensionSupported = False; + +/* ---------------------------- exported variables (globals) --------------- */ + +/* ---------------------------- local functions ---------------------------- */ + +static Bool FTransparencyInit(Display *dpy) +{ + if (FTransparencyInitialized) + { + return FTransparencyExtensionSupported; + } + + FTransparencyInitialized = True; + + if (!TransparencySupport) + { + return False; + } + + FTransparencyExtensionSupported = FTransparencyQueryExtension( + dpy, &FTransparencyEventBase, &FTransparencyErrorBase); + + return FTransparencyExtensionSupported; +} + + + +/* ---------------------------- interface functions ------------------------ */ + +void FTransparencySetOpacity(Display *dpy, Window win, FOpacityValue value) +{ + + if (!FTransparencyInit(dpy)) + { + return; + } + FSetOpacity(dpy, win, value); +} + +void FTransparencySetTransparency(Display *dpy, Window win, FOpacityValue value) +{ + FTransparencySetOpacity(dpy, win, 255-value); +} diff -ruN fvwm-2.5.10/libs/FTransparency.h fvwm-unstable-2.5.10/libs/FTransparency.h --- fvwm-2.5.10/libs/FTransparency.h 1970-01-01 01:00:00.000000000 +0100 +++ fvwm-unstable-2.5.10/libs/FTransparency.h 2004-03-19 19:10:00.000000000 +0100 @@ -0,0 +1,46 @@ +/* -*-c-*- */ + +#ifndef FTRANSPARENCY_H +#define FTRANSPARENCY_H + +/* ---------------------------- included header files ---------------------- */ + +#include "config.h" + +#ifdef HAVE_TRANSPARENCY +#define TransparencySupport 1 +#else +#define TransparencySupport 0 +#endif + +#if TransparencySupport +#include +#endif + +/* ---------------------------- global definitions ------------------------- */ + +/* ---------------------------- global macros ------------------------------ */ + +/* ---------------------------- type definitions --------------------------- */ + +#if TransparencySupport + +typedef OpacityValue FOpacityValue; + +#define FTransparencyQueryExtension XTransparencyQueryExtension +#define FTransparencyQueryVersion XTransparencyQueryVersion +#define FSetOpacity XSetOpacity +#define FGetOpacity XGetOpacity + +#else + +typedef unsigned char FOpacityValue; + +#define FTransparencyQueryExtension(a, b, c) 0 +#define FTransparencyQueryVersion(a,b,c) 0 +#define FSetOpacity(a, b, c) +#define FGetOpacity(a, b, c) 0 + +#endif + +#endif /* FTRANSPARENCY_H */ diff -ruN fvwm-2.5.10/libs/fvwmlib.h fvwm-unstable-2.5.10/libs/fvwmlib.h --- fvwm-2.5.10/libs/fvwmlib.h 2003-08-07 19:23:27.000000000 +0200 +++ fvwm-unstable-2.5.10/libs/fvwmlib.h 2004-03-19 19:10:00.000000000 +0100 @@ -12,6 +12,7 @@ #include #include "fvwmrect.h" +#include "FTransparency.h" /* * Generic debugging @@ -377,6 +378,13 @@ int fvwmCursorNameToIndex (char *cursor_name); +/* + * Transparency + */ + +void FTransparencySetOpacity(Display *dpy, Window win, FOpacityValue value); +void FTransparencySetTransparency(Display *dpy, Window win, FOpacityValue value); + /* Set up heap debugging library dmalloc. */ #ifdef HAVE_DMALLOC_H diff -ruN fvwm-2.5.10/libs/Makefile.am fvwm-unstable-2.5.10/libs/Makefile.am --- fvwm-2.5.10/libs/Makefile.am 2003-09-03 21:16:46.000000000 +0200 +++ fvwm-unstable-2.5.10/libs/Makefile.am 2004-03-19 19:10:00.000000000 +0100 @@ -6,14 +6,14 @@ libfvwm_a_SOURCES = \ BidiJoin.h Bindings.h ClientMsg.h Colorset.h CombineChars.h FBidi.h \ FEvent.h FImage.h FRender.h FRenderInit.h FRenderInterface.h FSMlib.h \ - FScreen.h FShape.h FShm.h Fft.h FftInterface.h FGettext.h Ficonv.h \ - Flocale.h FlocaleCharset.h Fpng.h Fxpm.h Grab.h Module.h Parse.h \ - Picture.h PictureBase.h PictureDitherMatrice.h PictureGraphics.h \ - PictureImageLoader.h PictureUtils.h Strings.h defaults.h envvar.h \ - flist.h fsm.h ftime.h fvwmlib.h fvwmrect.h fvwmsignal.h gravity.c \ - gravity.h lang-strings.h queue.h safemalloc.h setpgrp.h vpacket.h \ - wild.h Rectangles.h timeout.h charmap.h wcontext.h modifiers.h \ - \ + FScreen.h FShape.h FShm.h FTransparency.h Fft.h FftInterface.h \ + FGettext.h Ficonv.h Flocale.h FlocaleCharset.h Fpng.h Fxpm.h Grab.h \ + Module.h Parse.h Picture.h PictureBase.h PictureDitherMatrice.h \ + PictureGraphics.h PictureImageLoader.h PictureUtils.h Strings.h \ + defaults.h envvar.h flist.h fsm.h ftime.h fvwmlib.h fvwmrect.h \ + fvwmsignal.h gravity.c gravity.h lang-strings.h queue.h safemalloc.h \ + setpgrp.h vpacket.h wild.h Rectangles.h timeout.h charmap.h \ + wcontext.h modifiers.h \ BidiJoin.c Flocale.c PictureUtils.c FScreen.c Graphics.c \ PictureGraphics.c Bindings.c FlocaleCharset.c Parse.c \ PictureImageLoader.c Colorset.c ColorUtils.c CombineChars.c Module.c \ @@ -23,7 +23,7 @@ fvwmrect.c FRenderInit.c debug.c safemalloc.c FBidi.c \ wild.c Grab.c Event.c ClientMsg.c setpgrp.c FShape.c \ FGettext.c Rectangles.c timeout.c flist.c charmap.c wcontext.c \ - modifiers.c fsm.c + modifiers.c fsm.c FTransparency.c libfvwm_a_LIBADD = @LIBOBJS@ @ALLOCA@ diff -ruN fvwm-2.5.10/libs/Module.h fvwm-unstable-2.5.10/libs/Module.h --- fvwm-2.5.10/libs/Module.h 2003-06-29 21:53:24.000000000 +0200 +++ fvwm-unstable-2.5.10/libs/Module.h 2004-03-19 19:10:00.000000000 +0100 @@ -118,6 +118,7 @@ #define MX_ENTER_WINDOW ((1<<1) | M_EXTENDED_MSG) #define MX_LEAVE_WINDOW ((1<<2) | M_EXTENDED_MSG) #define MX_PROPERTY_CHANGE ((1<<3) | M_EXTENDED_MSG) +#define MX_STARTSTOP_OPERATION ((1<<4) | M_EXTENDED_MSG) #define MAX_EXTENDED_MESSAGES 4 #define DEFAULT_XMSG_MASK 0x00000000 #define MAX_XMSG_MASK 0x0000000f @@ -129,6 +130,14 @@ #define MX_PROPERTY_CHANGE_BACKGROUND 1 #define MX_PROPERTY_CHANGE_SWALLOW 2 +/* for MX_START_OPERATION */ +#define MX_STARTSTOP_OPERATION_START 0 +#define MX_STARTSTOP_OPERATION_STOP 1 +/* type of the operation */ +#define MX_STARTSTOP_OPERATION_MOVE 0 +#define MX_STARTSTOP_OPERATION_RESIZE 1 +#define MX_STARTSTOP_OPERATION_SHADE 2 + /** * Reads a single packet of info from FVWM. * The packet is stored into static memory that is reused during diff -ruN fvwm-2.5.10/libs/PictureGraphics.c fvwm-unstable-2.5.10/libs/PictureGraphics.c --- fvwm-2.5.10/libs/PictureGraphics.c 2003-08-27 15:37:04.000000000 +0200 +++ fvwm-unstable-2.5.10/libs/PictureGraphics.c 2004-03-19 19:10:00.000000000 +0100 @@ -1338,7 +1338,7 @@ } } -#if 0 /* humm... maybe usefull one day with menus */ +#if 1 /* humm... maybe usefull one day with menus */ Pixmap PGraphicsCreateTranslucent( Display *dpy, Window win, FvwmRenderAttributes *fra, GC gc, int x, int y, int width, int height) diff -ruN fvwm-2.5.10/libs/PictureGraphics.h fvwm-unstable-2.5.10/libs/PictureGraphics.h --- fvwm-2.5.10/libs/PictureGraphics.h 2003-06-29 21:53:24.000000000 +0200 +++ fvwm-unstable-2.5.10/libs/PictureGraphics.h 2004-03-19 19:10:00.000000000 +0100 @@ -123,6 +123,10 @@ 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 -ruN fvwm-2.5.10/modules/FvwmGtk/Makefile.am fvwm-unstable-2.5.10/modules/FvwmGtk/Makefile.am --- fvwm-2.5.10/modules/FvwmGtk/Makefile.am 2003-06-19 23:44:32.000000000 +0200 +++ fvwm-unstable-2.5.10/modules/FvwmGtk/Makefile.am 2004-03-19 19:12:20.000000000 +0100 @@ -5,8 +5,8 @@ module_PROGRAMS = @FVWMGTK@ EXTRA_PROGRAMS = FvwmGtk -man_MANS = @MANFVWMGTK@ -EXTRA_DIST = FvwmGtk.1 +man_MANS = FvwmGtk.1 +EXTRA_DIST = $(man_MANS) GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@