17
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
20
#include "cairo-dock-icons.h"
20
#include "cairo-dock-icon-factory.h"
21
#include "cairo-dock-log.h"
21
22
#include "cairo-dock-notifications.h"
23
24
static GPtrArray *s_pNotificationsTab = NULL; // tables des notifications globales.
26
#define _check_notification_table(pNotificationsTab) do {\
27
if (pNotificationsTab == NULL) {\
28
pNotificationsTab = g_ptr_array_new ();\
29
g_ptr_array_set_size (pNotificationsTab, CAIRO_DOCK_NB_NOTIFICATIONS); } } while (0)
31
26
static void _cairo_dock_register_notification_in_tab (GPtrArray *pNotificationsTab, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gboolean bRunFirst, gpointer pUserData)
33
28
g_return_if_fail (iNotifType < pNotificationsTab->len);
43
38
pNotificationsTab->pdata[iNotifType] = g_slist_append (pNotificationRecordList, pNotificationRecord);
45
void cairo_dock_register_notification (CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gboolean bRunFirst, gpointer pUserData)
47
_check_notification_table (s_pNotificationsTab);
49
_cairo_dock_register_notification_in_tab (s_pNotificationsTab, iNotifType, pFunction, bRunFirst, pUserData);
51
void cairo_dock_register_notification_on_icon (Icon *pIcon, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gboolean bRunFirst, gpointer pUserData)
53
_check_notification_table (pIcon->pNotificationsTab);
55
_cairo_dock_register_notification_in_tab (pIcon->pNotificationsTab, iNotifType, pFunction, bRunFirst, pUserData);
57
void cairo_dock_register_notification_on_container (CairoContainer *pContainer, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gboolean bRunFirst, gpointer pUserData)
59
_check_notification_table (pContainer->pNotificationsTab);
61
_cairo_dock_register_notification_in_tab (pContainer->pNotificationsTab, iNotifType, pFunction, bRunFirst, pUserData);
66
42
static void _cairo_dock_remove_notification_func_in_tab (GPtrArray *pNotificationsTab, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gpointer pUserData)
85
61
_cairo_dock_remove_notification_func_in_tab (s_pNotificationsTab, iNotifType, pFunction, pUserData);
87
void cairo_dock_remove_notification_func_on_icon (Icon *pIcon, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gpointer pUserData)
89
_cairo_dock_remove_notification_func_in_tab (pIcon->pNotificationsTab, iNotifType, pFunction, pUserData);
91
void cairo_dock_remove_notification_func_on_container (CairoContainer *pContainer, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gpointer pUserData)
93
_cairo_dock_remove_notification_func_in_tab (pContainer->pNotificationsTab, iNotifType, pFunction, pUserData);
98
65
GSList *cairo_dock_get_notifications_list (CairoDockNotificationType iNotifType)
118
85
g_ptr_array_free (pNotificationsTab, TRUE);
90
void cairo_dock_register_notification_on_object (gpointer pObject, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gboolean bRunFirst, gpointer pUserData)
92
g_return_if_fail (pObject != NULL);
93
GPtrArray **pNotificationsTabPtr = (GPtrArray**) pObject;
94
GPtrArray *pNotificationsTab = *pNotificationsTabPtr;
96
if (pNotificationsTab == NULL)
98
pNotificationsTab = g_ptr_array_new ();
99
*pNotificationsTabPtr = pNotificationsTab;
100
g_ptr_array_set_size (pNotificationsTab, 10);
103
if (pNotificationsTab->len < iNotifType)
105
cd_warning ("someone tried to register to an inexisting notification (%d) on an object", iNotifType);
106
g_ptr_array_set_size (pNotificationsTab, iNotifType+1);
109
_cairo_dock_register_notification_in_tab (pNotificationsTab, iNotifType, pFunction, bRunFirst, pUserData);
112
void cairo_dock_remove_notification_func_on_object (gpointer pObject, CairoDockNotificationType iNotifType, CairoDockNotificationFunc pFunction, gpointer pUserData)
114
g_return_if_fail (pObject != NULL);
115
GPtrArray **pNotificationsTabPtr = (GPtrArray**) pObject;
116
GPtrArray *pNotificationsTab = *pNotificationsTabPtr;
117
_cairo_dock_remove_notification_func_in_tab (pNotificationsTab, iNotifType, pFunction, pUserData);