int clip_GDK_DRAGFINDWINDOW(ClipMachine * cm) { C_object *ccontext = _fetch_co_arg(cm); C_object *cgdk_win = _fetch_cobject(cm, _clip_spar(cm, 2)); gint x_root = _clip_parni(cm, 3); gint y_root = _clip_parni(cm, 4); ClipVar *cv = _clip_spar(cm, 5); GdkWindow *win ; C_object *cwin ; GdkDragProtocol protocol ; if (!ccontext || ccontext->type != GDK_TYPE_DRAG_CONTEXT) goto err; CHECKCOBJ(cgdk_win, GDK_IS_WINDOW(cgdk_win->object)); CHECKARG(3, NUMERIC_t); CHECKARG(4, NUMERIC_t); gdk_drag_find_window((GdkDragContext*)ccontext->object, GDK_WINDOW(cgdk_win->object), x_root, y_root, &win, &protocol); if (win) { cwin = _list_get_cobject(cm, win); if (!cwin) cwin = _register_object(cm, win, GDK_TYPE_WINDOW, NULL, NULL); if (cwin) _clip_mclone(cm, cv, &cwin->obj); _clip_storni(cm, protocol, 6, 0); } return 0; err: return 1; }
static VALUE rg_find_window(int argc, VALUE *argv, VALUE self) { VALUE drag_window, x_root, y_root; GdkWindow *dest_window; GdkDragProtocol prot; if (argc == 3) { rb_scan_args(argc, argv, "30", &drag_window, &x_root, &y_root); gdk_drag_find_window(_SELF(self), GDK_WINDOW(RVAL2GOBJ(drag_window)), NUM2INT(x_root), NUM2INT(y_root), &dest_window, &prot); } else { VALUE screen; rb_scan_args(argc, argv, "40", &drag_window, &screen, &x_root, &y_root); gdk_drag_find_window_for_screen(_SELF(self), GDK_WINDOW(RVAL2GOBJ(drag_window)), GDK_SCREEN(RVAL2GOBJ(screen)), NUM2INT(x_root), NUM2INT(y_root), &dest_window, &prot); } return rb_ary_new3(2, GOBJ2RVAL(dest_window), GENUM2RVAL(prot, GDK_TYPE_DRAG_PROTOCOL)); }