static void
set_at_least_one_account_visible(ModestMainWindow *self);
+static void
+modest_main_window_on_send_queue_status_canged (ModestTnySendQueue *send_queue,
+ gchar *msg_id,
+ guint status,
+ gpointer user_data);
/* list my signals */
enum {
ModestWindowPrivate *parent_priv = NULL;
GtkWidget *reply_button = NULL, *menu = NULL;
GtkWidget *placeholder = NULL;
+ ModestAccountMgr *mgr = NULL;
+ TnyTransportAccount *transport_account = NULL;
+ ModestTnySendQueue *send_queue = NULL;
gint insert_index;
+ GSList *iter = NULL;
+ GSList *account_names = NULL;
const gchar *action_name;
GtkAction *action;
/* Set send & receive button tap and hold menu */
update_menus (MODEST_MAIN_WINDOW (self));
- }
+ /* Create send queue for all defined accounts */
+ mgr = modest_runtime_get_account_mgr ();
+ account_names = modest_account_mgr_account_names (mgr, TRUE);
+ iter = account_names;
+ while (iter) {
+ transport_account =
+ TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+ (modest_runtime_get_account_store(),
+ iter->data,
+ TNY_ACCOUNT_TYPE_TRANSPORT));
+
+ /* Create new send queue for this new account */
+ send_queue = modest_runtime_get_send_queue (transport_account);
+ if (MODEST_IS_TNY_SEND_QUEUE(send_queue)) {
+
+ /* Connect 'status_changed' signal of this new send-queue */
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers, G_OBJECT (send_queue), "status_changed",
+ G_CALLBACK (modest_main_window_on_send_queue_status_canged),
+ self);
+ }
+
+ iter = iter->next;
+
+ /* free */
+ if (send_queue != NULL)
+ g_object_unref (send_queue);
+ if (transport_account != NULL)
+ g_object_unref (transport_account);
+
+ }
+ modest_account_mgr_free_account_names (account_names);
+ }
+
if (show_toolbar) {
/* Quick hack: this prevents toolbar icons "dance" when progress bar show status is changed */
/* TODO: resize mode migth be GTK_RESIZE_QUEUE, in order to avoid unneccesary shows */
gtk_widget_show (GTK_WIDGET (parent_priv->toolbar));
set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL);
- } else
+ } else {
gtk_widget_hide (GTK_WIDGET (parent_priv->toolbar));
+ }
+
/* Update also the actions (to update the toggles in the
menus), we have to do it manually because some other window
of the same time could have changed it (remember that the
}
static void
+modest_main_window_on_send_queue_status_canged (ModestTnySendQueue *send_queue,
+ gchar *msg_id,
+ guint status,
+ gpointer user_data)
+{
+ ModestMainWindowPrivate *priv = NULL;
+ TnyFolderStore *selected_folder = NULL;
+ TnyFolderType folder_type;
+
+ g_return_if_fail (MODEST_IS_TNY_SEND_QUEUE (send_queue));
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(user_data);
+
+ /* Check if selected folder is OUTBOX */
+ selected_folder = modest_folder_view_get_selected (priv->folder_view);
+ if (!TNY_IS_FOLDER (selected_folder)) goto frees;
+ folder_type = modest_tny_folder_guess_folder_type (TNY_FOLDER (selected_folder));
+#if GTK_CHECK_VERSION(2, 8, 0) /* gtk_tree_view_column_queue_resize is only available in GTK+ 2.8 */
+ if (folder_type == TNY_FOLDER_TYPE_OUTBOX) {
+ GtkTreeViewColumn * tree_column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->header_view),
+ TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN);
+ gtk_tree_view_column_queue_resize (tree_column);
+#endif
+ }
+
+ /* Free */
+ frees:
+ if (selected_folder != NULL)
+ g_object_unref (selected_folder);
+}
+
+static void
on_account_inserted (TnyAccountStore *accoust_store,
TnyAccount *account,
gpointer user_data)
{
+ TnyTransportAccount *transport_account = NULL;
+ ModestTnySendQueue *send_queue = NULL;
+ ModestMainWindowPrivate *priv;
+ const gchar *account_name = NULL;
+
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (user_data);
+
update_menus (MODEST_MAIN_WINDOW (user_data));
+
+ /* Get transport account */
+ account_name = tny_account_get_name (TNY_ACCOUNT (account));
+ transport_account =
+ TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+ (modest_runtime_get_account_store(),
+ account_name,
+ TNY_ACCOUNT_TYPE_TRANSPORT));
+
+ /* Create new send queue for this new account */
+ send_queue = modest_runtime_get_send_queue (transport_account);
+ if (!MODEST_IS_TNY_SEND_QUEUE(send_queue)) goto frees;
+
+ /* Connect 'status_changed' signal of this new send-queue */
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,G_OBJECT (send_queue), "status_changed",
+ G_CALLBACK (modest_main_window_on_send_queue_status_canged),
+ user_data);
+
+ /* Free */
+ frees:
+ if (transport_account != NULL)
+ g_object_unref (G_OBJECT (transport_account));
+ if (send_queue != NULL)
+ g_object_unref (send_queue);
}
static void
TnyTransportAccount *account = NULL;
GSList *send_queues = NULL, *node;
/* get_msg_status returns suspended by default, so we want to detect changes */
- ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_SUSPENDED;
- ModestTnySendQueueStatus queue_status = MODEST_TNY_SEND_QUEUE_SUSPENDED;
+ ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_UNKNONW;
+ ModestTnySendQueueStatus queue_status = MODEST_TNY_SEND_QUEUE_UNKNONW;
gchar *msg_uid = NULL;
ModestTnySendQueue *send_queue = NULL;
set_common_flags (recipient_cell, flags);
if (header_mode == MODEST_HEADER_VIEW_COMPACT_HEADER_MODE_OUTBOX) {
- ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_WAITING;
+ ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_UNKNONW;
const gchar *status_str = "";
if (msg_header != NULL) {
status = get_status_of_uid (msg_header);
tny_header_unset_flags (msg_header, TNY_HEADER_FLAG_PRIORITY);
tny_header_set_flags (msg_header, TNY_HEADER_FLAG_SUSPENDED_PRIORITY);
}
-/* if (prior_flags == TNY_HEADER_FLAG_SUSPENDED_PRIORITY) */
-/* status = MODEST_TNY_SEND_QUEUE_SUSPENDED; */
}
status_str = get_status_string (status);
ModestHeaderViewPrivate *priv = NULL;
TnyFolderChangeChanged changed;
HeadersCountChangedHelper *helper = NULL;
+ TnyFolder *folder = NULL;
changed = tny_folder_change_get_changed (change);
view has changed before this call to the observer
happens */
priv = MODEST_HEADER_VIEW_GET_PRIVATE (MODEST_HEADER_VIEW (self));
- if (tny_folder_change_get_folder (change) != priv->folder)
- return;
+ folder = tny_folder_change_get_folder (change);
+ if (folder != priv->folder)
+ goto frees;
/* Check folder count */
if ((changed & TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS) ||
helper = g_slice_new0 (HeadersCountChangedHelper);
helper->self = MODEST_HEADER_VIEW(self);
helper->change = g_object_ref(change);
-
+
+/* if (folder != NULL) */
+/* tny_folder_poke_status (folder); */
+
idle_notify_headers_count_changed (helper);
idle_notify_headers_count_changed_destroy (helper);
-
-/* I changed this because it's not necessary anymore: all updates of
- * observers in Tinymail happen guaranteed on the Mainloop already.
- * Your friend, Philip
- *
- * g_idle_add_full (G_PRIORITY_DEFAULT,
- * idle_notify_headers_count_changed,
- * helper,
- * idle_notify_headers_count_changed_destroy);
- */
-
}
+
+ /* Free */
+ frees:
+ if (folder != NULL)
+ g_object_unref (folder);
}
gboolean