linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #03105
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2399: Avoid crashes when closing from the taskbar too often
------------------------------------------------------------
revno: 2399
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Thu 2011-01-27 18:35:08 +0100
message:
Avoid crashes when closing from the taskbar too often
modified:
changelog.txt
dwt/src/Taskbar.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 'changelog.txt'
--- changelog.txt 2011-01-25 12:17:48 +0000
+++ changelog.txt 2011-01-27 17:35:08 +0000
@@ -1,4 +1,5 @@
* Prevent a remote crash triggered via malformed user commands (poy)
+* Avoid crashes when closing from the taskbar too often (poy)
-- 0.781 2011-01-12 --
* Add a dummy serial number to TLS certs to satisfy some parsers (poy)
=== modified file 'dwt/src/Taskbar.cpp'
--- dwt/src/Taskbar.cpp 2011-01-02 17:12:02 +0000
+++ dwt/src/Taskbar.cpp 2011-01-27 17:35:08 +0000
@@ -43,16 +43,16 @@
static const UINT taskbarButtonMsg = ::RegisterWindowMessage(_T("TaskbarButtonCreated"));
typedef HRESULT (WINAPI *t_DwmInvalidateIconicBitmaps)(HWND);
-static t_DwmInvalidateIconicBitmaps DwmInvalidateIconicBitmaps;
+static t_DwmInvalidateIconicBitmaps DwmInvalidateIconicBitmaps = 0;
typedef HRESULT (WINAPI *t_DwmSetIconicLivePreviewBitmap)(HWND, HBITMAP, POINT*, DWORD);
-static t_DwmSetIconicLivePreviewBitmap DwmSetIconicLivePreviewBitmap;
+static t_DwmSetIconicLivePreviewBitmap DwmSetIconicLivePreviewBitmap = 0;
typedef HRESULT (WINAPI *t_DwmSetIconicThumbnail)(HWND, HBITMAP, DWORD);
-static t_DwmSetIconicThumbnail DwmSetIconicThumbnail;
+static t_DwmSetIconicThumbnail DwmSetIconicThumbnail = 0;
typedef HRESULT (WINAPI *t_DwmSetWindowAttribute)(HWND, DWORD, LPCVOID, DWORD);
-static t_DwmSetWindowAttribute DwmSetWindowAttribute;
+static t_DwmSetWindowAttribute DwmSetWindowAttribute = 0;
Taskbar::Taskbar() :
taskbar(0),
@@ -150,8 +150,10 @@
window->setVisible(true);
}
});
- proxy->onClosing([tab]() -> bool {
- tab->close(true);
+ proxy->onClosing([this, tab]() -> bool {
+ if(window->getEnabled()) {
+ tab->close(true);
+ }
return false; // don't close the proxy window just yet; wait for removeFromTaskbar.
});
@@ -219,7 +221,7 @@
BitmapPtr bitmap_full(new Bitmap(::CreateDIBSection(canvas.handle(), &info, DIB_RGB_COLORS, 0, 0, 0)));
CompatibleCanvas canvas_full(canvas.handle());
- Canvas::Selector select_full(canvas_full, *bitmap_full);
+ auto select_full(canvas_full.select(*bitmap_full));
tab->sendMessage(WM_PRINT, reinterpret_cast<WPARAM>(canvas_full.handle()), PRF_CLIENT | PRF_NONCLIENT | PRF_CHILDREN | PRF_ERASEBKGND);
@@ -242,7 +244,7 @@
BitmapPtr bitmap_thumb(new Bitmap(::CreateDIBSection(canvas.handle(), &info, DIB_RGB_COLORS, 0, 0, 0)));
CompatibleCanvas canvas_thumb(canvas.handle());
- Canvas::Selector select_thumb(canvas_thumb, *bitmap_thumb);
+ auto select_thumb(canvas_thumb.select(*bitmap_thumb));
::SetStretchBltMode(canvas_thumb.handle(), HALFTONE);
::SetBrushOrgEx(canvas_thumb.handle(), 0, 0, 0);