Are you sure it's safe to change the test in that following code ?
- if (shortenTitle && wPreferences.miniwin_title_balloon) {
+ if (shortenTitle != NULL) {
On Sun, Nov 16, 2014 at 2:40 AM, Christophe <[email protected]> wrote:
> From: Christophe CURIS <[email protected]>
>
> There was a probable bug when reading settings, because the function used
> was 'getInt' which would try to store the result in a 'char'. As it would
> be probably easier for user to have the value directly in pixels, the
> storage is now done in an int so there won't be problem anymore.
>
> Changed the behaviour of the constant APERCU_BORDER, which would be assumed
> to be the size of the border in pixel, but in previous code it was actually
> the sum of the two border (1 on each side). All maths have been changed to
> have it as a single border width.
>
> Took opportunity to group variable assignation for titleHeight and
> shortenTitle in a single place, because it is not convenient to have them
> spread around (one value in the beginning and others later in the code) and
> using default values prevents some checks that modern compiler can do to
> help produce safer code.
>
> Signed-off-by: Christophe CURIS <[email protected]>
> ---
> src/WindowMaker.h | 2 +-
> src/balloon.c | 29 +++++++++++++++++------------
> src/defaults.c | 15 +++++++++++++++
> src/icon.c | 4 ++--
> src/icon.h | 3 ++-
> 5 files changed, 37 insertions(+), 16 deletions(-)
>
> diff --git a/src/WindowMaker.h b/src/WindowMaker.h
> index 17462f8..0663b54 100644
> --- a/src/WindowMaker.h
> +++ b/src/WindowMaker.h
> @@ -444,7 +444,7 @@ extern struct WPreferences {
> char cycle_ignore_minimized; /* Ignore minimized windows when
> cycling */
> char strict_windoze_cycle; /* don't close switch panel when
> shift is released */
> char panel_only_open; /* Only open the switch panel;
> don't switch */
> - char apercu_size; /* Size of apercu preview as a
> multiple of icon size */
> + int apercu_size; /* Size of apercu preview in
> pixels */
>
> /* All delays here are in ms. 0 means instant auto-action. */
> int clip_auto_raise_delay; /* Delay after which the clip
> will be raised when entered */
> diff --git a/src/balloon.c b/src/balloon.c
> index de003aa..c989803 100644
> --- a/src/balloon.c
> +++ b/src/balloon.c
> @@ -376,26 +376,33 @@ static void showText(WScreen *scr, int x, int y, int h,
> int w, const char *text)
> }
> #endif /* !SHAPED_BALLOON */
>
> -static void showApercu(WScreen *scr, int x, int y, int height, int width,
> char *title, Pixmap apercu)
> +static void showApercu(WScreen *scr, int x, int y, const char *title, Pixmap
> apercu)
> {
> Pixmap pixmap;
> WMFont *font = scr->info_text_font;
> - int titleHeight = 0;
> - char *shortenTitle = title;
> + int width, height;
> + int titleHeight;
> + char *shortenTitle;
>
> if (scr->balloon->contents)
> XFreePixmap(dpy, scr->balloon->contents);
>
> + width = wPreferences.apercu_size;
> + height = wPreferences.apercu_size;
> +
> if (wPreferences.miniwin_title_balloon) {
> - shortenTitle = ShrinkString(font, title, width -
> APERCU_BORDER);
> + shortenTitle = ShrinkString(font, title, width -
> APERCU_BORDER * 2);
> titleHeight = countLines(shortenTitle) * WMFontHeight(font) +
> 4;
> height += titleHeight;
> + } else {
> + shortenTitle = NULL;
> + titleHeight = 0;
> }
>
> if (x < 0)
> x = 0;
> else if (x + width > scr->scr_width - 1)
> - x = scr->scr_width - width - APERCU_BORDER;
> + x = scr->scr_width - width - 1;
>
> if (y - height - 2 < 0) {
> y += wPreferences.icon_size;
> @@ -413,16 +420,16 @@ static void showApercu(WScreen *scr, int x, int y, int
> height, int width, char *
> pixmap = XCreatePixmap(dpy, scr->root_win, width, height,
> scr->w_depth);
> XFillRectangle(dpy, pixmap, scr->draw_gc, 0, 0, width, height);
>
> - if (shortenTitle && wPreferences.miniwin_title_balloon) {
> + if (shortenTitle != NULL) {
> drawMultiLineString(scr->wmscreen, pixmap,
> scr->window_title_color[0], font,
> APERCU_BORDER, APERCU_BORDER,
> shortenTitle, strlen(shortenTitle));
> wfree(shortenTitle);
> }
>
> XCopyArea(dpy, apercu, pixmap, scr->draw_gc,
> - 0, 0, (wPreferences.icon_size - 1 -
> APERCU_BORDER) * wPreferences.apercu_size,
> - (wPreferences.icon_size - 1 - APERCU_BORDER)
> * wPreferences.apercu_size,
> - APERCU_BORDER, APERCU_BORDER + titleHeight);
> + 0, 0, (wPreferences.apercu_size - 1 - APERCU_BORDER * 2),
> + (wPreferences.apercu_size - 1 - APERCU_BORDER * 2),
> + APERCU_BORDER, APERCU_BORDER + titleHeight);
>
> #ifdef SHAPED_BALLOON
> XShapeCombineMask(dpy, scr->balloon->window, ShapeBounding, 0, 0,
> None, ShapeSet);
> @@ -457,9 +464,7 @@ static void showBalloon(WScreen *scr)
>
> if (wPreferences.miniwin_apercu_balloon && scr->balloon->apercu !=
> None)
> /* used to display either the apercu alone or the apercu and
> the title */
> - showApercu(scr, x, y, (wPreferences.icon_size - 1) *
> wPreferences.apercu_size,
> - (wPreferences.icon_size - 1) *
> wPreferences.apercu_size,
> - scr->balloon->text,
> scr->balloon->apercu);
> + showApercu(scr, x, y, scr->balloon->text,
> scr->balloon->apercu);
> else
> showText(scr, x, y, scr->balloon->h, w, scr->balloon->text);
> }
> diff --git a/src/defaults.c b/src/defaults.c
> index cf34424..b069d08 100644
> --- a/src/defaults.c
> +++ b/src/defaults.c
> @@ -1181,6 +1181,21 @@ void wReadDefaults(WScreen * scr, WMPropList *
> new_dict)
> }
> }
>
> + /*
> + * Backward Compatibility:
> + * the option 'apercu_size' used to be coded as a multiple of the
> icon size in v0.95.6
> + * it is now expressed directly in pixels, but to avoid breaking
> user's setting we check
> + * for old coding and convert it now.
> + * This code should probably stay for at least 2 years, you should
> not consider removing
> + * it before year 2017
> + */
> + if (wPreferences.apercu_size < 24) {
> + /* 24 is the minimum icon size proposed in WPref's settings */
> + wPreferences.apercu_size *= wPreferences.icon_size;
> + wwarning(_("your ApercuSize setting is using old syntax, it
> is converted to %d pixels; consider running WPrefs.app to update your
> settings"),
> + wPreferences.apercu_size);
> + }
> +
> if (needs_refresh != 0 && !scr->flags.startup) {
> int foo;
>
> diff --git a/src/icon.c b/src/icon.c
> index d8265b5..75f5293 100644
> --- a/src/icon.c
> +++ b/src/icon.c
> @@ -593,8 +593,8 @@ void set_icon_apercu(WIcon *icon, RImage *image)
> RImage *scaled_apercu;
> WScreen *scr = icon->core->screen_ptr;
>
> - scaled_apercu = RSmoothScaleImage(image, (wPreferences.icon_size - 1
> - APERCU_BORDER) * wPreferences.apercu_size,
> - (wPreferences.icon_size - 1 -
> APERCU_BORDER) * wPreferences.apercu_size);
> + scaled_apercu = RSmoothScaleImage(image, wPreferences.apercu_size - 2
> * APERCU_BORDER,
> + wPreferences.apercu_size - 2 *
> APERCU_BORDER);
>
> if (RConvertImage(scr->rcontext, scaled_apercu, &tmp)) {
> if (icon->apercu != None)
> diff --git a/src/icon.h b/src/icon.h
> index af82f5c..80e9acf 100644
> --- a/src/icon.h
> +++ b/src/icon.h
> @@ -29,7 +29,8 @@
> #define TILE_CLIP 1
> #define TILE_DRAWER 2
>
> -#define APERCU_BORDER 2
> +/* This is the border, in pixel, drawn around an Aperçu */
> +#define APERCU_BORDER 1
>
> typedef struct WIcon {
> WCoreWindow *core;
> --
> 2.1.1
>
>
> --
> To unsubscribe, send mail to [email protected].
--
To unsubscribe, send mail to [email protected].