diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-08-18 16:26:56 +0100 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-08-18 16:26:56 +0100 |
commit | 19d2a0c01185451d2e2903f116f792e591b8ff5f (patch) | |
tree | 9b3a790d659effcefcc175c1eb1abd2cc43e61ca /desktop | |
parent | 8e4819e450f5922cde793477c634df9c82c21fb6 (diff) | |
parent | eb35a576c1b5845d4aa6b2b77d8039f49f048edc (diff) | |
download | netsurf-19d2a0c01185451d2e2903f116f792e591b8ff5f.tar.gz netsurf-19d2a0c01185451d2e2903f116f792e591b8ff5f.tar.bz2 |
Merge branch 'master' of git://git.netsurf-browser.org/netsurf
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser.c | 89 | ||||
-rw-r--r-- | desktop/browser.h | 2 | ||||
-rw-r--r-- | desktop/frames.c | 22 | ||||
-rw-r--r-- | desktop/frames.h | 3 | ||||
-rw-r--r-- | desktop/gui.h | 10 | ||||
-rw-r--r-- | desktop/mouse.h | 34 |
6 files changed, 128 insertions, 32 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index 136557a75..f9519b011 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(); } @@ -1440,6 +1443,51 @@ 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; + + 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; + + case CONTENT_MSG_POINTER: + /* Content wants to have specific mouse pointer */ + browser_window_set_pointer(bw, event->data.pointer); + break; + default: assert(0); } @@ -1887,14 +1935,37 @@ 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; + bool loading; assert(root); assert(root->window); - gui_window_set_pointer(root->window, shape); + 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; + } + + gui_window_set_pointer(root->window, gui_shape); } @@ -2367,7 +2438,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 @@ -2448,7 +2519,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); @@ -2473,7 +2544,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); @@ -2519,7 +2590,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) */ @@ -2567,7 +2638,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); @@ -2588,7 +2659,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); @@ -2615,7 +2686,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..489a7edad 100644 --- a/desktop/browser.h +++ b/desktop/browser.h @@ -301,7 +301,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/desktop/gui.h b/desktop/gui.h index 2fc2b9130..aa3fc8191 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -53,23 +53,15 @@ 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 <stdbool.h> #include <libwapcaplet/libwapcaplet.h> #include <libcss/libcss.h> #include "utils/config.h" -#include "content/content.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 |