From 049d5097b8d625fc19f86cb9fb836de9a164b56b Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 16 Aug 2012 19:36:25 +0100 Subject: Don't need to include content.h --- desktop/gui.h | 1 - 1 file changed, 1 deletion(-) (limited to 'desktop') diff --git a/desktop/gui.h b/desktop/gui.h index 2fc2b9130..eccf0b4c6 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -67,7 +67,6 @@ typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET, #include #include "utils/config.h" -#include "content/content.h" #include "content/hlcache.h" #include "desktop/download.h" #include "desktop/search.h" -- cgit v1.2.3 From 1919c8e07168859cc6362c5283d47d0ced3a9bc2 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 16 Aug 2012 20:20:49 +0100 Subject: Add message for content wanting wanting drag save to start. --- content/content.h | 13 ++++++++++++- desktop/browser.c | 30 ++++++++++++++++++++++++++++++ render/html.c | 5 +++++ 3 files changed, 47 insertions(+), 1 deletion(-) (limited to 'desktop') diff --git a/content/content.h b/content/content.h index f1ff2a2c9..5ff40d00c 100644 --- a/content/content.h +++ b/content/content.h @@ -74,7 +74,8 @@ typedef enum { CONTENT_MSG_DOWNLOAD, /**< download, not for display */ CONTENT_MSG_LINK, /**< RFC5988 link */ CONTENT_MSG_GETCTX, /**< Javascript context */ - CONTENT_MSG_SCROLL /**< Request to scroll content */ + CONTENT_MSG_SCROLL, /**< Request to scroll content */ + CONTENT_MSG_DRAGSAVE /**< Allow drag saving of content */ } content_msg; /** RFC5988 metadata link */ @@ -128,6 +129,16 @@ union content_msg_data { int x0, y0; int x1, y1; } scroll; + /** CONTENT_MSG_DRAGSAVE - Drag save a content */ + struct { + enum { + CONTENT_SAVE_ORIG, + CONTENT_SAVE_NATIVE, + CONTENT_SAVE_COMPLETE, + CONTENT_SAVE_SOURCE + } type; + struct hlcache_handle *content; + } dragsave; }; /** parameters to content redraw */ diff --git a/desktop/browser.c b/desktop/browser.c index 136557a75..95edf1d63 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1440,6 +1440,36 @@ nserror browser_window_callback(hlcache_handle *c, break; + case CONTENT_MSG_DRAGSAVE: + { + /* Content wants drag save of a content */ + struct browser_window *root = browser_window_get_root(bw); + + switch(event->data.dragsave.type) { + case CONTENT_SAVE_ORIG: + gui_drag_save_object(GUI_SAVE_OBJECT_ORIG, + event->data.dragsave.content, + root->window); + break; + case CONTENT_SAVE_NATIVE: + gui_drag_save_object(GUI_SAVE_OBJECT_NATIVE, + event->data.dragsave.content, + root->window); + break; + case CONTENT_SAVE_COMPLETE: + gui_drag_save_object(GUI_SAVE_COMPLETE, + event->data.dragsave.content, + root->window); + break; + case CONTENT_SAVE_SOURCE: + gui_drag_save_object(GUI_SAVE_SOURCE, + event->data.dragsave.content, + root->window); + break; + } + } + break; + default: assert(0); } diff --git a/render/html.c b/render/html.c index 22fa80fbd..62b3d1d4e 100644 --- a/render/html.c +++ b/render/html.c @@ -1242,6 +1242,11 @@ html_object_callback(hlcache_handle *object, false); break; + case CONTENT_MSG_DRAGSAVE: + /* Pass it on */ + content_broadcast(&c->base, CONTENT_MSG_DRAGSAVE, event->data); + break; + default: assert(0); } -- cgit v1.2.3 From cb9781e057c4da81f014de9a5a560dd80e5543d1 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 16 Aug 2012 21:35:42 +0100 Subject: Move bw time recording to bw layer. --- desktop/browser.c | 3 +++ render/html_interaction.c | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.c b/desktop/browser.c index 95edf1d63..af2c2ff4f 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1003,6 +1003,9 @@ void browser_window_go_post(struct browser_window *bw, const char *url, warn_user("NoMemory", 0); } + + /* Record time */ + bw->last_action = wallclock(); } diff --git a/render/html_interaction.c b/render/html_interaction.c index e013b54a8..6be3e5e0d 100644 --- a/render/html_interaction.c +++ b/render/html_interaction.c @@ -696,10 +696,6 @@ void html_mouse_action(struct content *c, struct browser_window *bw, } } - - if (action == ACTION_SUBMIT || action == ACTION_GO) - bw->last_action = wallclock(); - if (status != NULL) { msg_data.explicit_status_text = status; content_broadcast(c, CONTENT_MSG_STATUS, msg_data); -- cgit v1.2.3 From 35fd2ad7f2f2a62624f1445e352c0aaf6ac0b0ac Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 16 Aug 2012 22:21:08 +0100 Subject: Don't use GUI_POINTERs in content handlers. --- desktop/browser.c | 26 ++++++++++++------- desktop/browser.h | 25 +++++++++++++++++- desktop/frames.c | 22 ++++++++-------- desktop/frames.h | 3 +-- render/html_interaction.c | 64 +++++++++++++++++++++++------------------------ render/textplain.c | 4 +-- 6 files changed, 87 insertions(+), 57 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.c b/desktop/browser.c index af2c2ff4f..779f7082f 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1920,14 +1920,22 @@ void browser_window_set_status(struct browser_window *bw, const char *text) */ void browser_window_set_pointer(struct browser_window *bw, - gui_pointer_shape shape) + browser_pointer_shape shape) { struct browser_window *root = browser_window_get_root(bw); + gui_pointer_shape gui_shape; assert(root); assert(root->window); - gui_window_set_pointer(root->window, shape); + if (shape == BROWSER_POINTER_AUTO) { + gui_shape = GUI_POINTER_DEFAULT; + + } else { + gui_shape = (gui_pointer_shape)shape; + } + + gui_window_set_pointer(root->window, gui_shape); } @@ -2400,7 +2408,7 @@ void browser_window_mouse_track(struct browser_window *bw, { hlcache_handle *c = bw->current_content; const char *status = NULL; - gui_pointer_shape pointer = GUI_POINTER_DEFAULT; + browser_pointer_shape pointer = BROWSER_POINTER_DEFAULT; if (bw->window != NULL && bw->drag_window && bw != bw->drag_window) { /* This is the root browser window and there's an active drag @@ -2481,7 +2489,7 @@ void browser_window_mouse_track(struct browser_window *bw, /* Start a scrollbar drag, or continue existing drag */ status = scrollbar_mouse_action(bw->scroll_x, mouse, scr_x, scr_y); - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; if (status != NULL) browser_window_set_status(bw, status); @@ -2506,7 +2514,7 @@ void browser_window_mouse_track(struct browser_window *bw, /* Start a scrollbar drag, or continue existing drag */ status = scrollbar_mouse_action(bw->scroll_y, mouse, scr_x, scr_y); - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; if (status != NULL) browser_window_set_status(bw, status); @@ -2552,7 +2560,7 @@ void browser_window_mouse_click(struct browser_window *bw, { hlcache_handle *c = bw->current_content; const char *status = NULL; - gui_pointer_shape pointer = GUI_POINTER_DEFAULT; + browser_pointer_shape pointer = BROWSER_POINTER_DEFAULT; if (bw->children) { /* Browser window has children (frames) */ @@ -2600,7 +2608,7 @@ void browser_window_mouse_click(struct browser_window *bw, scr_y > 0 && scr_y < SCROLLBAR_WIDTH) { status = scrollbar_mouse_action(bw->scroll_x, mouse, scr_x, scr_y); - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; if (status != NULL) browser_window_set_status(bw, status); @@ -2621,7 +2629,7 @@ void browser_window_mouse_click(struct browser_window *bw, scr_x > 0 && scr_x < SCROLLBAR_WIDTH) { status = scrollbar_mouse_action(bw->scroll_y, mouse, scr_x, scr_y); - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; if (status != NULL) browser_window_set_status(bw, status); @@ -2648,7 +2656,7 @@ void browser_window_mouse_click(struct browser_window *bw, else if (mouse & (BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_DRAG_2)) { browser_window_page_drag_start(bw, x, y); - browser_window_set_pointer(bw, GUI_POINTER_MOVE); + browser_window_set_pointer(bw, BROWSER_POINTER_MOVE); } break; } diff --git a/desktop/browser.h b/desktop/browser.h index c8af7889c..be5628880 100644 --- a/desktop/browser.h +++ b/desktop/browser.h @@ -68,6 +68,29 @@ typedef enum { DRAGGING_OTHER } browser_drag_type; +typedef enum { + BROWSER_POINTER_DEFAULT = GUI_POINTER_DEFAULT, + BROWSER_POINTER_POINT = GUI_POINTER_POINT, + BROWSER_POINTER_CARET = GUI_POINTER_CARET, + BROWSER_POINTER_MENU = GUI_POINTER_MENU, + BROWSER_POINTER_UP = GUI_POINTER_UP, + BROWSER_POINTER_DOWN = GUI_POINTER_DOWN, + BROWSER_POINTER_LEFT = GUI_POINTER_LEFT, + BROWSER_POINTER_RIGHT = GUI_POINTER_RIGHT, + BROWSER_POINTER_RU = GUI_POINTER_RU, + BROWSER_POINTER_LD = GUI_POINTER_LD, + BROWSER_POINTER_LU = GUI_POINTER_LU, + BROWSER_POINTER_RD = GUI_POINTER_RD, + BROWSER_POINTER_CROSS = GUI_POINTER_CROSS, + BROWSER_POINTER_MOVE = GUI_POINTER_MOVE, + BROWSER_POINTER_WAIT = GUI_POINTER_WAIT, + BROWSER_POINTER_HELP = GUI_POINTER_HELP, + BROWSER_POINTER_NO_DROP = GUI_POINTER_NO_DROP, + BROWSER_POINTER_NOT_ALLOWED = GUI_POINTER_NOT_ALLOWED, + BROWSER_POINTER_PROGRESS = GUI_POINTER_PROGRESS, + BROWSER_POINTER_AUTO +} browser_pointer_shape; + /** Browser window data. */ struct browser_window { /** Page currently displayed, or 0. Must have status READY or DONE. */ @@ -301,7 +324,7 @@ void browser_window_redraw_rect(struct browser_window *bw, int x, int y, void browser_window_set_status(struct browser_window *bw, const char *text); void browser_window_set_pointer(struct browser_window *bw, - gui_pointer_shape shape); + browser_pointer_shape shape); void browser_window_page_drag_start(struct browser_window *bw, int x, int y); bool browser_window_back_available(struct browser_window *bw); diff --git a/desktop/frames.c b/desktop/frames.c index 836108aa3..0d67ad8c5 100644 --- a/desktop/frames.c +++ b/desktop/frames.c @@ -91,7 +91,7 @@ void browser_window_scroll_callback(void *client_data, case SCROLLBAR_MSG_SCROLL_FINISHED: browser_window_set_drag_type(bw, DRAGGING_NONE, NULL); - browser_window_set_pointer(bw, GUI_POINTER_DEFAULT); + browser_window_set_pointer(bw, BROWSER_POINTER_DEFAULT); break; } } @@ -800,7 +800,7 @@ bool browser_window_resolve_frame_dimension(struct browser_window *bw, static bool browser_window_resize_frames(struct browser_window *bw, browser_mouse_state mouse, int x, int y, - gui_pointer_shape *pointer) + browser_pointer_shape *pointer) { struct browser_window *parent; bool left, right, up, down; @@ -878,22 +878,22 @@ static bool browser_window_resize_frames(struct browser_window *bw, if (left || right || up || down) { if (left) { if (down) - *pointer = GUI_POINTER_LD; + *pointer = BROWSER_POINTER_LD; else if (up) - *pointer = GUI_POINTER_LU; + *pointer = BROWSER_POINTER_LU; else - *pointer = GUI_POINTER_LEFT; + *pointer = BROWSER_POINTER_LEFT; } else if (right) { if (down) - *pointer = GUI_POINTER_RD; + *pointer = BROWSER_POINTER_RD; else if (up) - *pointer = GUI_POINTER_RU; + *pointer = BROWSER_POINTER_RU; else - *pointer = GUI_POINTER_RIGHT; + *pointer = BROWSER_POINTER_RIGHT; } else if (up) { - *pointer = GUI_POINTER_UP; + *pointer = BROWSER_POINTER_UP; } else { - *pointer = GUI_POINTER_DOWN; + *pointer = BROWSER_POINTER_DOWN; } if (mouse & (BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_DRAG_2)) { @@ -931,7 +931,7 @@ static bool browser_window_resize_frames(struct browser_window *bw, bool browser_window_frame_resize_start(struct browser_window *bw, browser_mouse_state mouse, int x, int y, - gui_pointer_shape *pointer) + browser_pointer_shape *pointer) { struct browser_window *root = browser_window_get_root(bw); int offx, offy; diff --git a/desktop/frames.h b/desktop/frames.h index efbe6a8c2..149921641 100644 --- a/desktop/frames.h +++ b/desktop/frames.h @@ -24,7 +24,6 @@ #define _NETSURF_DESKTOP_FRAMES_H_ #include "desktop/browser.h" -#include "desktop/gui.h" void browser_window_create_iframes(struct browser_window *bw, @@ -35,7 +34,7 @@ void browser_window_create_frameset(struct browser_window *bw, void browser_window_recalculate_frameset(struct browser_window *bw); bool browser_window_frame_resize_start(struct browser_window *bw, browser_mouse_state mouse, int x, int y, - gui_pointer_shape *pointer); + browser_pointer_shape *pointer); void browser_window_resize_frame(struct browser_window *bw, int x, int y); void browser_window_scroll_callback(void *client_data, diff --git a/render/html_interaction.c b/render/html_interaction.c index 6be3e5e0d..5ba286e04 100644 --- a/render/html_interaction.c +++ b/render/html_interaction.c @@ -46,7 +46,7 @@ #include "utils/utils.h" -static gui_pointer_shape get_pointer_shape(struct browser_window *bw, +static browser_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, bool imagemap); static void html_box_drag_start(struct box *box, int x, int y); @@ -175,7 +175,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw, const char *target = 0; char status_buffer[200]; const char *status = 0; - gui_pointer_shape pointer = GUI_POINTER_DEFAULT; + browser_pointer_shape pointer = BROWSER_POINTER_DEFAULT; bool imagemap = false; int box_x = 0, box_y = 0; int gadget_box_x = 0, gadget_box_y = 0; @@ -370,19 +370,19 @@ void html_mouse_action(struct content *c, struct browser_window *bw, if (scrollbar) { status = scrollbar_mouse_action(scrollbar, mouse, scroll_mouse_x, scroll_mouse_y); - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; } else if (gadget) { switch (gadget->type) { case GADGET_SELECT: status = messages_get("FormSelect"); - pointer = GUI_POINTER_MENU; + pointer = BROWSER_POINTER_MENU; if (mouse & BROWSER_MOUSE_CLICK_1 && nsoption_bool(core_select_menu)) { html->visible_select_menu = gadget; form_open_select_menu(c, gadget, form_select_menu_callback, c); - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; } else if (mouse & BROWSER_MOUSE_CLICK_1) gui_create_form_select_menu(bw, gadget); break; @@ -666,7 +666,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw, drag_candidate, x, y); } - pointer = GUI_POINTER_MOVE; + pointer = BROWSER_POINTER_MOVE; } } else if (mouse & BROWSER_MOUSE_DRAG_2) { @@ -686,7 +686,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw, drag_candidate, x, y); } - pointer = GUI_POINTER_MOVE; + pointer = BROWSER_POINTER_MOVE; } } } @@ -724,10 +724,10 @@ void html_mouse_action(struct content *c, struct browser_window *bw, } -gui_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, +browser_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, bool imagemap) { - gui_pointer_shape pointer; + browser_pointer_shape pointer; css_computed_style *style; enum css_cursor_e cursor; lwc_string **cursor_uris; @@ -742,7 +742,7 @@ gui_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, if (wallclock() - bw->last_action < 100 && loading) /* If less than 1 second since last link followed, show * progress indicating pointer and we're loading something */ - return GUI_POINTER_PROGRESS; + return BROWSER_POINTER_PROGRESS; if (box->type == BOX_FLOAT_LEFT || box->type == BOX_FLOAT_RIGHT) style = box->children->style; @@ -750,7 +750,7 @@ gui_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, style = box->style; if (style == NULL) - return GUI_POINTER_DEFAULT; + return BROWSER_POINTER_DEFAULT; cursor = css_computed_cursor(style, &cursor_uris); @@ -761,70 +761,70 @@ gui_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *box, box->gadget->type == GADGET_SUBMIT)) || imagemap) { /* link */ - pointer = GUI_POINTER_POINT; + pointer = BROWSER_POINTER_POINT; } else if (box->gadget && (box->gadget->type == GADGET_TEXTBOX || box->gadget->type == GADGET_PASSWORD || box->gadget->type == GADGET_TEXTAREA)) { /* text input */ - pointer = GUI_POINTER_CARET; + pointer = BROWSER_POINTER_CARET; } else { /* anything else */ if (loading) { /* loading new content */ - pointer = GUI_POINTER_PROGRESS; + pointer = BROWSER_POINTER_PROGRESS; } else { - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; } } break; case CSS_CURSOR_CROSSHAIR: - pointer = GUI_POINTER_CROSS; + pointer = BROWSER_POINTER_CROSS; break; case CSS_CURSOR_POINTER: - pointer = GUI_POINTER_POINT; + pointer = BROWSER_POINTER_POINT; break; case CSS_CURSOR_MOVE: - pointer = GUI_POINTER_MOVE; + pointer = BROWSER_POINTER_MOVE; break; case CSS_CURSOR_E_RESIZE: - pointer = GUI_POINTER_RIGHT; + pointer = BROWSER_POINTER_RIGHT; break; case CSS_CURSOR_W_RESIZE: - pointer = GUI_POINTER_LEFT; + pointer = BROWSER_POINTER_LEFT; break; case CSS_CURSOR_N_RESIZE: - pointer = GUI_POINTER_UP; + pointer = BROWSER_POINTER_UP; break; case CSS_CURSOR_S_RESIZE: - pointer = GUI_POINTER_DOWN; + pointer = BROWSER_POINTER_DOWN; break; case CSS_CURSOR_NE_RESIZE: - pointer = GUI_POINTER_RU; + pointer = BROWSER_POINTER_RU; break; case CSS_CURSOR_SW_RESIZE: - pointer = GUI_POINTER_LD; + pointer = BROWSER_POINTER_LD; break; case CSS_CURSOR_SE_RESIZE: - pointer = GUI_POINTER_RD; + pointer = BROWSER_POINTER_RD; break; case CSS_CURSOR_NW_RESIZE: - pointer = GUI_POINTER_LU; + pointer = BROWSER_POINTER_LU; break; case CSS_CURSOR_TEXT: - pointer = GUI_POINTER_CARET; + pointer = BROWSER_POINTER_CARET; break; case CSS_CURSOR_WAIT: - pointer = GUI_POINTER_WAIT; + pointer = BROWSER_POINTER_WAIT; break; case CSS_CURSOR_PROGRESS: - pointer = GUI_POINTER_PROGRESS; + pointer = BROWSER_POINTER_PROGRESS; break; case CSS_CURSOR_HELP: - pointer = GUI_POINTER_HELP; + pointer = BROWSER_POINTER_HELP; break; default: - pointer = GUI_POINTER_DEFAULT; + pointer = BROWSER_POINTER_DEFAULT; break; } @@ -867,7 +867,7 @@ void html_overflow_scroll_callback(void *client_data, DRAGGING_NONE, NULL); browser_window_set_pointer(html->bw, - GUI_POINTER_DEFAULT); + BROWSER_POINTER_DEFAULT); break; } } diff --git a/render/textplain.c b/render/textplain.c index 7b0262be9..7411e3b75 100644 --- a/render/textplain.c +++ b/render/textplain.c @@ -675,7 +675,7 @@ void textplain_mouse_action(struct content *c, struct browser_window *bw, browser_mouse_state mouse, int x, int y) { textplain_content *text = (textplain_content *) c; - gui_pointer_shape pointer = GUI_POINTER_DEFAULT; + browser_pointer_shape pointer = BROWSER_POINTER_DEFAULT; const char *status = 0; size_t idx; int dir = 0; @@ -701,7 +701,7 @@ void textplain_mouse_action(struct content *c, struct browser_window *bw, if (mouse & (BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_DRAG_2)) { browser_window_page_drag_start(bw, x, y); - pointer = GUI_POINTER_MOVE; + pointer = BROWSER_POINTER_MOVE; } } -- cgit v1.2.3 From d9bd357802795ba3b30d280bafe2c66daa44be54 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 16 Aug 2012 22:44:25 +0100 Subject: Move browser window related control over mouse pointer out of html content handler. --- desktop/browser.c | 19 +++++++++++++++++-- render/html_interaction.c | 19 ++----------------- 2 files changed, 19 insertions(+), 19 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.c b/desktop/browser.c index 779f7082f..17e35619d 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1924,14 +1924,29 @@ void browser_window_set_pointer(struct browser_window *bw, { struct browser_window *root = browser_window_get_root(bw); gui_pointer_shape gui_shape; + bool loading; assert(root); assert(root->window); - if (shape == BROWSER_POINTER_AUTO) { - gui_shape = GUI_POINTER_DEFAULT; + loading = (bw->loading_content != NULL || (bw->current_content && + content_get_status(bw->current_content) == + CONTENT_STATUS_READY)); + + if (wallclock() - bw->last_action < 100 && loading) { + /* If loading and less than 1 second since last link followed, + * force progress indicator pointer */ + gui_shape = GUI_POINTER_PROGRESS; + + } else if (shape == BROWSER_POINTER_AUTO) { + /* Up to browser window to decide */ + if (loading) + gui_shape = GUI_POINTER_PROGRESS; + else + gui_shape = GUI_POINTER_DEFAULT; } else { + /* Use what we were told */ gui_shape = (gui_pointer_shape)shape; } diff --git a/render/html_interaction.c b/render/html_interaction.c index 5ba286e04..b4e2c049b 100644 --- a/render/html_interaction.c +++ b/render/html_interaction.c @@ -731,19 +731,9 @@ browser_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *b css_computed_style *style; enum css_cursor_e cursor; lwc_string **cursor_uris; - bool loading; assert(bw); - loading = (bw->loading_content != NULL || (bw->current_content && - content_get_status(bw->current_content) == - CONTENT_STATUS_READY)); - - if (wallclock() - bw->last_action < 100 && loading) - /* If less than 1 second since last link followed, show - * progress indicating pointer and we're loading something */ - return BROWSER_POINTER_PROGRESS; - if (box->type == BOX_FLOAT_LEFT || box->type == BOX_FLOAT_RIGHT) style = box->children->style; else @@ -769,13 +759,8 @@ browser_pointer_shape get_pointer_shape(struct browser_window *bw, struct box *b /* text input */ pointer = BROWSER_POINTER_CARET; } else { - /* anything else */ - if (loading) { - /* loading new content */ - pointer = BROWSER_POINTER_PROGRESS; - } else { - pointer = BROWSER_POINTER_DEFAULT; - } + /* html content doesn't mind */ + pointer = BROWSER_POINTER_AUTO; } break; case CSS_CURSOR_CROSSHAIR: -- cgit v1.2.3 From 402de7572d76686dd65a5ee71274a690a421cc8f Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 16 Aug 2012 23:26:05 +0100 Subject: Use new content message for saving of hyperlink target URL. --- content/content.h | 8 +++++++- desktop/browser.c | 10 ++++++++++ render/html.c | 5 +++++ render/html_interaction.c | 11 +++++++---- 4 files changed, 29 insertions(+), 5 deletions(-) (limited to 'desktop') diff --git a/content/content.h b/content/content.h index 5ff40d00c..f3a443868 100644 --- a/content/content.h +++ b/content/content.h @@ -75,7 +75,8 @@ typedef enum { CONTENT_MSG_LINK, /**< RFC5988 link */ CONTENT_MSG_GETCTX, /**< Javascript context */ CONTENT_MSG_SCROLL, /**< Request to scroll content */ - CONTENT_MSG_DRAGSAVE /**< Allow drag saving of content */ + CONTENT_MSG_DRAGSAVE, /**< Allow drag saving of content */ + CONTENT_MSG_SAVELINK /**< Allow URL to be saved */ } content_msg; /** RFC5988 metadata link */ @@ -139,6 +140,11 @@ union content_msg_data { } type; struct hlcache_handle *content; } dragsave; + /** CONTENT_MSG_SAVELINK - Save a URL */ + struct { + const char *url; + const char *title; + } savelink; }; /** parameters to content redraw */ diff --git a/desktop/browser.c b/desktop/browser.c index 17e35619d..3c99c5fb4 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1473,6 +1473,16 @@ nserror browser_window_callback(hlcache_handle *c, } break; + case CONTENT_MSG_SAVELINK: + { + /* Content wants a link to be saved */ + struct browser_window *root = browser_window_get_root(bw); + gui_window_save_link(root->window, + event->data.savelink.url, + event->data.savelink.title); + } + break; + default: assert(0); } diff --git a/render/html.c b/render/html.c index 62b3d1d4e..7c7b797ba 100644 --- a/render/html.c +++ b/render/html.c @@ -1247,6 +1247,11 @@ html_object_callback(hlcache_handle *object, content_broadcast(&c->base, CONTENT_MSG_DRAGSAVE, event->data); break; + case CONTENT_MSG_SAVELINK: + /* Pass it on */ + content_broadcast(&c->base, CONTENT_MSG_SAVELINK, event->data); + break; + default: assert(0); } diff --git a/render/html_interaction.c b/render/html_interaction.c index a74e99d9a..a3cfaa95f 100644 --- a/render/html_interaction.c +++ b/render/html_interaction.c @@ -696,16 +696,19 @@ void html_mouse_action(struct content *c, struct browser_window *bw, mouse & BROWSER_MOUSE_MOD_1) { /* force download of link */ browser_window_go_post(bw, nsurl_access(url), 0, 0, - false, nsurl_access(hlcache_handle_get_url(h)), + false, + nsurl_access(hlcache_handle_get_url(h)), true, true, 0); + } else if (mouse & BROWSER_MOUSE_CLICK_2 && mouse & BROWSER_MOUSE_MOD_1) { - gui_window_save_link(bw->window, - nsurl_access(url), title); + msg_data.savelink.url = nsurl_access(url); + msg_data.savelink.title = title; + content_broadcast(c, CONTENT_MSG_SAVELINK, msg_data); + } else if (mouse & (BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2)) action = ACTION_GO; - } else { bool done = false; -- cgit v1.2.3 From e177fa49c29ca05f5b2498f286f78da6545f8278 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 17 Aug 2012 09:45:15 +0100 Subject: Move mouse pointer enums to mouse header. --- desktop/browser.h | 23 ----------------------- desktop/gui.h | 9 +-------- desktop/mouse.h | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 31 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.h b/desktop/browser.h index be5628880..489a7edad 100644 --- a/desktop/browser.h +++ b/desktop/browser.h @@ -68,29 +68,6 @@ typedef enum { DRAGGING_OTHER } browser_drag_type; -typedef enum { - BROWSER_POINTER_DEFAULT = GUI_POINTER_DEFAULT, - BROWSER_POINTER_POINT = GUI_POINTER_POINT, - BROWSER_POINTER_CARET = GUI_POINTER_CARET, - BROWSER_POINTER_MENU = GUI_POINTER_MENU, - BROWSER_POINTER_UP = GUI_POINTER_UP, - BROWSER_POINTER_DOWN = GUI_POINTER_DOWN, - BROWSER_POINTER_LEFT = GUI_POINTER_LEFT, - BROWSER_POINTER_RIGHT = GUI_POINTER_RIGHT, - BROWSER_POINTER_RU = GUI_POINTER_RU, - BROWSER_POINTER_LD = GUI_POINTER_LD, - BROWSER_POINTER_LU = GUI_POINTER_LU, - BROWSER_POINTER_RD = GUI_POINTER_RD, - BROWSER_POINTER_CROSS = GUI_POINTER_CROSS, - BROWSER_POINTER_MOVE = GUI_POINTER_MOVE, - BROWSER_POINTER_WAIT = GUI_POINTER_WAIT, - BROWSER_POINTER_HELP = GUI_POINTER_HELP, - BROWSER_POINTER_NO_DROP = GUI_POINTER_NO_DROP, - BROWSER_POINTER_NOT_ALLOWED = GUI_POINTER_NOT_ALLOWED, - BROWSER_POINTER_PROGRESS = GUI_POINTER_PROGRESS, - BROWSER_POINTER_AUTO -} browser_pointer_shape; - /** Browser window data. */ struct browser_window { /** Page currently displayed, or 0. Must have status READY or DONE. */ diff --git a/desktop/gui.h b/desktop/gui.h index eccf0b4c6..aa3fc8191 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -53,14 +53,6 @@ struct browser_window; struct selection; struct form_control; -typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET, - GUI_POINTER_MENU, GUI_POINTER_UP, GUI_POINTER_DOWN, - GUI_POINTER_LEFT, GUI_POINTER_RIGHT, GUI_POINTER_RU, - GUI_POINTER_LD, GUI_POINTER_LU, GUI_POINTER_RD, - GUI_POINTER_CROSS, GUI_POINTER_MOVE, GUI_POINTER_WAIT, - GUI_POINTER_HELP, GUI_POINTER_NO_DROP, GUI_POINTER_NOT_ALLOWED, - GUI_POINTER_PROGRESS } gui_pointer_shape; - #include #include @@ -69,6 +61,7 @@ typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET, #include "utils/config.h" #include "content/hlcache.h" #include "desktop/download.h" +#include "desktop/mouse.h" #include "desktop/search.h" #include "utils/errors.h" diff --git a/desktop/mouse.h b/desktop/mouse.h index 84af82f69..42603a67a 100644 --- a/desktop/mouse.h +++ b/desktop/mouse.h @@ -63,6 +63,40 @@ typedef enum { * (eg. Alt) */ } browser_mouse_state; + +typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET, + GUI_POINTER_MENU, GUI_POINTER_UP, GUI_POINTER_DOWN, + GUI_POINTER_LEFT, GUI_POINTER_RIGHT, GUI_POINTER_RU, + GUI_POINTER_LD, GUI_POINTER_LU, GUI_POINTER_RD, + GUI_POINTER_CROSS, GUI_POINTER_MOVE, GUI_POINTER_WAIT, + GUI_POINTER_HELP, GUI_POINTER_NO_DROP, GUI_POINTER_NOT_ALLOWED, + GUI_POINTER_PROGRESS } gui_pointer_shape; + +/** Mouse pointer type */ +typedef enum { + BROWSER_POINTER_DEFAULT = GUI_POINTER_DEFAULT, + BROWSER_POINTER_POINT = GUI_POINTER_POINT, + BROWSER_POINTER_CARET = GUI_POINTER_CARET, + BROWSER_POINTER_MENU = GUI_POINTER_MENU, + BROWSER_POINTER_UP = GUI_POINTER_UP, + BROWSER_POINTER_DOWN = GUI_POINTER_DOWN, + BROWSER_POINTER_LEFT = GUI_POINTER_LEFT, + BROWSER_POINTER_RIGHT = GUI_POINTER_RIGHT, + BROWSER_POINTER_RU = GUI_POINTER_RU, + BROWSER_POINTER_LD = GUI_POINTER_LD, + BROWSER_POINTER_LU = GUI_POINTER_LU, + BROWSER_POINTER_RD = GUI_POINTER_RD, + BROWSER_POINTER_CROSS = GUI_POINTER_CROSS, + BROWSER_POINTER_MOVE = GUI_POINTER_MOVE, + BROWSER_POINTER_WAIT = GUI_POINTER_WAIT, + BROWSER_POINTER_HELP = GUI_POINTER_HELP, + BROWSER_POINTER_NO_DROP = GUI_POINTER_NO_DROP, + BROWSER_POINTER_NOT_ALLOWED = GUI_POINTER_NOT_ALLOWED, + BROWSER_POINTER_PROGRESS = GUI_POINTER_PROGRESS, + BROWSER_POINTER_AUTO +} browser_pointer_shape; + + void browser_mouse_state_dump(browser_mouse_state mouse); #endif -- cgit v1.2.3 From 142a0bf859b70a2b278b007aac99a5ab0811a956 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 17 Aug 2012 10:01:15 +0100 Subject: Add content message for setting mouse pointer. --- content/content.h | 5 ++++- desktop/browser.c | 5 +++++ render/html.c | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-) (limited to 'desktop') diff --git a/content/content.h b/content/content.h index f3a443868..d0b525c85 100644 --- a/content/content.h +++ b/content/content.h @@ -76,7 +76,8 @@ typedef enum { CONTENT_MSG_GETCTX, /**< Javascript context */ CONTENT_MSG_SCROLL, /**< Request to scroll content */ CONTENT_MSG_DRAGSAVE, /**< Allow drag saving of content */ - CONTENT_MSG_SAVELINK /**< Allow URL to be saved */ + CONTENT_MSG_SAVELINK, /**< Allow URL to be saved */ + CONTENT_MSG_POINTER /**< Wants a specific mouse pointer set */ } content_msg; /** RFC5988 metadata link */ @@ -145,6 +146,8 @@ union content_msg_data { const char *url; const char *title; } savelink; + /** CONTENT_MSG_POINTER - Mouse pointer to set */ + browser_pointer_shape pointer; }; /** parameters to content redraw */ diff --git a/desktop/browser.c b/desktop/browser.c index 3c99c5fb4..f9519b011 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1483,6 +1483,11 @@ nserror browser_window_callback(hlcache_handle *c, } break; + case CONTENT_MSG_POINTER: + /* Content wants to have specific mouse pointer */ + browser_window_set_pointer(bw, event->data.pointer); + break; + default: assert(0); } diff --git a/render/html.c b/render/html.c index 7c7b797ba..ed7e7ebaa 100644 --- a/render/html.c +++ b/render/html.c @@ -1252,6 +1252,11 @@ html_object_callback(hlcache_handle *object, content_broadcast(&c->base, CONTENT_MSG_SAVELINK, event->data); break; + case CONTENT_MSG_POINTER: + /* Pass it on */ + content_broadcast(&c->base, CONTENT_MSG_POINTER, event->data); + break; + default: assert(0); } -- cgit v1.2.3