127
118
CD_APPLET_ON_BUILD_MENU_END
120
void _cd_mail_show_current_mail(CDMailAccount *pMailAccount)
122
CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
123
GList *l = pMailAccount->pUnseenMessageList;
124
gchar *cMessage = "";
125
gint i = myData.iCurrentlyShownMail;
127
if( myData.iCurrentlyShownMail < 0 )
128
myData.iCurrentlyShownMail = 0;
130
for( ; i > 0 && l != NULL; i-- )
132
if( l->next == NULL ) break;
135
if( i > 0 ) // just in case, to stay inside boundaries
137
myData.iCurrentlyShownMail -= i;
141
gtk_text_buffer_set_text(myData.pTextBuffer, cMessage, -1);
143
if( myData.iCurrentlyShownMail == 0 )
145
gtk_widget_set_sensitive( myData.pPrevButton, FALSE );
149
gtk_widget_set_sensitive( myData.pPrevButton, TRUE );
151
if( l->next == NULL )
153
gtk_widget_set_sensitive( myData.pNextButton, FALSE );
157
gtk_widget_set_sensitive( myData.pNextButton, TRUE );
161
void _cd_mail_show_prev_mail_cb(GtkWidget *widget, CDMailAccount *pMailAccount)
163
CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
165
myData.iCurrentlyShownMail--;
166
_cd_mail_show_current_mail(pMailAccount);
169
void _cd_mail_show_next_mail_cb(GtkWidget *widget, CDMailAccount *pMailAccount)
171
CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
173
myData.iCurrentlyShownMail++;
174
_cd_mail_show_current_mail(pMailAccount);
177
void _cd_mail_close_preview_cb(GtkWidget *widget, CDMailAccount *pMailAccount)
179
CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
181
if( myData.pMessagesDialog != NULL )
183
cairo_dock_dialog_unreference (myData.pMessagesDialog);
184
myData.pMessagesDialog = NULL;
188
GtkWidget *cd_mail_messages_container_new(CDMailAccount *pMailAccount)
190
CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
193
* Appearance of the container:
194
* ____________________________
195
* | Subject: xxxxxx | <---- simple text area
196
* | From: xxxxxx | <---- simple text area
197
* | bla bla blablabla bla .. ^|
198
* | .. blla blablabla bla .. || <---- this is a multi-line, scrollable text
199
* | bla ... abl abla. v|
200
* | <-- CLOSE --> | <---- 3 buttons, attached Left,Center,Right
201
* -----------------------------
203
GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
205
GtkWidget *pTextView = gtk_text_view_new();
206
gtk_text_view_set_editable(GTK_TEXT_VIEW(pTextView), FALSE);
207
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(pTextView), FALSE);
208
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(pTextView), GTK_WRAP_WORD );
210
myData.pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
212
GtkWidget* pScrolledWindow = gtk_scrolled_window_new(NULL, NULL);
213
gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(pScrolledWindow), pTextView );
214
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(pScrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
216
gtk_box_pack_start(GTK_BOX(vbox), pScrolledWindow, TRUE, TRUE, 0);
218
GtkWidget *hbox = gtk_hbox_new(TRUE, 0);
219
myData.pPrevButton = gtk_button_new_from_stock( GTK_STOCK_GO_BACK );
220
GtkWidget *pCloseButton = gtk_button_new_from_stock( GTK_STOCK_CLOSE );
221
myData.pNextButton = gtk_button_new_from_stock( GTK_STOCK_GO_FORWARD );
223
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(myData.pPrevButton), FALSE, FALSE, 0);
224
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(pCloseButton), TRUE, FALSE, 0);
225
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(myData.pNextButton), FALSE, FALSE, 0);
227
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
229
// then we need to put the callbacks
230
gtk_signal_connect( GTK_OBJECT(myData.pPrevButton), "clicked", G_CALLBACK(_cd_mail_show_prev_mail_cb), (gpointer)pMailAccount );
231
gtk_signal_connect( GTK_OBJECT(myData.pNextButton), "clicked", G_CALLBACK(_cd_mail_show_next_mail_cb), (gpointer)pMailAccount );
232
gtk_signal_connect( GTK_OBJECT(pCloseButton), "clicked", G_CALLBACK(_cd_mail_close_preview_cb), (gpointer)pMailAccount );
234
GList *l = pMailAccount->pUnseenMessageList;
235
gchar *cMessage = "";
239
gtk_text_buffer_set_text(myData.pTextBuffer, cMessage, -1);
240
myData.iCurrentlyShownMail = 0;
242
gtk_widget_set_sensitive( myData.pPrevButton, FALSE );
243
if( l->next == NULL )
245
gtk_widget_set_sensitive( myData.pNextButton, FALSE );
130
251
CD_APPLET_ON_SCROLL_BEGIN
131
252
if (myData.pMailAccounts == NULL)
148
270
return CAIRO_DOCK_LET_PASS_NOTIFICATION;
151
struct mail_flags *pFlags = NULL;
152
mailmessage *pMessage = NULL;
273
/* Ensure the connection is alive */
274
r = mailfolder_connect(pMailAccount->folder);
275
if (r != MAIL_NO_ERROR) // no connexion, we keep the previous satus.
277
cd_warning ("mail : couldn't connect to '%s'", pMailAccount->name);
278
pMailAccount->bError = TRUE;
282
if( myData.pMessagesDialog == NULL )
284
g_print( "Displaying messages\n" );
285
if( pMailAccount->pUnseenMessageList != NULL )
287
myData.pMessagesDialog = cairo_dock_show_dialog_full (_("Mail"),
291
cd_mail_messages_container_new(pMailAccount),
297
// scroll one message
298
if (CD_APPLET_SCROLL_DOWN)
300
_cd_mail_show_prev_mail_cb(NULL, pMailAccount);
302
else if (CD_APPLET_SCROLL_UP)
304
_cd_mail_show_next_mail_cb(NULL, pMailAccount);
156
for (l = pMailAccount->pUnseenMessageList; l != NULL; l = l->next)
312
mailmessage *pMessage;
313
for (i = 1, l = pMailAccount->pUnseenMessageList, l_Uid = pMailAccount->pUnseenMessageUid; l != NULL && l_Uid != NULL; l = l->next, l_Uid = l_Uid->next, i++)
158
315
cMessage = l->data;
159
cairo_dock_remove_dialog_if_any (CD_APPLET_CLICKED_ICON);
160
cairo_dock_show_temporary_dialog_with_icon (cMessage, CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER, 10e3, "same icon");
316
cMessageUid = l_Uid->data;
162
// on marque le message comme lu.
163
///r = mailmessage_get_flags (pMessage, &pFlags);
319
// on marque le compte comme lu.
320
if( !pMailAccount->bError )
322
struct mail_flags *pFlags = NULL;
324
// on marque le message comme lu.
325
cd_message ("Fetching message number %d...\n", i);
327
r = mailfolder_get_message_by_uid (pMailAccount->folder, cMessageUid, &pMessage); /// or result_messages - i ?...
328
if (r != MAIL_NO_ERROR || pMessage == NULL)
330
cd_warning ("couldn't get the message number %d", i);
333
r = mailmessage_get_flags (pMessage, &pFlags);
334
if (r != MAIL_NO_ERROR || pFlags == NULL)
336
cd_warning ("couldn't get the message flags !", i);
337
mailmessage_free (pMessage);
341
pFlags->fl_flags &= ~MAIL_FLAG_NEW;
342
pFlags->fl_flags |= MAIL_FLAG_SEEN;
344
r = mailmessage_check( pMessage );
345
mailmessage_free (pMessage);
166
349
CD_APPLET_ON_SCROLL_END