Skip to content

Commit

Permalink
WIN32 fixes for DND.
Browse files Browse the repository at this point in the history
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2016 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
  • Loading branch information
michaelrsweet committed Mar 25, 2002
1 parent b5400e6 commit 9700e54
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 27 deletions.
42 changes: 21 additions & 21 deletions src/Fl_win32.cxx
@@ -1,5 +1,5 @@
//
// "$Id: Fl_win32.cxx,v 1.33.2.37.2.19 2002/03/07 19:22:57 spitzak Exp $"
// "$Id: Fl_win32.cxx,v 1.33.2.37.2.20 2002/03/25 19:17:05 easysw Exp $"
//
// WIN32-specific code for the Fast Light Tool Kit (FLTK).
//
Expand Down Expand Up @@ -354,41 +354,41 @@ void Fl::get_mouse(int &x, int &y) {
////////////////////////////////////////////////////////////////
// code used for selections:

static char *selection_buffer[2];
static int selection_length[2];
static int selection_buffer_length[2];
static char i_own_selection;
char *fl_selection_buffer[2];
int fl_selection_length[2];
int fl_selection_buffer_length[2];
char fl_i_own_selection[2];

// call this when you create a selection:
void Fl::copy(const char *stuff, int len, int clipboard) {
if (!stuff || len<0) return;
if (len+1 > selection_buffer_length[clipboard]) {
delete[] selection_buffer[clipboard];
selection_buffer[clipboard] = new char[len+100];
selection_buffer_length[clipboard] = len+100;
if (len+1 > fl_selection_buffer_length[clipboard]) {
delete[] fl_selection_buffer[clipboard];
fl_selection_buffer[clipboard] = new char[len+100];
fl_selection_buffer_length[clipboard] = len+100;
}
memcpy(selection_buffer[clipboard], stuff, len);
selection_buffer[clipboard][len] = 0; // needed for direct paste
selection_length[clipboard] = len;
memcpy(fl_selection_buffer[clipboard], stuff, len);
fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
fl_selection_length[clipboard] = len;
if (clipboard) {
// set up for "delayed rendering":
if (OpenClipboard(fl_xid(Fl::first_window()))) {
EmptyClipboard();
SetClipboardData(CF_TEXT, NULL);
CloseClipboard();
}
i_own_selection = true;
fl_i_own_selection[clipboard] = 1;
}
}

// Call this when a "paste" operation happens:
void Fl::paste(Fl_Widget &receiver, int clipboard) {
if (!clipboard || i_own_selection) {
if (!clipboard || fl_i_own_selection[clipboard]) {
// We already have it, do it quickly without window server.
// Notice that the text is clobbered if set_selection is
// called in response to FL_PASTE!
Fl::e_text = selection_buffer[clipboard];
Fl::e_length = selection_length[clipboard];
Fl::e_text = fl_selection_buffer[clipboard];
Fl::e_length = fl_selection_length[clipboard];
receiver.handle(FL_PASTE);
} else {
if (!OpenClipboard(NULL)) return;
Expand Down Expand Up @@ -772,7 +772,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
#endif

case WM_DESTROYCLIPBOARD:
i_own_selection = false;
fl_i_own_selection[1] = 0;
return 1;

case WM_RENDERALLFORMATS:
Expand All @@ -784,11 +784,11 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
OpenClipboard(NULL);
// fall through...
case WM_RENDERFORMAT: {
HANDLE h = GlobalAlloc(GHND, selection_length[1]+1);
HANDLE h = GlobalAlloc(GHND, fl_selection_length[1]+1);
if (h) {
LPSTR p = (LPSTR)GlobalLock(h);
memcpy(p, selection_buffer[1], selection_length[1]);
p[selection_length[1]] = 0;
memcpy(p, fl_selection_buffer[1], fl_selection_length[1]);
p[fl_selection_length[1]] = 0;
GlobalUnlock(h);
SetClipboardData(CF_TEXT, h);
}
Expand Down Expand Up @@ -1156,5 +1156,5 @@ void Fl_Window::make_current() {
}

//
// End of "$Id: Fl_win32.cxx,v 1.33.2.37.2.19 2002/03/07 19:22:57 spitzak Exp $".
// End of "$Id: Fl_win32.cxx,v 1.33.2.37.2.20 2002/03/25 19:17:05 easysw Exp $".
//
15 changes: 9 additions & 6 deletions src/fl_dnd_win32.cxx
@@ -1,5 +1,5 @@
//
// "$Id: fl_dnd_win32.cxx,v 1.5.2.3 2002/03/07 19:22:58 spitzak Exp $"
// "$Id: fl_dnd_win32.cxx,v 1.5.2.4 2002/03/25 19:17:05 easysw Exp $"
//
// Drag & Drop code for the Fast Light Tool Kit (FLTK).
//
Expand Down Expand Up @@ -46,8 +46,10 @@
#include <ole2.h>
#include <ShellAPI.h>

extern char *fl_selection_buffer;
extern int fl_selection_length;
extern char *fl_selection_buffer[2];
extern int fl_selection_length[2];
extern int fl_selection_buffer_length[2];
extern char fl_i_own_selection[2];

Fl_Window *fl_dnd_target_window = 0;

Expand Down Expand Up @@ -273,9 +275,10 @@ class FLDataObject : public IDataObject
(pformatetcIn->tymed & TYMED_HGLOBAL) &&
(pformatetcIn->cfFormat == CF_TEXT))
{
HGLOBAL gh = GlobalAlloc( GHND, fl_selection_length+1 );
HGLOBAL gh = GlobalAlloc( GHND, fl_selection_length[0]+1 );
char *pMem = (char*)GlobalLock( gh );
memmove( pMem, fl_selection_buffer, fl_selection_length ); pMem[ fl_selection_length ] = 0;
memmove( pMem, fl_selection_buffer[0], fl_selection_length[0] );
pMem[ fl_selection_length[0] ] = 0;
pmedium->tymed = TYMED_HGLOBAL;
pmedium->hGlobal = gh;
pmedium->pUnkForRelease = NULL;
Expand Down Expand Up @@ -336,5 +339,5 @@ int Fl::dnd()


//
// End of "$Id: fl_dnd_win32.cxx,v 1.5.2.3 2002/03/07 19:22:58 spitzak Exp $".
// End of "$Id: fl_dnd_win32.cxx,v 1.5.2.4 2002/03/25 19:17:05 easysw Exp $".
//

0 comments on commit 9700e54

Please sign in to comment.