← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2274: fixes for MinGW

 

------------------------------------------------------------
revno: 2274
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Fri 2010-10-29 17:30:05 +0200
message:
  fixes for MinGW
modified:
  SConstruct
  dwt/include/dwt/dwt_shlobj.h
  dwt/src/Taskbar.cpp
  dwt/src/widgets/RichTextBox.cpp
  win32/RichTextBox.cpp
  win32/StatsFrame.cpp


--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk

Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'SConstruct'
--- SConstruct	2010-10-28 20:32:29 +0000
+++ SConstruct	2010-10-29 15:30:05 +0000
@@ -147,6 +147,11 @@
 	else:
 		env.Append(CCFLAGS = ['-pipe'])
 
+# MinGW seems to choke on member function calls from lambdas, one has to add "this->".
+# TODO When versions of GCC for MinGW that don't need this workaround are available, remove any
+# mention of "GCC_WTF". Until then, use it to facilitate search & replace.
+env.Append(CPPDEFINES = ['GCC_WTF="this"'])
+
 if env['unicode']:
 	env.Append(CPPDEFINES = ['UNICODE', '_UNICODE'])
 

=== modified file 'dwt/include/dwt/dwt_shlobj.h'
--- dwt/include/dwt/dwt_shlobj.h	2010-10-28 22:43:23 +0000
+++ dwt/include/dwt/dwt_shlobj.h	2010-10-29 15:30:05 +0000
@@ -49,9 +49,13 @@
 typedef struct ITaskbarList2 ITaskbarList2;
 #endif
 
+#ifndef __ITaskbarList3_FWD_DEFINED__
+#define __ITaskbarList3_FWD_DEFINED__
+typedef struct ITaskbarList3 ITaskbarList3;
+#endif
+
 #ifndef __ITaskbarList_INTERFACE_DEFINED__
 #define __ITaskbarList_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ITaskbarList;
 #if defined(__cplusplus) && !defined(CINTERFACE)
   struct ITaskbarList : public IUnknown {
   public:
@@ -62,37 +66,32 @@
     virtual HRESULT WINAPI SetActiveAlt(HWND hwnd) = 0;
   };
 #endif
-  HRESULT WINAPI ITaskbarList_HrInit_Proxy(ITaskbarList *This);
-  void __RPC_STUB ITaskbarList_HrInit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ITaskbarList_AddTab_Proxy(ITaskbarList *This,HWND hwnd);
-  void __RPC_STUB ITaskbarList_AddTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ITaskbarList_DeleteTab_Proxy(ITaskbarList *This,HWND hwnd);
-  void __RPC_STUB ITaskbarList_DeleteTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ITaskbarList_ActivateTab_Proxy(ITaskbarList *This,HWND hwnd);
-  void __RPC_STUB ITaskbarList_ActivateTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ITaskbarList_SetActiveAlt_Proxy(ITaskbarList *This,HWND hwnd);
-  void __RPC_STUB ITaskbarList_SetActiveAlt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
 #endif
 
 #ifndef __ITaskbarList2_INTERFACE_DEFINED__
 #define __ITaskbarList2_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ITaskbarList2;
 #if defined(__cplusplus) && !defined(CINTERFACE)
   struct ITaskbarList2 : public ITaskbarList {
   public:
     virtual HRESULT WINAPI MarkFullscreenWindow(HWND hwnd,WINBOOL fFullscreen) = 0;
   };
 #endif
-  HRESULT WINAPI ITaskbarList2_MarkFullscreenWindow_Proxy(ITaskbarList2 *This,HWND hwnd,WINBOOL fFullscreen);
-  void __RPC_STUB ITaskbarList2_MarkFullscreenWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
 #endif
 
 #ifndef __ITaskbarList3_INTERFACE_DEFINED__
 #define __ITaskbarList3_INTERFACE_DEFINED__
-  EXTERN_C const IID IID_ITaskbarList3;
 #if defined(__cplusplus) && !defined(CINTERFACE)
   struct ITaskbarList3 : public ITaskbarList2 {
   public:
+        virtual HRESULT WINAPI SetProgressValue( 
+            /* [in] */ HWND hwnd,
+            /* [in] */ ULONGLONG ullCompleted,
+            /* [in] */ ULONGLONG ullTotal) = 0;
+        
+        virtual HRESULT WINAPI SetProgressState( 
+            /* [in] */ HWND hwnd,
+            /* [in] */ /*TBPFLAG*/int tbpFlags) = 0;
+        
         virtual HRESULT WINAPI RegisterTab( 
             /* [in] */ HWND hwndTab,
             /* [in] */ HWND hwndMDI) = 0;
@@ -108,16 +107,35 @@
             /* [in] */ HWND hwndTab,
             /* [in] */ HWND hwndMDI,
             /* [in] */ DWORD dwReserved) = 0;
+        
+        virtual HRESULT WINAPI ThumbBarAddButtons( 
+            /* [in] */ HWND hwnd,
+            /* [in] */ UINT cButtons,
+            /* [size_is][in] */ /*LPTHUMBBUTTON*/void* pButton) = 0;
+        
+        virtual HRESULT WINAPI ThumbBarUpdateButtons( 
+            /* [in] */ HWND hwnd,
+            /* [in] */ UINT cButtons,
+            /* [size_is][in] */ /*LPTHUMBBUTTON*/void* pButton) = 0;
+        
+        virtual HRESULT WINAPI ThumbBarSetImageList( 
+            /* [in] */ HWND hwnd,
+            /* [in] */ /*HIMAGELIST*/void* himl) = 0;
+        
+        virtual HRESULT WINAPI SetOverlayIcon( 
+            /* [in] */ HWND hwnd,
+            /* [in] */ HICON hIcon,
+            /* [string][unique][in] */ LPCWSTR pszDescription) = 0;
+        
+        virtual HRESULT WINAPI SetThumbnailTooltip( 
+            /* [in] */ HWND hwnd,
+            /* [string][unique][in] */ LPCWSTR pszTip) = 0;
+        
+        virtual HRESULT WINAPI SetThumbnailClip( 
+            /* [in] */ HWND hwnd,
+            /* [in] */ RECT *prcClip) = 0;
   };
 #endif
-  HRESULT WINAPI ITaskbarList3_RegisterTab_Proxy(ITaskbarList3 *This,HWND hwnd,HWND hwndMDI);
-  void __RPC_STUB ITaskbarList3_RegisterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ITaskbarList3_UnregisterTab_Proxy(ITaskbarList3 *This,HWND hwnd);
-  void __RPC_STUB ITaskbarList3_UnregisterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ITaskbarList3_SetTabOrder_Proxy(ITaskbarList3 *This,HWND hwnd,HWND hwndInsertBefore);
-  void __RPC_STUB ITaskbarList3_SetTabOrder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
-  HRESULT WINAPI ITaskbarList3_SetTabActive_Proxy(ITaskbarList3 *This,HWND hwnd,HWND hwndMDI,DWORD dwReserved);
-  void __RPC_STUB ITaskbarList3_SetTabActive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
 #endif
 
 #endif

=== modified file 'dwt/src/Taskbar.cpp'
--- dwt/src/Taskbar.cpp	2010-10-28 22:43:23 +0000
+++ dwt/src/Taskbar.cpp	2010-10-29 15:30:05 +0000
@@ -70,8 +70,6 @@
 	if(!util::win32::ensureVersion(util::win32::SEVEN))
 		return;
 
-	/// @todo call ChangeWindowMessageFilterEx on WM_DWMSENDICONICTHUMBNAIL & WM_DWMSENDICONICLIVEPREVIEWBITMAP
-
 	static LibraryLoader lib(_T("dwmapi"), true);
 	if(lib.loaded()) {
 
@@ -88,9 +86,28 @@
 		// init the COM pointer on reception of the "TaskbarButtonCreated" message.
 		window->onRaw([this](WPARAM, LPARAM) -> LRESULT {
 			if(!taskbar) {
+#ifdef __GNUC__
+				/// @todo remove when GCC knows about ITaskbarList
+				CLSID CLSID_TaskbarList;
+				OLECHAR tbl[] = L"{56FDF344-FD6D-11d0-958A-006097C9A090}";
+				CLSIDFromString(tbl, &CLSID_TaskbarList);
+				IID IID_ITaskbarList;
+				OLECHAR itbl[] = L"{56FDF342-FD6D-11d0-958A-006097C9A090}";
+				CLSIDFromString(itbl, &IID_ITaskbarList);
+#endif
 				if(::CoCreateInstance(CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, IID_ITaskbarList,
 					reinterpret_cast<LPVOID*>(&taskbar)) != S_OK) { taskbar = 0; }
-				if(taskbar && taskbar->HrInit() != S_OK) {
+				if(taskbar && taskbar->HrInit() == S_OK) {
+					LibraryLoader lib_user32(_T("user32"));
+					typedef BOOL (WINAPI *t_ChangeWindowMessageFilterEx)(HWND, UINT, DWORD, void*);
+					t_ChangeWindowMessageFilterEx ChangeWindowMessageFilterEx;
+					if(ChangeWindowMessageFilterEx = reinterpret_cast<t_ChangeWindowMessageFilterEx>(
+						lib_user32.getProcAddress(_T("ChangeWindowMessageFilterEx"))))
+					{
+						ChangeWindowMessageFilterEx(window->handle(), WM_DWMSENDICONICTHUMBNAIL, 1/*MSGFLT_ALLOW*/, 0);
+						ChangeWindowMessageFilterEx(window->handle(), WM_DWMSENDICONICLIVEPREVIEWBITMAP, 1/*MSGFLT_ALLOW*/, 0);
+					}
+				} else {
 					taskbar->Release();
 					taskbar = 0;
 				}

=== modified file 'dwt/src/widgets/RichTextBox.cpp'
--- dwt/src/widgets/RichTextBox.cpp	2010-10-29 13:05:05 +0000
+++ dwt/src/widgets/RichTextBox.cpp	2010-10-29 15:30:05 +0000
@@ -86,7 +86,7 @@
 	<http://msdn.microsoft.com/en-us/library/bb787875(VS.85).aspx>, we have to handle the printing
 	by ourselves. this is crucial for taskbar thumbnails and "Aero Peek" previews. */
 	onPrinting([this, cs](Canvas& canvas) {
-		Rectangle rect(getClientSize());
+		Rectangle rect(GCC_WTF->getClientSize());
 
 		// paint a background in case the text doesn't span the whole box.
 		canvas.fill(rect, Brush(cs.backgroundColor));
@@ -98,8 +98,8 @@
 		format.rcPage = format.rc;
 		format.chrg.cpMin = 0;
 		format.chrg.cpMax = -1;
-		sendMessage(EM_FORMATRANGE, 1, reinterpret_cast<LPARAM>(&format));
-		sendMessage(EM_FORMATRANGE); // "free the cached information" as MSDN recommends.
+		GCC_WTF->sendMessage(EM_FORMATRANGE, 1, reinterpret_cast<LPARAM>(&format));
+		GCC_WTF->sendMessage(EM_FORMATRANGE); // "free the cached information" as MSDN recommends.
 	});
 }
 

=== modified file 'win32/RichTextBox.cpp'
--- win32/RichTextBox.cpp	2010-10-10 09:26:48 +0000
+++ win32/RichTextBox.cpp	2010-10-29 15:30:05 +0000
@@ -62,7 +62,7 @@
 	MenuPtr menu = BaseType::getMenu();
 
 	menu->appendSeparator();
-	menu->appendItem(T_("&Find...\tF3"), [this]() { this->findText(this->findTextPopup()); }, dwt::IconPtr(), !getText().empty());
+	menu->appendItem(T_("&Find...\tF3"), [this]() { GCC_WTF->findText(this->findTextPopup()); }, dwt::IconPtr(), !getText().empty());
 
 	return menu;
 }

=== modified file 'win32/StatsFrame.cpp'
--- win32/StatsFrame.cpp	2010-10-28 20:21:23 +0000
+++ win32/StatsFrame.cpp	2010-10-29 15:30:05 +0000
@@ -48,7 +48,7 @@
 			return;
 		draw(canvas, rect);
 	});
-	onPrinting([this](dwt::Canvas& canvas) { draw(canvas, dwt::Rectangle(getClientSize())); });
+	onPrinting([this](dwt::Canvas& canvas) { draw(canvas, dwt::Rectangle(GCC_WTF->getClientSize())); });
 
 	initStatus();