diff options
Diffstat (limited to 'src/IconButton.cc')
-rw-r--r-- | src/IconButton.cc | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/src/IconButton.cc b/src/IconButton.cc index 015065c..11b2c02 100644 --- a/src/IconButton.cc +++ b/src/IconButton.cc | |||
@@ -170,6 +170,7 @@ IconButton::IconButton(const IconbarTool& tool, const FbTk::FbWindow &parent, | |||
170 | } | 170 | } |
171 | 171 | ||
172 | m_win.hintSig().attach(this); | 172 | m_win.hintSig().attach(this); |
173 | m_win.titleSig().attach(this); | ||
173 | 174 | ||
174 | FbTk::EventManager::instance()->add(*this, m_icon_window); | 175 | FbTk::EventManager::instance()->add(*this, m_icon_window); |
175 | 176 | ||
@@ -236,13 +237,9 @@ void IconButton::update(FbTk::Subject *subj) { | |||
236 | 237 | ||
237 | Display *display = FbTk::App::instance()->display(); | 238 | Display *display = FbTk::App::instance()->display(); |
238 | 239 | ||
239 | XWMHints *hints = XGetWMHints(display, m_win.winClient().window()); | ||
240 | if (hints == 0) | ||
241 | return; | ||
242 | |||
243 | int screen = m_win.screen().screenNumber(); | 240 | int screen = m_win.screen().screenNumber(); |
244 | 241 | ||
245 | if (m_use_pixmap && (hints->flags & IconPixmapHint) && hints->icon_pixmap != 0) { | 242 | if (m_use_pixmap && m_win.usePixmap()) { |
246 | // setup icon window | 243 | // setup icon window |
247 | m_icon_window.show(); | 244 | m_icon_window.show(); |
248 | unsigned int w = width(); | 245 | unsigned int w = width(); |
@@ -262,7 +259,7 @@ void IconButton::update(FbTk::Subject *subj) { | |||
262 | neww = newh; | 259 | neww = newh; |
263 | m_icon_window.moveResize(iconx, icony, neww, newh); | 260 | m_icon_window.moveResize(iconx, icony, neww, newh); |
264 | 261 | ||
265 | m_icon_pixmap.copy(hints->icon_pixmap, DefaultDepth(display, screen), screen); | 262 | m_icon_pixmap.copy(m_win.iconPixmap().drawable(), DefaultDepth(display, screen), screen); |
266 | m_icon_pixmap.scale(m_icon_window.width(), m_icon_window.height()); | 263 | m_icon_pixmap.scale(m_icon_window.width(), m_icon_window.height()); |
267 | 264 | ||
268 | // rotate the icon or not?? lets go not for now, and see what they say... | 265 | // rotate the icon or not?? lets go not for now, and see what they say... |
@@ -277,29 +274,27 @@ void IconButton::update(FbTk::Subject *subj) { | |||
277 | m_icon_pixmap = 0; | 274 | m_icon_pixmap = 0; |
278 | } | 275 | } |
279 | 276 | ||
280 | if(m_use_pixmap && (hints->flags & IconMaskHint)) { | 277 | if(m_use_pixmap && m_win.useMask()) { |
281 | m_icon_mask.copy(hints->icon_mask, 0, 0); | 278 | m_icon_mask.copy(m_win.iconMask().drawable(), 0, 0); |
282 | m_icon_mask.scale(m_icon_pixmap.width(), m_icon_pixmap.height()); | 279 | m_icon_mask.scale(m_icon_pixmap.width(), m_icon_pixmap.height()); |
283 | m_icon_mask.rotate(orientation()); | 280 | m_icon_mask.rotate(orientation()); |
284 | } else | 281 | } else |
285 | m_icon_mask = 0; | 282 | m_icon_mask = 0; |
286 | 283 | ||
287 | XFree(hints); | ||
288 | hints = 0; | ||
289 | |||
290 | #ifdef SHAPE | 284 | #ifdef SHAPE |
291 | 285 | ||
292 | if (m_icon_mask.drawable() != 0) { | 286 | XShapeCombineMask(display, |
293 | XShapeCombineMask(display, | 287 | m_icon_window.drawable(), |
294 | m_icon_window.drawable(), | 288 | ShapeBounding, |
295 | ShapeBounding, | 289 | 0, 0, |
296 | 0, 0, | 290 | m_icon_mask.drawable(), |
297 | m_icon_mask.drawable(), | 291 | ShapeSet); |
298 | ShapeSet); | ||
299 | } | ||
300 | 292 | ||
301 | #endif // SHAPE | 293 | #endif // SHAPE |
302 | 294 | ||
295 | if (subj == &(m_win.titleSig())) | ||
296 | setText(m_win.title()); | ||
297 | |||
303 | if (subj != 0) { | 298 | if (subj != 0) { |
304 | setupWindow(); | 299 | setupWindow(); |
305 | } else { | 300 | } else { |