void snooper_install(Tbfwin *bfwin) { bfwin->snooper = g_new0(Tsnooper,1); gtk_key_snooper_install( (GtkKeySnoopFunc) main_snooper, bfwin); SNOOPER(bfwin->snooper)->last_seq = gdk_event_new(GDK_KEY_PRESS); SNOOPER(bfwin->snooper)->last_event = gdk_event_new(GDK_KEY_PRESS); /* SNOOPER(bfwin->snooper)->stat = SNOOPER_ACTIVE; */ }
static void handle_touch_event (GdkWindow *window, const MirTouchEvent *mir_touch_event) { const MirInputEvent *mir_input_event = mir_touch_event_input_event (mir_touch_event); guint n = mir_touch_event_point_count (mir_touch_event); GdkEvent *gdk_event; guint i; for (i = 0; i < n; i++) { MirTouchAction action = mir_touch_event_action (mir_touch_event, i); if (action == mir_touch_action_up) gdk_event = gdk_event_new (GDK_TOUCH_END); else if (action == mir_touch_action_down) gdk_event = gdk_event_new (GDK_TOUCH_BEGIN); else gdk_event = gdk_event_new (GDK_TOUCH_UPDATE); gdk_event->touch.window = window; gdk_event->touch.sequence = GINT_TO_POINTER (mir_touch_event_id (mir_touch_event, i)); gdk_event->touch.time = mir_input_event_get_event_time (mir_input_event); gdk_event->touch.state = get_modifier_state (mir_touch_event_modifiers (mir_touch_event), 0); gdk_event->touch.x = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_x); gdk_event->touch.y = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_y); gdk_event->touch.x_root = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_x); gdk_event->touch.y_root = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_y); gdk_event->touch.emulating_pointer = TRUE; gdk_event_set_pointer_emulated (gdk_event, TRUE); send_event (window, get_pointer (window), gdk_event); } }
void PageClientImpl::doneWithTouchEvent(const NativeWebTouchEvent& event, bool wasEventHandled) { if (wasEventHandled) return; #if HAVE(GTK_GESTURES) GestureController& gestureController = webkitWebViewBaseGestureController(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); if (gestureController.handleEvent(event.nativeEvent())) return; #endif // Emulate pointer events if unhandled. const GdkEvent* touchEvent = event.nativeEvent(); if (!touchEvent->touch.emulating_pointer) return; GUniquePtr<GdkEvent> pointerEvent; if (touchEvent->type == GDK_TOUCH_UPDATE) { pointerEvent.reset(gdk_event_new(GDK_MOTION_NOTIFY)); pointerEvent->motion.time = touchEvent->touch.time; pointerEvent->motion.x = touchEvent->touch.x; pointerEvent->motion.y = touchEvent->touch.y; pointerEvent->motion.x_root = touchEvent->touch.x_root; pointerEvent->motion.y_root = touchEvent->touch.y_root; pointerEvent->motion.state = touchEvent->touch.state | GDK_BUTTON1_MASK; } else { switch (touchEvent->type) { case GDK_TOUCH_END: pointerEvent.reset(gdk_event_new(GDK_BUTTON_RELEASE)); pointerEvent->button.state = touchEvent->touch.state | GDK_BUTTON1_MASK; break; case GDK_TOUCH_BEGIN: pointerEvent.reset(gdk_event_new(GDK_BUTTON_PRESS)); break; default: ASSERT_NOT_REACHED(); } pointerEvent->button.button = 1; pointerEvent->button.time = touchEvent->touch.time; pointerEvent->button.x = touchEvent->touch.x; pointerEvent->button.y = touchEvent->touch.y; pointerEvent->button.x_root = touchEvent->touch.x_root; pointerEvent->button.y_root = touchEvent->touch.y_root; } gdk_event_set_device(pointerEvent.get(), gdk_event_get_device(touchEvent)); gdk_event_set_source_device(pointerEvent.get(), gdk_event_get_source_device(touchEvent)); pointerEvent->any.window = GDK_WINDOW(g_object_ref(touchEvent->any.window)); pointerEvent->any.send_event = TRUE; gtk_widget_event(m_viewWidget, pointerEvent.get()); }
static void point_release (PointState *point, guint button) { GdkDisplay *display; GdkDevice *device; GdkSeat *seat; GdkEvent *ev; if (point->widget == NULL) return; display = gtk_widget_get_display (point->widget); seat = gdk_display_get_default_seat (display); device = gdk_seat_get_pointer (seat); if (!point->widget) return; if (point == &mouse_state) { if ((point->state & (GDK_BUTTON1_MASK << (button - 1))) == 0) return; ev = gdk_event_new (GDK_BUTTON_RELEASE); ev->any.window = g_object_ref (gtk_widget_get_window (point->widget)); ev->button.time = GDK_CURRENT_TIME; ev->button.x = point->x; ev->button.y = point->y; ev->button.state = point->state; point->state &= ~(GDK_BUTTON1_MASK << (button - 1)); } else { ev = gdk_event_new (GDK_TOUCH_END); ev->any.window = g_object_ref (gtk_widget_get_window (point->widget)); ev->touch.time = GDK_CURRENT_TIME; ev->touch.x = point->x; ev->touch.y = point->y; ev->touch.sequence = EVENT_SEQUENCE (point); ev->touch.state = point->state; if (point == &touch_state[0]) ev->touch.emulating_pointer = TRUE; } gdk_event_set_device (ev, device); gtk_main_do_event (ev); gdk_event_free (ev); }
static void point_update (PointState *point, GtkWidget *widget, gdouble x, gdouble y) { GdkDisplay *display; GdkDevice *device; GdkSeat *seat; GdkEvent *ev; display = gtk_widget_get_display (widget); seat = gdk_display_get_default_seat (display); device = gdk_seat_get_pointer (seat); point->x = x; point->y = y; if (point == &mouse_state) { ev = gdk_event_new (GDK_MOTION_NOTIFY); ev->any.window = g_object_ref (gtk_widget_get_window (widget)); ev->button.time = GDK_CURRENT_TIME; ev->motion.x = x; ev->motion.y = y; ev->motion.state = point->state; } else { if (!point->widget || widget != point->widget) return; ev = gdk_event_new (GDK_TOUCH_UPDATE); ev->any.window = g_object_ref (gtk_widget_get_window (widget)); ev->touch.time = GDK_CURRENT_TIME; ev->touch.x = x; ev->touch.y = y; ev->touch.sequence = EVENT_SEQUENCE (point); ev->touch.state = 0; if (point == &touch_state[0]) ev->touch.emulating_pointer = TRUE; } gdk_event_set_device (ev, device); gtk_main_do_event (ev); gdk_event_free (ev); }
void _exo_gtk_widget_send_focus_change (GtkWidget *widget, gboolean in) { GdkEvent *fevent; #if !GTK_CHECK_VERSION(2, 22, 0) g_object_ref (G_OBJECT (widget)); #endif gtk_widget_set_can_focus (widget, in); fevent = gdk_event_new (GDK_FOCUS_CHANGE); fevent->focus_change.type = GDK_FOCUS_CHANGE; fevent->focus_change.window = g_object_ref (gtk_widget_get_window (widget)); fevent->focus_change.in = in; #if GTK_CHECK_VERSION(2, 22, 0) gtk_widget_send_focus_change (widget, fevent); #else if (in) GTK_OBJECT_FLAGS (widget) |= GTK_HAS_FOCUS; else GTK_OBJECT_FLAGS (widget) &= ~(GTK_HAS_FOCUS); gtk_widget_event (widget, fevent); g_object_notify (G_OBJECT (widget), "has-focus"); g_object_unref (G_OBJECT (widget)); #endif gdk_event_free (fevent); }
void doMouseButtonEvent(GtkWidget* widget, GdkEventType eventType, int x, int y, unsigned int button, unsigned int modifiers) { g_assert(gtk_widget_get_realized(widget)); GdkEvent* event = gdk_event_new(eventType); event->button.window = gtk_widget_get_window(widget); g_object_ref(event->button.window); event->button.time = GDK_CURRENT_TIME; event->button.x = x; event->button.y = y; event->button.axes = 0; event->button.state = modifiers; event->button.button = button; #ifndef GTK_API_VERSION_2 event->button.device = gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(widget))); #endif int xRoot, yRoot; gdk_window_get_root_coords(gtk_widget_get_window(widget), x, y, &xRoot, &yRoot); event->button.x_root = xRoot; event->button.y_root = yRoot; gtk_main_do_event(event); }
static gboolean emitKeyStroke(WebKitWebView* webView) { GdkEvent* pressEvent = gdk_event_new(GDK_KEY_PRESS); pressEvent->key.keyval = GDK_KEY_f; GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(webView)); pressEvent->key.window = window; g_object_ref(pressEvent->key.window); #ifndef GTK_API_VERSION_2 GdkDeviceManager* manager = gdk_display_get_device_manager(gdk_window_get_display(window)); gdk_event_set_device(pressEvent, gdk_device_manager_get_client_pointer(manager)); #endif // When synthesizing an event, an invalid hardware_keycode value // can cause it to be badly processed by Gtk+. GdkKeymapKey* keys; gint n_keys; if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), GDK_KEY_f, &keys, &n_keys)) { pressEvent->key.hardware_keycode = keys[0].keycode; g_free(keys); } GdkEvent* releaseEvent = gdk_event_copy(pressEvent); gtk_main_do_event(pressEvent); gdk_event_free(pressEvent); releaseEvent->key.type = GDK_KEY_RELEASE; gtk_main_do_event(releaseEvent); gdk_event_free(releaseEvent); return FALSE; }
static JSValueRef mouseMoveToCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return JSValueMakeUndefined(context); if (argumentCount < 2) return JSValueMakeUndefined(context); lastMousePositionX = (int)JSValueToNumber(context, arguments[0], exception); g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); lastMousePositionY = (int)JSValueToNumber(context, arguments[1], exception); g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY); event->motion.x = lastMousePositionX; event->motion.y = lastMousePositionY; event->motion.time = GDK_CURRENT_TIME; event->motion.window = gtk_widget_get_window(GTK_WIDGET(view)); g_object_ref(event->motion.window); event->button.device = getDefaultGDKPointerDevice(event->motion.window); event->motion.state = getStateFlags(); event->motion.axes = 0; int xRoot, yRoot; gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(view)), lastMousePositionX, lastMousePositionY, &xRoot, &yRoot); event->motion.x_root = xRoot; event->motion.y_root = yRoot; sendOrQueueEvent(event, false); return JSValueMakeUndefined(context); }
static void handle_close_event (GdkWindow *window, const MirCloseSurfaceEvent *event) { send_event (window, get_pointer (window), gdk_event_new (GDK_DESTROY)); gdk_window_destroy_notify (window); }
void WebViewTest::keyStroke(unsigned keyVal, unsigned keyModifiers) { g_assert(m_parentWindow); GtkWidget* viewWidget = GTK_WIDGET(m_webView); g_assert(gtk_widget_get_realized(viewWidget)); GOwnPtr<GdkEvent> event(gdk_event_new(GDK_KEY_PRESS)); event->key.keyval = keyVal; event->key.time = GDK_CURRENT_TIME; event->key.window = gtk_widget_get_window(viewWidget); g_object_ref(event->key.window); gdk_event_set_device(event.get(), gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(viewWidget)))); event->key.state = keyModifiers; // When synthesizing an event, an invalid hardware_keycode value can cause it to be badly processed by GTK+. GOwnPtr<GdkKeymapKey> keys; int keysCount; if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), keyVal, &keys.outPtr(), &keysCount)) event->key.hardware_keycode = keys.get()[0].keycode; gtk_main_do_event(event.get()); event->key.type = GDK_KEY_RELEASE; gtk_main_do_event(event.get()); }
static void shell_handle_configure(void *data, struct wl_shell *shell, uint32_t time, uint32_t edges, struct wl_surface *surface, int32_t width, int32_t height) { GdkWindow *window; GdkDisplay *display; GdkEvent *event; window = wl_surface_get_user_data(surface); display = gdk_window_get_display (window); event = gdk_event_new (GDK_CONFIGURE); event->configure.window = window; event->configure.send_event = FALSE; event->configure.width = width; event->configure.height = height; _gdk_window_update_size (window); _gdk_wayland_window_update_size (window, width, height, edges); g_object_ref(window); _gdk_wayland_display_deliver_event (display, event); }
void WebViewTest::doMouseButtonEvent(GdkEventType eventType, int x, int y, unsigned button, unsigned mouseModifiers) { g_assert(m_parentWindow); GtkWidget* viewWidget = GTK_WIDGET(m_webView); g_assert(gtk_widget_get_realized(viewWidget)); GOwnPtr<GdkEvent> event(gdk_event_new(eventType)); event->button.window = gtk_widget_get_window(viewWidget); g_object_ref(event->button.window); event->button.time = GDK_CURRENT_TIME; event->button.x = x; event->button.y = y; event->button.axes = 0; event->button.state = mouseModifiers; event->button.button = button; event->button.device = gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(viewWidget))); int xRoot, yRoot; gdk_window_get_root_coords(gtk_widget_get_window(viewWidget), x, y, &xRoot, &yRoot); event->button.x_root = xRoot; event->button.y_root = yRoot; gtk_main_do_event(event.get()); }
/* From gtkcontainer.c */ void _container_propagate_expose (GtkContainer *container, GtkWidget *child, GdkEventExpose *event) { GdkEvent *child_event; g_return_if_fail (GTK_IS_CONTAINER (container)); g_return_if_fail (GTK_IS_WIDGET (child)); g_return_if_fail (event != NULL); g_assert (child->parent == GTK_WIDGET (container)); if (GTK_WIDGET_DRAWABLE (child) && GTK_WIDGET_NO_WINDOW (child) && (child->window == event->window)&& AWN_IS_CAIRO_MENU_ITEM(child)) { child_event = gdk_event_new (GDK_EXPOSE); child_event->expose = *event; g_object_ref (child_event->expose.window); child_event->expose.region = gtk_widget_region_intersect (child, event->region); if (!gdk_region_empty (child_event->expose.region)) { gdk_region_get_clipbox (child_event->expose.region, &child_event->expose.area); gtk_widget_send_expose (child, child_event); } gdk_event_free (child_event); } }
void EventSenderProxy::mouseScrollBy(int horizontal, int vertical) { GdkEvent* event = gdk_event_new(GDK_SCROLL); event->scroll.x = m_position.x; event->scroll.y = m_position.y; event->scroll.time = GDK_CURRENT_TIME; event->scroll.window = gtk_widget_get_window(GTK_WIDGET(m_testController->mainWebView()->platformView())); g_object_ref(event->scroll.window); gdk_event_set_device(event, gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gdk_window_get_display(event->scroll.window)))); // For more than one tick in a scroll, we need smooth scroll event if ((horizontal && vertical) || horizontal > 1 || horizontal < -1 || vertical > 1 || vertical < -1) { event->scroll.direction = GDK_SCROLL_SMOOTH; event->scroll.delta_x = -horizontal; event->scroll.delta_y = -vertical; sendOrQueueEvent(event); return; } if (horizontal < 0) event->scroll.direction = GDK_SCROLL_RIGHT; else if (horizontal > 0) event->scroll.direction = GDK_SCROLL_LEFT; else if (vertical < 0) event->scroll.direction = GDK_SCROLL_DOWN; else if (vertical > 0) event->scroll.direction = GDK_SCROLL_UP; else g_assert_not_reached(); sendOrQueueEvent(event); }
static JSValueRef mouseDownCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { int button = 0; if (argumentCount == 1) { button = static_cast<int>(JSValueToNumber(context, arguments[0], exception)); g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); } guint modifiers = argumentCount >= 2 ? gdkModifersFromJSValue(context, arguments[1]) : 0; GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS); if (!prepareMouseButtonEvent(event, button, modifiers)) return JSValueMakeUndefined(context); buttonCurrentlyDown = event->button.button; // Normally GDK will send both GDK_BUTTON_PRESS and GDK_2BUTTON_PRESS for // the second button press during double-clicks. WebKit GTK+ selectively // ignores the first GDK_BUTTON_PRESS of that pair using gdk_event_peek. // Since our events aren't ever going onto the GDK event queue, WebKit won't // be able to filter out the first GDK_BUTTON_PRESS, so we just don't send // it here. Eventually this code should probably figure out a way to get all // appropriate events onto the event queue and this work-around should be // removed. updateClickCount(event->button.button); if (clickCount == 2) event->type = GDK_2BUTTON_PRESS; else if (clickCount == 3) event->type = GDK_3BUTTON_PRESS; sendOrQueueEvent(event); return JSValueMakeUndefined(context); }
/* Cut and paste from gtkwindow.c */ static void send_focus_change (GtkWidget *widget, gboolean in) { GdkEvent *fevent = gdk_event_new (GDK_FOCUS_CHANGE); #if !GTK_CHECK_VERSION (2,21,0) g_object_ref (widget); if (in) GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); else GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); #endif fevent->focus_change.type = GDK_FOCUS_CHANGE; fevent->focus_change.window = g_object_ref (gtk_widget_get_window (widget)); fevent->focus_change.in = in; #if !GTK_CHECK_VERSION (2,21,0) gtk_widget_event (widget, fevent); g_object_notify (G_OBJECT (widget), "has-focus"); g_object_unref (widget); #else gtk_widget_send_focus_change (widget, fevent); #endif gdk_event_free (fevent); }
/* * Strategy to painting a Widget: * 1.) do not paint if there is no GtkWidget set * 2.) We assume that GTK_NO_WINDOW is set and that geometryChanged positioned * the widget correctly. ATM we do not honor the GraphicsContext translation. */ void Widget::paint(GraphicsContext* context, const IntRect&) { if (!gtkWidget()) return; GtkWidget* widget = gtkWidget(); ASSERT(GTK_WIDGET_NO_WINDOW(widget)); GdkEvent* event = gdk_event_new(GDK_EXPOSE); event->expose = *context->gdkExposeEvent(); event->expose.region = gtk_widget_region_intersect(widget, event->expose.region); /* * This will be unref'ed by gdk_event_free. */ g_object_ref(event->expose.window); /* * If we are going to paint do the translation and GtkAllocation manipulation. */ if (!gdk_region_empty(event->expose.region)) { gdk_region_get_clipbox(event->expose.region, &event->expose.area); gtk_widget_send_expose(widget, event); } gdk_event_free(event); }
void _exo_gtk_widget_send_focus_change (GtkWidget *widget, gboolean in) { GdkEvent *fevent; g_object_ref (G_OBJECT (widget)); if (in) GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); else GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); fevent = gdk_event_new (GDK_FOCUS_CHANGE); fevent->focus_change.type = GDK_FOCUS_CHANGE; fevent->focus_change.window = g_object_ref (widget->window); fevent->focus_change.in = in; gtk_widget_event (widget, fevent); g_object_notify (G_OBJECT (widget), "has-focus"); g_object_unref (G_OBJECT (widget)); gdk_event_free (fevent); }
static void generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x, gdouble delta_y, guint state, guint32 event_time) { GdkEvent *event; event = gdk_event_new (GDK_SCROLL); event->scroll.x = x; event->scroll.y = y; event->scroll.state = state; event->scroll.time = event_time; if (ABS (delta_x) == 1 && delta_y == 0) { event->scroll.direction = (delta_x < 0) ? GDK_SCROLL_LEFT : GDK_SCROLL_RIGHT; } else if (ABS (delta_y) == 1 && delta_x == 0) { event->scroll.direction = (delta_y < 0) ? GDK_SCROLL_DOWN : GDK_SCROLL_UP; } else { event->scroll.direction = GDK_SCROLL_SMOOTH; event->scroll.delta_x = -delta_x; event->scroll.delta_y = -delta_y; } send_event (window, get_pointer (window), event); }
static void point_press (PointState *point, GtkWidget *widget, guint button) { GdkDisplay *display; GdkDevice *device; GdkSeat *seat; GdkEvent *ev; display = gtk_widget_get_display (widget); seat = gdk_display_get_default_seat (display); device = gdk_seat_get_pointer (seat); if (point == &mouse_state) { ev = gdk_event_new (GDK_BUTTON_PRESS); ev->any.window = g_object_ref (gtk_widget_get_window (widget)); ev->button.time = GDK_CURRENT_TIME; ev->button.x = point->x; ev->button.y = point->y; ev->button.button = button; ev->button.state = point->state; point->state |= GDK_BUTTON1_MASK << (button - 1); } else { ev = gdk_event_new (GDK_TOUCH_BEGIN); ev->any.window = g_object_ref (gtk_widget_get_window (widget)); ev->touch.time = GDK_CURRENT_TIME; ev->touch.x = point->x; ev->touch.y = point->y; ev->touch.sequence = EVENT_SEQUENCE (point); if (point == &touch_state[0]) ev->touch.emulating_pointer = TRUE; } gdk_event_set_device (ev, device); gtk_main_do_event (ev); gdk_event_free (ev); point->widget = widget; }
static void gtk_scale_button_popup (GtkWidget *widget) { GdkEvent *ev; ev = gdk_event_new (GDK_KEY_RELEASE); gtk_scale_popup (widget, ev, GDK_CURRENT_TIME); gdk_event_free (ev); }
static VALUE gdkevent_initialize(VALUE self, VALUE type) { GdkEventType gtype = RVAL2GENUM(type, GDK_TYPE_EVENT_TYPE); if (RBASIC(self)->klass != gdkevents[gtype]) rb_raise(rb_eArgError, "Wrong event type for this class."); G_INITIALIZE(self, gdk_event_new(gtype)); return Qnil; }
JNIEXPORT void JNICALL Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_nativeStartDrag (JNIEnv *env, jobject obj, jobject img, jint x, jint y, jint act, jstring target) { void *ptr; const gchar *data; GtkTargetEntry tar[1]; GdkEvent *event; GdkPixbuf *image = NULL; GdkDragContext *context = NULL; GdkDragAction action = GDK_ACTION_DEFAULT; gdk_threads_enter (); ptr = NSA_GET_GLOBAL_REF (env, obj); data = (*env)->GetStringUTFChars (env, target, NULL); tar[0].target = (gchar *) data; event = gdk_event_new (GDK_ALL_EVENTS_MASK); switch (act) { case ACTION_COPY: action = GDK_ACTION_COPY; break; case ACTION_MOVE: action = GDK_ACTION_MOVE; break; case ACTION_COPY_OR_MOVE: action = GDK_ACTION_COPY | GDK_ACTION_MOVE; break; case ACTION_LINK: action = GDK_ACTION_LINK; break; default: action = GDK_ACTION_DEFAULT; } gtk_drag_highlight (widget); context = gtk_drag_begin (widget, gtk_target_list_new (tar, sizeof (tar) / sizeof (GtkTargetEntry)), action, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, event); if (img != NULL) { image = cp_gtk_image_get_pixbuf (env, img); gtk_drag_set_icon_pixbuf (context, image, x, y); } gdk_event_free (event); (*env)->ReleaseStringUTFChars (env, target, data); gdk_threads_leave (); }
static void show_search () { GtkWidget *w, *f, *a, *e; GdkEvent *fev; w = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (gtk_widget_get_toplevel (text_view))); gtk_window_set_position (GTK_WINDOW (w), GTK_WIN_POS_CENTER_ON_PARENT); /* next two lines needs for get focus to search window */ gtk_window_set_type_hint (GTK_WINDOW (w), GDK_WINDOW_TYPE_HINT_UTILITY); gtk_window_set_modal (GTK_WINDOW (w), TRUE); g_signal_connect (G_OBJECT (w), "key-press-event", G_CALLBACK (search_key_cb), w); f = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (f), GTK_SHADOW_ETCHED_IN); gtk_container_add (GTK_CONTAINER (w), f); a = gtk_alignment_new (0.5, 0.5, 1.0, 1.0); gtk_alignment_set_padding (GTK_ALIGNMENT (a), 2, 2, 2, 2); gtk_container_add (GTK_CONTAINER (f), a); e = gtk_entry_new (); if (pattern) gtk_entry_set_text (GTK_ENTRY (e), pattern); gtk_container_add (GTK_CONTAINER (a), e); g_signal_connect (G_OBJECT (e), "activate", G_CALLBACK (do_search), w); g_signal_connect (G_OBJECT (e), "changed", G_CALLBACK (search_changed), NULL); g_signal_connect (G_OBJECT (e), "key-press-event", G_CALLBACK (search_key_cb), w); gtk_widget_show_all (w); /* send focus event to search entry (so complex due to popup window) */ fev = gdk_event_new (GDK_FOCUS_CHANGE); fev->focus_change.type = GDK_FOCUS_CHANGE; fev->focus_change.in = TRUE; fev->focus_change.window = gtk_widget_get_window (e); if (fev->focus_change.window != NULL) g_object_ref (fev->focus_change.window); #if GTK_CHECK_VERSION(2,22,0) gtk_widget_send_focus_change (e, fev); #else g_object_ref (e); GTK_OBJECT_FLAGS (e) |= GTK_HAS_FOCUS; gtk_widget_event (e, fev); g_object_notify (G_OBJECT (e), "has-focus"); g_object_unref (e); #endif gdk_event_free (fev); }
static void load_status_cb(WebKitWebView* webView, GParamSpec* spec, gpointer data) { WebKitLoadStatus status = webkit_web_view_get_load_status(webView); TestInfo* info = (TestInfo*)data; if (status == WEBKIT_LOAD_FINISHED) { WebKitHitTestResult* result; guint context; GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS); WebKitDOMNode* node; gint x, y; /* Close enough to 0,0 */ event->button.x = 5; event->button.y = 5; result = webkit_web_view_get_hit_test_result(webView, (GdkEventButton*) event); gdk_event_free(event); g_assert(result); g_object_get(result, "context", &context, NULL); g_assert(context & info->flag); g_object_get(result, "inner-node", &node, NULL); g_assert(node); g_assert(WEBKIT_DOM_IS_NODE(node)); g_object_get(result, "x", &x, "y", &y, NULL); g_assert_cmpint(x, ==, 5); g_assert_cmpint(y, ==, 5); /* We can only test these node types at the moment. In the * input case there seems to be an extra layer with a DIV on * top of the input, which gets assigned to the inner-node. * tag */ if (info->flag == WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT) g_assert(WEBKIT_DOM_IS_HTML_HTML_ELEMENT(node)); else if (info->flag == WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE) g_assert(WEBKIT_DOM_IS_HTML_IMAGE_ELEMENT(node)); else if (info->flag == WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { /* The hit test will give us the inner text node, we want * the A tag */ WebKitDOMNode* parent = webkit_dom_node_get_parent_node(node); g_assert(WEBKIT_DOM_IS_HTML_ANCHOR_ELEMENT(parent)); } g_object_unref(result); g_main_loop_quit(loop); }
GdkEventKey * ide_gdk_synthesize_event_keyval (GdkWindow *window, guint keyval) { GdkDisplay *display; GdkDeviceManager *device_manager; GdkDevice *client_pointer; GdkEvent *ev; GdkKeymapKey *keys = NULL; gint n_keys = 0; gchar str[8] = { 0 }; gunichar ch; g_assert (window != NULL); g_assert (GDK_IS_WINDOW (window)); ch = gdk_keyval_to_unicode (keyval); g_unichar_to_utf8 (ch, str); ev = gdk_event_new (GDK_KEY_PRESS); ev->key.window = g_object_ref (window); ev->key.send_event = TRUE; ev->key.time = gtk_get_current_event_time (); ev->key.state = 0; ev->key.hardware_keycode = 0; ev->key.group = 0; ev->key.is_modifier = 0; ev->key.keyval = keyval; ev->key.string = g_strdup (str); ev->key.length = strlen (str); gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (), ev->key.keyval, &keys, &n_keys); if (n_keys > 0) { ev->key.hardware_keycode = keys [0].keycode; ev->key.group = keys [0].group; if (keys [0].level == 1) ev->key.state |= GDK_SHIFT_MASK; g_free (keys); } display = gdk_window_get_display (ev->any.window); device_manager = gdk_display_get_device_manager (display); client_pointer = gdk_device_manager_get_client_pointer (device_manager); gdk_event_set_device (ev, gdk_device_get_associated_device (client_pointer)); return &ev->key; }
static JSValueRef contextClickCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { GdkEvent* pressEvent = gdk_event_new(GDK_BUTTON_PRESS); if (!prepareMouseButtonEvent(pressEvent, 2, 0)) return JSValueMakeUndefined(context); GdkEvent* releaseEvent = gdk_event_copy(pressEvent); sendOrQueueEvent(pressEvent); releaseEvent->type = GDK_BUTTON_RELEASE; sendOrQueueEvent(releaseEvent); return JSValueMakeUndefined(context); }
/* FIXME: should we schedule the event or not? static gboolean schedule_send_client_event (gpointer data) { GdkEvent *event = (GdkEvent*) data; gdk_event_send_client_message (event, GDK_WINDOW_XID (event->client.window)); gdk_event_free (event); return FALSE; } */ static void on_size_alloc (AwnAppletProxy *proxy, GtkAllocation *alloc) { AwnAppletProxyPrivate *priv; GtkWidget *parent; GtkAllocation parent_alloc; GdkWindow *plug_win; g_return_if_fail (AWN_IS_APPLET_PROXY (proxy)); priv = proxy->priv; parent = gtk_widget_get_parent (GTK_WIDGET (proxy)); gtk_widget_get_allocation (parent, &parent_alloc); gint pos_x = alloc->x; gint pos_y = alloc->y; gint rel_x = pos_x - parent_alloc.x; gint rel_y = pos_y - parent_alloc.y; gint parent_w = parent_alloc.width; gint parent_h = parent_alloc.height; if (pos_x == priv->old_x && pos_y == priv->old_y && parent_w == priv->old_w && parent_h == priv->old_h) return; priv->old_x = pos_x; priv->old_y = pos_y; priv->old_w = parent_w; priv->old_h = parent_h; /* Only directly access the struct member if we have to. */ plug_win = gtk_socket_get_plug_window (GTK_SOCKET (proxy)); if (plug_win) { GdkAtom msg_type = gdk_atom_intern("_AWN_APPLET_POS_CHANGE", FALSE); GdkEvent *event = gdk_event_new (GDK_CLIENT_EVENT); event->client.window = g_object_ref (plug_win); event->client.data_format = 32; event->client.message_type = msg_type; // first two longs are our relative [x, y] event->client.data.l[0] = rel_x; event->client.data.l[1] = rel_y; // other two longs are our parent's [w, h] event->client.data.l[2] = parent_w; event->client.data.l[3] = parent_h; gdk_event_send_client_message (event, GDK_WINDOW_XID (plug_win)); gdk_event_free (event); /* g_idle_add (schedule_send_client_event, event); */ } }
static void generate_configure_event (GdkWindow *window, gint width, gint height) { GdkEvent *event; event = gdk_event_new (GDK_CONFIGURE); event->configure.send_event = FALSE; event->configure.width = width; event->configure.height = height; send_event (window, get_pointer (window), event); }