diff options
-rwxr-xr-x | atari/browser_win.c | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/atari/browser_win.c b/atari/browser_win.c index ffa65eace..ac818e14e 100755 --- a/atari/browser_win.c +++ b/atari/browser_win.c @@ -80,7 +80,9 @@ static void __CDECL evnt_window_dd( WINDOW *win, short wbuff[8], void * data ) ; static void __CDECL evnt_window_destroy( WINDOW *win, short buff[8], void *data );
static void __CDECL evnt_window_m1( WINDOW * win, short buff[8], void * data);
static void __CDECL evnt_window_slider( WINDOW * win, short buff[8], void * data); -static void __CDECL evnt_window_arrowed( WINDOW *win, short buff[8], void *data );
+static void __CDECL evnt_window_arrowed( WINDOW *win, short buff[8], void *data ); +static void __CDECL evnt_window_uniconify( WINDOW *win, short buff[8], void * data ); +static void __CDECL evnt_window_iconify( WINDOW *win, short buff[8], void * data );
/* -------------------------------------------------------------------------- */
/* Module public functions: */
@@ -164,7 +166,9 @@ int window_create( struct gui_window * gw, EvntDataAdd( gw->root->handle, WM_DESTROY,evnt_window_destroy, gw, EV_TOP );
EvntDataAdd( gw->root->handle, WM_ARROWED,evnt_window_arrowed, gw, EV_TOP );
EvntDataAdd( gw->root->handle, WM_NEWTOP, evnt_window_newtop, gw, EV_BOT);
- EvntDataAdd( gw->root->handle, WM_TOPPED, evnt_window_newtop, gw, EV_BOT);
+ EvntDataAdd( gw->root->handle, WM_TOPPED, evnt_window_newtop, gw, EV_BOT); + EvntDataAdd( gw->root->handle, WM_ICONIFY, evnt_window_iconify, gw, EV_BOT); + EvntDataAdd( gw->root->handle, WM_UNICONIFY, evnt_window_uniconify, gw, EV_BOT);
EvntDataAttach( gw->root->handle, WM_ICONDRAW, evnt_window_icondraw, gw);
EvntDataAttach( gw->root->handle, WM_XM1, evnt_window_m1, gw ); EvntDataAttach( gw->root->handle, WM_SLIDEXY, evnt_window_slider, gw ); @@ -320,14 +324,13 @@ bool window_widget_has_focus( struct gui_window * gw, enum focus_element_type t, static void __CDECL evnt_window_arrowed( WINDOW *win, short buff[8], void *data )
{
bool abs = false;
- LGRECT cwork;
- int value = BROWSER_SCROLL_SVAL;
-
- if( input_window == NULL ) {
- return;
- }
-
- browser_get_rect( input_window, BR_CONTENT, &cwork );
+ LGRECT cwork; + struct gui_window * gw = data;
+ int value = BROWSER_SCROLL_SVAL; + + assert( gw != NULL );
+ + browser_get_rect( gw, BR_CONTENT, &cwork );
switch( buff[4] ) {
case WA_UPPAGE:
@@ -344,7 +347,7 @@ static void __CDECL evnt_window_arrowed( WINDOW *win, short buff[8], void *data default:
break;
}
- browser_scroll( input_window, buff[4], value, abs );
+ browser_scroll( gw, buff[4], value, abs );
} @@ -487,11 +490,9 @@ static void __CDECL evnt_window_close( WINDOW *win, short buff[8], void *data ) static void __CDECL evnt_window_newtop( WINDOW *win, short buff[8], void *data )
{ - printf("oldtop: iw: %p\n", input_window); input_window = (struct gui_window *) data; - printf("newtop: iw: %p, win: %p", input_window, win ); - window_set_focus( input_window, BROWSER, &input_window->browser ) - LOG(("newtop: iw: %p, win: %p", input_window, win ));
+ window_set_focus( input_window, BROWSER, input_window->browser ); + LOG(("newtop gui window: %p, WINDOW: %p", input_window, win )); assert( input_window != NULL );
}
@@ -520,7 +521,23 @@ static void __CDECL evnt_window_slider( WINDOW * win, short buff[8], void * data else if( dx < 0 )
browser_scroll( gw, WA_LFPAGE, abs(dx), false ); } -
+ +static void __CDECL evnt_window_uniconify( WINDOW *win, short buff[8], void * data )
+{ + struct gui_window * gw = (struct gui_window *)data; + + input_window = gw; + WindTop( gw->root->handle ); + window_set_focus( gw, BROWSER, gw->browser );
+} + +static void __CDECL evnt_window_iconify( WINDOW *win, short buff[8], void * data )
+{ + struct gui_window * gw = (struct gui_window *)data;
+ if( input_window == gw){ + input_window = NULL; + }
+}
static void __CDECL evnt_window_icondraw( WINDOW *win, short buff[8], void * data )
{
@@ -574,7 +591,7 @@ void __CDECL evnt_window_resize( WINDOW *win, short buff[8], void * data ) {
short wx, wy, wh, ww, nw, nh;
short r; -
+ printf("fake resize\n");
wind_get( win->handle, WF_CURRXYWH, &wx, &wy, &ww, &wh );
r = graf_rubberbox(wx, wy, 20, 20, &nw, &nh);
if( nw < 40 && nw < 40 )
|