From 9f1de639494026e5ce76e6523445625be64acd37 Mon Sep 17 00:00:00 2001 From: Ole Loots Date: Tue, 6 Dec 2011 22:47:40 +0000 Subject: Handle iconify correctly svn path=/trunk/netsurf/; revision=13252 --- atari/browser_win.c | 51 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) (limited to 'atari') 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 ) -- cgit v1.2.3