/* Mouse scroll wheel events */ gint ghid_port_window_mouse_scroll_cb (GtkWidget * widget, GdkEventScroll * ev, GHidPort * out) { ModifierKeysState mk; GdkModifierType state; int button; state = (GdkModifierType) (ev->state); mk = ghid_modifier_keys_state (&state); /* X11 gtk hard codes buttons 4, 5, 6, 7 as below in * gtk+/gdk/x11/gdkevents-x11.c:1121, but quartz and windows have * special mouse scroll events, so this may conflict with a mouse * who has buttons 4 - 7 that aren't the scroll wheel? */ switch(ev->direction) { case GDK_SCROLL_UP: button = 4; break; case GDK_SCROLL_DOWN: button = 5; break; case GDK_SCROLL_LEFT: button = 6; break; case GDK_SCROLL_RIGHT: button = 7; break; default: button = -1; } do_mouse_action(button, mk); return TRUE; }
gboolean ghid_port_button_release_cb (GtkWidget * drawing_area, GdkEventButton * ev, GtkUIManager * ui) { ModifierKeysState mk; gboolean drag; GdkModifierType state; ghid_note_event_location (ev); state = (GdkModifierType) (ev->state); mk = ghid_modifier_keys_state (&state); drag = have_crosshair_attachments (); if (drag) HideCrosshair (TRUE); do_mouse_action(ev->button, mk + M_Release); if (drag) { AdjustAttachedObjects (); ghid_invalidate_all (); RestoreCrosshair (TRUE); ghid_screen_update (); } ghid_set_status_line_label (); g_idle_add (ghid_idle_cb, NULL); return TRUE; }
gboolean ghid_port_button_press_cb (GtkWidget * drawing_area, GdkEventButton * ev, GtkUIManager * ui) { ModifierKeysState mk; gboolean drag; GdkModifierType state; /* Reject double and triple click events */ if (ev->type != GDK_BUTTON_PRESS) return TRUE; ghid_note_event_location (ev); state = (GdkModifierType) (ev->state); mk = ghid_modifier_keys_state (&state); ghid_show_crosshair (FALSE); HideCrosshair (TRUE); drag = have_crosshair_attachments (); do_mouse_action(ev->button, mk); ghid_invalidate_all (); RestoreCrosshair (TRUE); ghid_set_status_line_label (); ghid_show_crosshair (TRUE); if (!gport->panning) g_idle_add (ghid_idle_cb, NULL); return TRUE; }
gboolean ghid_port_button_release_cb (GtkWidget * drawing_area, GdkEventButton * ev, gpointer data) { ModifierKeysState mk; GdkModifierType state; ghid_note_event_location (ev); state = (GdkModifierType) (ev->state); mk = ghid_modifier_keys_state (&state); do_mouse_action(ev->button, mk + M_Release); AdjustAttachedObjects (); ghid_invalidate_all (); ghid_window_set_name_label (PCB->Name); ghid_set_status_line_label (); g_idle_add (ghid_idle_cb, NULL); return TRUE; }
gboolean ghid_port_button_press_cb (GtkWidget * drawing_area, GdkEventButton * ev, gpointer data) { ModifierKeysState mk; GdkModifierType state; /* Reject double and triple click events */ if (ev->type != GDK_BUTTON_PRESS) return TRUE; ghid_note_event_location (ev); state = (GdkModifierType) (ev->state); mk = ghid_modifier_keys_state (&state); do_mouse_action(ev->button, mk); ghid_invalidate_all (); ghid_window_set_name_label (PCB->Name); ghid_set_status_line_label (); if (!gport->panning) g_idle_add (ghid_idle_cb, NULL); return TRUE; }