static gboolean dnd_target_receive_data(JNIEnv *env, GdkAtom target, selection_data_ctx *selection_ctx) { GevlHookRegistration hookReg; memset(selection_ctx, 0, sizeof(selection_data_ctx)); gdk_selection_convert(GLASS_GDK_DRAG_CONTEXT_GET_DEST_WINDOW(enter_ctx.ctx), gdk_drag_get_selection(enter_ctx.ctx), target, GDK_CURRENT_TIME); hookReg = glass_evloop_hook_add( (GevlHookFunction) wait_for_selection_data_hook, selection_ctx); if (HANDLE_MEM_ALLOC_ERROR(env, hookReg, "Failed to allocate event hook")) { return TRUE; } do { gtk_main_iteration(); } while (!(selection_ctx->received)); glass_evloop_hook_remove(hookReg); return selection_ctx->data != NULL; }
static VALUE rg_m_convert(VALUE self, VALUE requestor, VALUE selection, VALUE target, VALUE time) { gdk_selection_convert(GDK_WINDOW(RVAL2GOBJ(requestor)), RVAL2ATOM(selection), RVAL2ATOM(target), NUM2INT(time)); return self; }