Fix bw->drag_type to be aware of remaining drag types.

svn path=/trunk/netsurf/; revision=12514
This commit is contained in:
Michael Drake 2011-06-27 17:29:49 +00:00
parent 311080ff54
commit 23eea5de9f
4 changed files with 48 additions and 21 deletions

View File

@ -224,6 +224,13 @@ void browser_window_set_position(struct browser_window *bw, int x, int y)
} }
} }
/* exported interface, documented in browser.h */
void browser_window_set_drag_type(struct browser_window *bw,
browser_drag_type type)
{
bw->drag_type = type;
}
/** /**
* Create and open a new root browser window with the given page. * Create and open a new root browser window with the given page.
* *
@ -1770,20 +1777,9 @@ void browser_window_mouse_click(struct browser_window *bw,
void browser_window_mouse_drag_end(struct browser_window *bw, void browser_window_mouse_drag_end(struct browser_window *bw,
browser_mouse_state mouse, int x, int y) browser_mouse_state mouse, int x, int y)
{ {
if (bw->visible_select_menu != NULL) {
form_select_mouse_drag_end(bw->visible_select_menu, mouse,
x, y);
return;
}
if (bw->scrollbar != NULL) {
html_overflow_scroll_drag_end(bw->scrollbar, mouse, x, y);
return;
}
switch (bw->drag_type) { switch (bw->drag_type) {
case DRAGGING_SELECTION: { case DRAGGING_SELECTION:
{
hlcache_handle *h = bw->current_content; hlcache_handle *h = bw->current_content;
if (h) { if (h) {
int dir = -1; int dir = -1;
@ -1807,7 +1803,20 @@ void browser_window_mouse_drag_end(struct browser_window *bw,
} }
selection_drag_end(bw->sel); selection_drag_end(bw->sel);
} }
break; break;
case DRAGGING_OTHER:
if (bw->visible_select_menu != NULL) {
form_select_mouse_drag_end(bw->visible_select_menu,
mouse, x, y);
}
if (bw->scrollbar != NULL) {
html_overflow_scroll_drag_end(bw->scrollbar,
mouse, x, y);
}
break;
default: default:
break; break;

View File

@ -55,6 +55,15 @@ typedef void (*browser_move_callback)(struct browser_window *bw,
void *p); void *p);
typedef enum {
DRAGGING_NONE,
DRAGGING_SELECTION,
DRAGGING_PAGE_SCROLL,
DRAGGING_FRAME,
DRAGGING_OTHER
} browser_drag_type;
/** Browser window data. */ /** Browser window data. */
struct browser_window { struct browser_window {
@ -91,12 +100,7 @@ struct browser_window {
char *frag_id; char *frag_id;
/** Current drag status. */ /** Current drag status. */
enum { browser_drag_type drag_type;
DRAGGING_NONE,
DRAGGING_SELECTION,
DRAGGING_PAGE_SCROLL,
DRAGGING_FRAME
} drag_type;
/** Mouse position at start of current scroll drag. */ /** Mouse position at start of current scroll drag. */
int drag_start_x; int drag_start_x;
@ -323,12 +327,22 @@ void browser_window_get_position(struct browser_window *bw, bool root,
* Set the position of the current browser window with respect to the parent * Set the position of the current browser window with respect to the parent
* browser window * browser window
* *
* \param bw browser window to get the position of * \param bw browser window to set the position of
* \param x x position of bw * \param x x position of bw
* \param y y position of bw * \param y y position of bw
*/ */
void browser_window_set_position(struct browser_window *bw, int x, int y); void browser_window_set_position(struct browser_window *bw, int x, int y);
/*
* Set the position of the current browser window with respect to the parent
* browser window
*
* \param bw browser window to set the type of the current drag for
* \param type drag type
*/
void browser_window_set_drag_type(struct browser_window *bw,
browser_drag_type type);
/* In platform specific hotlist.c. */ /* In platform specific hotlist.c. */
void hotlist_visited(struct hlcache_handle *c); void hotlist_visited(struct hlcache_handle *c);

View File

@ -1295,6 +1295,8 @@ void form_select_menu_scroll_callback(void *client_data,
menu->height); menu->height);
break; break;
case SCROLLBAR_MSG_SCROLL_START: case SCROLLBAR_MSG_SCROLL_START:
browser_window_set_drag_type(menu->bw, DRAGGING_OTHER);
menu->scroll_capture = true; menu->scroll_capture = true;
gui_window_box_scroll_start(menu->bw->window, gui_window_box_scroll_start(menu->bw->window,
scrollbar_data->x0, scrollbar_data->y0, scrollbar_data->x0, scrollbar_data->y0,

View File

@ -789,6 +789,8 @@ void html_overflow_scroll_callback(void *client_data,
html_redraw_a_box(bw->current_content, box); html_redraw_a_box(bw->current_content, box);
break; break;
case SCROLLBAR_MSG_SCROLL_START: case SCROLLBAR_MSG_SCROLL_START:
browser_window_set_drag_type(bw, DRAGGING_OTHER);
bw->scrollbar = scrollbar_data->scrollbar; bw->scrollbar = scrollbar_data->scrollbar;
gui_window_box_scroll_start(bw->window, gui_window_box_scroll_start(bw->window,
scrollbar_data->x0, scrollbar_data->y0, scrollbar_data->x0, scrollbar_data->y0,