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 <christophe.cu...@free.fr> wrote: > From: Christophe CURIS <christophe.cu...@free.fr> > > 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 <christophe.cu...@free.fr> > --- > 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 wmaker-dev-unsubscr...@lists.windowmaker.org. -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.