1 /** \file\r
2 * Provides a class that can contain active TemporaryItem's on a desktop\r
3 * When the object is deleted, it also deletes the canvasitem it contains!\r
4 * This object should be created/managed by a TemporaryItemList.\r
5 * After its lifetime, it fires the timeout signal, afterwards *it deletes itself*.\r
6 *\r
7 * (part of code inspired by message-stack.cpp)\r
8 *\r
9 * Authors:\r
10 * Johan Engelen\r
11 *\r
12 * Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>\r
13 *\r
14 * Released under GNU GPL, read the file 'COPYING' for more information\r
15 */\r
16 \r
17 #include "display/canvas-temporary-item.h"\r
18 \r
19 #include <gtk/gtkobject.h>\r
20 \r
21 namespace Inkscape {\r
22 namespace Display {\r
23 \r
24 /** lifetime is measured in milliseconds\r
25 */\r
26 TemporaryItem::TemporaryItem(SPCanvasItem *item, guint lifetime)\r
27 : canvasitem(item),\r
28 timeout_id(0)\r
29 {\r
30 // zero lifetime means stay forever, so do not add timeout event.\r
31 if (lifetime > 0) {\r
32 timeout_id = g_timeout_add(lifetime, &TemporaryItem::_timeout, this);\r
33 }\r
34 }\r
35 \r
36 TemporaryItem::~TemporaryItem()\r
37 {\r
38 // when it has not expired yet...\r
39 if (timeout_id) {\r
40 g_source_remove(timeout_id);\r
41 timeout_id = 0;\r
42 }\r
43 \r
44 if (canvasitem) {\r
45 // destroying the item automatically hides it\r
46 gtk_object_destroy (GTK_OBJECT (canvasitem));\r
47 canvasitem = NULL;\r
48 }\r
49 }\r
50 \r
51 /* static method*/\r
52 gboolean TemporaryItem::_timeout(gpointer data) {\r
53 TemporaryItem *tempitem = reinterpret_cast<TemporaryItem *>(data);\r
54 tempitem->timeout_id = 0;\r
55 tempitem->signal_timeout.emit(tempitem);\r
56 delete tempitem;\r
57 return FALSE;\r
58 }\r
59 \r
60 \r
61 } //namespace Display\r
62 } /* namespace Inkscape */\r
63 \r
64 /*\r
65 Local Variables:\r
66 mode:c++\r
67 c-file-style:"stroustrup"\r
68 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\r
69 indent-tabs-mode:nil\r
70 fill-column:99\r
71 End:\r
72 */\r
73 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :\r