diff options
Diffstat (limited to 'riscos/window.c')
-rw-r--r-- | riscos/window.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/riscos/window.c b/riscos/window.c index dbe505eb5..f3a6f05ce 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -94,6 +94,8 @@ static void gui_window_set_extent(struct gui_window *g, int width, int height); static void ro_gui_window_redraw(wimp_draw *redraw); static void ro_gui_window_scroll(wimp_scroll *scroll); +static void ro_gui_window_pointer_entering(wimp_entering *entering); +static void ro_gui_window_track_end(wimp_leaving *leaving, void *data); static void ro_gui_window_open(wimp_open *open); static void ro_gui_window_close(wimp_w w); static bool ro_gui_window_click(wimp_pointer *mouse); @@ -546,6 +548,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, ro_gui_wimp_event_register_close_window(g->window, ro_gui_window_close); ro_gui_wimp_event_register_redraw_window(g->window, ro_gui_window_redraw); ro_gui_wimp_event_register_scroll_window(g->window, ro_gui_window_scroll); + ro_gui_wimp_event_register_pointer_entering_window(g->window, ro_gui_window_pointer_entering); ro_gui_wimp_event_register_keypress(g->window, ro_gui_window_keypress); ro_gui_wimp_event_register_mouse_click(g->window, ro_gui_window_click); ro_gui_wimp_event_register_menu(g->window, ro_gui_browser_window_menu, @@ -3134,6 +3137,37 @@ void ro_gui_window_scroll(wimp_scroll *scroll) } } +/** + * Process Pointer Entering Window events in a browser window. + * + * \param *entering The wimp pointer entering event data block. + */ + +static void ro_gui_window_pointer_entering(wimp_entering *entering) +{ + struct gui_window *g = ro_gui_window_lookup(entering->w); + + if (g != NULL) + ro_mouse_track_start(ro_gui_window_track_end, + ro_gui_window_mouse_at, g); +} + +/** + * Process Pointer Leaving Window events in a browser window. These arrive via + * the termination callback handler from ro_mouse's mouse tracking. + * + * \param *leaving The wimp pointer leaving event data block. + * \param *data The GUI window that the pointer is leaving. + */ + +static void ro_gui_window_track_end(wimp_leaving *leaving, void *data) +{ + struct gui_window *g = (struct gui_window *) data; + + if (g != NULL) + gui_window_set_pointer(g, GUI_POINTER_DEFAULT); +} + /** * Scroll a browser window, either via the core or directly using the |