From adcbbbe88033e245732b73bd6319c0cb9b4da9b3 Mon Sep 17 00:00:00 2001 From: Ole Loots Date: Fri, 11 Jan 2013 02:12:30 +0100 Subject: [PATCH] Started to move the search form into the browser window. --- atari/ctxmenu.c | 73 +++++++++++++++++++++--------------------- atari/gemtk/gemtk.h | 2 ++ atari/gemtk/guiwin.c | 5 +++ atari/gemtk/utils.c | 19 +++++++++-- atari/res/netsurf.rsc | Bin 34814 -> 34858 bytes atari/res/netsurf.rsh | 17 +++++----- atari/res/netsurf.rsm | 23 ++++++------- atari/rootwin.c | 59 ++++++++++++++++++++++++++++++---- atari/rootwin.h | 3 +- atari/search.c | 29 ++++++++++++++++- atari/search.h | 2 ++ 11 files changed, 166 insertions(+), 66 deletions(-) diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c index bb52ef5a5..a82824eb3 100644 --- a/atari/ctxmenu.c +++ b/atari/ctxmenu.c @@ -48,7 +48,6 @@ #define CNT_INVALID 0 -#define CNT_URLINPUT 32 #define CNT_BROWSER 64 #define CNT_HREF 128 #define CNT_SELECTION 256 @@ -66,49 +65,51 @@ struct s_context_info ctxinfo; static struct s_context_info * get_context_info( struct gui_window * gw, short mx, short my ) { hlcache_handle *h; - GRECT bwrect; + GRECT area; struct contextual_content ccdata; struct browser_window * bw = gw->browser->bw; int sx, sy; h = bw->current_content; - ctxinfo.flags = 0; - - guiwin_get_grect(gw->root->win, GUIWIN_AREA_CONTENT, &bwrect); - mx -= bwrect.g_x; - my -= bwrect.g_y; - if( (mx < 0 || mx > bwrect.g_w) || (my < 0 || my > bwrect.g_h) ){ - // TODO: check for urlinput location - // and set CNT_URLINPUT - return(&ctxinfo); - } - - if (!bw->current_content || content_get_type(h) != CONTENT_HTML){ - return(&ctxinfo); - } - - ctxinfo.flags |= CNT_BROWSER; + ctxinfo.flags = 0; - memset( &ctxinfo.ccdata, sizeof(struct contextual_content), 0 ); + window_get_grect(gw->root, BROWSER_AREA_CONTENT, &area); + if (POINT_WITHIN(mx, my, area)) { - gui_window_get_scroll(gw, &sx, &sy); - - browser_window_get_contextual_content( gw->browser->bw, mx+sx, my+sy, - (struct contextual_content*)&ctxinfo.ccdata); - - if( ctxinfo.ccdata.link_url ){ - ctxinfo.flags |= CNT_HREF; - } - if( ctxinfo.ccdata.object) { - if( content_get_type(ctxinfo.ccdata.object) == CONTENT_IMAGE ){ - ctxinfo.flags |= CNT_IMG; + mx -= area.g_x; + my -= area.g_y; + + if (!bw->current_content || content_get_type(h) != CONTENT_HTML){ + return(&ctxinfo); } - } - if ( ctxinfo.ccdata.form_features == CTX_FORM_TEXT ) - ctxinfo.flags |= (CNT_INTERACTIVE | CNT_SELECTION); - return( &ctxinfo ); -} + ctxinfo.flags |= CNT_BROWSER; + + memset( &ctxinfo.ccdata, sizeof(struct contextual_content), 0 ); + + gui_window_get_scroll(gw, &sx, &sy); + + browser_window_get_contextual_content( gw->browser->bw, mx+sx, my+sy, + (struct contextual_content*)&ctxinfo.ccdata); + + if( ctxinfo.ccdata.link_url ){ + ctxinfo.flags |= CNT_HREF; + } + if( ctxinfo.ccdata.object) { + if( content_get_type(ctxinfo.ccdata.object) == CONTENT_IMAGE ){ + ctxinfo.flags |= CNT_IMG; + } + } + if ( ctxinfo.ccdata.form_features == CTX_FORM_TEXT ) + ctxinfo.flags |= (CNT_INTERACTIVE | CNT_SELECTION); + } + + return(&ctxinfo); + + +} + +//TODO: do not open popup for gui_window, but for a rootwin? void context_popup(struct gui_window * gw, short x, short y) { @@ -147,7 +148,7 @@ void context_popup(struct gui_window * gw, short x, short y) SET_BIT(pop[ POP_CTX_SELECT_ALL ].ob_state, OS_DISABLED, 0); SET_BIT(pop[ POP_CTX_COPY_SEL ].ob_state, OS_DISABLED, 0); SET_BIT(pop[ POP_CTX_VIEW_SOURCE ].ob_state, OS_DISABLED, 0); - } + } if( ctx->flags & CNT_HREF ){ SET_BIT(pop[ POP_CTX_COPY_LINK ].ob_state, OS_DISABLED, 0); diff --git a/atari/gemtk/gemtk.h b/atari/gemtk/gemtk.h index 2bd3553f5..e5d7c76a4 100644 --- a/atari/gemtk/gemtk.h +++ b/atari/gemtk/gemtk.h @@ -44,6 +44,8 @@ bool rc_intersect_ro(GRECT *a, GRECT *b); */ int keybd2ascii( int keybd, int shift); +/** set VDI clip area by passing an GRECT */ +void gemtk_clip_grect(VdiHdl vh, GRECT *rect); #ifndef POINT_WITHIN # define POINT_WITHIN(_x,_y, r) ((_x >= r.g_x) && (_x <= r.g_x + r.g_w ) \ diff --git a/atari/gemtk/guiwin.c b/atari/gemtk/guiwin.c index ad12499b1..17c577ec0 100644 --- a/atari/gemtk/guiwin.c +++ b/atari/gemtk/guiwin.c @@ -348,6 +348,7 @@ static short preproc_mu_button(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8]) slid = guiwin_get_scroll_info(gw); + // adjust form position (considering window and scroll position): gw->form[gw->form_idx].ob_x = content_area.g_x - (slid->x_pos * slid->x_unit_px); gw->form[gw->form_idx].ob_y = content_area.g_y - @@ -368,6 +369,10 @@ static short preproc_mu_button(GUIWIN * gw, EVMULT_OUT *ev_out, short msg[8]) if (type == G_FTEXT || type == G_FBOXTEXT) { + // edit field handling, this causes ugly redraws when the + // form is scrolled and larger than the window in which + // it is attached. + // report mouse click to the tree: retval = form_button(gw->form, gw->form_focus_obj, ev_out->emo_mclicks, &nextobj); diff --git a/atari/gemtk/utils.c b/atari/gemtk/utils.c index 3fc668a06..bd136dd99 100644 --- a/atari/gemtk/utils.c +++ b/atari/gemtk/utils.c @@ -54,13 +54,26 @@ typedef struct { char *unshift; char *shift; char *capslock; -} MY_KEYTAB; +} KEYTAB; int keybd2ascii( int keybd, int shift) { - MY_KEYTAB *key; - key = (MY_KEYTAB *)Keytbl( (char*)-1, (char*)-1, (char*)-1); + KEYTAB *key; + key = (KEYTAB *)Keytbl( (char*)-1, (char*)-1, (char*)-1); return (shift)?key->shift[keybd>>8]:key->unshift[keybd>>8]; } +void gemtk_clip_grect(VdiHdl vh, GRECT *rect) +{ + short pxy[4]; + + pxy[0] = rect->g_x; + pxy[1] = rect->g_y; + pxy[2] = pxy[0] + rect->g_w-1; + pxy[3] = pxy[1] + rect->g_h-1; + + vs_clip_pxy(vh, pxy); +} + + diff --git a/atari/res/netsurf.rsc b/atari/res/netsurf.rsc index b57214a6f1c0021324ed23370197b0cad012e3dd..d49199d8eb161a3005e3defcdec6fddcfa7cac37 100755 GIT binary patch delta 4925 zcmZvf4UAM*701te^X6-3+3&BJo!y;XW@dM0-|p~HTPSN`(=CIMMk1>qQkIWxDvD4k zse;6}sT*yRYD;b-Eg`lN+LHQ_nx!pTw5=h=CZ_4fLNU>baT99=V-0E(5&WNX-<#nA zkDSN8-#Pc*bI-l^oI95vv7dX?&XPm>JJUVKGe81nO z<;hv1+Eb8=M0G6?d?&|=QnLs4uk)T~J4%Es3SYrP8TqEn%ap)hQSgYte??6`j~e`S zN`lwGK4$QDXg)aiA2;}WGz?zb1chxVK2VcZ+4~SmqBcyUPPA!!#fW-s{BH@buW+DV z9^4k*U~nEJB)rk!qu`G4CW9j`6sEQ!25B}F_dpSm1_^`jQ{#5Y`wp~-Dq6K0+NVJ+ z;T;D51-LCdY4FqFA>pYC=V{M@JHk6F9H{p)USUeIyXlGo4f@)kh)9E$3J2<2pxn^# z*1lEvn<$ND8AH7d6kS1j4gL*qTXSU}6Y}SvyQ_Hq=FF#{8BF$IP%BGw51#$KW3!$eQaM zos`I(dK>^=Hjm(?yB7cAk51g4&-Qm7LGd(BGLsL-DxTk zWt-e6)x$k@M7K>va>C0qmtvELhY*^wT`HhwZmQ-!NS8eLI=DR0mPHO2`^nEbif0?23*&OVBXq(2e_^g+V#Nx zL2z9o0@t=#B<+3I^Kq=U=_DMBYS6;Xp z{v*9W^z{4{>rXgN%%;v@c1_^c6j6VV+E`zb!_-E50<*<`u+D$ zI$56^MYn%9EF(B(7U`m!az>@+2b?BwK6=%fi=Ej2kYmT9(!VZZI3X4mrT?JQ1Rmpa z-YNkNTtB29YnVtLLqK?iuGRiT)i#!`FR1axQu1fmPH|*{VDEJ4Gtf1y4mVDG;!V-; z#B$Pqmjic*x}G8np&10vUp?-?Ai3Zi&VIxGq#A1~dCSn7LoLwiG8Oc87QKaOA-Jwm z0lx?m74BCljE)5;u(xqJGJciPUKOw*Vl~43D&_M6>}#o2{j+Jn?ru=&=KJk#S3TCe z$?jgIE;g5}NtJCWCns=haLs}&7w54mJlVodHQiFO_NwD}e_PG93@<8%F%wQi7L~7_ ze_>Xl#|yj7;1|?bYsosH_OzC*L+T{{o>J#qC#=J2bz3?48U}W7oeWBif7HAGp?=g> z_8ymP#06l3-)D?oB`WU1Y;mCk|GaRH+M`50wN5>_3%;?!kpg=LoO@q zl7s&F<~~VxkovHFyIpKo8#`8}iUl;#ao^!L!6#y|Or7i~S+nYV$Aq_!31SiKXg(8I z7EA=^SGdlG{#kLS!9&7zHVpVf+)lWW$lU|rws0d|xO@c+J28%z&W1rpKY$`44XWh_ z$mL5_RJhKDf&CA`W5SIaw);GITzKu(lXqVLuMs{EeC-unL*;RQj{g#(sQz{Ua$mu# zR=Dxo!94{&Pq@M&^0WvS&w=Nl!0s;aHA8#KowAY&ABU`f-0th3hfW+VU>ORlAfLQ}?oMzF zT3CAn9hRbS7i1Gp(9<)-PLz#N_%Rd+PvHflAs1LGyaag}^2!Z#e+K^xvZg9c%xd*E$dD%jZx!9sB@^ryVkOeM1-5Sodp?y@sQ*yWKgWAw($qb^}jP zKMnZR5`(QgLs?ji!Q!23EY?*`CSfuSli6!bsuo9KaS9fvVIdm}ee*E5tog&t5e+-A zIHS5V$#@oDWB7Vkz9#WCjjyw6MJ8z-o!O9i)@i=&Hd?uB_gA;C(RS{|5zW<0t?C delta 4791 zcmZvge{2-T702K1?fvj?`+Ns?>$82fZ|{e__F+SSCP-lN;}nHTZ6QD?jpM|TzyYOo zt<*_K*QiM$#BG26Aqz3$ogU2-f6eWEg z*Z6ak1+Pc_gvJk0AGow%r}3jS1m2j0!qgP6iV36Uy$L1JG7O`cwK=>ci1I(cUxRr| z$bs^|LSZs*)%ah*Bh1@0{xP`4Jb5$kK_3*QW&P-+T~l;G5#t688Xpo{%&IpEEuxB6 z%Qfvopa%1d#=it^GS6!KMeqo7JLGVw=Qy~Xpx#OG<4Dze0Y8bl zV6CWWUk5dqmqISBy$5bGFNYkc_s=LI%qt<6_5TTOG4BsKP+ud8D0O-0WFSn_>vp3pp6)|1t+=J} zw-IE;RSpX3{~9?+ag~Dt{%>mbxynI4&nKx(@+1oKJIKq9^Q**`M9oNuR}$6Xf@L8h zov5RX+A$d;Dtt^Wa8Ej-+S)OP`Tyn@6Bi6GK`BeVqYG3qXc(1M;_9>zIHHaX%pH_! z)G}qw5;+^O4I@}C2B}d?j>mZb79u5*gAXQ8yGs87KaCkMsX?4-95uFzg~lPTyz-`GMv@$09lQ;mV6KjcfPVm9&s?pnwABMbxyvZ(B*(F9h)nZc*(V|tlX1lC zuw`3?ptwiuX?{7o*Sdq&^PH#v*{F-BI3-dowPCd^S7Q`vc>Xdgeq>n*lRARYCBcnZ zwEB;jYpEG^;&&}oW4W+et6s%2;ZGB4sx#ELUs_`oe6F3LrF&5`hFxQjIzw%1R9Y@Q zXeGhr+F3e6u|-NdEi(~k`|3=>=!}EllU5QuA-8RshwZyw+AGerj%A-kK;#U4QoCQQ zYpWSK@qAk~JBQ^|hm9TVy-u|(JJ*WyZDaSp!5TR*hwb}2wsQ*^2+aU^QS0|Qx!`h_ zm$dp{6w}G7*9>bGrJz-(PGD^g)}qJ@!J!lI?}Egc`-cwl1;SMR19%;88UN5xd8B*= zcIuh?hmOw|QNNMWqPM+lcAgWP+MhBz|02${KWug`ibAStWW<(KEjxlWgIg11Jv)zC zLHMXLD!z|8o5W?5J47lyG*Y>Uk;sH*Q0?aNS59*D|=u-)%YN4M=_BGZPWM~vS43c#3$%p599O4_1E-yL zAn&ry@O7%)Jox*NvzpFpWTWuZ`8nhR->4kL4U9*2h^wdb8^~`p9e+_eAAF;`v1h1%HDm*1RC7jVZt9nLwf`B&Nii-_(_e29S z7N5`!!0-Si(eYaC#SwLJ~e^9=8rp@;`4uVH=D5o*YRIaDe>8n>G{*uXSV+z DlHbu$ diff --git a/atari/res/netsurf.rsh b/atari/res/netsurf.rsh index 1b6ac16cc..092faa06a 100755 --- a/atari/res/netsurf.rsh +++ b/atari/res/netsurf.rsh @@ -79,14 +79,15 @@ #define TOOLBAR_HOTLIST_EDIT 4 /* CICON in tree TOOLBAR_HOTLIST */ #define SEARCH 8 /* form/dial */ -#define SEARCH_TB_SRCH 1 /* FTEXT in tree SEARCH */ -#define SEARCH_LBL_SHOWALL 2 /* STRING in tree SEARCH */ -#define SEARCH_LBL_CASESENSE 3 /* STRING in tree SEARCH */ -#define SEARCH_BT_SEARCH 4 /* BUTTON in tree SEARCH */ -#define SEARCH_LBL_FWD 5 /* STRING in tree SEARCH */ -#define SEARCH_CB_CASESENSE 6 /* BUTTON in tree SEARCH */ -#define SEARCH_CB_SHOWALL 7 /* BUTTON in tree SEARCH */ -#define SEARCH_CB_FWD 8 /* BUTTON in tree SEARCH */ +#define SEARCH_BT_SEARCH 1 /* BUTTON in tree SEARCH */ +#define SEARCH_LBL_FWD 2 /* STRING in tree SEARCH */ +#define SEARCH_CB_FWD 3 /* BUTTON in tree SEARCH */ +#define SEARCH_BT_SEARCH_BACK 4 /* BUTTON in tree SEARCH */ +#define SEARCH_CB_CASESENSE 6 /* BOXCHAR in tree SEARCH */ +#define SEARCH_CB_SHOWALL 7 /* BOXCHAR in tree SEARCH */ +#define SEARCH_LBL_SHOWALL 8 /* STRING in tree SEARCH */ +#define SEARCH_LBL_CASESENSE 9 /* TEXT in tree SEARCH */ +#define SEARCH_TB_SRCH 10 /* FTEXT in tree SEARCH */ #define DOWNLOAD 9 /* form/dial */ /* Width ist 400, code depends on that! If you change it, change it in download.c */ diff --git a/atari/res/netsurf.rsm b/atari/res/netsurf.rsm index 32b6696dd..3993f4ae7 100755 --- a/atari/res/netsurf.rsm +++ b/atari/res/netsurf.rsm @@ -3,7 +3,7 @@ ResourceMaster v3.65 #N 99@32@AZAaza___ _@AZAaza090___ _@@_@ #FoC-Header@rsm2out@C-Header@rsh@@@[C-Header@0@ #R 0@0@2@1@2@1@ -#M 20010100@0@7728@632@ +#M 20010100@0@7728@633@ #T 0@1@MAINMENU@@62@@ #O 4@32@T_FILE@@ #O 5@32@T_EDIT@@ @@ -74,15 +74,16 @@ ResourceMaster v3.65 #O 2@33@CREATE_FOLDER@@ #O 3@33@DELETE@@ #O 4@33@EDIT@@ -#T 8@2@SEARCH@@9@@ -#O 1@29@TB_SRCH@@ -#O 2@28@LBL_SHOWALL@@ -#O 3@28@LBL_CASESENSE@@ -#O 4@26@BT_SEARCH@@ -#O 5@28@LBL_FWD@@ -#O 6@26@CB_CASESENSE@@ -#O 7@26@CB_SHOWALL@@ -#O 8@26@CB_FWD@@ +#T 8@2@SEARCH@@11@@ +#O 1@26@BT_SEARCH@@ +#O 2@28@LBL_FWD@@ +#O 3@26@CB_FWD@@ +#O 4@26@BT_SEARCH_BACK@@ +#O 6@27@CB_CASESENSE@@ +#O 7@27@CB_SHOWALL@@ +#O 8@28@LBL_SHOWALL@@ +#O 9@21@LBL_CASESENSE@@ +#O 10@29@TB_SRCH@@ #T 9@2@DOWNLOAD@@10@@ #O 1@20@PROGRESS@Width ist 400, code depends on that! If you change it, change it in download.c@ #O 2@20@PROGRESS_DONE@@ @@ -197,4 +198,4 @@ ResourceMaster v3.65 #T 15@2@POP_FONT_RENDERER@@3@@ #O 1@28@INTERNAL@@ #O 2@28@FREETYPE@@ -#c 27079@ +#c 25055@ diff --git a/atari/rootwin.c b/atari/rootwin.c index 06bb2ee65..81a470955 100755 --- a/atari/rootwin.c +++ b/atari/rootwin.c @@ -547,14 +547,55 @@ void window_get_scroll(ROOTWIN *rootwin, int *x, int *y) void window_get_grect(ROOTWIN *rootwin, enum browser_area_e which, GRECT *d) { + + d->g_x = 0; + d->g_y = 0; + d->g_w = 0; + d->g_h = 0; + if (which == BROWSER_AREA_TOOLBAR) { guiwin_get_grect(rootwin->win, GUIWIN_AREA_TOOLBAR, d); } else if (which == BROWSER_AREA_CONTENT) { - guiwin_get_grect(rootwin->win, GUIWIN_AREA_CONTENT, d); - } else if (which == BROWSER_AREA_URL_INPUT) { - toolbar_get_grect(rootwin->toolbar, TOOLBAR_URL_AREA, d); - } else { + GRECT search_area; + + guiwin_get_grect(rootwin->win, GUIWIN_AREA_CONTENT, d); + + + window_get_grect(rootwin, BROWSER_AREA_SEARCH, &search_area); + + d->g_y += search_area.g_h; + d->g_h -= search_area.g_h; + + } else if (which == BROWSER_AREA_URL_INPUT) { + + toolbar_get_grect(rootwin->toolbar, TOOLBAR_URL_AREA, d); + + } else if (which == BROWSER_AREA_SEARCH) { + // TODO: check if search is open + GRECT work; + OBJECT * tree; + + guiwin_get_grect(rootwin->win, GUIWIN_AREA_WORK, &work); + guiwin_get_grect(rootwin->win, GUIWIN_AREA_TOOLBAR, d); + tree = get_tree(SEARCH); + + d->g_x = work.g_x; + d->g_w = work.g_w; + d->g_y += d->g_h; + d->g_h = tree->ob_height; + } + else { + + } + + + // sanitize the results + if (d->g_h < 0) { + d->g_h = 0; + } + if (d->g_w < 0) { + d->g_w = 0; } } @@ -822,7 +863,7 @@ exit: void window_process_redraws(ROOTWIN * rootwin) { - GRECT work, visible_ro, tb_area, content_area; + GRECT work, visible_ro, tb_area, search_area, content_area; short i; short scroll_x=0, scroll_y=0; bool toolbar_rdrw_required; @@ -834,6 +875,7 @@ void window_process_redraws(ROOTWIN * rootwin) redraw_active = true; window_get_grect(rootwin, BROWSER_AREA_TOOLBAR, &tb_area); + window_get_grect(rootwin, BROWSER_AREA_SEARCH, &search_area); window_get_grect(rootwin, BROWSER_AREA_CONTENT, &content_area); //dbg_grect("content area", &content_area); @@ -877,6 +919,11 @@ void window_process_redraws(ROOTWIN * rootwin) toolbar_redraw(rootwin->toolbar, &rdrw_area); } + rdrw_area = rdrw_area_ro; + if (rc_intersect(&search_area, &rdrw_area)) { + search_redraw(NULL, &rdrw_area); + } + rdrw_area = rdrw_area_ro; if (rc_intersect(&content_area, &rdrw_area)) { @@ -901,7 +948,7 @@ void window_process_redraws(ROOTWIN * rootwin) caret_pos.g_w = caret->dimensions.g_w; caret_pos.g_h = caret->dimensions.g_h; - if(rc_intersect_ro(&caret_pos, &content_area)) { + if (rc_intersect_ro(&caret_pos, &content_area)) { caret_rdrw_required = true; } } diff --git a/atari/rootwin.h b/atari/rootwin.h index 2efbe0b06..3d06615c8 100755 --- a/atari/rootwin.h +++ b/atari/rootwin.h @@ -34,7 +34,8 @@ enum browser_area_e { BROWSER_AREA_CONTENT = 1, BROWSER_AREA_STATUSBAR, BROWSER_AREA_TOOLBAR, - BROWSER_AREA_URL_INPUT + BROWSER_AREA_URL_INPUT, + BROWSER_AREA_SEARCH }; diff --git a/atari/search.c b/atari/search.c index 0b2ed2b05..b58105638 100644 --- a/atari/search.c +++ b/atari/search.c @@ -36,7 +36,8 @@ #include "desktop/search.h" #include "utils/log.h" #include "utils/messages.h" -#include "atari/gui.h" +#include "atari/gui.h" +#include "atari/rootwin.h" #include "atari/misc.h" #include "atari/search.h" #include "atari/gemtk/gemtk.h" @@ -134,6 +135,32 @@ void nsatari_search_set_back_state(bool active, void *p) LOG(("%p: set back state: %d\n", p, active)); } +void search_redraw(void *session, GRECT *clip) +{ + GRECT area, clipped_area; + struct gui_window *gw = input_window; + short pxy[4]; + VdiHdl vh; + + if(gw == NULL) + return; + + window_get_grect(gw->root, BROWSER_AREA_SEARCH, &area); + + clipped_area = area; + + if (!rc_intersect(clip, &clipped_area)) { + return; + } + + OBJECT * tree = get_tree(SEARCH); + tree->ob_x = area.g_x; + tree->ob_y = area.g_y; + tree->ob_width = area.g_w; + tree->ob_height = area.g_h; + + objc_draw_grect(tree, 0, 8, &clipped_area); +} static SEARCH_FORM_SESSION get_search_session(GUIWIN * win) { diff --git a/atari/search.h b/atari/search.h index 9228b9623..1fc64ded7 100644 --- a/atari/search.h +++ b/atari/search.h @@ -43,5 +43,7 @@ typedef struct s_search_form_session * SEARCH_FORM_SESSION; SEARCH_FORM_SESSION open_browser_search(struct gui_window * gw); void search_destroy(struct gui_window * gw); + +void search_redraw(void *session, GRECT *clip); #endif