Author: tlsa
Date: Wed Jan 11 08:20:26 2012
New Revision: 13395
URL:
http://source.netsurf-browser.org?rev=13395&view=rev
Log:
Pass pointer constraints for drag out to front ends. Ensure content scrollbar drag
termination always informs the browser window layer that the drag is over.
Modified:
trunk/netsurf/amiga/gui.c
trunk/netsurf/atari/gui.c
trunk/netsurf/beos/beos_window.cpp
trunk/netsurf/cocoa/gui.m
trunk/netsurf/desktop/browser.c
trunk/netsurf/desktop/browser.h
trunk/netsurf/desktop/gui.h
trunk/netsurf/framebuffer/gui.c
trunk/netsurf/gtk/window.c
trunk/netsurf/monkey/browser.c
trunk/netsurf/render/form.c
trunk/netsurf/render/html_interaction.c
trunk/netsurf/riscos/gui.c
trunk/netsurf/riscos/gui.h
trunk/netsurf/riscos/window.c
trunk/netsurf/windows/gui.c
Modified: trunk/netsurf/amiga/gui.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/amiga/gui.c?rev=13395&...
==============================================================================
--- trunk/netsurf/amiga/gui.c (original)
+++ trunk/netsurf/amiga/gui.c Wed Jan 11 08:20:26 2012
@@ -3843,10 +3843,10 @@
return true;
}
-bool gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1)
-{
- DebugPrintF("box scroll start\n");
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
+{
+ DebugPrintF("drag start\n");
return true;
}
Modified: trunk/netsurf/atari/gui.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/atari/gui.c?rev=13395&...
==============================================================================
--- trunk/netsurf/atari/gui.c (original)
+++ trunk/netsurf/atari/gui.c Wed Jan 11 08:20:26 2012
@@ -593,8 +593,8 @@
return true;
}
-bool gui_window_box_scroll_start(struct gui_window *w,
- int x0, int y0, int x1, int y1)
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
{
TODO();
return true;
Modified: trunk/netsurf/beos/beos_window.cpp
URL:
http://source.netsurf-browser.org/trunk/netsurf/beos/beos_window.cpp?rev=...
==============================================================================
--- trunk/netsurf/beos/beos_window.cpp (original)
+++ trunk/netsurf/beos/beos_window.cpp Wed Jan 11 08:20:26 2012
@@ -1603,8 +1603,8 @@
return true;
}
-bool gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1)
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
{
return true;
}
Modified: trunk/netsurf/cocoa/gui.m
URL:
http://source.netsurf-browser.org/trunk/netsurf/cocoa/gui.m?rev=13395&...
==============================================================================
--- trunk/netsurf/cocoa/gui.m (original)
+++ trunk/netsurf/cocoa/gui.m Wed Jan 11 08:20:26 2012
@@ -273,8 +273,8 @@
return true;
}
-bool gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1)
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
{
return true;
}
Modified: trunk/netsurf/desktop/browser.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/desktop/browser.c?rev=133...
==============================================================================
--- trunk/netsurf/desktop/browser.c (original)
+++ trunk/netsurf/desktop/browser.c Wed Jan 11 08:20:26 2012
@@ -383,16 +383,28 @@
browser_drag_type type, struct rect *rect)
{
struct browser_window *top_bw = browser_window_get_root(bw);
-
- if (type == DRAGGING_NONE)
+ gui_drag_type gtype;
+
+ bw->drag_type = type;
+
+ if (type == DRAGGING_NONE) {
top_bw->drag_window = NULL;
- else
+ } else {
top_bw->drag_window = bw;
- bw->drag_type = type;
-
- /* TODO: inform front end that the core is handling drag,
- * pass rect */
+ switch (type) {
+ case DRAGGING_SCR_X:
+ case DRAGGING_SCR_Y:
+ case DRAGGING_CONTENT_SCROLLBAR:
+ gtype = GDRAGGING_SCROLLBAR;
+ break;
+ default:
+ gtype = GDRAGGING_OTHER;
+ break;
+ }
+
+ gui_window_drag_start(top_bw->window, gtype, rect);
+ }
}
/* exported interface, documented in browser.h */
@@ -2554,10 +2566,8 @@
switch (bw->drag_type) {
case DRAGGING_SELECTION:
- /* Drag handled by content handler */
- break;
-
case DRAGGING_OTHER:
+ case DRAGGING_CONTENT_SCROLLBAR:
/* Drag handled by content handler */
break;
Modified: trunk/netsurf/desktop/browser.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/desktop/browser.h?rev=133...
==============================================================================
--- trunk/netsurf/desktop/browser.h (original)
+++ trunk/netsurf/desktop/browser.h Wed Jan 11 08:20:26 2012
@@ -63,6 +63,7 @@
DRAGGING_FRAME,
DRAGGING_SCR_X,
DRAGGING_SCR_Y,
+ DRAGGING_CONTENT_SCROLLBAR,
DRAGGING_OTHER
} browser_drag_type;
Modified: trunk/netsurf/desktop/gui.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/desktop/gui.h?rev=13395&a...
==============================================================================
--- trunk/netsurf/desktop/gui.h (original)
+++ trunk/netsurf/desktop/gui.h Wed Jan 11 08:20:26 2012
@@ -40,6 +40,12 @@
GUI_SAVE_TEXT_SELECTION,
GUI_SAVE_CLIPBOARD_CONTENTS
} gui_save_type;
+
+typedef enum {
+ GDRAGGING_NONE,
+ GDRAGGING_SCROLLBAR,
+ GDRAGGING_OTHER
+} gui_drag_type;
struct gui_window;
struct gui_download_window;
@@ -100,8 +106,10 @@
void gui_window_remove_caret(struct gui_window *g);
void gui_window_new_content(struct gui_window *g);
bool gui_window_scroll_start(struct gui_window *g);
-bool gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1);
+
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect);
+
void gui_window_save_link(struct gui_window *g, const char *url,
const char *title);
Modified: trunk/netsurf/framebuffer/gui.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/framebuffer/gui.c?rev=133...
==============================================================================
--- trunk/netsurf/framebuffer/gui.c (original)
+++ trunk/netsurf/framebuffer/gui.c Wed Jan 11 08:20:26 2012
@@ -1493,8 +1493,8 @@
}
bool
-gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1)
+gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
{
return true;
}
Modified: trunk/netsurf/gtk/window.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/gtk/window.c?rev=13395&am...
==============================================================================
--- trunk/netsurf/gtk/window.c (original)
+++ trunk/netsurf/gtk/window.c Wed Jan 11 08:20:26 2012
@@ -988,8 +988,8 @@
return true;
}
-bool gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1)
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
{
return true;
}
Modified: trunk/netsurf/monkey/browser.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/monkey/browser.c?rev=1339...
==============================================================================
--- trunk/netsurf/monkey/browser.c (original)
+++ trunk/netsurf/monkey/browser.c Wed Jan 11 08:20:26 2012
@@ -370,11 +370,10 @@
}
bool
-gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1)
-{
- fprintf(stdout, "WINDOW SCROLL_START WIN %u X0 %d Y0 %d X1 %d Y1 %d\n",
- g->win_num, x0, y0, x1, y1);
+gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
+{
+ fprintf(stdout, "WINDOW SCROLL_START WIN %u TYPE %i\n);
return false;
}
Modified: trunk/netsurf/render/form.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/render/form.c?rev=13395&a...
==============================================================================
--- trunk/netsurf/render/form.c (original)
+++ trunk/netsurf/render/form.c Wed Jan 11 08:20:26 2012
@@ -1295,19 +1295,19 @@
.y1 = scrollbar_data->y1
};
- browser_window_set_drag_type(html->bw, DRAGGING_OTHER,
- &rect);
+ browser_window_set_drag_type(html->bw,
+ DRAGGING_CONTENT_SCROLLBAR, &rect);
menu->scroll_capture = true;
root_bw = browser_window_get_root(html->bw);
- gui_window_box_scroll_start(root_bw->window,
- scrollbar_data->x0, scrollbar_data->y0,
- scrollbar_data->x1, scrollbar_data->y1);
}
break;
case SCROLLBAR_MSG_SCROLL_FINISHED:
menu->scroll_capture = false;
+
+ browser_window_set_drag_type(html->bw,
+ DRAGGING_NONE, NULL);
break;
default:
break;
Modified: trunk/netsurf/render/html_interaction.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/render/html_interaction.c...
==============================================================================
--- trunk/netsurf/render/html_interaction.c (original)
+++ trunk/netsurf/render/html_interaction.c Wed Jan 11 08:20:26 2012
@@ -223,8 +223,7 @@
return;
}
- if (bw->drag_type != DRAGGING_NONE && !mouse &&
- html->scrollbar != NULL) {
+ if (!mouse && html->scrollbar != NULL) {
/* drag end: scrollbar */
html_overflow_scroll_drag_end(html->scrollbar, mouse, x, y);
}
@@ -856,19 +855,19 @@
.x1 = scrollbar_data->x1,
.y1 = scrollbar_data->y1
};
- browser_window_set_drag_type(html->bw, DRAGGING_OTHER,
- &rect);
+ browser_window_set_drag_type(html->bw,
+ DRAGGING_CONTENT_SCROLLBAR, &rect);
html->scrollbar = scrollbar_data->scrollbar;
root_bw = browser_window_get_root(html->bw);
- gui_window_box_scroll_start(root_bw->window,
- scrollbar_data->x0, scrollbar_data->y0,
- scrollbar_data->x1, scrollbar_data->y1);
}
break;
case SCROLLBAR_MSG_SCROLL_FINISHED:
html->scrollbar = NULL;
+
+ browser_window_set_drag_type(html->bw,
+ DRAGGING_NONE, NULL);
browser_window_set_pointer(html->bw,
GUI_POINTER_DEFAULT);
Modified: trunk/netsurf/riscos/gui.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/riscos/gui.c?rev=13395&am...
==============================================================================
--- trunk/netsurf/riscos/gui.c (original)
+++ trunk/netsurf/riscos/gui.c Wed Jan 11 08:20:26 2012
@@ -176,7 +176,7 @@
/** Browser window which the pointer is over, or 0 if none. */
struct gui_window *gui_track_gui_window;
-gui_drag_type gui_current_drag_type;
+ro_gui_drag_type gui_current_drag_type;
wimp_t task_handle; /**< RISC OS wimp task handle. */
static clock_t gui_last_poll; /**< Time of last wimp_poll. */
osspriteop_area *gui_sprites; /**< Sprite area containing pointer and hotlist
sprites */
Modified: trunk/netsurf/riscos/gui.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/riscos/gui.h?rev=13395&am...
==============================================================================
--- trunk/netsurf/riscos/gui.h (original)
+++ trunk/netsurf/riscos/gui.h Wed Jan 11 08:20:26 2012
@@ -68,9 +68,9 @@
typedef enum { GUI_DRAG_NONE, GUI_DRAG_SELECTION, GUI_DRAG_DOWNLOAD_SAVE,
GUI_DRAG_SAVE, GUI_DRAG_SCROLL, GUI_DRAG_STATUS_RESIZE,
GUI_DRAG_TREEVIEW, GUI_DRAG_BUTTONBAR,
- GUI_DRAG_FRAME } gui_drag_type;
-
-extern gui_drag_type gui_current_drag_type;
+ GUI_DRAG_FRAME } ro_gui_drag_type;
+
+extern ro_gui_drag_type gui_current_drag_type;
/** desktop font, size and style being used */
extern char ro_gui_desktop_font_family[];
Modified: trunk/netsurf/riscos/window.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/riscos/window.c?rev=13395...
==============================================================================
--- trunk/netsurf/riscos/window.c (original)
+++ trunk/netsurf/riscos/window.c Wed Jan 11 08:20:26 2012
@@ -1244,45 +1244,62 @@
/**
- * Platform-dependent part of starting a box scrolling operation,
- * for frames and textareas.
- *
- * \param x0 minimum x ordinate of box relative to mouse pointer
- * \param y0 minimum y ordinate
- * \param x1 maximum x ordinate
- * \param y1 maximum y ordinate
+ * Platform-dependent part of starting drag operation.
+ *
+ * \param g gui window containing the drag
+ * \param type type of drag the core is performing
+ * \param rect rectangle to constrain pointer to (relative to drag start coord)
* \return true iff succesful
*/
-bool gui_window_box_scroll_start(struct gui_window *g, int x0, int y0, int x1, int y1)
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
{
wimp_pointer pointer;
os_error *error;
wimp_drag drag;
- error = xwimp_get_pointer_info(&pointer);
- if (error) {
- LOG(("xwimp_get_pointer_info 0x%x : %s",
- error->errnum, error->errmess));
- warn_user("WimpError", error->errmess);
- return false;
- }
-
- drag.type = wimp_DRAG_USER_POINT;
- drag.bbox.x0 = pointer.pos.x + (int)(x0 * 2 * g->bw->scale);
- drag.bbox.y0 = pointer.pos.y + (int)(y0 * 2 * g->bw->scale);
- drag.bbox.x1 = pointer.pos.x + (int)(x1 * 2 * g->bw->scale);
- drag.bbox.y1 = pointer.pos.y + (int)(y1 * 2 * g->bw->scale);
-
- error = xwimp_drag_box(&drag);
- if (error) {
- LOG(("xwimp_drag_box: 0x%x : %s",
- error->errnum, error->errmess));
- warn_user("WimpError", error->errmess);
- return false;
- }
-
- gui_current_drag_type = GUI_DRAG_SCROLL;
+ if (rect != NULL) {
+ /* We have a box to constrain the pointer to, for the drag
+ * duration */
+ error = xwimp_get_pointer_info(&pointer);
+ if (error) {
+ LOG(("xwimp_get_pointer_info 0x%x : %s",
+ error->errnum, error->errmess));
+ warn_user("WimpError", error->errmess);
+ return false;
+ }
+
+ drag.type = wimp_DRAG_USER_POINT;
+ drag.bbox.x0 = pointer.pos.x +
+ (int)(rect->x0 * 2 * g->bw->scale);
+ drag.bbox.y0 = pointer.pos.y +
+ (int)(rect->y0 * 2 * g->bw->scale);
+ drag.bbox.x1 = pointer.pos.x +
+ (int)(rect->x1 * 2 * g->bw->scale);
+ drag.bbox.y1 = pointer.pos.y +
+ (int)(rect->y1 * 2 * g->bw->scale);
+
+ error = xwimp_drag_box(&drag);
+ if (error) {
+ LOG(("xwimp_drag_box: 0x%x : %s",
+ error->errnum, error->errmess));
+ warn_user("WimpError", error->errmess);
+ return false;
+ }
+ }
+
+ switch (type) {
+ case GDRAGGING_SCROLLBAR:
+ /* Dragging a core scrollbar */
+ gui_current_drag_type = GUI_DRAG_SCROLL;
+ break;
+
+ default:
+ /* Not handled here yet */
+ break;
+ }
+
return true;
}
Modified: trunk/netsurf/windows/gui.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/windows/gui.c?rev=13395&a...
==============================================================================
--- trunk/netsurf/windows/gui.c (original)
+++ trunk/netsurf/windows/gui.c Wed Jan 11 08:20:26 2012
@@ -1718,8 +1718,8 @@
return true;
}
-bool gui_window_box_scroll_start(struct gui_window *w,
- int x0, int y0, int x1, int y1)
+bool gui_window_drag_start(struct gui_window *g, gui_drag_type type,
+ struct rect *rect)
{
return true;
}