Changeset 491
- Timestamp:
- 06/06/06 00:00:27
- Files:
-
- trunk/libtinymail-camel/tny-msg-folder.c (modified) (3 diffs)
- trunk/libtinymail/tny-list-iface.c (modified) (1 diff)
- trunk/libtinymail/tny-msg-folder-iface.c (modified) (1 diff)
- trunk/libtinymail/tny-msg-folder-iface.h (modified) (2 diffs)
- trunk/tinymail/tny-summary-window.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libtinymail-camel/tny-msg-folder.c
r490 r491 147 147 } 148 148 149 150 static void 151 tny_msg_folder_remove_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header) 152 { 153 TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 154 const gchar *id; 155 156 g_mutex_lock (priv->folder_lock); 157 158 if (!priv->folder || !priv->loaded) 159 load_folder_no_lock (priv); 160 161 id = tny_msg_header_iface_get_uid (TNY_MSG_HEADER_IFACE (header)); 162 camel_folder_delete_message (priv->folder, id); 163 164 g_mutex_unlock (priv->folder_lock); 165 166 return; 167 } 168 169 static void 170 tny_msg_folder_expunge (TnyMsgFolderIface *self) 171 { 172 TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 173 CamelException ex = CAMEL_EXCEPTION_INITIALISER; 174 175 g_mutex_lock (priv->folder_lock); 176 177 if (!priv->folder || !priv->loaded) 178 load_folder_no_lock (priv); 179 180 camel_folder_sync (priv->folder, TRUE, &ex); 181 182 g_mutex_unlock (priv->folder_lock); 183 184 return; 185 } 186 187 149 188 CamelFolder* 150 189 _tny_msg_folder_get_camel_folder (TnyMsgFolderIface *self) … … 156 195 157 196 if (!priv->folder || !priv->loaded) 158 load_folder (priv);197 load_folder_no_lock (priv); 159 198 retval = priv->folder; 160 199 … … 908 947 klass->refresh_async_func = tny_msg_folder_refresh_async; 909 948 klass->refresh_func = tny_msg_folder_refresh; 949 klass->remove_message_func = tny_msg_folder_remove_message; 950 klass->expunge_func = tny_msg_folder_expunge; 910 951 911 952 return; trunk/libtinymail/tny-list-iface.c
r458 r491 68 68 * @item: the item to remove 69 69 * 70 * 70 * Removing a item might invalidate all existing iterators or put them in an 71 * unknown and unspecified state. You'll need to recreate the iterator(s) if you 72 * remove an item to be certain. 71 73 **/ 72 74 void trunk/libtinymail/tny-msg-folder-iface.c
r488 r491 25 25 guint *tny_msg_folder_iface_signals; 26 26 27 28 /** 29 * tny_msg_folder_iface_expunge: 30 * @self: a TnyMsgFolderIface object 31 * 32 * Sync changes made to a folder to its backing store, 33 * expunging deleted messages as well. 34 **/ 35 void 36 tny_msg_folder_iface_expunge (TnyMsgFolderIface *self) 37 { 38 TNY_MSG_FOLDER_IFACE_GET_CLASS (self)->expunge_func (self); 39 return; 40 } 41 42 /** 43 * tny_msg_folder_iface_remove_message: 44 * @self: a TnyMsgFolderIface object 45 * @header: the header of the message to remove 46 * 47 * Remove a message from a folder 48 **/ 49 void 50 tny_msg_folder_iface_remove_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header) 51 { 52 TNY_MSG_FOLDER_IFACE_GET_CLASS (self)->remove_message_func (self, header); 53 return; 54 } 27 55 28 56 trunk/libtinymail/tny-msg-folder-iface.h
r488 r491 78 78 79 79 /* Methods */ 80 void (*remove_message_func) (TnyMsgFolderIface *self, TnyMsgHeaderIface *header); 81 void (*expunge_func) (TnyMsgFolderIface *self); 82 80 83 const TnyListIface* 81 84 (*get_folders_func) (TnyMsgFolderIface *self); … … 111 114 GType tny_msg_folder_iface_get_type (void); 112 115 116 void tny_msg_folder_iface_remove_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header); 117 void tny_msg_folder_iface_expunge (TnyMsgFolderIface *self); 118 113 119 const TnyListIface* 114 120 tny_msg_folder_iface_get_folders (TnyMsgFolderIface *self); trunk/tinymail/tny-summary-window.c
r483 r491 26 26 #include <string.h> 27 27 #include <gtk/gtk.h> 28 #include <gdk/gdkkeysyms.h> 28 29 29 30 #include <tny-platform-factory-iface.h> … … 206 207 207 208 static void 209 on_header_view_key_press_event (GtkTreeView *header_view, GdkEventKey *event, gpointer user_data) 210 { 211 if (event->keyval == GDK_Delete) 212 { 213 TnySummaryWindow *self = user_data; 214 TnySummaryWindowPriv *priv = TNY_SUMMARY_WINDOW_GET_PRIVATE (self); 215 GtkTreeSelection *selection = gtk_tree_view_get_selection (header_view); 216 GtkTreeModel *model, *mymodel, *sortable; 217 GtkTreeIter iter; 218 219 if (G_LIKELY (gtk_tree_selection_get_selected (selection, &model, &iter))) 220 { 221 TnyMsgHeaderIface *header; 222 223 gtk_tree_model_get (model, &iter, 224 TNY_MSG_HEADER_LIST_MODEL_INSTANCE_COLUMN, 225 &header, -1); 226 227 if (G_LIKELY (header)) 228 { 229 GtkWidget *dialog = gtk_message_dialog_new (NULL, 230 GTK_DIALOG_MODAL, 231 GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, 232 _("This will remove the message with subject \"%s\""), 233 tny_msg_header_iface_get_subject (header)); 234 235 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) 236 { 237 TnyMsgFolderIface *folder; 238 const TnyMsgIface *msg; 239 240 if (GTK_IS_TREE_MODEL_SORT (model)) 241 { 242 mymodel = gtk_tree_model_sort_get_model 243 (GTK_TREE_MODEL_SORT (model)); 244 } else mymodel = model; 245 246 tny_list_iface_remove (TNY_LIST_IFACE (mymodel), header); 247 248 folder = (TnyMsgFolderIface*)tny_msg_header_iface_get_folder (header); 249 tny_msg_folder_iface_remove_message (folder, header); 250 251 /* This demo-ui does not support hiding marked-as-deleted 252 messages. A normal deletion will only *mark* a message 253 as deleted. That way undeletion is still possible. 254 255 You shouldn't *use* this demo-ui, so I'm doing destructive 256 irreversible deletes: I immediately expunge the folder! */ 257 258 tny_msg_folder_iface_expunge (folder); 259 } 260 261 gtk_widget_destroy (dialog); 262 } 263 } 264 265 } 266 267 return; 268 } 269 270 static void 208 271 on_header_view_tree_selection_changed (GtkTreeSelection *selection, 209 272 gpointer user_data) … … 227 290 const TnyMsgFolderIface *folder; 228 291 const TnyMsgIface *msg; 229 /* const TnyMsgHeaderIface *nheader; */ 230 231 folder = tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE (header)); 232 msg = tny_msg_folder_iface_get_message (TNY_MSG_FOLDER_IFACE (folder), header); 233 /* nheader = tny_msg_iface_get_header (TNY_MSG_IFACE (msg)); */ 292 293 folder = tny_msg_header_iface_get_folder (header); 294 msg = tny_msg_folder_iface_get_message ((TnyMsgFolderIface*)folder, header); 234 295 235 296 tny_msg_view_iface_set_msg (priv->msg_view, TNY_MSG_IFACE (msg)); … … 388 449 if (G_LIKELY (header)) 389 450 { 390 /* Debugging/testing purposes391 GtkTreeModel *oldmodel = gtk_tree_model_sort_get_model392 (GTK_TREE_MODEL_SORT (model));393 tny_list_iface_remove (TNY_LIST_IFACE (oldmodel), header);394 395 */396 451 const TnyMsgFolderIface *folder; 397 452 const TnyMsgIface *msg; … … 591 646 g_signal_connect(G_OBJECT (priv->header_view), "row-activated", 592 647 G_CALLBACK (on_header_view_tree_row_activated), priv->header_view); 648 649 g_signal_connect(G_OBJECT (priv->header_view), "key-press-event", 650 G_CALLBACK (on_header_view_key_press_event), self); 651 593 652 g_signal_connect (G_OBJECT (select), "changed", 594 653 G_CALLBACK (on_header_view_tree_selection_changed), self);
