freebsd-ports/x11-wm/fluxbox/files/patch-fix_pixmap_resource_leak
Jeremy Messenger 6fc7f3bdc0 -Fix unshading crash. [1]
-Fix pixmap resource leak in pixmap menu.
-Bump the PORTREVISION.

Reported by:	L Campbell <llc2w@virginia.edu> [1]
Tested by:	L Campbell <llc2w@virginia.edu> [1]
		Randy Pratt <bsd-unix@embarqmail.com> [1]
Obtained from:	Its git repository (both patches)
Approved by:	portmgr (linimon)
2008-09-17 04:23:32 +00:00

102 lines
4.3 KiB
Text

From 91408776f0b04dbc5a5da99f555b33f9abc5a905 Mon Sep 17 00:00:00 2001
From: Henrik Kinnunen <fluxgen@fluxbox.org>
Date: Sun, 14 Sep 2008 21:36:16 +0200
Subject: [PATCH] Fixed a pixmap resource leak with selected pixmap in menus.
menu.hilite.selected.pixmap and menu.selected.pixmap was not
deleted while switching between non-pixmap styles and pixmap styles.
---
ChangeLog | 3 +++
src/FbTk/ImageControl.cc | 9 ++++++++-
src/FbTk/ImageControl.hh | 5 ++++-
src/FbTk/Menu.cc | 18 +++++++++++++++---
4 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ ChangeLog
@@ -1,5 +1,8 @@
(Format: Year/Month/Day)
Changes for 1.1
+*08/09/14:
+ * Fixed a minor pixmap resource leak (Henrik)
+ FbTk/Menu.cc, FbTk/ImageControl.cc/hh
*08/09/01:
* When the current menu item gets disabled, highlight its nearest neighbor
and add separators to the focus model menu (Mark)
diff --git a/src/FbTk/ImageControl.cc b/src/FbTk/ImageControl.cc
--- a/src/FbTk/ImageControl.cc
+++ src/FbTk/ImageControl.cc
@@ -227,11 +227,18 @@ Pixmap ImageControl::searchCache(unsigned int width, unsigned int height,
Pixmap ImageControl::renderImage(unsigned int width, unsigned int height,
const FbTk::Texture &texture,
- FbTk::Orientation orient) {
+ FbTk::Orientation orient,
+ bool use_cache ) {
if (texture.type() & FbTk::Texture::PARENTRELATIVE)
return ParentRelative;
+ // If we are not suppose to cache this pixmap, just render and return it
+ if ( ! use_cache) {
+ TextureRender image(*this, width, height, orient, m_colors, m_num_colors);
+ return image.render(texture);
+ }
+
// search cache first
Pixmap pixmap = searchCache(width, height, texture, orient);
if (pixmap) {
diff --git a/src/FbTk/ImageControl.hh b/src/FbTk/ImageControl.hh
--- a/src/FbTk/ImageControl.hh
+++ src/FbTk/ImageControl.hh
@@ -54,11 +54,14 @@ public:
@param width width of pixmap
@param height height of pixmap
@param src_texture texture type to render
+ @param orient Orientation of the texture.
+ @param use_cache whether or not to use cache
@return pixmap of the rendered image, on failure None
*/
Pixmap renderImage(unsigned int width, unsigned int height,
const FbTk::Texture &src_texture,
- Orientation orient = ROT0);
+ Orientation orient = ROT0,
+ bool use_cache = true);
void installRootColormap();
void removeImage(Pixmap thepix);
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc
--- a/src/FbTk/Menu.cc
+++ src/FbTk/Menu.cc
@@ -460,12 +460,24 @@ void Menu::updateMenu(int active_index) {
if (!theme()->selectedPixmap().pixmap().drawable()) {
int hw = theme()->itemHeight() / 2;
- theme()->setSelectedPixmap(m_image_ctrl.renderImage(hw, hw, theme()->hiliteTexture()), true);
+ // render image, disable cache and let the theme remove the pixmap
+ theme()->setSelectedPixmap(m_image_ctrl.
+ renderImage(hw, hw,
+ theme()->hiliteTexture(), ROT0,
+ false // no cache
+ ),
+ false); // the theme takes care of this pixmap
if (!theme()->highlightSelectedPixmap().pixmap().drawable()) {
int hw = theme()->itemHeight() / 2;
- theme()->setHighlightSelectedPixmap(m_image_ctrl.renderImage(hw, hw, theme()->frameTexture()), true);
- }
+ // render image, disable cache and let the theme remove the pixmap
+ theme()->setHighlightSelectedPixmap(m_image_ctrl.
+ renderImage(hw, hw,
+ theme()->frameTexture(), ROT0,
+ false // no cache
+ ),
+ false); // theme takes care of this pixmap
+ }
}
if (m_title_vis) {
--
1.6.0.1