static void modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
ModestMsgViewWindow *obj);
-static void modest_msg_view_window_set_zoom (ModestWindow *window,
- gdouble zoom);
+static void modest_msg_view_window_disconnect_signals (ModestWindow *self);
+static void modest_msg_view_window_set_zoom (ModestWindow *window,
+ gdouble zoom);
static gdouble modest_msg_view_window_get_zoom (ModestWindow *window);
static gboolean modest_msg_view_window_zoom_minus (ModestWindow *window);
static gboolean modest_msg_view_window_zoom_plus (ModestWindow *window);
modest_window_class->zoom_minus_func = modest_msg_view_window_zoom_minus;
modest_window_class->zoom_plus_func = modest_msg_view_window_zoom_plus;
modest_window_class->show_toolbar_func = modest_msg_view_window_show_toolbar;
+ modest_window_class->disconnect_signals_func = modest_msg_view_window_disconnect_signals;
g_type_class_add_private (gobject_class, sizeof(ModestMsgViewWindowPrivate));
priv->clipboard_change_handler = g_signal_connect (G_OBJECT (gtk_clipboard_get (GDK_SELECTION_PRIMARY)), "owner-change", G_CALLBACK (modest_msg_view_window_clipboard_owner_change), obj);
gtk_widget_show_all (GTK_WIDGET(main_vbox));
-
-}
-
+}
static void
-modest_msg_view_window_finalize (GObject *obj)
+modest_msg_view_window_disconnect_signals (ModestWindow *self)
{
ModestMsgViewWindowPrivate *priv;
- priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
- if (priv->clipboard_change_handler > 0) {
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+ if (g_signal_handler_is_connected (gtk_clipboard_get (GDK_SELECTION_PRIMARY),
+ priv->clipboard_change_handler))
g_signal_handler_disconnect (gtk_clipboard_get (GDK_SELECTION_PRIMARY),
priv->clipboard_change_handler);
- priv->clipboard_change_handler = 0;
- }
- if (priv->queue_change_handler > 0) {
+
+ if (g_signal_handler_is_connected (G_OBJECT (modest_runtime_get_mail_operation_queue ()),
+ priv->queue_change_handler))
g_signal_handler_disconnect (G_OBJECT (modest_runtime_get_mail_operation_queue ()),
priv->queue_change_handler);
- priv->queue_change_handler = 0;
- }
- if (priv->account_removed_handler > 0) {
+
+ if (g_signal_handler_is_connected (G_OBJECT (modest_runtime_get_account_store ()),
+ priv->account_removed_handler))
g_signal_handler_disconnect (G_OBJECT (modest_runtime_get_account_store ()),
priv->account_removed_handler);
- priv->account_removed_handler = 0;
- }
+}
+
+static void
+modest_msg_view_window_finalize (GObject *obj)
+{
+ ModestMsgViewWindowPrivate *priv;
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
+
+ /* Sanity check: shouldn't be needed, the window mgr should
+ call this function before */
+ modest_msg_view_window_disconnect_signals (MODEST_WINDOW (obj));
+
if (priv->header_model != NULL) {
g_object_unref (priv->header_model);
priv->header_model = NULL;
{
ModestMailOperation *mail_op = NULL;
ModestMailOperationTypeOperation op_type;
+ gboolean already_showing = FALSE;
+ ModestWindow *msg_window = NULL;
+ ModestWindowMgr *mgr;
g_return_val_if_fail (path != NULL, FALSE);
+ mgr = modest_runtime_get_window_mgr ();
+ already_showing = modest_window_mgr_find_registered_header (mgr, header, &msg_window);
+ if (already_showing && (msg_window != MODEST_WINDOW (window))) {
+ gboolean retval;
+ if (msg_window)
+ gtk_window_present (GTK_WINDOW (msg_window));
+ g_signal_emit_by_name (G_OBJECT (window), "delete-event", NULL, &retval);
+ return TRUE;
+ }
+
/* Msg download completed */
if (tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED) {
op_type = MODEST_MAIL_OPERATION_TYPE_OPEN;
if (!account)
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
msg_win = modest_msg_view_window_new (TNY_MSG (mime_part), account, NULL);
+ modest_window_set_zoom (MODEST_WINDOW (msg_win),
+ modest_window_get_zoom (MODEST_WINDOW (window)));
modest_window_mgr_register_window (mgr, msg_win);
gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (window));
gtk_widget_show_all (GTK_WIDGET (msg_win));