gboolean on_entry_key_press_event(GtkEntry *entry, GdkEvent *event) { guint k = GDK_KEY_VoidSymbol; gdk_event_get_keyval(event, &k); GdkModifierType s; gdk_event_get_state(event, &s); #define KEY(S) (k == S) #define CTRL(S) (KEY(S) && s & GDK_CONTROL_MASK) #define SHIFT(S) (KEY(S) && s & GDK_SHIFT_MASK) if (KEY(GDK_KEY_Escape) || CTRL(GDK_KEY_c)) gtk_main_quit(); else if (KEY(GDK_KEY_Tab) || CTRL(GDK_KEY_i)) gtk_entry_set_text(entry, row_text(selected_row())); else if (KEY(GDK_KEY_Down) || CTRL(GDK_KEY_f)) select_row(selected_row() + 1); else if (KEY(GDK_KEY_Up) || CTRL(GDK_KEY_b)) select_row(selected_row() - 1); else if (KEY(GDK_KEY_Return) || CTRL(GDK_KEY_j)) output(row_text(selected_row())); else if (SHIFT(GDK_KEY_Return) || CTRL(GDK_KEY_J)) output(entry_text()); return FALSE; }
static gboolean is_keynav_event (GdkEvent *event, guint keyval) { GdkModifierType state = 0; gdk_event_get_state (event, &state); if (keyval == GDK_KEY_Tab || keyval == GDK_KEY_KP_Tab || keyval == GDK_KEY_Up || keyval == GDK_KEY_KP_Up || keyval == GDK_KEY_Down || keyval == GDK_KEY_KP_Down || keyval == GDK_KEY_Left || keyval == GDK_KEY_KP_Left || keyval == GDK_KEY_Right || keyval == GDK_KEY_KP_Right || keyval == GDK_KEY_Home || keyval == GDK_KEY_KP_Home || keyval == GDK_KEY_End || keyval == GDK_KEY_KP_End || keyval == GDK_KEY_Page_Up || keyval == GDK_KEY_KP_Page_Up || keyval == GDK_KEY_Page_Down || keyval == GDK_KEY_KP_Page_Down || ((state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) != 0)) return TRUE; return FALSE; }
static gboolean is_keynav_event (GdkEvent *event, guint keyval) { GdkModifierType state = 0; gdk_event_get_state (event, &state); if (keyval == GDK_KEY_Tab || keyval == GDK_KEY_KP_Tab || keyval == GDK_KEY_Up || keyval == GDK_KEY_KP_Up || keyval == GDK_KEY_Down || keyval == GDK_KEY_KP_Down || keyval == GDK_KEY_Left || keyval == GDK_KEY_KP_Left || keyval == GDK_KEY_Right || keyval == GDK_KEY_KP_Right || keyval == GDK_KEY_Home || keyval == GDK_KEY_KP_Home || keyval == GDK_KEY_End || keyval == GDK_KEY_KP_End || keyval == GDK_KEY_Page_Up || keyval == GDK_KEY_KP_Page_Up || keyval == GDK_KEY_Page_Down || keyval == GDK_KEY_KP_Page_Down || ((state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) != 0)) return TRUE; /* Other navigation events should get automatically * ignored as they will not change the content of the entry */ return FALSE; }
GdkModifierType ada_gdk_event_get_state (GdkEvent * event) { GdkModifierType state; if (!gdk_event_get_state(event, &state)) { return ada_gdk_invalid_guint_value; } return state; }
gboolean gimp_device_info_get_event_state (GimpDeviceInfo *info, GdkWindow *window, const GdkEvent *event, GdkModifierType *state) { if (gdk_event_get_state (event, state)) return TRUE; gimp_device_info_get_device_state (info, window, state); return FALSE; }
static inline WebEvent::Modifiers modifiersForEvent(const GdkEvent* event) { unsigned modifiers = 0; GdkModifierType state; // Check for a valid state in GdkEvent. if (!gdk_event_get_state(event, &state)) return static_cast<WebEvent::Modifiers>(0); if (state & GDK_CONTROL_MASK) modifiers |= WebEvent::ControlKey; if (state & GDK_SHIFT_MASK) modifiers |= WebEvent::ShiftKey; if (state & GDK_MOD1_MASK) modifiers |= WebEvent::AltKey; if (state & GDK_META_MASK) modifiers |= WebEvent::MetaKey; return static_cast<WebEvent::Modifiers>(modifiers); }
static void move_item_cb (GtkAction *action, EggEditableToolbar *etoolbar) { GtkWidget *toolitem = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM); GtkTargetList *list = gtk_target_list_new (dest_drag_types, G_N_ELEMENTS (dest_drag_types)); GdkEvent *realevent = gtk_get_current_event(); GdkEventMotion event; event.type = GDK_MOTION_NOTIFY; event.window = realevent->any.window; event.send_event = FALSE; event.axes = NULL; event.time = gdk_event_get_time (realevent); gdk_event_get_state (realevent, &event.state); gdk_event_get_coords (realevent, &event.x, &event.y); gdk_event_get_root_coords (realevent, &event.x_root, &event.y_root); gtk_drag_begin (toolitem, list, GDK_ACTION_MOVE, 1, (GdkEvent *)&event); gtk_target_list_unref (list); }
static gboolean key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { char **input_buffer = (char **)user_data; GdkModifierType state = 0; gdk_event_get_state((GdkEvent*)event, &state); if (*input_buffer && event->type == GDK_KEY_PRESS) { switch (state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) { case 0: case GDK_SHIFT_MASK: return plain_key_pressed(input_buffer, event->keyval); case GDK_CONTROL_MASK: return ctrl_plus_key_pressed(input_buffer, event->keyval, widget); default: return FALSE; } } return FALSE; }
static inline WebMouseEvent::Button buttonForEvent(const GdkEvent* event) { unsigned button = 0; switch (event->type) { case GDK_ENTER_NOTIFY: case GDK_LEAVE_NOTIFY: case GDK_MOTION_NOTIFY: { button = WebMouseEvent::NoButton; GdkModifierType state; gdk_event_get_state(event, &state); if (state & GDK_BUTTON1_MASK) button = WebMouseEvent::LeftButton; else if (state & GDK_BUTTON2_MASK) button = WebMouseEvent::MiddleButton; else if (state & GDK_BUTTON3_MASK) button = WebMouseEvent::RightButton; break; } case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: case GDK_BUTTON_RELEASE: if (event->button.button == 1) button = WebMouseEvent::LeftButton; else if (event->button.button == 2) button = WebMouseEvent::MiddleButton; else if (event->button.button == 3) button = WebMouseEvent::RightButton; break; default: ASSERT_NOT_REACHED(); } return static_cast<WebMouseEvent::Button>(button); }
/* i just cut n pasted the old handler in here and made minor changes.. * not done yet. so the real keyboard input handler will just pass * it off to this. i think.*/ void terminal_process_input_key(GdkEventKey * event) { GdkModifierType modifiers; gboolean modifier = FALSE; if (event->type == GDK_KEY_PRESS) { /* Read the modifiers */ if (gdk_event_get_state((GdkEvent *)event, &modifiers) == FALSE) { modifiers = 0; } g_debug("Modifier state = %x", event->state); switch (event->keyval) { /* case GDK_Alt_L: case GDK_Alt_R: case GDK_Caps_Lock: case GDK_Control_L: case GDK_Control_R: case GDK_Eisu_Shift: case GDK_Hyper_L: case GDK_Hyper_R: case GDK_ISO_First_Group_Lock: case GDK_ISO_Group_Lock: case GDK_ISO_Group_Shift: case GDK_ISO_Last_Group_Lock: case GDK_ISO_Level3_Lock: case GDK_ISO_Level3_Shift: case GDK_ISO_Lock: case GDK_ISO_Next_Group_Lock: case GDK_ISO_Prev_Group_Lock: case GDK_Kana_Lock: case GDK_Kana_Shift: case GDK_Meta_L: case GDK_Meta_R: case GDK_Num_Lock: case GDK_Scroll_Lock: case GDK_Shift_L: case GDK_Shift_Lock: case GDK_Shift_R: case GDK_Super_L: case GDK_Super_R: modifier = TRUE; g_debug("Modifier press, keyval=%d", event->keyval); break; */ case GDK_Up: terminal_stuff_key_input("\033[A", 3); break; case GDK_Down: terminal_stuff_key_input("\033[B", 3); break; case GDK_Left: terminal_stuff_key_input("\033[D", 3); break; case GDK_Right: terminal_stuff_key_input("\033[C", 3); break; case GDK_Return: /* Assume binary mode - send CR */ terminal_stuff_key_input("\r", 1); break; case GDK_BackSpace: terminal_stuff_key_input("\010", 1); break; case GDK_Delete: terminal_stuff_key_input("\x7f", 1); break; case GDK_Home: terminal_stuff_key_input("\033[H", 3); break; case GDK_End: terminal_stuff_key_input("\033[K", 3); break; case GDK_Insert: terminal_stuff_key_input("\026", 1); break; default: modifier = FALSE; g_debug("Key press: (keyval=%d): %s", event->keyval, event->string); /* CTRL key pressed? */ /*if (event->state & GDK_CONTROL_MASK) terminal_process_control_key(event->keyval); else*/ terminal_stuff_key_input(event->string, event->length); break; } //return TRUE; } //return FALSE; }
/* Links can also be activated by clicking. */ static gboolean textview_event_after (GtkTextView *textview, GdkEvent *event) { GtkTextIter start, end, iter; GtkTextBuffer *buffer; gint x, y; GdkModifierType mt = 0; guint event_button = 0; gdouble event_x_win = 0; gdouble event_y_win = 0; g_return_val_if_fail (GTK_IS_TEXT_VIEW (textview), FALSE); if (event->type == GDK_KEY_PRESS || event->type == GDK_KEY_RELEASE) { guint event_keyval = 0; gdk_event_get_keyval (event, &event_keyval); switch (event_keyval) { case GDK_KEY_Control_L: case GDK_KEY_Control_R: update_ctrl_state ( textview, event->type == GDK_KEY_PRESS); break; } return FALSE; } if (!gdk_event_get_state (event, &mt)) { GdkWindow *window; GdkDisplay *display; GdkDeviceManager *device_manager; GdkDevice *device; window = gtk_widget_get_parent_window (GTK_WIDGET (textview)); display = gdk_window_get_display (window); device_manager = gdk_display_get_device_manager (display); device = gdk_device_manager_get_client_pointer (device_manager); gdk_window_get_device_position (window, device, NULL, NULL, &mt); } update_ctrl_state (textview, (mt & GDK_CONTROL_MASK) != 0); if (event->type != GDK_BUTTON_RELEASE) return FALSE; gdk_event_get_button (event, &event_button); gdk_event_get_coords (event, &event_x_win, &event_y_win); if (event_button != 1 || (mt & GDK_CONTROL_MASK) == 0) return FALSE; buffer = gtk_text_view_get_buffer (textview); /* we shouldn't follow a link if the user has selected something */ gtk_text_buffer_get_selection_bounds (buffer, &start, &end); if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end)) return FALSE; gtk_text_view_window_to_buffer_coords ( textview, GTK_TEXT_WINDOW_WIDGET, event_x_win, event_y_win, &x, &y); gtk_text_view_get_iter_at_location (textview, &iter, x, y); invoke_link_if_present (buffer, &iter); update_mouse_cursor (textview, x, y); return FALSE; }