diff options
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser.c | 38 | ||||
-rw-r--r-- | desktop/gui.h | 3 |
2 files changed, 39 insertions, 2 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index 305f7186f..00cf88129 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -45,6 +45,7 @@ static void browser_window_update(struct browser_window *bw, bool scroll_to_top); static void browser_window_set_status(struct browser_window *bw, const char *text); +static void browser_window_set_pointer(gui_pointer_shape shape); static void download_window_callback(content_msg msg, struct content *c, void *p1, void *p2, const char *error); @@ -424,6 +425,17 @@ void browser_window_set_status(struct browser_window *bw, const char *text) gui_window_set_status(bw->window, text); } +/** + * Change the shape of the mouse pointer + * + * \param shape shape to use + */ + +void browser_window_set_pointer(gui_pointer_shape shape) +{ + gui_window_set_pointer(shape); +} + /** * Close and destroy a browser window. @@ -1358,6 +1370,7 @@ void browser_window_follow_link(struct browser_window *bw, browser_window_create(url); } else if (click_type == 0) { browser_window_set_status(bw, url); + browser_window_set_pointer(GUI_POINTER_POINT); done = 1; } free(url); @@ -1386,29 +1399,50 @@ void browser_window_follow_link(struct browser_window *bw, browser_window_create(url); } else if (click_type == 0) { browser_window_set_status(bw, url); + browser_window_set_pointer(GUI_POINTER_POINT); done = 1; } free(url); break; } + if (click_type == 0 && click_boxes[i].box->gadget != NULL) { + if (click_boxes[i].box->gadget->type == GADGET_TEXTBOX || + click_boxes[i].box->gadget->type == GADGET_TEXTAREA || + click_boxes[i].box->gadget->type == GADGET_PASSWORD || + click_boxes[i].box->gadget->type == GADGET_FILE) { + browser_window_set_pointer(GUI_POINTER_CARET); + done = 1; + break; + } + else if (click_boxes[i].box->gadget->type == GADGET_SELECT) { + browser_window_set_pointer(GUI_POINTER_MENU); + done = 1; + break; + } + } if (click_type == 0 && click_boxes[i].box->title != NULL) { browser_window_set_status(bw, click_boxes[i].box-> title); + browser_window_set_pointer(GUI_POINTER_DEFAULT); done = 1; break; } } if (click_type == 0 && done == 0) { - if (bw->loading_content != 0) + if (bw->loading_content != 0) { browser_window_set_status(bw, bw->loading_content-> status_message); - else + browser_window_set_pointer(GUI_POINTER_DEFAULT); + } + else { browser_window_set_status(bw, bw->current_content-> status_message); + browser_window_set_pointer(GUI_POINTER_DEFAULT); + } } free(click_boxes); diff --git a/desktop/gui.h b/desktop/gui.h index 62dcf27a7..684332c56 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -15,6 +15,8 @@ struct gui_window; typedef struct gui_window gui_window; +typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET, + GUI_POINTER_MENU } gui_pointer_shape; #include <stdbool.h> #include "netsurf/desktop/browser.h" @@ -33,6 +35,7 @@ void gui_window_set_scroll(gui_window* g, unsigned long sx, unsigned long sy); unsigned long gui_window_get_width(gui_window* g); void gui_window_set_extent(gui_window* g, unsigned long width, unsigned long height); void gui_window_set_status(gui_window* g, const char* text); +void gui_window_set_pointer(gui_pointer_shape shape); void gui_window_set_title(gui_window* g, char* title); void gui_window_set_url(gui_window *g, char *url); |