1038_merged_head.patch
| b/code/nel/include/nel/3d/driver.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 1215 | 1215 |
// get the number of call to swapBuffer since the driver was created |
| 1216 | 1216 |
virtual uint64 getSwapBufferCounter() const = 0; |
| 1217 | 1217 |
|
| 1218 |
virtual bool copyTextToClipboard(const ucstring &text) = 0; |
|
| 1219 |
|
|
| 1220 |
virtual bool pasteTextFromClipboard(ucstring &text) = 0; |
|
| 1221 |
|
|
| 1218 | 1222 |
/** Set cull mode |
| 1219 | 1223 |
* Useful for mirrors / cube map rendering or when the scene must be rendered upside down |
| 1220 | 1224 |
*/ |
| b/code/nel/include/nel/3d/driver_user.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 535 | 535 |
virtual void deleteWaterEnvMap(UWaterEnvMap *map); |
| 536 | 536 |
// @} |
| 537 | 537 |
|
| 538 |
virtual bool copyTextToClipboard(const ucstring &text); |
|
| 539 |
|
|
| 540 |
virtual bool pasteTextFromClipboard(ucstring &text); |
|
| 538 | 541 |
|
| 539 | 542 |
virtual uint64 getSwapBufferCounter(); |
| 540 | 543 |
|
| b/code/nel/include/nel/3d/u_driver.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 816 | 816 |
|
| 817 | 817 |
virtual uint64 getSwapBufferCounter() = 0; |
| 818 | 818 |
|
| 819 |
virtual bool copyTextToClipboard(const ucstring &text) =0; |
|
| 820 |
|
|
| 821 |
virtual bool pasteTextFromClipboard(ucstring &text) =0; |
|
| 822 |
|
|
| 819 | 823 |
public: |
| 820 | 824 |
|
| 821 | 825 |
/** |
| b/code/nel/include/nel/misc/event_emitter_multi.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 48 | 48 |
/// From IEventEmitter. This call submitEvents on all the emitters |
| 49 | 49 |
virtual void submitEvents(CEventServer &server, bool allWindows); |
| 50 | 50 |
virtual void emulateMouseRawMode(bool enable); |
| 51 |
virtual bool copyTextToClipboard(const ucstring &text); |
|
| 52 |
|
|
| 53 |
virtual bool pasteTextFromClipboard(ucstring &text); |
|
| 51 | 54 |
private: |
| 52 | 55 |
typedef std::vector<std::pair<IEventEmitter *, bool> > TEmitterCont; |
| 53 | 56 |
TEmitterCont _Emitters; |
| b/code/nel/src/3d/driver/direct3d/driver_direct3d.cpp Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 292 | 292 |
|
| 293 | 293 |
_SumTextureMemoryUsed = false; |
| 294 | 294 |
|
| 295 |
|
|
| 296 | 295 |
_DesktopGammaRampValid = false; |
| 296 |
// initialize COM |
|
| 297 |
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); |
|
| 297 | 298 |
} |
| 298 | 299 |
|
| 299 | 300 |
// *************************************************************************** |
| ... | ... | |
| 3831 | 3832 |
} |
| 3832 | 3833 |
} |
| 3833 | 3834 |
} |
| 3834 |
|
|
| 3835 |
bool CDriverD3D::copyTextToClipboard(const ucstring &text) |
|
| 3836 |
{
|
|
| 3837 |
return _EventEmitter.copyTextToClipboard(text); |
|
| 3838 |
} |
|
| 3839 |
|
|
| 3840 |
bool CDriverD3D::pasteTextFromClipboard(ucstring &text) |
|
| 3841 |
{
|
|
| 3842 |
return _EventEmitter.pasteTextFromClipboard(text); |
|
| 3843 |
} |
|
| 3835 | 3844 |
} // NL3D |
| b/code/nel/src/3d/driver/direct3d/driver_direct3d.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 2392 | 2392 |
void deleteIndexBuffer(CIBDrvInfosD3D *ib); |
| 2393 | 2393 |
// Build 16 bit index buffer for quad |
| 2394 | 2394 |
bool buildQuadIndexBuffer(); |
| 2395 |
virtual bool copyTextToClipboard(const ucstring &text); |
|
| 2396 |
|
|
| 2397 |
virtual bool pasteTextFromClipboard(ucstring &text); |
|
| 2398 |
|
|
| 2395 | 2399 |
public: |
| 2396 | 2400 |
#ifdef NL_DEBUG |
| 2397 | 2401 |
std::set<CVBDrvInfosD3D *> _LockedBuffers; |
| b/code/nel/src/3d/driver/opengl/driver_opengl.cpp Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 322 | 322 |
|
| 323 | 323 |
_TextureTargetCubeFace = 0; |
| 324 | 324 |
_TextureTargetUpload = false; |
| 325 |
#ifdef NL_OS_WINDOWS |
|
| 326 |
// initialize COM |
|
| 327 |
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); |
|
| 328 |
#endif |
|
| 325 | 329 |
} |
| 326 | 330 |
|
| 327 | 331 |
// *************************************************************************** |
| ... | ... | |
| 2704 | 2708 |
{
|
| 2705 | 2709 |
} |
| 2706 | 2710 |
|
| 2711 |
bool CDriverGL::copyTextToClipboard(const ucstring &text) |
|
| 2712 |
{
|
|
| 2713 |
return _EventEmitter.copyTextToClipboard(text); |
|
| 2714 |
} |
|
| 2715 |
|
|
| 2716 |
bool CDriverGL::pasteTextFromClipboard(ucstring &text) |
|
| 2717 |
{
|
|
| 2718 |
return _EventEmitter.pasteTextFromClipboard(text); |
|
| 2719 |
} |
|
| 2720 |
|
|
| 2707 | 2721 |
} // NL3D |
| 2708 | 2722 |
|
| 2709 | 2723 |
// *************************************************************************** |
| b/code/nel/src/3d/driver/opengl/driver_opengl.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 325 | 325 |
{
|
| 326 | 326 |
return _win; |
| 327 | 327 |
} |
| 328 |
virtual bool copyTextToClipboard(const ucstring &text); |
|
| 329 |
|
|
| 330 |
virtual bool pasteTextFromClipboard(ucstring &text); |
|
| 328 | 331 |
|
| 329 | 332 |
virtual uint32 getAvailableVertexAGPMemory (); |
| 330 | 333 |
virtual uint32 getAvailableVertexVRAMMemory (); |
| b/code/nel/src/3d/driver/opengl/mac/cocoa_event_emitter.cpp Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 32 | 32 |
// just forwarding to our cocoa adapter |
| 33 | 33 |
NL3D::MAC::emulateMouseRawMode(enable); |
| 34 | 34 |
} |
| 35 |
bool CCocoaEventEmitter::pasteTextFromClipboard(ucstring &text) |
|
| 36 |
{
|
|
| 37 |
return false; |
|
| 38 |
} |
|
| 39 |
bool CCocoaEventEmitter::copyTextToClipboard(const ucstring &text) |
|
| 40 |
{
|
|
| 41 |
return false; |
|
| 42 |
} |
|
| 35 | 43 | |
| 36 | 44 |
} |
| b/code/nel/src/3d/driver/opengl/mac/cocoa_event_emitter.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 27 | 27 |
public: |
| 28 | 28 |
virtual void submitEvents(CEventServer & server, bool allWindows); |
| 29 | 29 |
virtual void emulateMouseRawMode(bool enable); |
| 30 |
}; |
|
| 30 |
/** |
|
| 31 |
* |
|
| 32 |
*/ |
|
| 33 |
virtual bool copyTextToClipboard(const ucstring &text); |
|
| 31 | 34 |
|
| 35 |
/* |
|
| 36 |
* |
|
| 37 |
*/ |
|
| 38 |
virtual bool pasteTextFromClipboard(ucstring &text);}; |
|
| 32 | 39 |
} |
| 33 | 40 | |
| 34 | 41 |
#endif |
| b/code/nel/src/3d/driver/opengl/unix_event_emitter.cpp Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 19 | 19 |
|
| 20 | 20 |
#if defined(NL_OS_UNIX) && !defined(NL_OS_MAC) |
| 21 | 21 |
|
| 22 |
#include <X11/Xlib.h> |
|
| 23 |
#include <X11/Xatom.h> |
|
| 22 | 24 |
#include <X11/keysym.h> |
| 23 | 25 |
#include <GL/gl.h> |
| 24 | 26 |
#include <GL/glx.h> |
| ... | ... | |
| 33 | 35 |
{
|
| 34 | 36 |
_im = 0; |
| 35 | 37 |
_ic = 0; |
| 38 |
_SelectionOwned=false; |
|
| 36 | 39 |
} |
| 37 | 40 |
|
| 38 | 41 |
CUnixEventEmitter::~CUnixEventEmitter() |
| ... | ... | |
| 47 | 50 |
_win = win; |
| 48 | 51 |
_driver = driver; |
| 49 | 52 |
|
| 50 |
XSelectInput (_dpy, _win, KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|PointerMotionMask|StructureNotifyMask); |
|
| 53 |
XSelectInput (_dpy, _win, KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|PointerMotionMask|StructureNotifyMask|ExposureMask); |
|
| 54 |
_PrecomputedAtom[0] = XInternAtom(dpy, "CLIPBOARD",False); |
|
| 55 |
#define XA_CLIPBOARD _PrecomputedAtom[0] |
|
| 56 |
_PrecomputedAtom[1] = XInternAtom(dpy, "UTF8_STRING",False); |
|
| 57 |
#define XA_UTF8_STRING _PrecomputedAtom[1] |
|
| 58 |
_PrecomputedAtom[2] = XInternAtom(dpy, "TARGETS",False); |
|
| 59 |
#define XA_TARGETS _PrecomputedAtom[2] |
|
| 60 |
_PrecomputedAtom[3] = XInternAtom(dpy, "ATOM",False); |
|
| 61 |
//#define XA_ATOM _PrecomputedAtom[3] |
|
| 62 |
_PrecomputedAtom[4] = XInternAtom(dpy, "NeL_SEL",False); |
|
| 63 |
#define XA_NEL_SEL _PrecomputedAtom[4] |
|
| 64 |
_PrecomputedAtom[5] = XInternAtom(dpy, "TEXT",False); |
|
| 65 |
#define XA_TEXT _PrecomputedAtom[5] |
|
| 51 | 66 |
|
| 52 | 67 |
/* |
| 53 | 68 |
TODO: implements all useful events processing |
| 54 | 69 |
EnterWindowMask|LeaveWindowMask|ButtonMotionMask|Button1MotionMask|Button2MotionMask| |
| 55 |
Button3MotionMask|Button4MotionMask|Button5MotionMask|KeymapStateMask|ExposureMask|
|
|
| 70 |
Button3MotionMask|Button4MotionMask|Button5MotionMask|KeymapStateMask| |
|
| 56 | 71 |
SubstructureNotifyMask|VisibilityChangeMask|FocusChangeMask|PropertyChangeMask| |
| 57 | 72 |
ColormapChangeMask|OwnerGrabButtonMask |
| 58 | 73 |
*/ |
| ... | ... | |
| 578 | 593 |
} |
| 579 | 594 |
break; |
| 580 | 595 |
} |
| 596 |
case SelectionRequest: |
|
| 597 |
{
|
|
| 598 |
XEvent respond; |
|
| 599 |
XSelectionRequestEvent *req=&(event.xselectionrequest); |
|
| 600 |
|
|
| 601 |
respond.xselection.type= SelectionNotify; |
|
| 602 |
respond.xselection.display= req->display; |
|
| 603 |
respond.xselection.requestor= req->requestor; |
|
| 604 |
respond.xselection.selection=req->selection; |
|
| 605 |
respond.xselection.target= req->target; |
|
| 606 |
respond.xselection.time = req->time; |
|
| 607 |
respond.xselection.property = req->property; |
|
| 608 |
if (req->property == None) |
|
| 609 |
{
|
|
| 610 |
respond.xselection.property=req->target; |
|
| 611 |
} |
|
| 612 |
if (req->target == XA_TARGETS) |
|
| 613 |
{
|
|
| 614 |
nlwarning("Client is asking for TARGETS");
|
|
| 615 |
Atom targets[] = {
|
|
| 616 |
XA_TARGETS |
|
| 617 |
, XA_TEXT |
|
| 618 |
, XA_UTF8_STRING |
|
| 619 |
}; |
|
| 620 |
respond.xselection.property = req->property; |
|
| 621 |
|
|
| 622 |
XChangeProperty(req->display, req->requestor, req->property, XA_ATOM, 32, PropModeReplace, (unsigned char *)targets, 3 /* number of element */); |
|
| 623 |
} |
|
| 624 |
else if (req->target == XInternAtom(_dpy, "TEXT", False) || req->target == XA_STRING ) |
|
| 625 |
{
|
|
| 626 |
nlwarning("client want TEXT");
|
|
| 627 |
respond.xselection.property=req->property; |
|
| 628 |
std::string str=_CopiedString.toString(); |
|
| 629 |
XChangeProperty(req->display, req->requestor, req->property, XA_STRING, 8, PropModeReplace, (const unsigned char*)str.c_str(), strlen(str.c_str())); |
|
| 630 |
} |
|
| 631 |
else if (req->target == XInternAtom(_dpy, "UTF8_STRING", False)) |
|
| 632 |
{
|
|
| 633 |
nlwarning("Client want UTF8 STRING");
|
|
| 634 |
respond.xselection.property=req->property; |
|
| 635 |
std::string str=_CopiedString.toUtf8(); |
|
| 636 |
XChangeProperty(req->display, req->requestor, respond.xselection.property, XInternAtom(_dpy, "UTF8_STRING", False), 8, PropModeReplace, (const unsigned char*)str.c_str(), strlen((char*)str.c_str())); |
|
| 637 |
} |
|
| 638 |
else |
|
| 639 |
{
|
|
| 640 |
nlwarning("Target doesn't want a string %u",req->target); // Note: Calling XGetAtomName with arbitrary value crash the client, maybe req->target have been sanitized by X11 server
|
|
| 641 |
respond.xselection.property= None; |
|
| 642 |
} |
|
| 643 |
XSendEvent (_dpy, req->requestor,0,0,&respond); |
|
| 644 |
break; |
|
| 645 |
} |
|
| 646 |
case SelectionClear: |
|
| 647 |
nlwarning("SelectionClear:");
|
|
| 648 |
_SelectionOwned=false; |
|
| 649 |
_CopiedString=""; |
|
| 650 |
break; |
|
| 581 | 651 |
case FocusIn: |
| 582 | 652 |
// keyboard focus |
| 583 | 653 |
if (_ic) XSetICFocus(_ic); |
| ... | ... | |
| 605 | 675 |
return true; |
| 606 | 676 |
} |
| 607 | 677 |
|
| 678 |
/** |
|
| 679 |
* This function copy a selection into propertyName. |
|
| 680 |
* It is subject to timeout. |
|
| 681 |
* |
|
| 682 |
* @param selection: A Selection Atom |
|
| 683 |
* @param requestedFormat: Target format Atom |
|
| 684 |
* @param propertyName: Target property Atom |
|
| 685 |
* @return true if successfull, false if timeout occured or X11 call failed |
|
| 686 |
*/ |
|
| 687 |
bool CUnixEventEmitter::prepareSelectionContent (Atom selection, Atom requestedFormat, Atom propertyName) |
|
| 688 |
{
|
|
| 689 |
XConvertSelection(_dpy, selection, requestedFormat, propertyName, _win, CurrentTime); |
|
| 690 |
XSync (_dpy, False); |
|
| 691 |
int i=0; |
|
| 692 |
bool gotReply=false; |
|
| 693 |
do {
|
|
| 694 |
XEvent event; |
|
| 695 |
usleep(500); |
|
| 696 |
gotReply = XCheckTypedWindowEvent(_dpy, _win, SelectionNotify, &event); |
|
| 697 |
if (gotReply) |
|
| 698 |
{
|
|
| 699 |
return true; |
|
| 700 |
} |
|
| 701 |
i++; |
|
| 702 |
} while (i<20); |
|
| 703 |
return false; |
|
| 704 |
} |
|
| 705 |
|
|
| 706 |
bool CUnixEventEmitter::copyTextToClipboard(const ucstring &text) |
|
| 707 |
{
|
|
| 708 |
_CopiedString=text; |
|
| 709 |
XSetSelectionOwner (_dpy, XA_CLIPBOARD, _win, CurrentTime); |
|
| 710 |
{
|
|
| 711 |
Window selectionOwner=XGetSelectionOwner (_dpy, XA_CLIPBOARD); |
|
| 712 |
if ( selectionOwner != _win ) |
|
| 713 |
{
|
|
| 714 |
nlwarning("Can't aquire selection");
|
|
| 715 |
return false; |
|
| 716 |
} |
|
| 717 |
_SelectionOwned=true; |
|
| 718 |
nlwarning("Owning selection");
|
|
| 719 |
return true; |
|
| 720 |
} |
|
| 721 |
nlwarning("Paste: Can't acquire selection.");
|
|
| 722 |
return false; |
|
| 723 |
} |
|
| 724 |
|
|
| 725 |
bool CUnixEventEmitter::pasteTextFromClipboard(ucstring &text) |
|
| 726 |
{
|
|
| 727 |
// check if we own the selection |
|
| 728 |
if (_SelectionOwned) |
|
| 729 |
{
|
|
| 730 |
text=_CopiedString; |
|
| 731 |
return true; |
|
| 732 |
} |
|
| 733 |
Window selectionOwner=XGetSelectionOwner (_dpy, XA_CLIPBOARD); |
|
| 734 |
if (selectionOwner!=None) |
|
| 735 |
{
|
|
| 736 |
Atom *supportedTargets, type; |
|
| 737 |
uint8 *data; |
|
| 738 |
int result; |
|
| 739 |
unsigned long nitems, bytesLeft; |
|
| 740 |
Atom actualType; |
|
| 741 |
int actualFormat; |
|
| 742 |
int bestTargetElect=0, bestTarget=0; |
|
| 743 |
nlwarning("Selection owner is %u",selectionOwner);
|
|
| 744 |
|
|
| 745 |
// Find supported methods |
|
| 746 |
bool bres=prepareSelectionContent(XA_CLIPBOARD, XA_TARGETS, XA_NEL_SEL); |
|
| 747 |
if (!bres) |
|
| 748 |
{
|
|
| 749 |
nlwarning("Paste: Cannot ennumerate TARGETS");
|
|
| 750 |
return false; |
|
| 751 |
} |
|
| 752 |
result=XGetWindowProperty(_dpy, _win, XA_NEL_SEL, 0, XMaxRequestSize(_dpy), False, AnyPropertyType, &actualType, &actualFormat, &nitems, &bytesLeft,(unsigned char**) &supportedTargets); |
|
| 753 |
if (result != Success) |
|
| 754 |
{
|
|
| 755 |
return false; |
|
| 756 |
} |
|
| 757 |
if ( bytesLeft>0 ) |
|
| 758 |
{
|
|
| 759 |
nlwarning("Paste: Supported TARGETS list too long."); // We hope we find what we need in the first packet.
|
|
| 760 |
} |
|
| 761 |
// Elect best type |
|
| 762 |
for (unsigned int i=0; i < nitems; i++) |
|
| 763 |
{
|
|
| 764 |
nldebug(" - Type=%s", XGetAtomName(_dpy, supportedTargets[i]));
|
|
| 765 |
if (supportedTargets[i] == XA_STRING ) |
|
| 766 |
{
|
|
| 767 |
if (bestTargetElect < 1) |
|
| 768 |
{
|
|
| 769 |
bestTarget=XA_STRING; |
|
| 770 |
bestTargetElect=1; |
|
| 771 |
} |
|
| 772 |
} |
|
| 773 |
if (supportedTargets[i] == XA_UTF8_STRING ) |
|
| 774 |
{
|
|
| 775 |
if (bestTargetElect < 2) |
|
| 776 |
{
|
|
| 777 |
bestTarget=XA_STRING; |
|
| 778 |
bestTargetElect=2; |
|
| 779 |
} |
|
| 780 |
} |
|
| 781 |
} |
|
| 782 |
XFree(supportedTargets); |
|
| 783 |
if (!bestTargetElect) |
|
| 784 |
{
|
|
| 785 |
nlwarning("Paste buffer is not a text buffer.");
|
|
| 786 |
return false; |
|
| 787 |
} |
|
| 788 |
|
|
| 789 |
// Ask for selection lenght && copy to buffer |
|
| 790 |
bres=prepareSelectionContent(XA_CLIPBOARD, bestTarget, XA_NEL_SEL); |
|
| 791 |
if (!bres) |
|
| 792 |
{
|
|
| 793 |
nlwarning ("Paste: cannot obtain data. Aborting.");
|
|
| 794 |
return false; |
|
| 795 |
} |
|
| 796 |
XGetWindowProperty(_dpy, _win, XA_NEL_SEL, 0, XMaxRequestSize(_dpy), False, AnyPropertyType, &actualType, &actualFormat, &nitems, &bytesLeft,(unsigned char**) &data); |
|
| 797 |
switch (bestTargetElect) |
|
| 798 |
{
|
|
| 799 |
case 1: // XA_STRING |
|
| 800 |
text=(const char*)data; |
|
| 801 |
XFree(data); |
|
| 802 |
return true; |
|
| 803 |
break; |
|
| 804 |
case 2: |
|
| 805 |
text=ucstring::makeFromUtf8((const char*)data); |
|
| 806 |
XFree(data); |
|
| 807 |
return true; |
|
| 808 |
default: |
|
| 809 |
break; |
|
| 810 |
} |
|
| 811 |
nlwarning("Paste: buffer is not a text buffer.");
|
|
| 812 |
} |
|
| 813 |
nlwarning("Paste: error !");
|
|
| 814 |
return false; |
|
| 815 |
} |
|
| 816 |
|
|
| 817 |
|
|
| 608 | 818 |
} // NLMISC |
| 609 | 819 |
|
| 610 | 820 |
#endif // defined(NL_OS_UNIX) && !defined(NL_OS_MAC) |
| b/code/nel/src/3d/driver/opengl/unix_event_emitter.h Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 65 | 65 |
*/ |
| 66 | 66 |
bool processMessage(XEvent &event, CEventServer *server = NULL); |
| 67 | 67 |
|
| 68 |
/** |
|
| 69 |
* |
|
| 70 |
*/ |
|
| 71 |
virtual bool copyTextToClipboard(const ucstring &text); |
|
| 72 |
|
|
| 73 |
/* |
|
| 74 |
* |
|
| 75 |
*/ |
|
| 76 |
virtual bool pasteTextFromClipboard(ucstring &text); |
|
| 77 |
|
|
| 68 | 78 |
private: |
| 69 | 79 |
|
| 70 | 80 |
// Private internal server message |
| ... | ... | |
| 88 | 98 |
}; |
| 89 | 99 |
|
| 90 | 100 |
void createIM(); |
| 101 |
bool prepareSelectionContent (Atom selection, Atom requestedFormat, Atom propertyName); |
|
| 91 | 102 |
|
| 92 | 103 |
Display* _dpy; |
| 93 | 104 |
Window _win; |
| ... | ... | |
| 97 | 108 |
bool _emulateRawMode; |
| 98 | 109 |
NL3D::IDriver* _driver; |
| 99 | 110 |
CUnixEventServer _InternalServer; |
| 111 |
ucstring _CopiedString; |
|
| 112 |
Atom _PrecomputedAtom[6]; |
|
| 113 |
bool _SelectionOwned; |
|
| 100 | 114 |
}; |
| 101 | 115 |
|
| 102 | 116 |
|
| b/code/nel/src/3d/driver_user.cpp Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 1938 | 1938 |
|
| 1939 | 1939 |
return result; |
| 1940 | 1940 |
} |
| 1941 |
bool CDriverUser::copyTextToClipboard(const ucstring &text) |
|
| 1942 |
{
|
|
| 1943 |
return _Driver->copyTextToClipboard(text); |
|
| 1944 |
} |
|
| 1945 |
|
|
| 1946 |
bool CDriverUser::pasteTextFromClipboard(ucstring &text) |
|
| 1947 |
{
|
|
| 1948 |
return _Driver->pasteTextFromClipboard(text); |
|
| 1949 |
} |
|
| 1950 |
|
|
| 1941 | 1951 |
|
| 1942 | 1952 |
} // NL3D |
| b/code/nel/src/misc/event_emitter_multi.cpp Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 16 | 16 |
|
| 17 | 17 |
#include "stdmisc.h" |
| 18 | 18 |
#include "nel/misc/event_emitter_multi.h" |
| 19 |
|
|
| 19 |
#include "nel/misc/system_utils.h" |
|
| 20 | 20 |
|
| 21 | 21 |
namespace NLMISC |
| 22 | 22 |
{
|
| ... | ... | |
| 99 | 99 |
return _Emitters[index].first; |
| 100 | 100 |
} |
| 101 | 101 |
|
| 102 |
|
|
| 102 |
bool CEventEmitterMulti::copyTextToClipboard(const ucstring &text) |
|
| 103 |
{
|
|
| 104 |
// Naush: wrapped to old API to avoid duplicate code |
|
| 105 |
return CSystemUtils::copyTextToClipboard(text); |
|
| 106 |
} |
|
| 107 |
bool CEventEmitterMulti::pasteTextFromClipboard(ucstring &text) |
|
| 108 |
{
|
|
| 109 |
// Naush: wrapped to old API to avoid duplicate code |
|
| 110 |
return CSystemUtils::pasteTextFromClipboard(text); |
|
| 111 |
} |
|
| 103 | 112 |
|
| 104 | 113 |
|
| 105 | 114 |
} // NLMISC |
| b/code/ryzom/client/src/interface_v3/group_editbox.cpp Fri Oct 15 21:33:52 2010 +0200 | ||
|---|---|---|
| 332 | 332 |
stopParentBlink(); |
| 333 | 333 |
|
| 334 | 334 |
// get the selection and copy it |
| 335 |
if (CSystemUtils::copyTextToClipboard(getSelection()))
|
|
| 335 |
if (Driver->copyTextToClipboard(getSelection()))
|
|
| 336 | 336 |
nlinfo ("Chat input was copied in the clipboard");
|
| 337 | 337 |
} |
| 338 | 338 |
|
| ... | ... | |
| 351 | 351 |
makeTopWindow(); |
| 352 | 352 |
|
| 353 | 353 |
ucstring sString; |
| 354 |
|
|
| 355 |
if (CSystemUtils::pasteTextFromClipboard(sString)) |
|
| 354 |
if (Driver->pasteTextFromClipboard(sString)) |
|
| 356 | 355 |
{
|
| 357 | 356 |
sint length = (sint)sString.length(); |
| 358 | 357 |
|