summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOle Loots <ole@monochrom.net>2011-09-19 18:38:48 +0000
committerOle Loots <ole@monochrom.net>2011-09-19 18:38:48 +0000
commit0f2871e41889f254cb614883ae9bbc6ab6fbceae (patch)
tree7d1a65739fbd044ea7ad490404c81710515ac5de
parent60f641bc44e7c40f3114630f60d0a30b57813e89 (diff)
downloadnetsurf-0f2871e41889f254cb614883ae9bbc6ab6fbceae.tar.gz
netsurf-0f2871e41889f254cb614883ae9bbc6ab6fbceae.tar.bz2
Added context menu,
Allow to set bitmap for iconified window. ( altough it's usesless right now because favicon support has been dropped) svn path=/trunk/netsurf/; revision=12821
-rw-r--r--atari/Makefile.target17
-rwxr-xr-xatari/browser.c180
-rwxr-xr-xatari/browser_win.c85
-rwxr-xr-xatari/browser_win.h4
-rw-r--r--atari/ctxmenu.c221
-rw-r--r--atari/ctxmenu.h6
-rwxr-xr-xatari/global_evnt.c32
-rwxr-xr-xatari/gui.c69
-rwxr-xr-xatari/gui.h13
-rw-r--r--atari/search.c32
10 files changed, 439 insertions, 220 deletions
diff --git a/atari/Makefile.target b/atari/Makefile.target
index 6fc4b0ca1..a4f672f8f 100644
--- a/atari/Makefile.target
+++ b/atari/Makefile.target
@@ -1,13 +1,13 @@
# ----------------------------------------------------------------------------
# Atari target setup
# ----------------------------------------------------------------------------
-
+
$(eval $(call feature_enabled,MNG,-DWITH_MNG,-lmng,PNG/MNG/JNG (libmng)))
$(eval $(call feature_enabled,PNG,-DWITH_PNG,-lpng,PNG (libpng) ))
CFLAGS += -DATARI_USE_FREETYPE $(shell freetype-config --cflags)
LDFLAGS += -lcflib -lfreetype
-
+
# define additional CFLAGS and LDFLAGS requirements for pkg-configed libs here
NETSURF_FEATURE_RSVG_CFLAGS := -DWITH_RSVG
NETSURF_FEATURE_HUBBUB_CFLAGS := -DWITH_HUBBUB
@@ -17,7 +17,7 @@ NETSURF_FEATURE_GIF_CFLAGS := -DWITH_GIF
#LDFLAGS += -lnsbmp -lnsgif
$(eval $(call pkg_config_find_and_add,BMP,libnsbmp,BMP))
$(eval $(call pkg_config_find_and_add,GIF,libnsgif,GIF))
-
+
CFLAGS += -U__STRICT_ANSI__ -std=c99 -I. -Dsmall $(WARNFLAGS) -Dnsatari \
-D_BSD_SOURCE \
-D_XOPEN_SOURCE=600 \
@@ -25,11 +25,11 @@ CFLAGS += -U__STRICT_ANSI__ -std=c99 -I. -Dsmall $(WARNFLAGS) -Dnsatari \
$(shell $(PKG_CONFIG) --cflags libhubbub libcss openssl) \
$(shell xml2-config --cflags) \
$(shell curl-config --cflags)
-
-LDFLAGS += -lcurl
-LDFLAGS += -lhubbub -lcss -lparserutils -lwapcaplet
+
+LDFLAGS += -lcurl
+LDFLAGS += -lhubbub -lcss -lparserutils -lwapcaplet
LDFLAGS += -lssl -lcrypto
-LDFLAGS += -lxml2 -lz -liconv -lHermes -lwindom -lgem -lm
+LDFLAGS += -lxml2 -lz -liconv -lHermes -lwindom -lgem -lm
# S_ATARI are sources purely for the Atari FreeMiNT build
@@ -39,7 +39,8 @@ S_ATARI := gui.c findfile.c filetype.c misc.c bitmap.c schedule.c \
plot.c plot/plotter.c plot/plotter_vdi.c plot/eddi.s \
plot/font_vdi.c plot/font_freetype.c plot/font_internal.c \
browser_win.c toolbar.c statusbar.c browser.c \
- global_evnt.c osspec.c dragdrop.c system_colour.c
+ global_evnt.c osspec.c dragdrop.c system_colour.c \
+ ctxmenu.c
S_ATARI := $(addprefix atari/,$(S_ATARI))
# This is the final source build list
diff --git a/atari/browser.c b/atari/browser.c
index c193f2ddb..9176fd42c 100755
--- a/atari/browser.c
+++ b/atari/browser.c
@@ -27,9 +27,15 @@
#include "desktop/gui.h"
#include "desktop/netsurf.h"
-#include "desktop/browser.h"
+#include "desktop/browser.h"
#include "desktop/mouse.h"
-#include "desktop/textinput.h"
+#include "desktop/textinput.h"
+#include "content/content.h"
+#include "content/hlcache.h"
+#include "content/urldb.h"
+#include "css/css.h"
+#include "render/box.h"
+#include "render/form.h"
#include "utils/log.h"
#include "utils/messages.h"
@@ -37,12 +43,12 @@
#include "atari/browser_win.h"
#include "atari/misc.h"
#include "atari/global_evnt.h"
-#include "atari/browser_win.h"
#include "atari/res/netsurf.rsh"
#include "atari/browser.h"
#include "atari/plot/plotter.h"
#include "atari/plot.h"
-#include "atari/font.h"
+#include "atari/font.h"
+#include "atari/ctxmenu.h"
#include "cflib.h"
extern browser_mouse_state bmstate;
@@ -67,7 +73,7 @@ struct s_browser * browser_create
struct gui_window * gw,
struct browser_window *bw,
struct browser_window * clone,
- int lt, int w, int flex
+ int lt, int w, int flex
)
{
LGRECT cwork;
@@ -93,31 +99,31 @@ struct s_browser * browser_create
bnew->compwin->w_u = 1;
bnew->compwin->h_u = 1;
/* needs to be adjusted when content width is known: */
- bnew->compwin->ypos_max = w;
+ bnew->compwin->ypos_max = w;
bnew->compwin->xpos_max = w;
mt_WindSlider( &app, bnew->compwin, HSLIDER|VSLIDER);
- bnew->comp = (COMPONENT*)comp_widget_create( (void*)&app, (WINDOW*)bnew->compwin, 1, 1 );
+ bnew->comp = (COMPONENT*)comp_widget_create( (void*)&app, (WINDOW*)bnew->compwin, 1, 1 );
if( bnew->comp == NULL ) {
free(bnew);
return(NULL);
}
- mt_EvntDataAdd( &app, bnew->compwin, WM_XBUTTON,
+ mt_EvntDataAdd( &app, bnew->compwin, WM_XBUTTON,
browser_evnt_mbutton, (void*)gw, EV_BOT );
- mt_CompEvntDataAttach( &app, bnew->comp, WM_REDRAW,
+ mt_CompEvntDataAttach( &app, bnew->comp, WM_REDRAW,
browser_evnt_redraw, (void*)gw );
mt_EvntDataAttach( &app, bnew->compwin , WM_REDRAW, browser_evnt_redraw_x, NULL );
- mt_EvntDataAttach( &app, bnew->compwin, WM_SLIDEXY,
+ mt_EvntDataAttach( &app, bnew->compwin, WM_SLIDEXY,
browser_evnt_slider, gw );
- mt_EvntDataAttach( &app, bnew->compwin, WM_ARROWED,
- browser_evnt_arrowed, gw );
- mt_CompEvntDataAttach( &app, bnew->comp, WM_DESTROY,
+ mt_EvntDataAttach( &app, bnew->compwin, WM_ARROWED,
+ browser_evnt_arrowed, gw );
+ mt_CompEvntDataAttach( &app, bnew->comp, WM_DESTROY,
browser_evnt_destroy, (void*)bnew );
/* just stub, as an reminder: */
- mt_EvntDataAttach( &app, bnew->compwin, WM_DESTROY,
+ mt_EvntDataAttach( &app, bnew->compwin, WM_DESTROY,
browser_evnt_wdestroy, (void*)bnew );
- mt_CompDataAttach( &app, bnew->comp, CDT_OWNER, gw );
- bnew->scroll.requested.y = 0;
+ mt_CompDataAttach( &app, bnew->comp, CDT_OWNER, gw );
+ bnew->scroll.requested.y = 0;
bnew->scroll.requested.x = 0;
bnew->scroll.current.x = 0;
bnew->scroll.current.y = 0;
@@ -144,7 +150,7 @@ bool browser_destroy( struct s_browser * b )
/* listRemove( (LINKABLE*) oldwin ); */
/* listRemove( (LINKABLE*) old ); */
WindDelete( oldwin );
- mt_CompDelete(&app, old );
+ mt_CompDelete(&app, old );
}
return( true );
}
@@ -166,7 +172,7 @@ void browser_get_rect( struct gui_window * gw, enum browser_rect type, LGRECT *
out->g_y = work.g_y;
return;
}
-
+
LGRECT cur;
mt_CompGetLGrect(&app, gw->browser->comp, WF_WORKXYWH, &cur);
if( type == BR_HSLIDER ){
@@ -195,7 +201,7 @@ void browser_update_rects(struct gui_window * gw )
buff[1] = _AESapid;
buff[2] = 0;
EvntExec(gw->root->handle, buff);
-}
+}
void browser_set_content_size(struct gui_window * gw, int w, int h)
{
@@ -236,7 +242,7 @@ static void __CDECL browser_evnt_destroy( COMPONENT * c, long buff[8], void * da
}
-static void __CDECL browser_evnt_arrowed( WINDOW *win, short buff[8], void * data)
+static void __CDECL browser_evnt_arrowed( WINDOW *win, short buff[8], void * data)
{
bool abs = false;
int value = BROWSER_SCROLL_SVAL;
@@ -259,7 +265,7 @@ static void __CDECL browser_evnt_arrowed( WINDOW *win, short buff[8], void * dat
value = cwork.g_w;
break;
- default:
+ default:
break;
}
browser_scroll( gw, buff[4], value, abs );
@@ -292,9 +298,8 @@ void __CDECL browser_evnt_slider( WINDOW *win, short buff[8], void * data)
}
static void __CDECL browser_evnt_mbutton( WINDOW * c, short buff[8], void * data)
-{
+{
long lbuff[8];
- short i;
short mx, my, dummy, mbut;
uint32_t tnow = clock()*1000 / CLOCKS_PER_SEC;
LGRECT cwork;
@@ -302,9 +307,10 @@ static void __CDECL browser_evnt_mbutton( WINDOW * c, short buff[8], void * data
if( input_window != gw ) {
return;
}
+
window_set_focus( gw, BROWSER, (void*)gw->browser );
browser_get_rect( gw, BR_CONTENT, &cwork );
- mx = evnt.mx - cwork.g_x;
+ mx = evnt.mx - cwork.g_x;
my = evnt.my - cwork.g_y;
LOG(("mevent (%d) within %s at %d / %d\n", evnt.nb_click, gw->browser->bw->name, mx, my ));
@@ -327,61 +333,41 @@ static void __CDECL browser_evnt_mbutton( WINDOW * c, short buff[8], void * data
int sy = (my + gw->browser->scroll.current.y);
graf_mkstate(&dummy, &dummy, &mbut, &dummy);
- /* todo: if we need right button click, increase loop count */
- for( i = 1; i<2; i++) {
- if( (mbut & i) ) {
- if( mouse_hold_start[i-1] == 0 ) {
- mouse_hold_start[i-1] = tnow;
- LOG(("Drag %d starts at %d,%d\n", i, sx, sy));
- if( i == 1 ) {
- browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_PRESS_1,sx,sy);
- bmstate |= BROWSER_MOUSE_HOLDING_1 | BROWSER_MOUSE_DRAG_ON;
- }
- if( i == 2 ) {
- browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_PRESS_2,sx,sy);
- bmstate |= BROWSER_MOUSE_HOLDING_2 | BROWSER_MOUSE_DRAG_ON;
- }
- } else {
- if( i == 1 ) {
- bmstate |= BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_DRAG_ON;
- }
- if( i == 2 ) {
- bmstate |= BROWSER_MOUSE_DRAG_2 | BROWSER_MOUSE_DRAG_ON;
- }
- }
-
- if( i != 0 ){
- if( (abs(mx-last_drag_x)>5) || (abs(mx-last_drag_y)>5) ){
- browser_window_mouse_track(
- gw->browser->bw,
- bmstate,
- sx, sy
- );
- last_drag_x = mx;
- last_drag_y = my;
- }
- }
-
+ if( (mbut & 1) && (evnt.mbut & 1) ) {
+ if( mouse_hold_start[0] == 0 ) {
+ mouse_hold_start[0] = tnow;
+ LOG(("Drag starts at %d,%d\n", sx, sy));
+ browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_PRESS_1,sx,sy);
+ bmstate |= BROWSER_MOUSE_HOLDING_1 | BROWSER_MOUSE_DRAG_ON;
} else {
- mouse_click_time[i-1] = tnow; /* clock in ms */
- /* check if this event was during an drag op: */
- if( mouse_hold_start[i-1] == 0 ) {
- if( i == 1) {
- LOG(("Click within %s at %d / %d\n", gw->browser->bw->name, sx, sy ));
- browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_PRESS_1,sx,sy);
- browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_CLICK_1,sx,sy);
- bmstate &= ~( BROWSER_MOUSE_HOLDING_1 | BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_CLICK_1);
- }
- if( i == 2 ) {
- LOG(("Click within %s at %d / %d", gw->browser->bw->name, mx, my ));
- browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_PRESS_1,sx,sy);
- browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_CLICK_2,sx,sy);
- bmstate &= ~( BROWSER_MOUSE_HOLDING_2 | BROWSER_MOUSE_DRAG_2 | BROWSER_MOUSE_CLICK_2);
- }
- }
- mouse_hold_start[i-1] = 0;
+ bmstate |= BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_DRAG_ON;
+ }
+ if( (abs(mx-last_drag_x)>5) || (abs(mx-last_drag_y)>5) ){
+ browser_window_mouse_track(
+ gw->browser->bw,
+ bmstate,
+ sx, sy
+ );
+ last_drag_x = mx;
+ last_drag_y = my;
+ }
+
+ } else if( (evnt.mbut & 1) ) {
+ mouse_click_time[0] = tnow; /* clock in ms */
+ /* check if this event was during an drag op, only handle if it wasn't: */
+ if( mouse_hold_start[0] == 0 ) {
+ LOG(("Click within %s at %d / %d\n", gw->browser->bw->name, sx, sy ));
+ browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_PRESS_1,sx,sy);
+ browser_window_mouse_click(gw->browser->bw,BROWSER_MOUSE_CLICK_1,sx,sy);
+ bmstate &= ~( BROWSER_MOUSE_HOLDING_1 | BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_CLICK_1);
}
- }
+ mouse_hold_start[0] = 0;
+ }
+
+ if( (evnt.mbut & 2 ) ) {
+ context_popup( gw, evnt.mx, evnt.my );
+ }
+
}
void browser_scroll( struct gui_window * gw, short mode, int value, bool abs )
@@ -406,12 +392,12 @@ void browser_scroll( struct gui_window * gw, short mode, int value, bool abs )
switch( mode ) {
case WA_UPPAGE:
- case WA_UPLINE:
+ case WA_UPLINE:
if( max_y_scroll < 1 )
return;
if( abs == false )
b->scroll.requested.y -= value;
- else
+ else
b->scroll.requested.y = value - b->scroll.current.y;
break;
@@ -426,7 +412,7 @@ void browser_scroll( struct gui_window * gw, short mode, int value, bool abs )
break;
case WA_LFPAGE:
- case WA_LFLINE:
+ case WA_LFLINE:
if( max_x_scroll < 1 )
return;
if( abs == false )
@@ -445,7 +431,7 @@ void browser_scroll( struct gui_window * gw, short mode, int value, bool abs )
b->scroll.requested.x = value - b->scroll.current.x;
break;
- default: break;
+ default: break;
}
if( b->scroll.current.y + b->scroll.requested.y < 0 ) {
@@ -474,7 +460,7 @@ void browser_scroll( struct gui_window * gw, short mode, int value, bool abs )
perform the requested scrolling.
gw -> the browser window to act upon.
bwrect -> the dimensions of the browser, so that this function
- doesn't need to get it.
+ doesn't need to get it.
*/
static void browser_process_scroll( struct gui_window * gw, LGRECT bwrect )
{
@@ -487,7 +473,7 @@ static void browser_process_scroll( struct gui_window * gw, LGRECT bwrect )
return;
h = (short) abs( b->scroll.requested.y );
- w = (short) abs( b->scroll.requested.x );
+ w = (short) abs( b->scroll.requested.x );
/* if the request exceeds the browser size, redraw the whole area */
if ( b->scroll.requested.y > bwrect.g_h || b->scroll.requested.y < -bwrect.g_h ||
@@ -511,11 +497,11 @@ static void browser_process_scroll( struct gui_window * gw, LGRECT bwrect )
dst.g_h = src.g_h;
plotter->copy_rect( plotter, src, dst );
b->scroll.current.y += b->scroll.requested.y;
- browser_schedule_redraw( gw, 0, 0, bwrect.g_w, h ) ;
+ browser_schedule_redraw( gw, 0, 0, bwrect.g_w, h ) ;
}
if( b->scroll.requested.y > 0 ) {
- /* scroll down */
+ /* scroll down */
src.g_x = 0;
src.g_y = h;
src.g_w = bwrect.g_w;
@@ -527,7 +513,7 @@ static void browser_process_scroll( struct gui_window * gw, LGRECT bwrect )
plotter->copy_rect( plotter, src, dst );
b->scroll.current.y += b->scroll.requested.y;
browser_schedule_redraw( gw, 0, bwrect.g_h - h, bwrect.g_w, bwrect.g_h );
- }
+ }
if( b->scroll.requested.x < 0 ) {
/* scroll to the left */
@@ -557,7 +543,7 @@ static void browser_process_scroll( struct gui_window * gw, LGRECT bwrect )
plotter->copy_rect( plotter, src, dst );
b->scroll.current.x += b->scroll.requested.x;
browser_schedule_redraw( gw, bwrect.g_w - w, 0, bwrect.g_w, bwrect.g_h );
- }
+ }
b->scroll.requested.y = 0;
b->scroll.requested.x = 0;
gw->browser->compwin->xpos = b->scroll.current.x;
@@ -567,7 +553,7 @@ static void browser_process_scroll( struct gui_window * gw, LGRECT bwrect )
}
-bool browser_input( struct gui_window * gw, unsigned short nkc )
+bool browser_input( struct gui_window * gw, unsigned short nkc )
{
LGRECT work;
bool r = false;
@@ -601,7 +587,7 @@ bool browser_input( struct gui_window * gw, unsigned short nkc )
switch( ascii ) {
case NK_TAB:
- r = browser_window_key_press(gw->browser->bw, KEY_SHIFT_TAB);
+ r = browser_window_key_press(gw->browser->bw, KEY_SHIFT_TAB);
break;
case NK_LEFT:
@@ -660,7 +646,7 @@ bool browser_input( struct gui_window * gw, unsigned short nkc )
break;
case NK_ESC:
- r = browser_window_key_press(gw->browser->bw, KEY_ESCAPE);
+ r = browser_window_key_press(gw->browser->bw, KEY_ESCAPE);
break;
case NK_CLRHOME:
@@ -672,7 +658,7 @@ bool browser_input( struct gui_window * gw, unsigned short nkc )
browser_scroll( gw, WA_RTLINE, 16, false );
r = true;
}
- break;
+ break;
case NK_LEFT:
if (browser_window_key_press(gw->browser->bw, KEY_LEFT) == false) {
@@ -702,7 +688,7 @@ bool browser_input( struct gui_window * gw, unsigned short nkc )
}
break;
- case NK_M_PGDOWN:
+ case NK_M_PGDOWN:
if (browser_window_key_press(gw->browser->bw, KEY_PAGE_DOWN) == false) {
browser_scroll( gw, WA_DNPAGE, work.g_h, false );
r = true;
@@ -820,7 +806,7 @@ void browser_schedule_redraw(struct gui_window * gw, short x0, short y0, short x
return;
}
}
- }
+ }
if( b->redraw.areas_used < MAX_REDRW_SLOTS ) {
b->redraw.areas[b->redraw.areas_used].x0 = x0;
@@ -882,7 +868,7 @@ void browser_redraw_caret( struct gui_window * gw, GRECT * area )
plot_get_clip( &old_clip );
/* clip to cursor: */
plot_clip( &clip );
- plot_rectangle( caret.g_x, caret.g_y,
+ plot_rectangle( caret.g_x, caret.g_y,
caret.g_x+caret.g_w, caret.g_y+caret.g_h,
plot_style_caret );
/* restore old clip area: */
@@ -890,11 +876,11 @@ void browser_redraw_caret( struct gui_window * gw, GRECT * area )
b->caret.current.g_x = caret.g_x + gw->browser->scroll.current.x;
b->caret.current.g_y = caret.g_y + gw->browser->scroll.current.y;
b->caret.current.g_w = caret.g_w;
- b->caret.current.g_h = caret.g_h;
+ b->caret.current.g_h = caret.g_h;
}
}
-void browser_redraw( struct gui_window * gw )
+void browser_redraw( struct gui_window * gw )
{
LGRECT bwrect;
struct s_browser * b = gw->browser;
@@ -954,7 +940,7 @@ void browser_redraw( struct gui_window * gw )
area.g_x = b->redraw.areas[i].x0;
area.g_y = b->redraw.areas[i].y0;
area.g_w = b->redraw.areas[i].x1 - b->redraw.areas[i].x0;
- area.g_h = b->redraw.areas[i].y1 - b->redraw.areas[i].y0;
+ area.g_h = b->redraw.areas[i].y1 - b->redraw.areas[i].y0;
if (rc_intersect((GRECT *)&fbwork,(GRECT *)&area)) {
b->redraw.area.x0 = area.g_x;
b->redraw.area.y0 = area.g_y;
diff --git a/atari/browser_win.c b/atari/browser_win.c
index 427ddedad..1423e69e4 100755
--- a/atari/browser_win.c
+++ b/atari/browser_win.c
@@ -55,8 +55,8 @@
#include "atari/plot/plotter.h"
#include "atari/dragdrop.h"
#include "atari/search.h"
-#include "atari/osspec.h"
-
+#include "atari/osspec.h"
+
extern void * h_gem_rsrc;
extern struct gui_window *input_window;
extern GEM_PLOTTER plotter;
@@ -266,7 +266,7 @@ int window_create( struct gui_window * gw, struct browser_window * bw, unsigned
int err = 0;
bool tb, sb;
tb = (inflags & WIDGET_TOOLBAR );
- sb = (inflags & WIDGET_STATUSBAR);
+ sb = (inflags & WIDGET_STATUSBAR);
short w,h, wx, wy, wh, ww;
int flags = CLOSER | MOVER | NAME | FULLER | SMALLER ;
@@ -341,6 +341,8 @@ int window_destroy( struct gui_window * gw)
search_destroy( gw );
if( input_window == gw )
input_window = NULL;
+
+ window_set_icon( gw, NULL );
if( gw->root ) {
if( gw->root->toolbar )
@@ -365,7 +367,7 @@ int window_destroy( struct gui_window * gw)
if( gw->root ) {
/* TODO: check if no other browser is bound to this root window! */
if( gw->root->title )
- free( gw->root->title );
+ free( gw->root->title );
if( gw->root->cmproot )
mt_CompDelete( &app, gw->root->cmproot );
ApplWrite( _AESapid, WM_DESTROY, gw->root->handle->handle, 0, 0, 0, 0);
@@ -401,35 +403,16 @@ void window_open( struct gui_window * gw)
snd_rdw( gw->root->handle );
}
-/*
-TODO
-void window_set_icon(struct gui_window * gw, void * data, bool is_rsc )
+
+void window_set_icon(struct gui_window * gw, struct bitmap * bmp )
{
- #define CDT_ICON_TYPE_OBJECT 1UL
- #define CDT_ICON_TYPE_BITMAP 2UL
- void * prev_type;
- void * ico = DataSearch(&app, gw->root->handle, CDT_ICON );
- if(ico != NULL) {
- prev_type = DataSearch(&app, gw->root->handle, CDT_ICON_TYPE );
- if( prev_type == (void*)CDT_ICON_TYPE_OBJECT ){
- mt_ObjcFree( &app, (OBJECT*)ico );
- }
- if( prev_type == (void*)CDT_ICON_TYPE_BITMAP ){
- bitmap_destroy(ico);
- }
- }
- if( data != NULL ) {
- DataAttach( &app, gw->root->handle, CDT_ICON, data);
- if(is_rsc) {
- DataAttach( &app, gw->root->handle, CDT_ICON_TYPE, CDT_ICON_TYPE_OBJECT);
- } else {
- DataAttach( &app, gw->root->handle, CDT_ICON_TYPE, CDT_ICON_TYPE_BITMAP);
- }
- }
- #undef CDT_ICON_TYPE_OBJECT
- #undef CDT_ICON_TYPE_BITMAP
+ if( gw->icon != NULL ){
+ bitmap_destroy( gw->icon );
+ gw->icon = NULL;
+ }
+ gw->icon = bmp;
}
-*/
+
/* update back forward buttons (see tb_update_buttons (bug) ) */
@@ -455,7 +438,7 @@ static void window_redraw_controls(struct gui_window *gw, uint32_t flags)
mt_CompGetLGrect(&app, gw->root->toolbar->comp, WF_WORKXYWH, &rect);
ApplWrite( _AESapid, WM_REDRAW, gw->root->handle->handle,
rect.g_x, rect.g_y, rect.g_w, rect.g_h );
- mt_CompGetLGrect(&app, gw->root->statusbar->comp, WF_WORKXYWH, &rect);
+ mt_CompGetLGrect(&app, gw->root->statusbar->comp, WF_WORKXYWH, &rect);
ApplWrite( _AESapid, WM_REDRAW, gw->root->handle->handle,
rect.g_x, rect.g_y, rect.g_w, rect.g_h );
}
@@ -509,7 +492,7 @@ bool window_widget_has_focus( struct gui_window * gw, enum focus_element_type t,
return( ( element == gw->root->focus.element && t == gw->root->focus.type) );
}
-static void __CDECL evnt_window_dd( WINDOW *win, short wbuff[8], void * data )
+static void __CDECL evnt_window_dd( WINDOW *win, short wbuff[8], void * data )
{
struct gui_window * gw = (struct gui_window *)data;
char file[DD_NAMEMAX];
@@ -533,7 +516,7 @@ static void __CDECL evnt_window_dd( WINDOW *win, short wbuff[8], void * data )
memset( ext, 0, 32);
strcpy( ext, "ARGS");
dd_msg = ddsexts( dd_hdl, ext);
- if( dd_msg<0)
+ if( dd_msg<0)
goto error;
dd_msg = ddrtry( dd_hdl, (char*)&name[0], (char*)&file[0], (char*)&ext[0], &size);
if( size+1 >= PATH_MAX )
@@ -544,13 +527,13 @@ static void __CDECL evnt_window_dd( WINDOW *win, short wbuff[8], void * data )
buff = (char*)alloca(sizeof(char)*(size+1));
if( buff != NULL )
{
- if( Fread(dd_hdl, size, buff ) == size)
+ if( Fread(dd_hdl, size, buff ) == size)
{
buff[size] = 0;
}
- LOG(("file: %s, ext: %s, size: %d dropped at: %d,%d\n",
- (char*)buff, (char*)&ext,
- size, mx, my
+ LOG(("file: %s, ext: %s, size: %d dropped at: %d,%d\n",
+ (char*)buff, (char*)&ext,
+ size, mx, my
));
{
int posx, posy;
@@ -572,13 +555,13 @@ static void __CDECL evnt_window_dd( WINDOW *win, short wbuff[8], void * data )
box_x = box->margin[LEFT];
box_y = box->margin[TOP];
- while ((box = box_at_point(box, mx+gw->browser->scroll.current.x, my+gw->browser->scroll.current.y, &box_x, &box_y, &h)))
+ while ((box = box_at_point(box, mx+gw->browser->scroll.current.x, my+gw->browser->scroll.current.y, &box_x, &box_y, &h)))
{
if (box->style && css_computed_visibility(box->style) == CSS_VISIBILITY_HIDDEN)
continue;
- if (box->gadget)
+ if (box->gadget)
{
- switch (box->gadget->type)
+ switch (box->gadget->type)
{
case GADGET_FILE:
file_box = box;
@@ -615,8 +598,8 @@ static void __CDECL evnt_window_dd( WINDOW *win, short wbuff[8], void * data )
file_box->gadget->value = utf8_fn;
/* Redraw box. */
box_coords(file_box, &posx, &posy);
- browser_schedule_redraw(bw->window,
- posx - gw->browser->scroll.current.x,
+ browser_schedule_redraw(bw->window,
+ posx - gw->browser->scroll.current.x,
posy - gw->browser->scroll.current.y,
posx - gw->browser->scroll.current.x + file_box->width,
posy - gw->browser->scroll.current.y + file_box->height);
@@ -668,12 +651,12 @@ static void __CDECL evnt_window_icondraw( WINDOW *win, short buff[8], void * dat
{
short x,y,w,h;
struct gui_window * gw = (struct gui_window*)data;
- bool has_favicon = false;
+
+ LOG((""));
- WindClear( win);
+ WindClear( win);
WindGet( win, WF_WORKXYWH, &x, &y, &w, &h);
-
- if( has_favicon == false ) {
+ if( gw->icon == NULL ) {
OBJECT * tree;
RsrcGaddr( h_gem_rsrc, R_TREE, ICONIFY , &tree );
tree->ob_x = x;
@@ -681,6 +664,12 @@ static void __CDECL evnt_window_icondraw( WINDOW *win, short buff[8], void * dat
tree->ob_width = w;
tree->ob_height = h;
mt_objc_draw( tree, 0, 8, buff[4], buff[5], buff[6], buff[7], app.aes_global );
+ } else {
+ struct rect clip = { 0,0,w,h };
+ plotter->move( plotter, x, y );
+ plotter->resize( plotter, w, h );
+ plotter->clip(plotter, &clip );
+ plotter->bitmap( plotter, gw->icon, 0, 0, 0xffffff, BITMAPF_NONE );
}
}
@@ -693,7 +682,7 @@ static void __CDECL evnt_window_move( WINDOW *win, short buff[8], void * data )
if( option_atari_realtime_move ) {
std_mvd( win, buff, &app );
evnt_window_rt_resize( win, buff, data );
- } else {
+ } else {
wind_get( win->handle, WF_CURRXYWH, &wx, &wy, &ww, &wh );
if( graf_dragbox( ww, wh, wx, wy, app.x-ww, app.y, app.w+ww, app.h+wh, &nx, &ny )){
buff[4] = nx;
diff --git a/atari/browser_win.h b/atari/browser_win.h
index 4e6c43db9..b58ca3c6c 100755
--- a/atari/browser_win.h
+++ b/atari/browser_win.h
@@ -43,7 +43,7 @@ void window_snd_redraw(struct gui_window * gw, short x, short y, short w, short
/* Update Shade / Unshade state of the fwd/back buttons*/
void window_update_back_forward(struct gui_window * gw);
/* set root browser component: */
-void window_attach_browser( struct gui_window * gw, CMP_BROWSER b);
+void window_attach_browser( struct gui_window * gw, CMP_BROWSER b);
/* set focus element */
void window_set_focus( struct gui_window * gw, enum focus_element_type type, void * element );
@@ -55,7 +55,7 @@ bool window_url_widget_has_focus( struct gui_window * gw );
void window_set_url( struct gui_window * gw, const char * text);
void window_set_stauts( struct gui_window * gw , char * text );
void window_center(struct gui_window * gw);
-//void window_set_icon(struct gui_window * gw, void * data, bool is_rsc );
+void window_set_icon(struct gui_window * gw, struct bitmap * bmp );
/* -------------------------------------------------------------------------- */
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
new file mode 100644
index 000000000..f889963b2
--- /dev/null
+++ b/atari/ctxmenu.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright 2010 Ole Loots <ole@monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <limits.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <windom.h>
+
+#include "desktop/gui.h"
+#include "desktop/netsurf.h"
+#include "desktop/browser.h"
+#include "desktop/mouse.h"
+#include "desktop/textinput.h"
+#include "content/content.h"
+#include "content/hlcache.h"
+#include "content/urldb.h"
+#include "css/css.h"
+#include "render/box.h"
+#include "render/form.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+
+#include "atari/gui.h"
+#include "atari/browser.h"
+#include "atari/browser_win.h"
+#include "atari/misc.h"
+#include "atari/clipboard.h"
+#include "atari/res/netsurf.rsh"
+#include "atari/ctxmenu.h"
+
+
+#define CNT_INVALID 0
+#define CNT_URLINPUT 32
+#define CNT_BROWSER 64
+#define CNT_HREF 128
+#define CNT_SELECTION 256
+#define CNT_INTERACTIVE 512
+#define CNT_IMG 1024
+
+
+struct s_context_info {
+ unsigned long flags;
+ struct contextual_content ccdata;
+};
+
+struct s_context_info ctxinfo;
+
+static struct s_context_info * get_context_info( struct gui_window * gw, short mx, short my )
+{
+ int posx, posy;
+ struct box *box;
+ struct box *file_box = 0;
+ hlcache_handle *h;
+ int box_x, box_y;
+ LGRECT bwrect;
+ struct contextual_content ccdata;
+ struct browser_window * bw = gw->browser->bw;
+ h = bw->current_content;
+
+ ctxinfo.flags = 0;
+
+ browser_get_rect( gw, BR_CONTENT, &bwrect );
+ mx = mx - bwrect.g_x;
+ my = 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;
+ browser_window_get_contextual_content(
+ gw->browser->bw, mx, my,
+ (struct contextual_content*)&ctxinfo.ccdata
+ );
+ if( ctxinfo.ccdata.link_url ){
+ ctxinfo.flags |= CNT_HREF;
+ }
+ if( ctxinfo.ccdata.object && (content_get_type(ccdata.object) == CONTENT_IMAGE)) {
+ ctxinfo.flags |= CNT_IMG;
+ }
+
+
+ box = html_get_box_tree(h);
+ box_x = box->margin[LEFT];
+ box_y = box->margin[TOP];
+
+ while ((box = box_at_point(box, mx+gw->browser->scroll.current.x, my+gw->browser->scroll.current.y, &box_x, &box_y, &h)))
+ {
+ if (box->style && css_computed_visibility(box->style) == CSS_VISIBILITY_HIDDEN)
+ continue;
+ if (box->gadget)
+ {
+ switch (box->gadget->type)
+ {
+ case GADGET_TEXTBOX:
+ case GADGET_TEXTAREA:
+ case GADGET_PASSWORD:
+ // TODO: check if there is really an selection, but it
+ // doesn't hurt for now...:
+ ctxinfo.flags |= (CNT_INTERACTIVE | CNT_SELECTION);
+ break;
+
+ default: break;
+ }
+ }
+ }
+ return( &ctxinfo );
+}
+
+void context_popup( struct gui_window * gw, short x, short y )
+{
+ #define POP_FIRST_ITEM POP_CTX_CUT_SEL
+ #define POP_LAST_ITEM POP_CTX_VIEW_SOURCE
+ OBJECT * pop;
+ int choice;
+ struct s_context_info * ctx;
+
+ pop = get_tree( POP_CTX );
+ if( pop == NULL )
+ return;
+ ctx = get_context_info( gw, x, y );
+
+ /*
+ Disable all items by default:
+ */
+ for( choice = POP_FIRST_ITEM; choice<=POP_LAST_ITEM; choice++ ){
+ SET_BIT(pop[ choice ].ob_state, DISABLED, 1);
+ }
+
+ if( ctx->flags & CNT_INTERACTIVE ){
+ SET_BIT(pop[ POP_CTX_PASTE_SEL ].ob_state, DISABLED, 0);
+ }
+
+ if( (ctx->flags & CNT_BROWSER) ){
+ SET_BIT(pop[ POP_CTX_SELECT_ALL ].ob_state, DISABLED, 0);
+ SET_BIT(pop[ POP_CTX_COPY_SEL ].ob_state, DISABLED, 0);
+ SET_BIT(pop[ POP_CTX_VIEW_SOURCE ].ob_state, DISABLED, 0);
+ }
+
+ if( ctx->flags & CNT_HREF ){
+ SET_BIT(pop[ POP_CTX_SAVE_AS ].ob_state, DISABLED, 0);
+ SET_BIT(pop[ POP_CTX_COPY_LINK ].ob_state, DISABLED, 0);
+ SET_BIT(pop[ POP_CTX_OPEN_NEW ].ob_state, DISABLED, 0);
+ }
+
+ if( ctx->flags & CNT_IMG ){
+ SET_BIT(pop[ POP_CTX_SAVE_AS ].ob_state, DISABLED, 0);
+ SET_BIT(pop[ POP_CTX_COPY_URL ].ob_state, DISABLED, 0);
+ SET_BIT(pop[ POP_CTX_OPEN_NEW ].ob_state, DISABLED, 0);
+ }
+
+ choice = MenuPopUp(
+ pop, x, y,
+ -1, -1, -1,
+ P_WNDW + P_CHCK
+ );
+
+ switch( choice ){
+ case POP_CTX_COPY_SEL:
+ browser_window_key_press( gw->browser->bw, KEY_COPY_SELECTION );
+ break;
+
+ case POP_CTX_CUT_SEL:
+ browser_window_key_press( gw->browser->bw, KEY_CUT_SELECTION );
+ break;
+
+ case POP_CTX_PASTE_SEL:
+ gui_paste_from_clipboard(gw, x, y);
+ break;
+
+ case POP_CTX_SELECT_ALL:
+ browser_window_key_press( gw->browser->bw, KEY_SELECT_ALL );
+ break;
+
+ case POP_CTX_COPY_LINK:
+ if( (ctx->flags & CNT_HREF) && ctx->ccdata.link_url != NULL ){
+ scrap_txt_write(&app, (char*)ctx->ccdata.link_url);
+ }
+ break;
+
+ case POP_CTX_OPEN_NEW:
+ if( (ctx->flags & CNT_HREF) && ctx->ccdata.link_url){
+ browser_window_create(
+ ctx->ccdata.link_url,
+ gw->browser->bw,
+ content_get_url(gw->browser->bw->current_content),
+ true, false
+ );
+ }
+
+ break;
+
+ default: break;
+ }
+#undef POP_FIRST_ITEM
+#undef POP_LAST_ITEM
+}
diff --git a/atari/ctxmenu.h b/atari/ctxmenu.h
new file mode 100644
index 000000000..1c0b1312a
--- /dev/null
+++ b/atari/ctxmenu.h
@@ -0,0 +1,6 @@
+#ifndef CTXMENU_H_INCLUDED
+#define CTXMENU_H_INCLUDED
+
+void context_popup( struct gui_window * gw, short x, short y );
+
+#endif // CTXMENU_H_INCLUDED
diff --git a/atari/global_evnt.c b/atari/global_evnt.c
index 4fc355472..7350e232c 100755
--- a/atari/global_evnt.c
+++ b/atari/global_evnt.c
@@ -223,7 +223,9 @@ static void __CDECL menu_home(WINDOW *win, int item, int title, void *data)
static void __CDECL menu_lhistory(WINDOW *win, int item, int title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG(("%s", __FUNCTION__));
+ if( input_window == NULL )
+ return;
}
static void __CDECL menu_ghistory(WINDOW *win, int item, int title, void *data)
@@ -320,7 +322,7 @@ void __CDECL global_evnt_keybd( WINDOW * win, short buff[8], void * data)
return;
kstate = evnt.mkstate;
kcode = evnt.keybd;
- nkc= gem_to_norm( (short)kstate, (short)kcode );
+ nkc= gem_to_norm( (short)kstate, (short)kcode );
nks = (nkc & 0xFF00);
if( kstate & (K_LSHIFT|K_RSHIFT))
kstate |= K_LSHIFT|K_RSHIFT;
@@ -354,11 +356,11 @@ void __CDECL global_evnt_keybd( WINDOW * win, short buff[8], void * data)
} else {
/* the accel code hides in the keycode: */
if( menu_evnt_tbl[i].accel.keycode != 0) {
- if( menu_evnt_tbl[i].accel.keycode == (nkc & 0xFF) &&
- kstate == menu_evnt_tbl[i].accel.mod &&
+ if( menu_evnt_tbl[i].accel.keycode == (nkc & 0xFF) &&
+ kstate == menu_evnt_tbl[i].accel.mod &&
menu_evnt_tbl[i].menu_func != NULL) {
- menu_evnt_tbl[i].menu_func( NULL,
- menu_evnt_tbl[i].rid,
+ menu_evnt_tbl[i].menu_func( NULL,
+ menu_evnt_tbl[i].rid,
MAINMENU, buff
);
done = true;
@@ -372,7 +374,7 @@ void __CDECL global_evnt_keybd( WINDOW * win, short buff[8], void * data)
}
/*
- mode = 0 -> return string ptr
+ mode = 0 -> return string ptr
(build from accel definition in s_accelerator accel)
mode = 1 -> return ptr to (untranslated) NS accel string, if any
*/
@@ -572,10 +574,10 @@ void bind_global_events( void )
spare[1]=' ';
if( u != NULL && t != NULL ) {
LOG(("Menu Item %s: found NS accelerator, ascii: %c, scancode: %x, mod: %x",
- m,
- menu_evnt_tbl[i].accel.ascii,
- menu_evnt_tbl[i].accel.keycode,
- menu_evnt_tbl[i].accel.mod
+ m,
+ menu_evnt_tbl[i].accel.ascii,
+ menu_evnt_tbl[i].accel.keycode,
+ menu_evnt_tbl[i].accel.mod
));
/* Accelerator is defined in menu string: */
memcpy((char*)&spare[2], m, u-m-1);
@@ -583,10 +585,10 @@ void bind_global_events( void )
}
else if( t != NULL && u == NULL) {
LOG(("Menu Item %s: found RSC accelerator, ascii: %c, scancode: %x, mod: %x",
- m,
- menu_evnt_tbl[i].accel.ascii,
- menu_evnt_tbl[i].accel.keycode,
- menu_evnt_tbl[i].accel.mod
+ m,
+ menu_evnt_tbl[i].accel.ascii,
+ menu_evnt_tbl[i].accel.keycode,
+ menu_evnt_tbl[i].accel.mod
));
/* Accelerator is defined in struct: */
memcpy( (char*)&spare[2], m, strlen(m) );
diff --git a/atari/gui.c b/atari/gui.c
index da5953997..8b8c98e2b 100755
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -121,7 +121,7 @@ void gui_poll(bool active)
short mx, my, dummy;
short aestop;
- evnt.timer = schedule_run();
+ evnt.timer = schedule_run();
wind_get( 0, WF_TOP, &aestop, &winloc[1], &winloc[2], &winloc[3]);
if( winloc[1] != _AESapid ){
@@ -185,7 +185,7 @@ void gui_poll(bool active)
}
}
if( evnt.timer != 0 && !active ){
- /* this suits for stuff with lower priority */
+ /* this suits for stuff with lower priority */
hotlist_redraw();
}
}
@@ -198,7 +198,7 @@ gui_create_browser_window(struct browser_window *bw,
struct gui_window *gw=NULL;
struct gui_window * gwroot ;
short winloc[4];
- LOG(( "gw: %p, BW: %p, clone %p, tab: %d\n" , gw, bw, clone,
+ LOG(( "gw: %p, BW: %p, clone %p, tab: %d\n" , gw, bw, clone,
(int)new_tab
));
@@ -363,7 +363,7 @@ void gui_window_set_scroll(struct gui_window *w, int sx, int sy)
browser_scroll(w, WA_DNLINE, abs(sy), true );
}
}
- return;
+ return;
}
@@ -385,7 +385,7 @@ void gui_window_update_extent(struct gui_window *gw)
oldx = gw->browser->scroll.current.x;
oldy = gw->browser->scroll.current.y;
if( gw->browser->bw->current_content != NULL ) {
- browser_set_content_size( gw,
+ browser_set_content_size( gw,
content_get_width(gw->browser->bw->current_content),
content_get_height(gw->browser->bw->current_content)
);
@@ -395,7 +395,7 @@ void gui_window_update_extent(struct gui_window *gw)
void gui_clear_selection(struct gui_window *g)
{
-
+
}
@@ -540,21 +540,21 @@ void gui_window_place_caret(struct gui_window *w, int x, int y, int height)
if (w == NULL)
return;
CMP_BROWSER b = w->browser;
- if( w->browser->caret.current.g_w > 0 )
+ if( w->browser->caret.current.g_w > 0 )
gui_window_remove_caret( w );
-
+
w->browser->caret.requested.g_x = x;
w->browser->caret.requested.g_y = y;
w->browser->caret.requested.g_w = 2;
w->browser->caret.requested.g_h = height;
w->browser->caret.redraw = true;
- browser_schedule_redraw_rect(
- w,
- x - b->scroll.current.x,
- y - b->scroll.current.y,
- w->browser->caret.requested.g_w,
- w->browser->caret.requested.g_h
- );
+ browser_schedule_redraw_rect(
+ w,
+ x - b->scroll.current.x,
+ y - b->scroll.current.y,
+ w->browser->caret.requested.g_w,
+ w->browser->caret.requested.g_h
+ );
return;
}
@@ -580,8 +580,17 @@ gui_window_remove_caret(struct gui_window *w)
void
gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
-{
- TODO();
+{
+ /* Untestet, favicon support has been dropped, so this is dead code. */
+
+/*
+ struct bitmap *icon_bitmap;
+ icon_bitmap = (icon != NULL) ? content_get_bitmap(icon) : NULL;
+ if (icon_bitmap != NULL) {
+ window_set_icon( g, icon_bitmap );
+ }
+*/
+
}
void
@@ -702,7 +711,7 @@ bool gui_add_to_clipboard(const char *text_utf8, size_t length_utf8, bool space)
size_t newlen = 0;
char * text = NULL;
char * text2 = NULL;
- bool retval;
+ bool retval;
int length = 0;
if( length_utf8 > 0 && text_utf8 != NULL ) {
utf8_to_local_encoding(text_utf8,length_utf8,&text);
@@ -719,7 +728,7 @@ bool gui_add_to_clipboard(const char *text_utf8, size_t length_utf8, bool space)
text = malloc(length + 2);
if( text == NULL ) {
goto error;
- }
+ }
text2 = text;
text[length+1] = 0;
memset(text, ' ', length+1);
@@ -727,7 +736,7 @@ bool gui_add_to_clipboard(const char *text_utf8, size_t length_utf8, bool space)
length = strlen(text);
if( tmp_clipboard != NULL ) {
oldlen = strlen( tmp_clipboard );
- }
+ }
newlen = oldlen + length + 1;
if( tmp_clipboard == NULL){
tmp_clipboard = malloc(newlen);
@@ -753,7 +762,7 @@ success:
retval = true;
fin:
- if( text2 != NULL )
+ if( text2 != NULL )
free( text2 );
return(retval);
@@ -762,7 +771,7 @@ fin:
bool gui_commit_clipboard(void)
{
int r = scrap_txt_write(&app, tmp_clipboard);
- return( (r>0)?true:false );
+ return( (r>0)?true:false );
}
@@ -796,8 +805,8 @@ bool gui_copy_to_clipboard(struct selection *s)
if(selection_traverse(s, gui_selection_traverse_handler, NULL)){
ret = gui_commit_clipboard();
}
- }
- gui_empty_clipboard();
+ }
+ gui_empty_clipboard();
return ret;
}
@@ -839,7 +848,7 @@ void gui_cert_verify(const char *url, const struct ssl_cert_info *certs,
nserror (*cb)(bool proceed, void *pw), void *cbpw)
{
LOG((""));
-
+
bool bres;
/*bres = verify_ssl_form_do(url, certs, num);
if( bres )
@@ -876,7 +885,7 @@ void gui_quit(void)
/* send WM_DESTROY to windows purely managed by windom: */
urldb_save_cookies(option_cookie_file);
- urldb_save(option_url_file);
+ urldb_save(option_url_file);
RsrcXtype( 0, rsc_trindex, rsc_ntree);
unbind_global_events();
@@ -957,7 +966,7 @@ char* gui_get_resource_url(const char *filename)
char buf[PATH_MAX];
int len;
char * ret;
- atari_find_resource((char*)&buf, filename, filename);
+ atari_find_resource((char*)&buf, filename, filename);
/* TODO: handle failure? */
len = strlen( (char*)&buf ) + 1;
return( path_to_url((char*)&buf) );
@@ -1016,12 +1025,12 @@ static void gui_init(int argc, char** argv)
atari_find_resource(buf, "quirks.css", "./res/quirks.css");
quirks_stylesheet_url = path_to_url(buf);
- if( strlen(option_url_file) ){
+ if( strlen(option_url_file) ){
urldb_load(option_url_file);
}
if( strlen(option_cookie_file) ){
urldb_load_cookies(option_cookie_file);
- LOG(("Loading cookies from: %s", option_cookie_file ));
+ LOG(("Loading cookies from: %s", option_cookie_file ));
}
if (process_cmdline(argc,argv) != true)
@@ -1085,7 +1094,7 @@ int main(int argc, char** argv)
LOG(("ApplExit"));
ApplExit();
-#ifdef WITH_DBG_LOGFILE
+#ifdef WITH_DBG_LOGFILE
fclose(stdout);
fclose(stderr);
#endif
diff --git a/atari/gui.h b/atari/gui.h
index cdf51e1cf..eb73598ba 100755
--- a/atari/gui.h
+++ b/atari/gui.h
@@ -82,10 +82,13 @@ struct s_focus_info
};
/* defines for data attached to components: */
-#define CDT_OBJECT 0x004f424aUL
-#define CDT_OWNER 0x03UL
-#define CDT_ICON 0x04UL
-#define CDT_ICON_TYPE 0x05UL
+#define CDT_OBJECT 0x004f424aUL
+#define CDT_OWNER 0x03UL
+#define CDT_ICON 0x04UL
+#define CDT_ICON_TYPE 0x05UL
+#define CDT_ICON_TYPE_NONE 0x00UL
+#define CDT_ICON_TYPE_OBJECT 0x01UL
+#define CDT_ICON_TYPE_BITMAP 0x02UL
struct gui_window;
@@ -125,6 +128,8 @@ struct s_gui_win_root
struct gui_window {
struct s_gui_win_root * root;
CMP_BROWSER browser;
+ /* icon to be drawn when iconified, or NULL for default resource. */
+ struct bitmap * icon;
struct gui_window *next, *prev;
};
diff --git a/atari/search.c b/atari/search.c
index 2f36f5cf6..2717652a6 100644
--- a/atari/search.c
+++ b/atari/search.c
@@ -60,7 +60,7 @@ void nsatari_search_set_hourglass(bool active, void *p)
{
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
LOG((""));
- if( active && current != NULL )
+ if( active && current != NULL )
gui_window_set_pointer(s->bw->window, GUI_POINTER_PROGRESS);
else
gui_window_set_pointer(s->bw->window, GUI_POINTER_DEFAULT);
@@ -140,8 +140,8 @@ static int apply_form( WINDOW * win, struct s_search_form_state * s )
}
return ( 0 );
-error:
- s->flags = SEARCH_FLAG_FORWARDS;
+error:
+ s->flags = SEARCH_FLAG_FORWARDS;
/* s->forward = true; */
strncpy((char*)&s->text[0], "", 31 );
return( 1 );
@@ -159,7 +159,7 @@ static bool form_changed( WINDOW * w )
assert( s != NULL && obj != NULL );
uint32_t flags_old = s->state.flags;
apply_form(w, &cur);
-
+
/* adjust the forward flag, it should not init an new search */
flags_old |= SEARCH_FLAG_FORWARDS;
cur.flags |= SEARCH_FLAG_FORWARDS;
@@ -173,12 +173,12 @@ static bool form_changed( WINDOW * w )
return ( true );
}
}
-
+
return( false );
}
-static void __CDECL evnt_bt_srch_click( WINDOW *win, int index, int unused, void *unused2)
+static void __CDECL evnt_bt_srch_click( WINDOW *win, int index, int unused, void *unused2)
{
bool fwd;
@@ -186,7 +186,7 @@ static void __CDECL evnt_bt_srch_click( WINDOW *win, int index, int unused, void
OBJECT * obj = ObjcTree(OC_FORM, s->formwind );
search_flags_t flags = 0;
- ObjcChange( OC_FORM, win, index, ~SELECTED , TRUE);
+ ObjcChange(OC_FORM, win, index, ~SELECTED , TRUE);
if( form_changed(win) ){
browser_window_search_destroy_context(s->bw);
apply_form( win, &s->state );
@@ -194,32 +194,32 @@ static void __CDECL evnt_bt_srch_click( WINDOW *win, int index, int unused, void
/* get search direction manually: */
if( (obj[SEARCH_CB_FWD].ob_state & SELECTED) != 0 )
s->state.flags |= SEARCH_FLAG_FORWARDS;
- else
+ else
s->state.flags &= (~SEARCH_FLAG_FORWARDS);
}
if( browser_window_search_verify_new(s->bw, &nsatari_search_callbacks, s) ){
- browser_window_search_step(s->bw, s->state.flags, ObjcString( obj, SEARCH_TB_SRCH, NULL ) );
+ browser_window_search_step(s->bw, s->state.flags, ObjcString( obj, SEARCH_TB_SRCH, NULL ) );
}
}
-static void __CDECL evnt_cb_click( WINDOW *win, int index, int unused, void *unused2)
+static void __CDECL evnt_cb_click( WINDOW *win, int index, int unused, void *unused2)
{
short newstate;
OBJECT * obj = ObjcTree(OC_FORM, get_search_session(win)->formwind );
}
-static void __CDECL evnt_close( WINDOW *win, short buff[8])
+static void __CDECL evnt_close( WINDOW *win, short buff[8])
{
/* Free Search Contexts */
/* todo: destroy search context, if any? */
SEARCH_FORM_SESSION s = get_search_session(win);
- if( s != NULL ){
+ if( s != NULL ){
destroy_search_session( s );
}
current = NULL;
- ApplWrite( _AESapid, WM_DESTROY, win->handle, 0,0,0,0 );
+ ApplWrite( _AESapid, WM_DESTROY, win->handle, 0,0,0,0 );
}
void search_destroy( struct gui_window * gw )
@@ -242,7 +242,7 @@ SEARCH_FORM_SESSION open_browser_search( struct gui_window * gw )
OBJECT * tree = get_tree(SEARCH);
if( tree == NULL ){
return( NULL );
- }
+ }
sfs = calloc(1, sizeof(struct s_search_form_session));
if( sfs == NULL )
return( NULL );
@@ -254,7 +254,7 @@ SEARCH_FORM_SESSION open_browser_search( struct gui_window * gw )
current = sfs;
sfs->bw = gw->browser->bw;
sfs->formwind = mt_FormCreate( &app, tree, WAT_FORM,
- NULL, title,
+ NULL, title,
NULL, true, false);
ObjcAttachFormFunc( sfs->formwind, SEARCH_BT_SEARCH, evnt_bt_srch_click, NULL);
@@ -266,5 +266,5 @@ SEARCH_FORM_SESSION open_browser_search( struct gui_window * gw )
strncpy( ObjcString( tree, SEARCH_TB_SRCH, NULL ), "", SEARCH_MAX_SLEN);
return( current );
-
+
}