X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fmouse.c;h=2c7d7b23812e67de6d83e62fd0659d0334bb930f;hb=refs%2Fheads%2Fgtk3;hp=cead7ab53dbcb71632a5173b164cccd06994244b;hpb=e30890ee1f3597bc0c63729bbcdd80076d7d78dc;p=projects%2Fchimara%2Fchimara.git diff --git a/libchimara/mouse.c b/libchimara/mouse.c index cead7ab..2c7d7b2 100644 --- a/libchimara/mouse.c +++ b/libchimara/mouse.c @@ -1,11 +1,57 @@ -#include +#include "mouse.h" +#include "magic.h" +/** + * glk_request_mouse_event: + * @win: Window on which to request a mouse input event. + * + * Requests mouse input on the window @win. + */ void glk_request_mouse_event(winid_t win) { + VALID_WINDOW(win, return); + g_return_if_fail(win != NULL); + g_return_if_fail(win->type == wintype_TextGrid || win->type == wintype_Graphics); + + g_signal_handler_unblock(win->widget, win->button_press_event_handler); } +/** + * glk_cancel_mouse_event: + * @win: Window with a mouse input event pending. + * + * Cancels the pending mouse input request on @win. + */ void glk_cancel_mouse_event(winid_t win) { + VALID_WINDOW(win, return); + g_return_if_fail(win != NULL); + g_return_if_fail(win->type == wintype_TextGrid || win->type == wintype_Graphics); + + g_signal_handler_block(win->widget, win->button_press_event_handler); +} + +gboolean +on_window_button_press(GtkWidget *widget, GdkEventButton *event, winid_t win) +{ + ChimaraGlk *glk = CHIMARA_GLK(gtk_widget_get_ancestor(win->widget, CHIMARA_TYPE_GLK)); + g_assert(glk); + + switch(win->type) + { + case wintype_TextGrid: + event_throw(glk, evtype_MouseInput, win, event->x/win->unit_width, event->y/win->unit_height); + break; + case wintype_Graphics: + event_throw(glk, evtype_MouseInput, win, event->x, event->y); + break; + default: + ILLEGAL_PARAM("Unknown window type: %u", win->type); + } + + g_signal_handler_block(win->widget, win->button_press_event_handler); + + return TRUE; }