aboutsummaryrefslogtreecommitdiff
path: root/src/form.cc
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-12-08 16:32:27 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-12-08 16:32:27 +0100
commitc8b549abe1c85700c91e805e51b677a49ed5fd1d (patch)
treecd7c4053123335b3af203b6aaf6cdd99da5fa222 /src/form.cc
parent9e9dd0866570bcded7a26f0cbf1c0134c35e81d6 (diff)
parent4e93afcf54baaa4d2b689357ec47fd3ec585e44f (diff)
merge
Diffstat (limited to 'src/form.cc')
-rw-r--r--src/form.cc114
1 files changed, 59 insertions, 55 deletions
diff --git a/src/form.cc b/src/form.cc
index a61e4c73..d822f9e4 100644
--- a/src/form.cc
+++ b/src/form.cc
@@ -75,8 +75,8 @@ class DilloHtmlForm {
friend class DilloHtmlInput;
DilloHtml *html;
- void eventHandler(Resource *resource);
- void submit(DilloHtmlInput *active_input);
+ void eventHandler(Resource *resource, EventButton *event);
+ void submit(DilloHtmlInput *active_input, EventButton *event);
DilloUrl *buildQueryUrl(DilloHtmlInput *active_input);
Dstr *buildQueryData(DilloHtmlInput *active_submit);
char *makeMultipartBoundary(iconv_t char_encoder,
@@ -128,7 +128,7 @@ class DilloHtmlReceiver:
void activate (Resource *resource);
void enter (Resource *resource);
void leave (Resource *resource);
- void clicked (ButtonResource *resource, int buttonNo, int x, int y);
+ void clicked (ButtonResource *resource, EventButton *event);
};
class DilloHtmlInput {
@@ -150,7 +150,7 @@ public: //BUG: for now everything is public
private:
void connectTo(DilloHtmlReceiver *form_receiver);
- void activate(DilloHtmlForm *form, bool entry_input_submits);
+ void activate(DilloHtmlForm *form, int num_entry_fields,EventButton *event);
void readFile(BrowserWindow *bw);
public:
@@ -947,14 +947,12 @@ DilloHtmlForm::~DilloHtmlForm ()
delete(form_receiver);
}
-void DilloHtmlForm::eventHandler(Resource *resource)
+void DilloHtmlForm::eventHandler(Resource *resource, EventButton *event)
{
MSG("DilloHtmlForm::eventHandler\n");
DilloHtmlInput *input = getInput(resource);
if (input) {
- bool entry_input_submits = prefs.enterpress_forces_submit ||
- num_entry_fields == 1;
- input->activate (this, entry_input_submits);
+ input->activate (this, num_entry_fields, event);
} else {
MSG("DilloHtmlForm::eventHandler: ERROR, input not found!\n");
}
@@ -964,11 +962,21 @@ void DilloHtmlForm::eventHandler(Resource *resource)
* Submit.
* (Called by eventHandler())
*/
-void DilloHtmlForm::submit(DilloHtmlInput *active_input)
+void DilloHtmlForm::submit(DilloHtmlInput *active_input, EventButton *event)
{
DilloUrl *url = buildQueryUrl(active_input);
if (url) {
- a_Nav_push(html->bw, url);
+ if (event && event->button == 2) {
+ if (prefs.middle_click_opens_new_tab) {
+ int focus = prefs.focus_new_tab ? 1 : 0;
+ if (event->state == SHIFT_MASK) focus = !focus;
+ a_UIcmd_open_url_nt(html->bw, url, focus);
+ } else {
+ a_Nav_push_nw(html->bw, url);
+ }
+ } else {
+ a_Nav_push(html->bw, url);
+ }
a_Url_free(url);
}
// /* now, make the rendered area have its focus back */
@@ -1479,7 +1487,7 @@ DilloHtmlInput *DilloHtmlForm::getRadioInput (const char *name)
void DilloHtmlReceiver::activate (Resource *resource)
{
- form->eventHandler(resource);
+ form->eventHandler(resource, NULL);
}
/*
@@ -1515,9 +1523,9 @@ void DilloHtmlReceiver::leave (Resource *resource)
}
void DilloHtmlReceiver::clicked (ButtonResource *resource,
- int buttonNo, int x, int y)
+ EventButton *event)
{
-// form->eventHandler(resource, x, y);
+ form->eventHandler(resource, event);
}
/*
@@ -1566,56 +1574,52 @@ DilloHtmlInput::~DilloHtmlInput ()
*/
void DilloHtmlInput::connectTo(DilloHtmlReceiver *form_receiver)
{
- Resource *resource = NULL;
- if (embed)
- resource = embed->getResource ();
- switch (type) {
- case DILLO_HTML_INPUT_UNKNOWN:
- case DILLO_HTML_INPUT_HIDDEN:
- case DILLO_HTML_INPUT_CHECKBOX:
- case DILLO_HTML_INPUT_RADIO:
- case DILLO_HTML_INPUT_BUTTON:
- case DILLO_HTML_INPUT_TEXTAREA:
- case DILLO_HTML_INPUT_SELECT:
- case DILLO_HTML_INPUT_SEL_LIST:
- // do nothing
- break;
- case DILLO_HTML_INPUT_TEXT:
- case DILLO_HTML_INPUT_PASSWORD:
- case DILLO_HTML_INPUT_INDEX:
- case DILLO_HTML_INPUT_SUBMIT:
- case DILLO_HTML_INPUT_RESET:
- case DILLO_HTML_INPUT_BUTTON_SUBMIT:
- case DILLO_HTML_INPUT_BUTTON_RESET:
- case DILLO_HTML_INPUT_IMAGE:
- case DILLO_HTML_INPUT_FILE:
- if (resource)
- resource->connectActivate (form_receiver);
- break;
+ Resource *resource;
+ if (embed && (resource = embed->getResource())) {
+ switch (type) {
+ case DILLO_HTML_INPUT_UNKNOWN:
+ case DILLO_HTML_INPUT_HIDDEN:
+ case DILLO_HTML_INPUT_CHECKBOX:
+ case DILLO_HTML_INPUT_RADIO:
+ case DILLO_HTML_INPUT_BUTTON:
+ case DILLO_HTML_INPUT_TEXTAREA:
+ case DILLO_HTML_INPUT_SELECT:
+ case DILLO_HTML_INPUT_SEL_LIST:
+ // do nothing
+ break;
+ case DILLO_HTML_INPUT_SUBMIT:
+ case DILLO_HTML_INPUT_RESET:
+ case DILLO_HTML_INPUT_BUTTON_SUBMIT:
+ case DILLO_HTML_INPUT_BUTTON_RESET:
+ case DILLO_HTML_INPUT_IMAGE:
+ case DILLO_HTML_INPUT_FILE:
+ ((ButtonResource *)resource)->connectClicked (form_receiver);
+ case DILLO_HTML_INPUT_TEXT:
+ case DILLO_HTML_INPUT_PASSWORD:
+ case DILLO_HTML_INPUT_INDEX:
+ resource->connectActivate (form_receiver);
+ break;
+ break;
+ }
}
}
/*
* Activate a form
*/
-void DilloHtmlInput::activate(DilloHtmlForm *form, bool entry_input_submits)
+void DilloHtmlInput::activate(DilloHtmlForm *form, int num_entry_fields,
+ EventButton *event)
{
- switch (type) {
- case DILLO_HTML_INPUT_TEXT:
- case DILLO_HTML_INPUT_PASSWORD:
- if (entry_input_submits)
- form->submit (this);
- break;
- case DILLO_HTML_INPUT_FILE:
+ if (type == DILLO_HTML_INPUT_FILE) {
readFile (form->html->bw);
- break;
- case DILLO_HTML_INPUT_RESET:
- case DILLO_HTML_INPUT_BUTTON_RESET:
- form->reset ();
- break;
- default:
- form->submit (this);
- break;
+ } else if (type == DILLO_HTML_INPUT_RESET ||
+ type == DILLO_HTML_INPUT_BUTTON_RESET) {
+ form->reset();
+ } else if ((type != DILLO_HTML_INPUT_TEXT &&
+ type != DILLO_HTML_INPUT_PASSWORD) ||
+ prefs.enterpress_forces_submit ||
+ num_entry_fields == 1) {
+ form->submit(this, event);
}
}