summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2009-09-28 22:17:09 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2009-09-28 22:17:09 +0000
commitcf1d7964919ec43083fd149b33904dca84d0737c (patch)
treee5490c483e306e8d3c5c811ab901b8739a587243 /amiga
parentabf51104fec5c63ac0da35e6d357bdef4104e180 (diff)
downloadnetsurf-cf1d7964919ec43083fd149b33904dca84d0737c.tar.gz
netsurf-cf1d7964919ec43083fd149b33904dca84d0737c.tar.bz2
Added application.library messages New Doc and Open Doc.
Added option_startup_no_window to allow NetSurf to be opened without an initial browser window (unless a URL is specified on the command line or by extended selection) Provision for option_close_no_quit for NetSurf to stay in memory when all browser windows are closed (not implemented yet) svn path=/trunk/netsurf/; revision=9600
Diffstat (limited to 'amiga')
-rwxr-xr-xamiga/arexx.c12
-rwxr-xr-xamiga/gui.c114
-rw-r--r--amiga/options.h8
3 files changed, 98 insertions, 36 deletions
diff --git a/amiga/arexx.c b/amiga/arexx.c
index f96a1c97f..308d1190c 100755
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -134,13 +134,23 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else
{
- browser_window_go(curbw,(char *)cmd->ac_ArgList[0],NULL,true);
+ if(curbw)
+ {
+ browser_window_go(curbw,(char *)cmd->ac_ArgList[0],NULL,true);
+ }
+ else
+ {
+ browser_window_create((char *)cmd->ac_ArgList[0],NULL,NULL,true,false);
+ }
}
}
STATIC VOID rx_save(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unused)))
{
BPTR fh = 0;
+
+ if(!curbw) return;
+
ami_update_pointer(curbw->window->shared->win,GUI_POINTER_WAIT);
if(fh = FOpen(cmd->ac_ArgList[0],MODE_NEWFILE,0))
{
diff --git a/amiga/gui.c b/amiga/gui.c
index fa7043a4e..61a4e3f08 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -596,6 +596,12 @@ void ami_openscreen(void)
dri = GetScreenDrawInfo(scrn);
}
+void ami_openscreenfirst(void)
+{
+ ami_openscreen();
+ ami_init_layers(&browserglob, 0, 0);
+}
+
void gui_init2(int argc, char** argv)
{
struct browser_window *bw = NULL;
@@ -614,11 +620,8 @@ void gui_init2(int argc, char** argv)
ami_fetch_file_register();
ami_openurl_open();
- if(notalreadyrunning)
- {
- ami_openscreen();
- ami_init_layers(&browserglob, 0, 0);
- }
+ if(notalreadyrunning && (option_startup_no_window == false))
+ ami_openscreenfirst();
if(argc) // argc==0 is started from wb
{
@@ -696,22 +699,36 @@ void gui_init2(int argc, char** argv)
if(IApplication)
{
- ami_appid = RegisterApplication(messages_get("NetSurf"),
- REGAPP_URLIdentifier, "netsurf-browser.org",
- REGAPP_WBStartup, (struct WBStartup *)argv,
-// REGAPP_NoIcon, TRUE,
-// REGAPP_AppIconInfo,(ULONG)&aii,
- REGAPP_HasPrefsWindow,TRUE,
- REGAPP_UniqueApplication,TRUE,
- TAG_DONE);
+ if(argc == 0)
+ {
+ ami_appid = RegisterApplication(messages_get("NetSurf"),
+ REGAPP_URLIdentifier, "netsurf-browser.org",
+ REGAPP_WBStartup, (struct WBStartup *)argv,
+// REGAPP_NoIcon, TRUE,
+ REGAPP_HasPrefsWindow, TRUE,
+ REGAPP_CanCreateNewDocs, TRUE,
+ REGAPP_UniqueApplication, TRUE,
+ TAG_DONE);
+ }
+ else
+ {
+/* TODO: Specify icon when run from Shell */
+ ami_appid = RegisterApplication(messages_get("NetSurf"),
+ REGAPP_URLIdentifier, "netsurf-browser.org",
+ REGAPP_FileName, argv[0],
+ REGAPP_NoIcon, TRUE,
+ REGAPP_HasPrefsWindow, TRUE,
+ REGAPP_CanCreateNewDocs, TRUE,
+ REGAPP_UniqueApplication, TRUE,
+ TAG_DONE);
+ }
GetApplicationAttrs(ami_appid, APPATTR_Port, (ULONG)&applibport, TAG_DONE);
applibsig = (1L << applibport->mp_SigBit);
}
- if(!bw) bw = browser_window_create(option_homepage_url, 0, 0, true,false);
-
- if(locked_screen) UnlockPubScreen(NULL,scrn);
+ if(!bw && (option_startup_no_window == false))
+ bw = browser_window_create(option_homepage_url, 0, 0, true,false);
}
void ami_update_quals(struct gui_window_2 *gwin)
@@ -1436,15 +1453,38 @@ void ami_handle_appmsg(void)
void ami_handle_applib(void)
{
struct ApplicationMsg *applibmsg;
+ struct browser_window *bw;
while((applibmsg=(struct ApplicationMsg *)GetMsg(applibport)))
{
switch (applibmsg->type)
{
+ case APPLIBMT_NewBlankDoc:
+ bw = browser_window_create(option_homepage_url, 0, 0, true, false);
+ break;
+
+ case APPLIBMT_OpenDoc:
+ {
+ struct ApplicationOpenPrintDocMsg *applibopdmsg = applibmsg;
+ char *tempurl;
+
+ tempurl = path_to_url(applibopdmsg->fileName);
+ bw = browser_window_create(tempurl, 0, 0, true, false);
+ free(tempurl);
+ }
+ break;
+
case APPLIBMT_ToFront:
- ScreenToFront(scrn);
- WindowToFront(curbw->window->shared->win);
- ActivateWindow(curbw->window->shared->win);
+ if(curbw)
+ {
+ ScreenToFront(scrn);
+ WindowToFront(curbw->window->shared->win);
+ ActivateWindow(curbw->window->shared->win);
+ }
+ else
+ {
+ bw = browser_window_create(option_homepage_url, 0, 0, true, false);
+ }
break;
case APPLIBMT_OpenPrefs:
@@ -1583,26 +1623,29 @@ void ami_quit_netsurf(void)
struct nsObject *nnode;
struct gui_window_2 *gwin;
- node = (struct nsObject *)GetHead((struct List *)window_list);
-
- do
+ if(!IsMinListEmpty(window_list))
{
- nnode=(struct nsObject *)GetSucc((struct Node *)node);
- gwin = node->objstruct;
+ node = (struct nsObject *)GetHead((struct List *)window_list);
- switch(node->Type)
+ do
{
- case AMINS_TVWINDOW:
- ami_tree_close((struct treeview_window *)gwin);
- break;
+ nnode=(struct nsObject *)GetSucc((struct Node *)node);
+ gwin = node->objstruct;
- case AMINS_WINDOW:
- ami_close_all_tabs(gwin);
- break;
- }
+ switch(node->Type)
+ {
+ case AMINS_TVWINDOW:
+ ami_tree_close((struct treeview_window *)gwin);
+ break;
- node = nnode;
- } while(node = nnode);
+ case AMINS_WINDOW:
+ ami_close_all_tabs(gwin);
+ break;
+ }
+ node = nnode;
+
+ } while(node = nnode);
+ }
if(IsMinListEmpty(window_list))
{
@@ -1781,6 +1824,8 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
if((bw->browser_window_type == BROWSER_WINDOW_IFRAME) && option_no_iframes) return NULL;
+ if(!scrn) ami_openscreenfirst();
+
if(option_kiosk_mode) new_tab = false;
bw->scale = 1.0;
@@ -2283,6 +2328,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
glob = &browserglob;
+ if(locked_screen) UnlockPubScreen(NULL,scrn);
return gwin;
}
diff --git a/amiga/options.h b/amiga/options.h
index 7e3c412b7..333c8a57d 100644
--- a/amiga/options.h
+++ b/amiga/options.h
@@ -42,6 +42,8 @@ extern bool option_faster_scroll;
extern bool option_scale_quality;
extern bool option_ask_overwrite;
extern int option_printer_unit;
+extern bool option_startup_no_window;
+extern bool option_close_no_quit;
#define EXTRA_OPTION_DEFINE \
bool option_verbose_log = false; \
@@ -66,6 +68,8 @@ bool option_faster_scroll = true; \
bool option_scale_quality = false; \
bool option_ask_overwrite = false; \
int option_printer_unit = 0; \
+bool option_startup_no_window = false; \
+bool option_close_no_quit = false; \
#define EXTRA_OPTION_TABLE \
{ "verbose_log", OPTION_BOOL, &option_verbose_log}, \
@@ -89,6 +93,8 @@ int option_printer_unit = 0; \
{ "faster_scroll", OPTION_BOOL, &option_faster_scroll}, \
{ "scale_quality", OPTION_BOOL, &option_scale_quality}, \
{ "ask_overwrite", OPTION_BOOL, &option_ask_overwrite}, \
-{ "printer_unit", OPTION_INTEGER, &option_printer_unit},
+{ "printer_unit", OPTION_INTEGER, &option_printer_unit}, \
+{ "startup_no_window", OPTION_BOOL, &option_startup_no_window}, \
+{ "close_no_quit", OPTION_BOOL, &option_close_no_quit},
#endif