account_store = modest_runtime_get_account_store ();
/* folder view */
- g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed",
- G_CALLBACK(modest_ui_actions_on_folder_selection_changed), self);
g_signal_connect (G_OBJECT(priv->folder_view), "button-press-event",
G_CALLBACK (on_folder_view_button_press_event),self);
-/* g_signal_connect (priv->folder_view, "popup-menu", */
-/* G_CALLBACK (on_folder_view_button_press_event),self); */
+ g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed",
+ G_CALLBACK(modest_ui_actions_on_folder_selection_changed), self);
+ g_signal_connect (G_OBJECT(priv->folder_view), "folder-display-name-changed",
+ G_CALLBACK(modest_ui_actions_on_folder_display_name_changed), self);
/* header view */
g_signal_connect (G_OBJECT(priv->header_view), "status_update",
GtkWidget *msg_paned;
GtkWidget *main_paned;
GtkWidget *main_vbox;
- GtkWidget *progress_bar;
+ GtkWidget *accounts_popup;
ModestHeaderView *header_view;
ModestFolderView *folder_view;
priv->main_vbox = NULL;
priv->header_view = NULL;
priv->folder_view = NULL;
+ priv->accounts_popup = NULL;
priv->style = MODEST_MAIN_WINDOW_STYLE_SPLIT;
-
- /* progress bar */
- priv->progress_bar = gtk_progress_bar_new ();
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(priv->progress_bar), 1.0);
- gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR(priv->progress_bar),
- PANGO_ELLIPSIZE_END);
}
static void
G_CALLBACK(on_inner_widgets_key_pressed), self);
g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed",
G_CALLBACK(modest_ui_actions_on_folder_selection_changed), self);
+ g_signal_connect (G_OBJECT(priv->folder_view), "folder-display-name-changed",
+ G_CALLBACK(modest_ui_actions_on_folder_display_name_changed), self);
menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/FolderViewContextMenu");
gtk_widget_tap_and_hold_setup (GTK_WIDGET (priv->folder_view), menu, NULL, 0);
gpointer user_data)
{
ModestMainWindow *self;
+ ModestMainWindowPrivate *priv;
ModestWindowPrivate *parent_priv;
TnyList *account_list;
- GtkWidget *popup = NULL, *item, *send_receive_button;
+ GtkWidget *item, *send_receive_button;
TnyIterator *iter;
ModestAccountMgr *mgr;
gchar *default_account;
self = MODEST_MAIN_WINDOW (user_data);
- parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self);
+ parent_priv = MODEST_WINDOW_GET_PRIVATE (self);
/* If there is no toolbar then exit */
if (!parent_priv->toolbar)
return;
+ if (priv->accounts_popup)
+ gtk_menu_detach (GTK_MENU (priv->accounts_popup));
+
/* Get accounts */
account_list = tny_simple_list_new ();
tny_account_store_get_accounts (account_store,
"/ToolBar/ToolbarSendReceive");
/* Create the menu */
- popup = gtk_menu_new ();
- item = gtk_menu_item_new_with_label (_("FIXME All"));
- gtk_menu_shell_append (GTK_MENU_SHELL (popup), GTK_WIDGET (item));
+ priv->accounts_popup = gtk_menu_new ();
+ item = gtk_menu_item_new_with_label (_("mcen_me_toolbar_sendreceive_all"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (popup), GTK_WIDGET (item));
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
iter = tny_list_create_iterator (account_list);
mgr = modest_runtime_get_account_mgr ();
do {
TnyAccount *acc;
const gchar *acc_name;
+ gchar *display_name;
/* Create tool item */
acc = TNY_ACCOUNT (tny_iterator_get_current (iter));
acc_name = tny_account_get_name (acc);
- if (!strcmp (default_account, acc_name)) {
- gchar *bold_name;
- bold_name = g_strdup_printf ("<b>%s</b>", acc_name);
- item = gtk_menu_item_new_with_label (bold_name);
- g_free (bold_name);
- } else {
- item = gtk_menu_item_new_with_label (acc_name);
- }
+ /* Create display name */
+ if (!strcmp (default_account, acc_name))
+ display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_default"), acc_name);
+ else
+ display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_mailbox_n"), acc_name);
+
+ item = gtk_menu_item_new_with_label (display_name);
+
+ /* Free */
+ g_free (display_name);
g_object_unref (acc);
/* Append item */
- gtk_menu_shell_append (GTK_MENU_SHELL (popup), GTK_WIDGET (item));
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
/* Go to next */
tny_iterator_next (iter);
g_object_unref (iter);
/* Mandatory in order to view the menu contents */
- gtk_widget_show_all (popup);
+ gtk_widget_show_all (priv->accounts_popup);
/* Setup tap_and_hold */
- gtk_widget_tap_and_hold_setup (send_receive_button, popup, NULL, 0);
+ gtk_widget_tap_and_hold_setup (send_receive_button, priv->accounts_popup, NULL, 0);
free:
}
void
-modest_ui_actions_on_header_selected (ModestHeaderView *folder_view,
+modest_ui_actions_on_header_selected (ModestHeaderView *header_view,
TnyHeader *header,
ModestMainWindow *main_window)
{
- GtkWidget *msg_preview;
TnyFolder *folder;
GetMsgAsyncHelper *helper;
TnyList *list;
g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
-
- msg_preview = modest_main_window_get_child_widget(main_window,
- MODEST_WIDGET_TYPE_MSG_PREVIEW);
- if (!msg_preview)
- return;
-
+
/* when there's no header, clear the msgview */
if (!header) {
- modest_msg_view_set_message (MODEST_MSG_VIEW(msg_preview), NULL);
+ GtkWidget *msg_preview;
+
+ /* Clear msg preview if exists */
+ msg_preview = modest_main_window_get_child_widget(main_window,
+ MODEST_WIDGET_TYPE_MSG_PREVIEW);
+
+ if (msg_preview)
+ modest_msg_view_set_message (MODEST_MSG_VIEW(msg_preview), NULL);
return;
}
- folder = tny_header_get_folder (TNY_HEADER(header));
+ /* Update Main window title */
+ if (GTK_WIDGET_HAS_FOCUS (header_view)) {
+ const gchar *subject = tny_header_get_subject (header);
+ if (subject && strcmp (subject, ""))
+ gtk_window_set_title (GTK_WINDOW (main_window), subject);
+ else
+ gtk_window_set_title (GTK_WINDOW (main_window), _("mail_va_no_subject"));
+ }
/* Create list */
list = tny_simple_list_new ();
helper->iter = tny_list_create_iterator (list);
helper->func = read_msg_func;
+ folder = tny_header_get_folder (TNY_HEADER(header));
+
tny_folder_get_msg_async (TNY_FOLDER(folder),
header, get_msg_cb,
helper);
conf = modest_runtime_get_conf ();
- if (!selected) { /* the folder was unselected; save it's settings */
- modest_widget_memory_save (conf, G_OBJECT (header_view), "header-view");
- gtk_window_set_title (GTK_WINDOW(main_window), NULL);
- modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), NULL);
- } else { /* the folder was selected */
- if (folder) { /* folder may be NULL */
- guint unread;
-
- /* Change main window title */
- unread = tny_folder_get_unread_count (folder);
-
- if (unread == 0) {
- gtk_window_set_title (GTK_WINDOW(main_window),
- tny_folder_get_name (folder));
- } else {
- gchar *txt = g_strdup_printf (_("%s (%d)"),
- tny_folder_get_name (folder),
- unread);
- gtk_window_set_title (GTK_WINDOW(main_window), txt);
- g_free (txt);
- }
+ if (TNY_IS_FOLDER (folder)) {
+ if (!selected) { /* the folder was unselected; save it's settings */
+ modest_widget_memory_save (conf, G_OBJECT (header_view), "header-view");
+ modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), NULL);
} else {
- gtk_window_set_title (GTK_WINDOW(main_window), NULL);
+ modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), folder);
+ modest_widget_memory_restore (conf, G_OBJECT(header_view),
+ "header-view");
}
-
- modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), folder);
- modest_widget_memory_restore (conf, G_OBJECT(header_view),
- "header-view");
}
}
void
modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_window)
{
- TnyFolder *parent_folder;
+ TnyFolderStore *parent_folder;
GtkWidget *folder_view;
g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
mail_op);
new_folder = modest_mail_operation_create_folder (mail_op,
- TNY_FOLDER_STORE (parent_folder),
+ parent_folder,
(const gchar *) folder_name);
if (new_folder)
g_object_unref (new_folder);
modest_ui_actions_on_rename_folder (GtkAction *action,
ModestMainWindow *main_window)
{
- TnyFolder *folder;
+ TnyFolderStore *folder;
GtkWidget *folder_view;
g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
- if (folder) {
+ if (folder && TNY_IS_FOLDER (folder)) {
gchar *folder_name;
folder_name = ask_for_folder_name (GTK_WINDOW (main_window),
_("Please enter a new name for the folder"));
mail_op);
modest_mail_operation_rename_folder (mail_op,
- folder,
+ TNY_FOLDER (folder),
(const gchar *) folder_name);
g_object_unref (mail_op);
static void
delete_folder (ModestMainWindow *main_window, gboolean move_to_trash)
{
- TnyFolder *folder;
+ TnyFolderStore *folder;
ModestMailOperation *mail_op;
GtkWidget *folder_view;
mail_op = modest_mail_operation_new ();
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
- modest_mail_operation_remove_folder (mail_op, folder, move_to_trash);
+ modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), move_to_trash);
g_object_unref (G_OBJECT (mail_op));
g_object_unref (G_OBJECT (folder));
mgr = modest_runtime_get_window_mgr ();
modest_window_mgr_show_toolbars (mgr, active, fullscreen);
}
+
+void
+modest_ui_actions_on_folder_display_name_changed (ModestFolderView *folder_view,
+ const gchar *display_name,
+ GtkWindow *window)
+{
+ /* Do not change the application name if the widget has not
+ the focus. This callback could be called even if the folder
+ view has not the focus, because the handled signal could be
+ emitted when the folder view is redrawn */
+ if (GTK_WIDGET_HAS_FOCUS (folder_view)) {
+ if (display_name)
+ gtk_window_set_title (window, display_name);
+ else
+ gtk_window_set_title (window, " ");
+ }
+}
void modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle,
ModestWindow *window);
+/**
+ * modest_ui_actions_on_folder_display_name_changed:
+ * @folder_view: a #ModestFolderView
+ * @display_name: the new window title
+ * @window: a #GtkWindow
+ *
+ * Sets the title of the window to the value specified by
+ * display_name. This function is used typically as a callback to the
+ * "folder-display-name-changed" signal from the #ModestFolderView
+ **/
+void modest_ui_actions_on_folder_display_name_changed (ModestFolderView *folder_view,
+ const gchar *display_name,
+ GtkWindow *window);
+
G_END_DECLS
#endif /* __MODEST_UI_ACTIONS_H__ */
enum {
FOLDER_SELECTION_CHANGED_SIGNAL,
+ FOLDER_DISPLAY_NAME_CHANGED_SIGNAL,
LAST_SIGNAL
};
typedef struct _ModestFolderViewPrivate ModestFolderViewPrivate;
struct _ModestFolderViewPrivate {
TnyAccountStore *account_store;
- TnyFolder *cur_folder;
- GtkTreeRowReference *cur_row;
+ TnyFolderStore *cur_folder_store;
gulong account_update_signal;
gulong changed_signal;
NULL, NULL,
modest_marshal_VOID__POINTER_BOOLEAN,
G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+
+ /*
+ * This signal is emitted whenever the currently selected
+ * folder display name is computed. Note that the name could
+ * be different to the folder name, because we could append
+ * the unread messages count to the folder name to build the
+ * folder display name
+ */
+ signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL] =
+ g_signal_new ("folder-display-name-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ModestFolderViewClass,
+ folder_display_name_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
}
text_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
{
+ ModestFolderViewPrivate *priv;
GObject *rendobj;
gchar *fname = NULL;
- gint unread;
+ gint unread, all;
TnyFolderType type;
GObject *instance = NULL;
gtk_tree_model_get (tree_model, iter,
TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, &fname,
+ TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, &all,
TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, &unread,
TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, &type,
TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &instance,
g_free (fname);
return;
}
+
+
+ priv = MODEST_FOLDER_VIEW_GET_PRIVATE (data);
if (type != TNY_FOLDER_TYPE_ROOT) {
+ gint number;
+
if (modest_tny_folder_is_local_folder (TNY_FOLDER (instance))) {
TnyFolderType type;
type = modest_tny_folder_get_local_folder_type (TNY_FOLDER (instance));
}
}
+ /* Select the number to show */
+ if ((type == TNY_FOLDER_TYPE_DRAFTS) || (type == TNY_FOLDER_TYPE_OUTBOX))
+ number = all;
+ else
+ number = unread;
+
/* Use bold font style if there are unread messages */
if (unread > 0) {
gchar *folder_title = g_strdup_printf ("%s (%d)", fname, unread);
g_object_set (rendobj,"text", folder_title, "weight", 800, NULL);
+ if (G_OBJECT (priv->cur_folder_store) == instance)
+ g_signal_emit (G_OBJECT(data),
+ signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL], 0,
+ folder_title);
g_free (folder_title);
- } else
+ } else {
g_object_set (rendobj,"text", fname, "weight", 400, NULL);
+ if (G_OBJECT (priv->cur_folder_store) == instance)
+ g_signal_emit (G_OBJECT(data),
+ signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL], 0,
+ fname);
+ }
} else {
- ModestFolderViewPrivate *priv;
const gchar *account_name = NULL;
const gchar *account_id = NULL;
-
- priv = MODEST_FOLDER_VIEW_GET_PRIVATE (data);
/* If it's a server account */
account_id = tny_account_get_id (TNY_ACCOUNT (instance));
}
}
+ /* Notify display name observers */
+ if (G_OBJECT (priv->cur_folder_store) == instance)
+ g_signal_emit (G_OBJECT(data),
+ signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL], 0,
+ account_name);
+
/* Use bold font style */
g_object_set (rendobj,"text", account_name, "weight", 800, NULL);
}
priv->timer_expander = 0;
priv->account_store = NULL;
- priv->cur_folder = NULL;
- priv->cur_row = NULL;
+ priv->cur_folder_store = NULL;
priv->query = NULL;
/* Initialize the local account name */
priv = MODEST_FOLDER_VIEW_GET_PRIVATE(self);
- /* Notify that there is no folder selected*/
+ /* Notify that there is no folder selected */
g_signal_emit (G_OBJECT(self),
signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0,
NULL, TRUE);
on_selection_changed (GtkTreeSelection *sel, gpointer user_data)
{
GtkTreeModel *model_sort, *model;
- TnyFolder *folder = NULL;
+ TnyFolderStore *folder = NULL;
GtkTreeIter iter, iter_sort;
- GtkTreePath *path;
ModestFolderView *tree_view;
ModestFolderViewPrivate *priv;
gint type;
/* folder was _un_selected if true */
if (!gtk_tree_selection_get_selected (sel, &model_sort, &iter_sort)) {
- if (priv->cur_folder)
- g_object_unref (priv->cur_folder);
- if (priv->cur_row)
- gtk_tree_row_reference_free (priv->cur_row);
- priv->cur_folder = NULL;
- priv->cur_row = NULL;
+ if (priv->cur_folder_store)
+ g_object_unref (priv->cur_folder_store);
+ priv->cur_folder_store = NULL;
+
+ /* Notify the display name observers */
+ g_signal_emit (G_OBJECT(user_data),
+ signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL], 0,
+ NULL);
return;
}
-1);
/* If the folder is the same do not notify */
- if ((type == TNY_FOLDER_TYPE_ROOT) || (priv->cur_folder == folder)) {
+ if (priv->cur_folder_store == folder) {
g_object_unref (folder);
return;
}
/* Current folder was unselected */
- if (priv->cur_folder) {
+ if (priv->cur_folder_store) {
g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0,
- priv->cur_folder, FALSE);
- g_object_unref (priv->cur_folder);
+ priv->cur_folder_store, FALSE);
+ g_object_unref (priv->cur_folder_store);
}
- if (priv->cur_row)
- gtk_tree_row_reference_free (priv->cur_row);
-
/* New current references */
- path = gtk_tree_model_get_path (model_sort, &iter_sort);
- priv->cur_folder = folder;
- priv->cur_row = gtk_tree_row_reference_new (model_sort, path);
-
- /* Frees */
- gtk_tree_path_free (path);
+ priv->cur_folder_store = folder;
/* New folder has been selected */
g_signal_emit (G_OBJECT(tree_view),
0, folder, TRUE);
}
-TnyFolder *
+TnyFolderStore *
modest_folder_view_get_selected (ModestFolderView *self)
{
ModestFolderViewPrivate *priv;
g_return_val_if_fail (self, NULL);
priv = MODEST_FOLDER_VIEW_GET_PRIVATE(self);
- if (priv->cur_folder)
- g_object_ref (priv->cur_folder);
+ if (priv->cur_folder_store)
+ g_object_ref (priv->cur_folder_store);
- return priv->cur_folder;
+ return priv->cur_folder_store;
}
static gint
TnyFolder *folder,
gboolean selected,
gpointer user_data);
+
+ void (*folder_display_name_changed) (ModestFolderView* self,
+ const gchar *display_name,
+ gpointer user_data);
};
/**
* modest_folder_view_get_selected:
* @self: a #ModestFolderView
*
- * returns a new reference to the #TnyFolder that is already selected
+ * returns a new reference to the #TnyFolderStore that is already selected
*
- * Returns: the selected folder or NULL if none is selected
+ * Returns: the selected #TnyFolderStore or NULL if none is selected
**/
-TnyFolder* modest_folder_view_get_selected (ModestFolderView *self);
+TnyFolderStore* modest_folder_view_get_selected (ModestFolderView *self);
/**