guint ada_gdk_event_get_button (GdkEvent * event) { guint button; if (!gdk_event_get_button(event, &button)) { return ada_gdk_invalid_guint_value; } return button; }
static gboolean e_minicard_view_event (GnomeCanvasItem *item, GdkEvent *event) { EMinicardView *view; guint event_button = 0; view = E_MINICARD_VIEW (item); switch (event->type) { case GDK_2BUTTON_PRESS: gdk_event_get_button (event, &event_button); if (event_button == 1) { gboolean editable; g_object_get (view->adapter, "editable", &editable, NULL); if (editable) e_minicard_view_create_contact (view); return TRUE; } case GDK_BUTTON_PRESS: gdk_event_get_button (event, &event_button); if (event_button == 3) e_minicard_view_right_click (view, event); break; case GDK_KEY_PRESS: if (((event->key.state & GDK_SHIFT_MASK) != 0 && event->key.keyval == GDK_KEY_F10) || ((event->key.state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) == 0 && event->key.keyval == GDK_KEY_Menu)) { e_minicard_view_right_click (view, event); } break; default: break; } return GNOME_CANVAS_ITEM_CLASS (e_minicard_view_parent_class)-> event (item, event); }
static void eog_zoom_entry_icon_press_cb (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer data) { EogZoomEntry *zoom_entry; guint button; g_return_if_fail (EOG_IS_ZOOM_ENTRY (data)); g_return_if_fail (icon_pos == GTK_ENTRY_ICON_SECONDARY); if (!gdk_event_get_button (event, &button) || button != GDK_BUTTON_PRIMARY) return; zoom_entry = EOG_ZOOM_ENTRY (data); gtk_widget_show (get_popup (zoom_entry)); zoom_entry->priv->popup_shown = TRUE; }
static gboolean mail_shell_view_popup_event_cb (EMailShellView *mail_shell_view, const gchar *uri, GdkEvent *event) { EMailShellContent *mail_shell_content; EMailDisplay *display; EShellView *shell_view; EMailReader *reader; EMailView *mail_view; GtkMenu *menu; guint button; if (uri != NULL) return FALSE; mail_shell_content = mail_shell_view->priv->mail_shell_content; mail_view = e_mail_shell_content_get_mail_view (mail_shell_content); reader = E_MAIL_READER (mail_view); display = e_mail_reader_get_mail_display (reader); if (e_web_view_get_cursor_image_src (E_WEB_VIEW (display)) != NULL) return FALSE; menu = e_mail_reader_get_popup_menu (reader); shell_view = E_SHELL_VIEW (mail_shell_view); e_shell_view_update_actions (shell_view); if (!event || !gdk_event_get_button (event, &button)) button = 0; gtk_menu_popup ( menu, NULL, NULL, NULL, NULL, button, event ? gdk_event_get_time (event) : gtk_get_current_event_time ()); return TRUE; }
void ImGui_ImplGtk3Cogl_HandleEvent(GdkEvent *event) { ImGuiIO& io = ImGui::GetIO(); GdkEventType type = gdk_event_get_event_type(event); switch (type) { case GDK_MOTION_NOTIFY: { gdouble x = 0.0f, y = 0.0f; if (gdk_event_get_coords(event, &x, &y)) g_MousePosition = ImVec2(x, y); break; } case GDK_BUTTON_PRESS: case GDK_BUTTON_RELEASE: { guint button = 0; if (gdk_event_get_button(event, &button) && button > 0 && button <= 5) { if (type == GDK_BUTTON_PRESS) g_MousePressed[button - 1] = true; } break; } case GDK_SCROLL: { gdouble x, y; if (gdk_event_get_scroll_deltas(event, &x, &y)) g_MouseWheel = -y; break; } case GDK_KEY_PRESS: case GDK_KEY_RELEASE: { GdkEventKey *e = (GdkEventKey *) event; static const struct { enum ImGuiKey_ imgui; guint gdk; } gdk_key_to_imgui_key[] = { { ImGuiKey_Tab, GDK_KEY_Tab }, { ImGuiKey_Tab, GDK_KEY_ISO_Left_Tab }, { ImGuiKey_LeftArrow, GDK_KEY_Left }, { ImGuiKey_RightArrow, GDK_KEY_Right }, { ImGuiKey_UpArrow, GDK_KEY_Up }, { ImGuiKey_DownArrow, GDK_KEY_Down }, { ImGuiKey_PageUp, GDK_KEY_Page_Up }, { ImGuiKey_PageDown, GDK_KEY_Page_Down }, { ImGuiKey_Home, GDK_KEY_Home }, { ImGuiKey_End, GDK_KEY_End }, { ImGuiKey_Delete, GDK_KEY_Delete }, { ImGuiKey_Backspace, GDK_KEY_BackSpace }, { ImGuiKey_Space, GDK_KEY_space }, { ImGuiKey_Enter, GDK_KEY_Return }, { ImGuiKey_Escape, GDK_KEY_Escape }, { ImGuiKey_A, GDK_KEY_a }, { ImGuiKey_C, GDK_KEY_c }, { ImGuiKey_V, GDK_KEY_v }, { ImGuiKey_X, GDK_KEY_x }, { ImGuiKey_Y, GDK_KEY_y }, { ImGuiKey_Z, GDK_KEY_z }, }; for (unsigned i = 0; i < ARRAY_SIZE(gdk_key_to_imgui_key); i++) { if (e->keyval == gdk_key_to_imgui_key[i].gdk) io.KeysDown[gdk_key_to_imgui_key[i].imgui] = type == GDK_KEY_PRESS; } gunichar c = gdk_keyval_to_unicode(e->keyval); if (g_unichar_isprint(c) && ImGuiKey_COUNT + c < ARRAY_SIZE(io.KeysDown)) io.KeysDown[ImGuiKey_COUNT + c] = type == GDK_KEY_PRESS; if (type == GDK_KEY_PRESS && e->string) io.AddInputCharactersUTF8(e->string); struct { bool *var; GdkModifierType modifier; guint keyvals[3]; } mods[] = { { &io.KeyCtrl, GDK_CONTROL_MASK, { GDK_KEY_Control_L, GDK_KEY_Control_R, 0 }, }, { &io.KeyShift, GDK_SHIFT_MASK, { GDK_KEY_Shift_L, GDK_KEY_Shift_R, 0 }, }, { &io.KeyAlt, GDK_MOD1_MASK, { GDK_KEY_Alt_L, GDK_KEY_Alt_R, 0 }, }, { &io.KeySuper, GDK_SUPER_MASK, { GDK_KEY_Super_L, GDK_KEY_Super_R, 0 }, } }; for (unsigned i = 0; i < ARRAY_SIZE(mods); i++) { *mods[i].var = (mods[i].modifier & e->state); bool match = false; for (int j = 0; mods[i].keyvals[j] != 0; j++) if (e->keyval == mods[i].keyvals[j]) match = true; if (match) *mods[i].var = type == GDK_KEY_PRESS; } break; } default: break; } // We trigger 2 subsequent redraws for each event because of the // way some ImGui widgets work. For example a Popup menu will only // appear a frame after a click happened. g_NumRedraws = 2; GdkFrameClock *clock = gdk_window_get_frame_clock(g_GdkWindow); gdk_frame_clock_request_phase(clock, GDK_FRAME_CLOCK_PHASE_PAINT); }
/* 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; }