summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/content.h5
-rw-r--r--desktop/browser.c10
-rw-r--r--render/html_interaction.c14
-rw-r--r--render/html_object.c1
4 files changed, 19 insertions, 11 deletions
diff --git a/content/content.h b/content/content.h
index 752370034..45c9c0452 100644
--- a/content/content.h
+++ b/content/content.h
@@ -84,6 +84,7 @@ typedef enum {
CONTENT_MSG_SELECTION, /**< A selection made or cleared */
CONTENT_MSG_CARET, /**< Caret movement / hiding */
CONTENT_MSG_DRAG, /**< A drag started or ended */
+ CONTENT_MSG_SELECTMENU,/**< Create a select menu */
CONTENT_MSG_GADGETCLICK/**< A gadget has been clicked on (mainly for file) */
} content_msg;
@@ -197,6 +198,10 @@ union content_msg_data {
} type;
const struct rect *rect;
} drag;
+ /** CONTENT_MSG_SELECTMENU - Create select menu at pointer */
+ struct {
+ struct form_control *gadget;
+ } select_menu;
/** CONTENT_MSG_GADGETCLICK - User clicked on a form gadget */
struct {
struct form_control *gadget;
diff --git a/desktop/browser.c b/desktop/browser.c
index 9cbfb2a1f..ba24ea168 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -1600,6 +1600,16 @@ static nserror browser_window_callback(hlcache_handle *c,
event->data.selection.read_only);
break;
+ case CONTENT_MSG_SELECTMENU:
+ if (event->data.select_menu.gadget->type == GADGET_SELECT) {
+ struct browser_window *root =
+ browser_window_get_root(bw);
+ guit->browser->create_form_select_menu(root->window,
+ event->data.select_menu.gadget);
+ }
+
+ break;
+
case CONTENT_MSG_GADGETCLICK:
if (event->data.gadget_click.gadget->type == GADGET_FILE) {
guit->window->file_gadget_open(bw->window, c,
diff --git a/render/html_interaction.c b/render/html_interaction.c
index 7e78fc034..781c9c1de 100644
--- a/render/html_interaction.c
+++ b/render/html_interaction.c
@@ -55,13 +55,6 @@
#include "render/imagemap.h"
#include "render/search.h"
-/* TODO:
- * This is currently needed here because the forms stuff (select menu
- * specifically) is badly designed. But I'd rather it were here in the
- * core than in all the front ends. We should fix this so we communicate
- * with the browser window layer via the content message system. -- tlsa */
-#include <desktop/browser_private.h>
-
/**
* Get pointer shape for given box
*
@@ -665,10 +658,9 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
c);
pointer = BROWSER_POINTER_DEFAULT;
} else if (mouse & BROWSER_MOUSE_CLICK_1) {
- struct browser_window *rbw =
- browser_window_get_root(bw);
- guit->browser->create_form_select_menu(
- rbw->window, gadget);
+ msg_data.select_menu.gadget = gadget;
+ content_broadcast(c, CONTENT_MSG_SELECTMENU,
+ msg_data);
}
break;
case GADGET_CHECKBOX:
diff --git a/render/html_object.c b/render/html_object.c
index d048253a7..455733d0a 100644
--- a/render/html_object.c
+++ b/render/html_object.c
@@ -375,6 +375,7 @@ html_object_callback(hlcache_handle *object,
case CONTENT_MSG_SAVELINK:
case CONTENT_MSG_POINTER:
+ case CONTENT_MSG_SELECTMENU:
case CONTENT_MSG_GADGETCLICK:
/* These messages are for browser window layer.
* we're not interested, so pass them on. */