X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=mod_query%2Fwedln.c;h=da29aa9522b46bdb8856cb9079d244664e1e21bc;hb=ae4260bb64817c11f9a7140324cd3e3ba113e297;hp=fa9193c5e9460312abc15eba5266aa9307a30754;hpb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d;p=ion3.git diff --git a/mod_query/wedln.c b/mod_query/wedln.c index fa9193c..da29aa9 100644 --- a/mod_query/wedln.c +++ b/mod_query/wedln.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -26,6 +23,8 @@ #include #include #include +#include +#include #include "edln.h" #include "wedln.h" #include "inputp.h" @@ -225,14 +224,12 @@ static bool wedln_update_cursor(WEdln *wedln, int iw) static int get_textarea_height(WEdln *wedln, bool with_spacing) { - GrBorderWidths bdw; - GrFontExtents fnte; + int w=1, h=1; - grbrush_get_border_widths(WEDLN_BRUSH(wedln), &bdw); - grbrush_get_font_extents(WEDLN_BRUSH(wedln), &fnte); + if(WEDLN_BRUSH(wedln)!=NULL) + mod_query_get_minimum_extents(WEDLN_BRUSH(wedln), with_spacing, &w, &h); - return (fnte.max_height+bdw.top+bdw.bottom+ - (with_spacing ? bdw.spacing : 0)); + return h; } @@ -355,6 +352,22 @@ static void wedln_calc_size(WEdln *wedln, WRectangle *geom) } +void wedln_size_hints(WEdln *wedln, WSizeHints *hints_ret) +{ + int w=1, h=1; + + if(WEDLN_BRUSH(wedln)!=NULL){ + mod_query_get_minimum_extents(WEDLN_BRUSH(wedln), FALSE, &w, &h); + w+=wedln->prompt_w+wedln->info_w; + w+=grbrush_get_text_width(WEDLN_BRUSH(wedln), "xxxxxxxxxx", 10); + } + + hints_ret->min_set=TRUE; + hints_ret->min_width=w; + hints_ret->min_height=h; +} + + /*}}}*/ @@ -771,11 +784,12 @@ bool wedln_prev_completion(WEdln *wedln) /*EXTL_DOC * Call completion handler with the text between the beginning of line and * current cursor position, or select next/previous completion from list if in - * auto-show-completions mode and \var{cycle} is set to ``next'' or ``prev'', - * respectively. The \var{mode} may be ``history'' or ``normal''. If it is + * auto-show-completions mode and \var{cycle} is set to \codestr{next} or + * \codestr{prev}, respectively. + * The \var{mode} may be \codestr{history} or \codestr{normal}. If it is * not set, the previous mode is used. Normally next entry is not cycled to * despite the setting of \var{cycle} if mode switch occurs. To override - * this, use ``next-always'' and ``prev-always'' for \var{cycle}. + * this, use \codestr{next-always} and \codestr{prev-always} for \var{cycle}. */ EXTL_EXPORT_MEMBER void wedln_complete(WEdln *wedln, const char *cycle, const char *mode) @@ -1011,8 +1025,7 @@ static void wedln_do_finish(WEdln *wedln) wedln->handler=extl_fn_none(); p=edln_finish(&(wedln->edln)); - if(region_manager_allows_destroying((WRegion*)wedln)) - destroy_obj((Obj*)wedln); + region_rqdispose((WRegion*)wedln); if(p!=NULL) extl_call(handler, "s", NULL, p); @@ -1077,6 +1090,7 @@ static DynFunTab wedln_dynfuntab[]={ {input_scrolldown, wedln_scrolldown_completions}, {window_insstr, wedln_insstr}, {(DynFun*)input_style, (DynFun*)wedln_style}, + {region_size_hints, wedln_size_hints}, END_DYNFUNTAB };