summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2012-08-18 16:26:56 +0100
committerChris Young <chris@unsatisfactorysoftware.co.uk>2012-08-18 16:26:56 +0100
commit19d2a0c01185451d2e2903f116f792e591b8ff5f (patch)
tree9b3a790d659effcefcc175c1eb1abd2cc43e61ca /desktop
parent8e4819e450f5922cde793477c634df9c82c21fb6 (diff)
parenteb35a576c1b5845d4aa6b2b77d8039f49f048edc (diff)
downloadnetsurf-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.c89
-rw-r--r--desktop/browser.h2
-rw-r--r--desktop/frames.c22
-rw-r--r--desktop/frames.h3
-rw-r--r--desktop/gui.h10
-rw-r--r--desktop/mouse.h34
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