From 5a6774ae6876250f1d91542b08ac54631f99ccbe Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 8 Jul 2010 23:07:34 -0700 Subject: [PATCH] Amazingly the Windows code is almost identical to the Mac OS X code. :) --- VisualC/SDL/SDL_VS2005.vcproj | 8 ++++++++ VisualC/SDL/SDL_VS2008.vcproj | 8 ++++++++ src/video/cocoa/SDL_cocoaclipboard.m | 8 ++++---- src/video/win32/SDL_win32clipboard.c | 17 +++++++++++++++++ src/video/win32/SDL_win32clipboard.h | 4 ++++ src/video/win32/SDL_win32events.c | 5 ++++- src/video/win32/SDL_win32video.c | 1 - src/video/win32/SDL_win32video.h | 3 +++ 8 files changed, 48 insertions(+), 6 deletions(-) diff --git a/VisualC/SDL/SDL_VS2005.vcproj b/VisualC/SDL/SDL_VS2005.vcproj index 0dfa9b77d..6be80978f 100644 --- a/VisualC/SDL/SDL_VS2005.vcproj +++ b/VisualC/SDL/SDL_VS2005.vcproj @@ -568,6 +568,14 @@ RelativePath="..\..\src\video\SDL_clipboard.c" > + + + + diff --git a/VisualC/SDL/SDL_VS2008.vcproj b/VisualC/SDL/SDL_VS2008.vcproj index d616591fd..439cbd1bc 100644 --- a/VisualC/SDL/SDL_VS2008.vcproj +++ b/VisualC/SDL/SDL_VS2008.vcproj @@ -723,6 +723,14 @@ RelativePath="..\..\src\video\SDL_clipboard.c" > + + + + diff --git a/src/video/cocoa/SDL_cocoaclipboard.m b/src/video/cocoa/SDL_cocoaclipboard.m index 01ff40a89..26f6aeed2 100644 --- a/src/video/cocoa/SDL_cocoaclipboard.m +++ b/src/video/cocoa/SDL_cocoaclipboard.m @@ -45,7 +45,7 @@ { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; NSAutoreleasePool *pool; - NSPasteboard *pasteboard; + NSPasteboard *pasteboard; NSString *format = GetTextFormat(_this); pool = [[NSAutoreleasePool alloc] init]; @@ -63,7 +63,7 @@ Cocoa_GetClipboardText(_THIS) { NSAutoreleasePool *pool; - NSPasteboard *pasteboard; + NSPasteboard *pasteboard; NSString *format = GetTextFormat(_this); NSString *available; char *text; @@ -96,7 +96,7 @@ Cocoa_HasClipboardText(_THIS) { NSAutoreleasePool *pool; - NSPasteboard *pasteboard; + NSPasteboard *pasteboard; NSString *format = GetTextFormat(_this); NSString *available; SDL_bool result; @@ -120,7 +120,7 @@ Cocoa_CheckClipboardUpdate(struct SDL_VideoData * data) { NSAutoreleasePool *pool; - NSPasteboard *pasteboard; + NSPasteboard *pasteboard; NSInteger count; pool = [[NSAutoreleasePool alloc] init]; diff --git a/src/video/win32/SDL_win32clipboard.c b/src/video/win32/SDL_win32clipboard.c index 950bd444f..22d54a682 100644 --- a/src/video/win32/SDL_win32clipboard.c +++ b/src/video/win32/SDL_win32clipboard.c @@ -23,6 +23,7 @@ #include "SDL_win32video.h" #include "SDL_win32window.h" +#include "../../events/SDL_clipboardevents_c.h" #ifdef UNICODE @@ -52,6 +53,7 @@ GetWindowHandle(_THIS) int WIN_SetClipboardText(_THIS, const char *text) { + SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; int result = 0; if (OpenClipboard(GetWindowHandle(_this))) { @@ -93,6 +95,7 @@ WIN_SetClipboardText(_THIS, const char *text) WIN_SetError("Couldn't set clipboard data"); result = -1; } + data->clipboard_count = GetClipboardSequenceNumber(); } SDL_free(tstr); @@ -141,4 +144,18 @@ WIN_HasClipboardText(_THIS) } } +void +WIN_CheckClipboardUpdate(struct SDL_VideoData * data) +{ + DWORD count; + + count = GetClipboardSequenceNumber(); + if (count != data->clipboard_count) { + if (data->clipboard_count) { + SDL_SendClipboardUpdate(); + } + data->clipboard_count = count; + } +} + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/win32/SDL_win32clipboard.h b/src/video/win32/SDL_win32clipboard.h index 36fb79823..ab2fb17a7 100644 --- a/src/video/win32/SDL_win32clipboard.h +++ b/src/video/win32/SDL_win32clipboard.h @@ -24,9 +24,13 @@ #ifndef _SDL_win32clipboard_h #define _SDL_win32clipboard_h +/* Forward declaration */ +struct SDL_VideoData; + extern int WIN_SetClipboardText(_THIS, const char *text); extern char *WIN_GetClipboardText(_THIS); extern SDL_bool WIN_HasClipboardText(_THIS); +extern void WIN_CheckClipboardUpdate(struct SDL_VideoData * data); #endif /* _SDL_win32clipboard_h */ diff --git a/src/video/win32/SDL_win32events.c b/src/video/win32/SDL_win32events.c index 98affcc3c..d03b672c6 100755 --- a/src/video/win32/SDL_win32events.c +++ b/src/video/win32/SDL_win32events.c @@ -162,7 +162,10 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) if (SDL_GetKeyboardFocus() != data->window) { SDL_SetKeyboardFocus(data->window); } - /* FIXME: Update keyboard state */ + /* + * FIXME: Update keyboard state + */ + WIN_CheckClipboardUpdate(data->videodata); } else { if (SDL_GetKeyboardFocus() == data->window) { SDL_SetKeyboardFocus(NULL); diff --git a/src/video/win32/SDL_win32video.c b/src/video/win32/SDL_win32video.c index 2c93885e2..2c5d3146d 100644 --- a/src/video/win32/SDL_win32video.c +++ b/src/video/win32/SDL_win32video.c @@ -28,7 +28,6 @@ #include "../SDL_pixels_c.h" #include "SDL_win32video.h" -#include "SDL_win32clipboard.h" #include "SDL_d3drender.h" #include "SDL_gdirender.h" diff --git a/src/video/win32/SDL_win32video.h b/src/video/win32/SDL_win32video.h index 117999dc9..6911f49b8 100644 --- a/src/video/win32/SDL_win32video.h +++ b/src/video/win32/SDL_win32video.h @@ -45,6 +45,7 @@ #include "ddraw.h" #endif +#include "SDL_win32clipboard.h" #include "SDL_win32events.h" #include "SDL_win32gamma.h" #include "SDL_win32keyboard.h" @@ -75,6 +76,8 @@ typedef struct SDL_VideoData IDirectDraw *ddraw; #endif + DWORD clipboard_count; + const SDL_scancode *key_layout; } SDL_VideoData;