#include <modest-tny-folder.h>
#include <modest-text-utils.h>
#include <modest-account-mgr-helpers.h>
-#include "modest-progress-bar.h"
#include <hildon/hildon-pannable-area.h>
#include <hildon/hildon-picker-dialog.h>
-#include "hildon/hildon-pannable-area.h"
+#include <hildon/hildon-app-menu.h>
#include "modest-defs.h"
#include "modest-hildon-includes.h"
#include "modest-ui-dimming-manager.h"
#include <errno.h>
#include <glib/gstdio.h>
#include <modest-debug.h>
+#include <modest-header-window.h>
#define MYDOCS_ENV "MYDOCSDIR"
#define DOCS_FOLDER ".documents"
static void modest_msg_view_window_disconnect_signals (ModestWindow *self);
static gdouble modest_msg_view_window_get_zoom (ModestWindow *window);
+static void modest_msg_view_window_set_zoom (ModestWindow *window,
+ gdouble zoom);
+static gboolean modest_msg_view_window_zoom_minus (ModestWindow *window);
+static gboolean modest_msg_view_window_zoom_plus (ModestWindow *window);
static gboolean modest_msg_view_window_key_event (GtkWidget *window,
GdkEventKey *event,
gpointer userdata);
-
static void modest_msg_view_window_update_priority (ModestMsgViewWindow *window);
static void modest_msg_view_window_show_toolbar (ModestWindow *window,
TnyHeader *header,
GtkTreeRowReference *row_reference);
+static void setup_menu (ModestMsgViewWindow *self);
+
/* list my signals */
enum {
MSG_CHANGED_SIGNAL,
{ "FindInMessage", MODEST_TOOLBAR_ICON_FIND, N_("qgn_toolb_gene_find"), NULL, NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
};
+
#define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_MSG_VIEW_WINDOW, \
ModestMsgViewWindowPrivate))
(GInstanceInitFunc) modest_msg_view_window_init,
NULL
};
- my_type = g_type_register_static (MODEST_TYPE_WINDOW,
+ my_type = g_type_register_static (MODEST_TYPE_HILDON2_WINDOW,
"ModestMsgViewWindow",
&my_info, 0);
MODEST_CONF_MSG_VIEW_WINDOW_KEY);
}
-static void
-restore_settings (ModestMsgViewWindow *self)
-{
- ModestConf *conf;
-
- conf = modest_runtime_get_conf ();
- modest_widget_memory_restore (conf,
- G_OBJECT(self),
- MODEST_CONF_MSG_VIEW_WINDOW_KEY);
-}
-
-static gboolean modest_msg_view_window_scroll_child (ModestMsgViewWindow *self,
- GtkScrollType scroll_type,
- gboolean horizontal,
- gpointer userdata)
+static
+gboolean modest_msg_view_window_scroll_child (ModestMsgViewWindow *self,
+ GtkScrollType scroll_type,
+ gboolean horizontal,
+ gpointer userdata)
{
ModestMsgViewWindowPrivate *priv;
gboolean return_value;
modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
{
GObjectClass *gobject_class;
+ HildonWindowClass *hildon_window_class;
ModestWindowClass *modest_window_class;
GtkBindingSet *binding_set;
gobject_class = (GObjectClass*) klass;
+ hildon_window_class = (HildonWindowClass *) klass;
modest_window_class = (ModestWindowClass *) klass;
parent_class = g_type_class_peek_parent (klass);
gobject_class->finalize = modest_msg_view_window_finalize;
+ modest_window_class->set_zoom_func = modest_msg_view_window_set_zoom;
modest_window_class->get_zoom_func = modest_msg_view_window_get_zoom;
+ modest_window_class->zoom_plus_func = modest_msg_view_window_zoom_plus;
+ modest_window_class->zoom_minus_func = modest_msg_view_window_zoom_minus;
modest_window_class->show_toolbar_func = modest_msg_view_window_show_toolbar;
modest_window_class->disconnect_signals_func = modest_msg_view_window_disconnect_signals;
modest_msg_view_window_disconnect_signals (ModestWindow *self)
{
ModestMsgViewWindowPrivate *priv;
- ModestHeaderView *header_view = NULL;
- ModestWindow *main_window = NULL;
+ GtkWidget *header_view = NULL;
+ GtkWindow *parent_window = NULL;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
modest_signal_mgr_disconnect_all_and_destroy (priv->sighandlers);
priv->sighandlers = NULL;
-
- main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(),
- FALSE); /* don't create */
- if (!main_window)
- return;
-
- header_view = MODEST_HEADER_VIEW(
- modest_main_window_get_child_widget(
- MODEST_MAIN_WINDOW(main_window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
- if (header_view == NULL)
- return;
-
- modest_header_view_remove_observer(header_view,
- MODEST_HEADER_VIEW_OBSERVER(self));
+
+ parent_window = gtk_window_get_transient_for (GTK_WINDOW (self));
+ if (parent_window && MODEST_IS_HEADER_WINDOW (parent_window)) {
+ header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (parent_window)));
+ if (header_view) {
+ modest_header_view_remove_observer(MODEST_HEADER_VIEW (header_view),
+ MODEST_HEADER_VIEW_OBSERVER(self));
+ }
+ }
}
static void
GObject *obj = NULL;
ModestMsgViewWindowPrivate *priv = NULL;
ModestWindowPrivate *parent_priv = NULL;
- ModestDimmingRulesGroup *menu_rules_group = NULL;
ModestDimmingRulesGroup *toolbar_rules_group = NULL;
ModestDimmingRulesGroup *clipboard_rules_group = NULL;
priv->msg_uid = g_strdup (msg_uid);
/* Menubar */
- parent_priv->menubar = modest_maemo_utils_get_manager_menubar_as_menu (parent_priv->ui_manager, "/MenuBar");
- hildon_window_set_menu (HILDON_WINDOW(obj), GTK_MENU(parent_priv->menubar));
- gtk_widget_show (parent_priv->menubar);
- parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
+ parent_priv->menubar = NULL;
- menu_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_MENU, FALSE);
toolbar_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_TOOLBAR, TRUE);
clipboard_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_CLIPBOARD, FALSE);
+ setup_menu (self);
/* Add common dimming rules */
- modest_dimming_rules_group_add_rules (menu_rules_group,
- modest_msg_view_menu_dimming_entries,
- G_N_ELEMENTS (modest_msg_view_menu_dimming_entries),
- MODEST_WINDOW (self));
modest_dimming_rules_group_add_rules (toolbar_rules_group,
modest_msg_view_toolbar_dimming_entries,
G_N_ELEMENTS (modest_msg_view_toolbar_dimming_entries),
MODEST_WINDOW (self));
/* Insert dimming rules group for this window */
- modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group);
modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, toolbar_rules_group);
modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, clipboard_rules_group);
- g_object_unref (menu_rules_group);
g_object_unref (toolbar_rules_group);
g_object_unref (clipboard_rules_group);
/* Setup row references and connect signals */
priv->header_model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ g_object_ref (priv->header_model);
if (row_reference) {
priv->row_reference = gtk_tree_row_reference_copy (row_reference);
/* update the toggle buttons status */
action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage");
- modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
+ if (action)
+ modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
+
}
static void
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
parent_priv = MODEST_WINDOW_GET_PRIVATE (obj);
-
+
toggle = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"));
gtk_toggle_action_set_active (toggle, FALSE);
modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
}
+static void
+modest_msg_view_window_set_zoom (ModestWindow *window,
+ gdouble zoom)
+{
+ ModestMsgViewWindowPrivate *priv;
+ ModestWindowPrivate *parent_priv;
+
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+ parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
+ modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom);
+
+}
+
static gdouble
modest_msg_view_window_get_zoom (ModestWindow *window)
{
}
static gboolean
+modest_msg_view_window_zoom_plus (ModestWindow *window)
+{
+ gdouble zoom_level;
+ ModestMsgViewWindowPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), 1.0);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+
+ zoom_level = modest_zoomable_get_zoom (MODEST_ZOOMABLE (priv->msg_view));
+
+ if (zoom_level >= 2.0) {
+ hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_max_zoom_level_reached"));
+ return FALSE;
+ } else if (zoom_level >= 1.5) {
+ zoom_level = 2.0;
+ } else if (zoom_level >= 1.2) {
+ zoom_level = 1.5;
+ } else if (zoom_level >= 1.0) {
+ zoom_level = 1.2;
+ } else if (zoom_level >= 0.8) {
+ zoom_level = 1.0;
+ } else if (zoom_level >= 0.5) {
+ zoom_level = 0.8;
+ } else {
+ zoom_level = 0.5;
+ }
+
+ /* set zoom level */
+ modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
+
+ return TRUE;
+
+}
+
+static gboolean
+modest_msg_view_window_zoom_minus (ModestWindow *window)
+{
+ gdouble zoom_level;
+ ModestMsgViewWindowPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), 1.0);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+
+ zoom_level = modest_zoomable_get_zoom (MODEST_ZOOMABLE (priv->msg_view));
+
+ if (zoom_level <= 0.5) {
+ hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_min_zoom_level_reached"));
+ return FALSE;
+ } else if (zoom_level <= 0.8) {
+ zoom_level = 0.5;
+ } else if (zoom_level <= 1.0) {
+ zoom_level = 0.8;
+ } else if (zoom_level <= 1.2) {
+ zoom_level = 1.0;
+ } else if (zoom_level <= 1.5) {
+ zoom_level = 1.2;
+ } else if (zoom_level <= 2.0) {
+ zoom_level = 1.5;
+ } else {
+ zoom_level = 2.0;
+ }
+
+ /* set zoom level */
+ modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
+
+ return TRUE;
+
+}
+
+static gboolean
modest_msg_view_window_key_event (GtkWidget *window,
GdkEventKey *event,
gpointer userdata)
ModestMsgViewWindowPrivate *priv = NULL;
ModestWindowPrivate *parent_priv;
GtkWidget *reply_button = NULL, *menu = NULL;
- const gchar *action_name;
- GtkAction *action;
-
+
parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self);
priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext");
priv->prev_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageBack");
toolbar_resize (MODEST_MSG_VIEW_WINDOW (self));
-
+
/* Add to window */
hildon_window_add_toolbar (HILDON_WINDOW (self),
GTK_TOOLBAR (parent_priv->toolbar));
"/ToolBar/ToolbarMessageReply");
menu = gtk_ui_manager_get_widget (parent_priv->ui_manager,
"/ToolbarReplyCSM");
- gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0);
+ if (menu && reply_button)
+ gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0);
}
if (show_toolbar) {
helper->banner_idle_id = 0;
helper->banner = hildon_banner_show_animation (NULL, NULL, _("mail_me_opening"));
- g_object_ref (helper->banner);
return FALSE;
}
}
if (helper->banner) {
gtk_widget_destroy (helper->banner);
+ helper->banner = NULL;
}
if (cancelled || err) {
modest_platform_information_banner (NULL, NULL,
/* make the file read-only */
g_chmod(helper->filepath, 0444);
-
+
/* Activate the file */
modest_platform_activate_file (helper->filepath, tny_mime_part_get_content_type (mime_part));
free:
/* Frees */
g_free (helper->filepath);
- g_object_unref (helper->banner);
g_slice_free (DecodeAsyncHelper, helper);
}
GTK_FILE_CHOOSER_ACTION_SAVE);
/* set folder */
- folder = g_build_filename (g_get_home_dir (), g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL);
+ folder = g_build_filename (g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (save_dialog), folder);
g_free (folder);
return TRUE;;
}
+static void
+setup_menu (ModestMsgViewWindow *self)
+{
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(self));
+
+ /* Settings menu buttons */
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_replytoall"), NULL,
+ APP_MENU_CALLBACK (modest_ui_actions_on_reply_all),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_reply_msg));
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_forward"), "<Control>d",
+ APP_MENU_CALLBACK (modest_ui_actions_on_forward),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_reply_msg));
+
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_read"), NULL,
+ APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_read),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_read_msg_in_view));
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_unread"), NULL,
+ APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_unread),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_unread_msg_in_view));
+
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_save_attachments"), NULL,
+ APP_MENU_CALLBACK (modest_ui_actions_save_attachments),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_save_attachments));
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_remove_attachments"), NULL,
+ APP_MENU_CALLBACK (modest_ui_actions_remove_attachments),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_remove_attachments));
+
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_new_message"), "<Control>n",
+ APP_MENU_CALLBACK (modest_ui_actions_on_new_msg),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_new_msg));
+ modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_addtocontacts"), NULL,
+ APP_MENU_CALLBACK (modest_ui_actions_add_to_contacts),
+ MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_add_to_contacts));
+}
+
void
modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
{
GtkWidget *picker_dialog;
GtkWidget *selector;
GSList *node;
- gchar *selected;
+ gchar *selected = NULL;
selector = hildon_touch_selector_new_text ();
+ g_object_ref (selector);
+
for (node = recipients; node != NULL; node = g_slist_next (node)) {
if (!modest_address_book_has_address ((const gchar *) node->data)) {
hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector),
}
if (contacts_to_add) {
+ gint picker_result;
picker_dialog = hildon_picker_dialog_new (GTK_WINDOW (self));
gtk_window_set_title (GTK_WINDOW (picker_dialog), _("mcen_me_viewer_addtocontacts"));
hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (picker_dialog),
HILDON_TOUCH_SELECTOR (selector));
- gtk_dialog_run (GTK_DIALOG (picker_dialog));
- selected = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector));
+ picker_result = gtk_dialog_run (GTK_DIALOG (picker_dialog));
+
+ if (picker_result == GTK_RESPONSE_OK) {
+ selected = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector));
+ }
gtk_widget_destroy (picker_dialog);
if (selected)