* Fixes NB#90948, show messages as attachments in a viewer
[modest] / src / hildon2 / modest-msg-view-window.c
index 0e2d58c..3f68742 100644 (file)
@@ -49,6 +49,7 @@
 #include <modest-text-utils.h>
 #include <modest-account-mgr-helpers.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"
@@ -61,6 +62,7 @@
 #include <errno.h>
 #include <glib/gstdio.h>
 #include <modest-debug.h>
+#include <modest-header-window.h>
 
 #define DEFAULT_FOLDER "MyDocs/.documents"
 
@@ -135,9 +137,9 @@ 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 gboolean modest_msg_view_window_window_state_event (GtkWidget *widget, 
-                                                          GdkEventWindowState *event, 
-                                                          gpointer userdata);
+static gboolean modest_msg_view_window_toggle_menu (HildonWindow *window,
+                                                   guint button,
+                                                   guint32 time);
 static void modest_msg_view_window_update_priority (ModestMsgViewWindow *window);
 
 static void modest_msg_view_window_show_toolbar   (ModestWindow *window,
@@ -217,6 +219,15 @@ static gboolean message_reader (ModestMsgViewWindow *window,
                                TnyHeader *header,
                                GtkTreeRowReference *row_reference);
 
+static void add_to_menu (ModestMsgViewWindow *self,
+                        HildonAppMenu *menu,
+                        gchar *label,
+                        GCallback callback,
+                        ModestDimmingRulesGroup *group,
+                        GCallback dimming_callback);
+static void setup_menu (ModestMsgViewWindow *self,
+                       ModestDimmingRulesGroup *group);
+
 /* list my signals */
 enum {
        MSG_CHANGED_SIGNAL,
@@ -229,15 +240,6 @@ static const GtkToggleActionEntry msg_view_toggle_action_entries [] = {
        { "ToolsFindInMessage", NULL, N_("mcen_me_viewer_find"), "<CTRL>F", NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
 };
 
-static const GtkRadioActionEntry msg_view_zoom_action_entries [] = {
-       { "Zoom50", NULL, N_("mcen_me_viewer_50"), NULL, NULL, 50 },
-       { "Zoom80", NULL, N_("mcen_me_viewer_80"), NULL, NULL, 80 },
-       { "Zoom100", NULL, N_("mcen_me_viewer_100"), NULL, NULL, 100 },
-       { "Zoom120", NULL, N_("mcen_me_viewer_120"), NULL, NULL, 120 },
-       { "Zoom150", NULL, N_("mcen_me_viewer_150"), NULL, NULL, 150 },
-       { "Zoom200", NULL, N_("mcen_me_viewer_200"), NULL, NULL, 200 }
-};
-
 #define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                     MODEST_TYPE_MSG_VIEW_WINDOW, \
                                                     ModestMsgViewWindowPrivate))
@@ -336,15 +338,19 @@ static void
 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;
 
+       hildon_window_class->toggle_menu = modest_msg_view_window_toggle_menu;
+
        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_minus_func = modest_msg_view_window_zoom_minus;
@@ -421,12 +427,6 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
                                             msg_view_toggle_action_entries,
                                             G_N_ELEMENTS (msg_view_toggle_action_entries),
                                             obj);
-       gtk_action_group_add_radio_actions (action_group,
-                                           msg_view_zoom_action_entries,
-                                           G_N_ELEMENTS (msg_view_zoom_action_entries),
-                                           100,
-                                           G_CALLBACK (modest_ui_actions_on_change_zoom),
-                                           obj);
 
        gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 0);
        g_object_unref (action_group);
@@ -562,8 +562,8 @@ static void
 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);
 
@@ -607,21 +607,15 @@ modest_msg_view_window_disconnect_signals (ModestWindow *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
@@ -765,15 +759,14 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
        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->menubar = NULL;
        parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
 
        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, menu_rules_group);
        /* Add common dimming rules */
        modest_dimming_rules_group_add_rules (menu_rules_group, 
                                              modest_msg_view_menu_dimming_entries,
@@ -824,10 +817,6 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
                          G_CALLBACK (modest_msg_view_window_key_event),
                          NULL);
 
-       g_signal_connect (G_OBJECT (obj), "window-state-event",
-                         G_CALLBACK (modest_msg_view_window_window_state_event),
-                         NULL);
-
        g_signal_connect (G_OBJECT (obj), "move-focus",
                          G_CALLBACK (on_move_focus), obj);
 
@@ -1452,10 +1441,9 @@ modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
 
        /* 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);
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsFindInMessageMenu");
-       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
@@ -1468,7 +1456,7 @@ modest_msg_view_window_find_toolbar_close (GtkWidget *widget,
 
        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));
@@ -1529,8 +1517,6 @@ modest_msg_view_window_set_zoom (ModestWindow *window,
 {
        ModestMsgViewWindowPrivate *priv;
        ModestWindowPrivate *parent_priv;
-       GtkAction *action = NULL;
-       gint int_zoom = (gint) rint (zoom*100.0+0.1);
      
        g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
 
@@ -1538,10 +1524,6 @@ modest_msg_view_window_set_zoom (ModestWindow *window,
        parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
        modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom);
 
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                           "/MenuBar/ViewMenu/ZoomMenu/Zoom50Menu");
-
-       gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), int_zoom);
 }
 
 static gdouble
@@ -1558,56 +1540,71 @@ modest_msg_view_window_get_zoom (ModestWindow *window)
 static gboolean
 modest_msg_view_window_zoom_plus (ModestWindow *window)
 {
-       ModestWindowPrivate *parent_priv;
-       GtkRadioAction *zoom_radio_action;
-       GSList *group, *node;
-
-       parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
-       zoom_radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                                                        "/MenuBar/ViewMenu/ZoomMenu/Zoom50Menu"));
-
-       group = gtk_radio_action_get_group (zoom_radio_action);
+       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 (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (group->data))) {
+       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;
        }
 
-       for (node = group; node != NULL; node = g_slist_next (node)) {
-               if ((node->next != NULL) && gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (node->next->data))) {
-                       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (node->data), TRUE);
-                       return TRUE;
-               }
-       }
-       return FALSE;
+       /* 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)
 {
-       ModestWindowPrivate *parent_priv;
-       GtkRadioAction *zoom_radio_action;
-       GSList *group, *node;
-
-       parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
-       zoom_radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                                                        "/MenuBar/ViewMenu/ZoomMenu/Zoom50Menu"));
-
-       group = gtk_radio_action_get_group (zoom_radio_action);
+       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));
 
-       for (node = group; node != NULL; node = g_slist_next (node)) {
-               if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (node->data))) {
-                       if (node->next != NULL) {
-                               gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (node->next->data), TRUE);
-                               return TRUE;
-                       } else {
+       if (zoom_level <= 0.5) {
                          hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_min_zoom_level_reached"));
-                               return FALSE;
-                       }
-                       break;
-               }
+               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;
        }
-       return FALSE;
+
+       /* set zoom level */
+       modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
+
+       return TRUE;
+       
 }
 
 static gboolean
@@ -2186,32 +2183,6 @@ toolbar_resize (ModestMsgViewWindow *self)
                
 }
 
-static gboolean
-modest_msg_view_window_window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata)
-{
-       if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-               ModestWindowPrivate *parent_priv;
-               ModestWindowMgr *mgr;
-               gboolean is_fullscreen;
-               GtkAction *fs_toggle_action;
-               gboolean active;
-
-               mgr = modest_runtime_get_window_mgr ();
-               is_fullscreen = (modest_window_mgr_get_fullscreen_mode (mgr))?1:0;
-
-               parent_priv = MODEST_WINDOW_GET_PRIVATE (widget);
-               
-               fs_toggle_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewToggleFullscreenMenu");
-               active = (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (fs_toggle_action)))?1:0;
-               if (is_fullscreen != active) {
-                       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (fs_toggle_action), is_fullscreen);
-               }
-               toolbar_resize (MODEST_MSG_VIEW_WINDOW (widget));
-       }
-
-       return FALSE;
-
-}
 
 static void
 modest_msg_view_window_show_toolbar (ModestWindow *self,
@@ -2220,9 +2191,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
        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);
 
@@ -2237,17 +2206,18 @@ modest_msg_view_window_show_toolbar (ModestWindow *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));
 
-               /* Set reply button tap and hold menu */        
+               /* Set reply button tap and hold menu */
                reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
                                                          "/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) {
@@ -2266,19 +2236,6 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
                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
-          toolbar fullscreen mode is shared by all the windows of the
-          same type */
-       if (modest_window_mgr_get_fullscreen_mode (modest_runtime_get_window_mgr ()))
-               action_name = "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarFullScreenMenu";
-       else
-               action_name = "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarNormalScreenMenu";
-
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, action_name);
-       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action),
-                                                           show_toolbar);
 }
 
 static void 
@@ -2604,23 +2561,23 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window,
                ModestWindowMgr *mgr;
                ModestWindow *msg_win = NULL;
                gboolean found;
-               
+
                header = tny_msg_get_header (TNY_MSG (mime_part));
-               mgr = modest_runtime_get_window_mgr ();         
+               mgr = modest_runtime_get_window_mgr ();
                found = modest_window_mgr_find_registered_header (mgr, header, &msg_win);
 
                if (found) {
                        /* if it's found, but there is no msg_win, it's probably in the process of being created;
                         * thus, we don't do anything */
                        g_warning ("window for is already being created");
-               } else { 
+               } else {
                        /* it's not found, so create a new window for it */
                        modest_window_mgr_register_header (mgr, header, attachment_uid); /* register the uid before building the window */
                        gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
                        if (!account)
                                account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
                        msg_win = modest_msg_view_window_new_for_attachment (TNY_MSG (mime_part), account, attachment_uid);
-                       modest_window_set_zoom (MODEST_WINDOW (msg_win), 
+                       modest_window_set_zoom (MODEST_WINDOW (msg_win),
                                                modest_window_get_zoom (MODEST_WINDOW (window)));
                        modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window));
                        gtk_widget_show_all (GTK_WIDGET (msg_win));
@@ -3167,3 +3124,75 @@ on_fetch_image (ModestMsgView *msgview,
 
        return TRUE;;
 }
+
+static void 
+add_to_menu (ModestMsgViewWindow *self,
+            HildonAppMenu *menu,
+            gchar *label,
+            GCallback callback,
+            ModestDimmingRulesGroup *dimming_group,
+            GCallback dimming_callback)
+{
+       GtkWidget *button;
+
+       button = gtk_button_new_with_label (label);
+       g_signal_connect_after (G_OBJECT (button), "clicked",
+                               callback, (gpointer) self);
+       modest_dimming_rules_group_add_widget_rule (dimming_group,
+                                                   button,
+                                                   dimming_callback,
+                                                   MODEST_WINDOW (self));
+       hildon_app_menu_append (menu, GTK_BUTTON (button));
+}
+
+static void 
+setup_menu (ModestMsgViewWindow *self, ModestDimmingRulesGroup *group)
+{
+       ModestMsgViewWindowPrivate *priv = NULL;
+       GtkWidget *app_menu;
+
+       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(self));
+
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+       app_menu = hildon_app_menu_new ();
+
+       /* Settings menu buttons */
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_reply"),
+                    G_CALLBACK (modest_ui_actions_on_reply),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_reply_msg));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_replytoall"),
+                    G_CALLBACK (modest_ui_actions_on_reply_all),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_reply_msg));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_forward"),
+                    G_CALLBACK (modest_ui_actions_on_forward),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_reply_msg));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_viewer_newemail"),
+                    G_CALLBACK (modest_ui_actions_on_new_msg),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_new_msg));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_messagedetails"),
+                    G_CALLBACK (modest_ui_actions_on_details),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_details));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_viewer_save_attachments"),
+                    G_CALLBACK (modest_ui_actions_save_attachments),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_save_attachments));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_inbox_remove_attachments"),
+                    G_CALLBACK (modest_ui_actions_remove_attachments),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_remove_attachments));
+       add_to_menu (self, HILDON_APP_MENU (app_menu), _("mcen_me_viewer_addtocontacts"),
+                    G_CALLBACK (modest_ui_actions_on_add_to_contacts),
+                    group, G_CALLBACK (modest_ui_dimming_rules_on_add_to_contacts));
+
+       hildon_stackable_window_set_main_menu (HILDON_STACKABLE_WINDOW (self), 
+                                              HILDON_APP_MENU (app_menu));
+}
+
+static gboolean 
+modest_msg_view_window_toggle_menu (HildonWindow *window,
+                                   guint button,
+                                   guint32 time)
+{
+       modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
+
+       return HILDON_WINDOW_CLASS (parent_class)->toggle_menu (window, button, time);  
+}