summaryrefslogtreecommitdiff
path: root/amiga/gui.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2008-10-25 16:37:08 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2008-10-25 16:37:08 +0000
commit2f4beda48c9780739ecdab639b47299108265d66 (patch)
tree4a4a6af1a91138db85a74099064953d21d5419ba /amiga/gui.c
parent5624bf590ded22d8b2d85753fd189b7e6c6443ea (diff)
downloadnetsurf-2f4beda48c9780739ecdab639b47299108265d66.tar.gz
netsurf-2f4beda48c9780739ecdab639b47299108265d66.tar.bz2
Complete (but quite minimal at the moment) context menu implementation for AmigaOS:
Links, objects and upload file boxes have their own menu item or submenu. Context menus can be enable/disabled and be made "sticky" with the following options: context_menu sticky_context_menu Seperated clipboard related code out to clipboard.c to make it easier to maintain and add the ability to copy URLs to the clipboard. Copying images to the clipboard will come later. svn path=/trunk/netsurf/; revision=5629
Diffstat (limited to 'amiga/gui.c')
-rwxr-xr-xamiga/gui.c170
1 files changed, 11 insertions, 159 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 6295dc154..17382d9ef 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -39,8 +39,6 @@
#include <libraries/gadtools.h>
#include <proto/layers.h>
#include <proto/asl.h>
-#include <proto/iffparse.h>
-#include <datatypes/textclass.h>
#include <datatypes/pictureclass.h>
#include "desktop/selection.h"
#include "utils/utf8.h"
@@ -53,12 +51,10 @@
#include <intuition/pointerclass.h>
#include <math.h>
#include <workbench/workbench.h>
-#include "amiga/iff_cset.h"
#include <proto/datatypes.h>
#include <proto/icon.h>
#include <workbench/icon.h>
#include "amiga/tree.h"
-#include <parserutils/charset/mibenum.h>
#include "utils/utils.h"
#include "amiga/login.h"
#include "utils/url.h"
@@ -68,6 +64,7 @@
#include "amiga/history.h"
#include "amiga/context_menu.h"
#include "amiga/cookies.h"
+#include "amiga/clipboard.h"
#ifdef WITH_HUBBUB
#include <hubbub/hubbub.h>
@@ -112,7 +109,6 @@ ULONG throbber_width,throbber_height,throbber_frames;
BOOL rmbtrapped;
static struct RastPort dummyrp;
-struct IFFHandle *iffh = NULL;
#define AMI_LASTPOINTER GUI_POINTER_PROGRESS+1
Object *mouseptrobj[AMI_LASTPOINTER+1];
@@ -193,13 +189,7 @@ void gui_init(int argc, char** argv)
ami_arexx_init();
- if(iffh = AllocIFF())
- {
- if(iffh->iff_Stream = OpenClipboard(0))
- {
- InitIFFasClip(iffh);
- }
- }
+ ami_clipboard_init();
win_destroyed = false;
@@ -323,6 +313,7 @@ void gui_init(int argc, char** argv)
/* end Amiupdate */
ami_init_menulabs();
+ if(option_context_menu) ami_context_menu_init();
schedule_list = NewObjList();
window_list = NewObjList();
@@ -571,7 +562,11 @@ void ami_handle_msg(void)
break;
case MENUDOWN:
- ami_context_menu_show(gwin,x,y);
+ if(!option_sticky_context_menu) ami_context_menu_show(gwin,x,y);
+ break;
+
+ case MENUUP:
+ if(option_sticky_context_menu) ami_context_menu_show(gwin,x,y);
break;
}
}
@@ -1053,6 +1048,8 @@ void gui_quit(void)
if(!option_use_wb) CloseScreen(scrn);
p96FreeBitMap(dummyrp.BitMap);
FreeVec(nsscreentitle);
+
+ if(option_context_menu) ami_context_menu_free();
ami_free_menulabs();
for(i=0;i<=AMI_LASTPOINTER;i++)
@@ -1065,8 +1062,7 @@ void gui_quit(void)
}
}
- if(iffh->iff_Stream) CloseClipboard((struct ClipboardHandle *)iffh->iff_Stream);
- if(iffh) FreeIFF(iffh);
+ ami_clipboard_free();
ami_arexx_cleanup();
FreeSysObject(ASOT_PORT,appport);
@@ -2425,150 +2421,6 @@ void gui_drag_save_object(gui_save_type type, struct content *c,
{
}
-void gui_drag_save_selection(struct selection *s, struct gui_window *g)
-{
-}
-
-void gui_start_selection(struct gui_window *g)
-{
-}
-
-void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
-{
- /* This and the other clipboard code is heavily based on the RKRM examples */
- struct ContextNode *cn;
- ULONG rlen=0,error;
- struct CSet cset;
- char *clip;
- STRPTR readbuf = AllocVec(1024,MEMF_CLEAR);
-
- cset.CodeSet = 0;
-
- if(OpenIFF(iffh,IFFF_READ)) return;
- if(StopChunk(iffh,ID_FTXT,ID_CHRS)) return;
- if(StopChunk(iffh,ID_FTXT,ID_CSET)) return;
-
- while(1)
- {
- error = ParseIFF(iffh,IFFPARSE_SCAN);
- if(error == IFFERR_EOC) continue;
- else if(error) break;
-
- cn = CurrentChunk(iffh);
-
- if((cn)&&(cn->cn_Type == ID_FTXT)&&(cn->cn_ID == ID_CSET))
- {
- rlen = ReadChunkBytes(iffh,&cset,24);
- }
-
- if((cn)&&(cn->cn_Type == ID_FTXT)&&(cn->cn_ID == ID_CHRS))
- {
- while((rlen = ReadChunkBytes(iffh,readbuf,1024)) > 0)
- {
- if(cset.CodeSet == 0)
- {
- utf8_from_local_encoding(readbuf,rlen,&clip);
- }
- else
- {
- utf8_from_enc(readbuf,parserutils_charset_mibenum_to_name(cset.CodeSet),rlen,&clip);
- }
-
- browser_window_paste_text(g->shared->bw,clip,rlen,true);
- }
- if(rlen < 0) error = rlen;
- }
- }
- CloseIFF(iffh);
-}
-
-bool gui_empty_clipboard(void)
-{
-}
-
-bool gui_add_to_clipboard(const char *text, size_t length, bool space)
-{
- char *buffer;
- if(option_utf8_clipboard)
- {
- WriteChunkBytes(iffh,text,length);
- }
- else
- {
- utf8_to_local_encoding(text,length,&buffer);
- if(buffer) WriteChunkBytes(iffh,buffer,strlen(buffer));
- ami_utf8_free(buffer);
- }
- return true;
-}
-
-bool gui_commit_clipboard(void)
-{
- if(iffh) CloseIFF(iffh);
-
- return true;
-}
-
-bool ami_clipboard_copy(const char *text, size_t length, struct box *box,
- void *handle, const char *whitespace_text,size_t whitespace_length)
-{
- if(!(PushChunk(iffh,0,ID_CHRS,IFFSIZE_UNKNOWN)))
- {
- if (whitespace_text)
- {
- if(!gui_add_to_clipboard(whitespace_text,whitespace_length, false)) return false;
- }
-
- if(text)
- {
- if (!gui_add_to_clipboard(text, length, box->space)) return false;
- }
-
- PopChunk(iffh);
- }
- else
- {
- PopChunk(iffh);
- return false;
- }
-
- return true;
-}
-
-bool gui_copy_to_clipboard(struct selection *s)
-{
- struct CSet cset = {0};
-
- if(!(OpenIFF(iffh,IFFF_WRITE)))
- {
- if(!(PushChunk(iffh,ID_FTXT,ID_FORM,IFFSIZE_UNKNOWN)))
- {
- if(option_utf8_clipboard)
- {
- if(!(PushChunk(iffh,0,ID_CSET,24)))
- {
- cset.CodeSet = 106; // UTF-8
- WriteChunkBytes(iffh,&cset,24);
- PopChunk(iffh);
- }
- }
-
- if (s->defined && selection_traverse(s, ami_clipboard_copy, NULL))
- {
- gui_commit_clipboard();
- return true;
- }
- }
- else
- {
- PopChunk(iffh);
- }
- CloseIFF(iffh);
- }
-
- return false;
-}
-
void gui_create_form_select_menu(struct browser_window *bw,
struct form_control *control)
{