1 /* modest-window-mgr.c */
3 /* insert (c)/licensing information) */
5 #include "modest-window-mgr.h"
6 /* include other impl specific header files */
8 /* 'private'/'protected' functions */
9 static void modest_window_mgr_class_init (ModestWindowMgrClass *klass);
10 static void modest_window_mgr_init (ModestWindowMgr *obj);
11 static void modest_window_mgr_finalize (GObject *obj);
17 LAST_WINDOW_CLOSED_SIGNAL,
21 typedef struct _ModestWindowMgrPrivate ModestWindowMgrPrivate;
22 struct _ModestWindowMgrPrivate {
26 #define MODEST_WINDOW_MGR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
27 MODEST_TYPE_WINDOW_MGR, \
28 ModestWindowMgrPrivate))
30 static GObjectClass *parent_class = NULL;
32 static guint signals[LAST_SIGNAL] = {0};
35 modest_window_mgr_get_type (void)
37 static GType my_type = 0;
39 static const GTypeInfo my_info = {
40 sizeof(ModestWindowMgrClass),
42 NULL, /* base finalize */
43 (GClassInitFunc) modest_window_mgr_class_init,
44 NULL, /* class finalize */
45 NULL, /* class data */
46 sizeof(ModestWindowMgr),
48 (GInstanceInitFunc) modest_window_mgr_init,
50 my_type = g_type_register_static (G_TYPE_OBJECT,
58 modest_window_mgr_class_init (ModestWindowMgrClass *klass)
60 GObjectClass *gobject_class;
61 gobject_class = (GObjectClass*) klass;
63 parent_class = g_type_class_peek_parent (klass);
64 gobject_class->finalize = modest_window_mgr_finalize;
66 g_type_class_add_private (gobject_class, sizeof(ModestWindowMgrPrivate));
68 signals[LAST_WINDOW_CLOSED_SIGNAL] =
69 g_signal_new ("last_window_closed",
70 G_TYPE_FROM_CLASS(gobject_class),
72 G_STRUCT_OFFSET(ModestWindowMgrClass, last_window_closed),
74 g_cclosure_marshal_VOID__VOID,
79 modest_window_mgr_init (ModestWindowMgr *obj)
81 ModestWindowMgrPrivate *priv = MODEST_WINDOW_MGR_GET_PRIVATE(obj);
82 priv->open_windows = NULL;
86 modest_window_mgr_finalize (GObject *obj)
88 ModestWindowMgrPrivate *priv = MODEST_WINDOW_MGR_GET_PRIVATE(obj);
89 g_slist_free (priv->open_windows);
90 priv->open_windows = NULL;
94 modest_window_mgr_new (void)
96 return G_OBJECT(g_object_new(MODEST_TYPE_WINDOW_MGR, NULL));
99 /* insert many other interesting function implementations */
100 /* such as modest_window_mgr_do_something, or modest_window_mgr_has_foo */
103 modest_window_mgr_register (ModestWindowMgr *self, GObject *win,
104 ModestWindowType type,
107 ModestOpenWindow *openwin = NULL;
108 ModestWindowMgrPrivate *priv;
110 g_return_val_if_fail (self, FALSE);
111 g_return_val_if_fail (type==MODEST_MAIN_WINDOW || type==MODEST_EDIT_WINDOW
112 || type == MODEST_VIEW_WINDOW, FALSE);
114 priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
116 openwin = g_new (ModestOpenWindow, 1);
118 openwin->type = type;
119 openwin->id = window_id;
121 priv->open_windows = g_slist_prepend (priv->open_windows, openwin);
129 modest_window_mgr_unregister (ModestWindowMgr *self, GObject *win)
131 ModestWindowMgrPrivate *priv;
133 gboolean found = FALSE;
135 g_return_val_if_fail (self, FALSE);
136 g_return_val_if_fail (win, FALSE);
138 priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
140 cursor = priv->open_windows;
142 if (((ModestOpenWindow*)cursor->data)->win == win) {
143 priv->open_windows = g_slist_delete_link (priv->open_windows,
148 cursor = cursor->next;
151 guint win_num = g_slist_length (priv->open_windows);
153 g_signal_emit (self, signals[LAST_WINDOW_CLOSED_SIGNAL],
162 modest_window_mgr_find_by_type (ModestWindowMgr *self, ModestWindowType type)
164 ModestWindowMgrPrivate *priv;
167 g_return_val_if_fail (self, NULL);
169 priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
170 cursor = priv->open_windows;
172 ModestOpenWindow *openwin = (ModestOpenWindow*)cursor->data;
173 if (openwin->type == type)
175 cursor = cursor->next;
183 modest_window_mgr_find_by_id (ModestWindowMgr *self, gint window_id)
185 ModestWindowMgrPrivate *priv;
188 g_return_val_if_fail (self, NULL);
190 priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
191 cursor = priv->open_windows;
193 ModestOpenWindow *openwin = (ModestOpenWindow*)cursor->data;
194 if (openwin->id == window_id)
196 cursor = cursor->next;