[evolution] EMailDisplay cleanups.



commit b5cf4dc325b810f750f735eb972837953f4e8309
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat Oct 13 20:00:26 2012 -0400

    EMailDisplay cleanups.

 mail/e-mail-display.c |  897 +++++++++++++++++++++++++-----------------------
 1 files changed, 467 insertions(+), 430 deletions(-)
---
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index f027e8f..82934ea 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -68,7 +68,7 @@ struct _EMailDisplayPrivate {
 	gboolean headers_collapsable;
 	gboolean headers_collapsed;
 
-        gint force_image_load: 1;
+	gint force_image_load: 1;
 
 	GSettings *settings;
 
@@ -154,84 +154,14 @@ static GtkActionEntry mailto_entries[] = {
 
 static GtkActionEntry image_entries[] = {
 
-        { "image-save",
-        GTK_STOCK_SAVE,
-        N_("Save _Image..."),
-        NULL,
-        N_("Save the image to a file"),
-        NULL    /* Handled by EMailReader */ },
-
+	{ "image-save",
+	  GTK_STOCK_SAVE,
+	  N_("Save _Image..."),
+	  NULL,
+	  N_("Save the image to a file"),
+	  NULL /* Handled by EMailReader */ },
 };
 
-static gboolean
-mail_display_button_press_event (GtkWidget *widget,
-                                 GdkEventButton *event)
-{
-	WebKitHitTestResult *hit_test;
-	WebKitHitTestResultContext context;
-	gchar *image_src;
-	gboolean visible;
-	GtkAction *action;
-	GList *extensions, *iter;
-	EWebView *web_view = E_WEB_VIEW (widget);
-
-	if (event->button != 3) {
-		return GTK_WIDGET_CLASS (
-			e_mail_display_parent_class)->button_press_event (
-				widget, event);
-	}
-
-	hit_test = webkit_web_view_get_hit_test_result (
-			WEBKIT_WEB_VIEW (web_view), event);
-
-	g_object_get (
-		G_OBJECT (hit_test),
-		"context", &context,
-		"image-uri", &image_src,
-		NULL);
-
-	if ((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE)) {
-		visible = image_src && g_str_has_prefix (image_src, "cid:");
-		if (!visible && image_src) {
-			CamelStream *image_stream;
-
-			image_stream = camel_data_cache_get (
-					emd_global_http_cache, "http",
-					image_src, NULL);
-
-			visible = image_stream != NULL;
-
-			if (image_stream)
-				g_object_unref (image_stream);
-		}
-
-		if (image_src)
-			g_free (image_src);
-
-		action = e_web_view_get_action (web_view, "image-save");
-		if (action)
-			gtk_action_set_visible (action, visible);
-	}
-
-	extensions = e_extensible_list_extensions (
-			E_EXTENSIBLE (web_view), E_TYPE_EXTENSION);
-	for (iter = extensions; iter; iter = g_list_next (iter)) {
-		EExtension *extension = iter->data;
-
-		if (!E_IS_MAIL_DISPLAY_POPUP_EXTENSION (extension))
-			continue;
-
-		e_mail_display_popup_extension_update_actions (
-			E_MAIL_DISPLAY_POPUP_EXTENSION (extension), hit_test);
-	}
-	g_list_free (extensions);
-
-	g_object_unref (hit_test);
-
-	/* Chain up to parent's button_press_event() method. */
-	return GTK_WIDGET_CLASS (e_mail_display_parent_class)->button_press_event (widget, event);
-}
-
 static void
 formatter_image_loading_policy_changed_cb (GObject *object,
                                            GParamSpec *pspec,
@@ -242,11 +172,11 @@ formatter_image_loading_policy_changed_cb (GObject *object,
 	EMailImageLoadingPolicy policy;
 
 	policy = e_mail_formatter_get_image_loading_policy (formatter);
-	if (policy == E_MAIL_IMAGE_LOADING_POLICY_ALWAYS) {
+
+	if (policy == E_MAIL_IMAGE_LOADING_POLICY_ALWAYS)
 		e_mail_display_load_images (display);
-	} else {
+	else
 		e_mail_display_reload (display);
-	}
 }
 
 static void
@@ -255,7 +185,7 @@ mail_display_update_formatter_colors (EMailDisplay *display)
 	GtkStyle *style;
 	GtkStateType state;
 
-	if (!display->priv->formatter)
+	if (display->priv->formatter == NULL)
 		return;
 
 	style = gtk_widget_get_style (GTK_WIDGET (display));
@@ -265,143 +195,25 @@ mail_display_update_formatter_colors (EMailDisplay *display)
 
 static void
 mail_display_plugin_widget_disconnect_children (GtkWidget *widget,
-						gpointer mail_display)
+                                                gpointer mail_display)
 {
 	g_signal_handlers_disconnect_by_data (widget, mail_display);
 }
 
 static void
 mail_display_plugin_widget_disconnect (gpointer widget_uri,
-				       gpointer widget,
-				       gpointer mail_display)
+                                       gpointer widget,
+                                       gpointer mail_display)
 {
-	if (E_IS_ATTACHMENT_BAR (widget) ||
-	    E_IS_ATTACHMENT_BUTTON (widget)) {
+	if (E_IS_ATTACHMENT_BAR (widget))
 		g_signal_handlers_disconnect_by_data (widget, mail_display);
-	} else if (GTK_IS_CONTAINER (widget)) {
-		gtk_container_foreach (widget, mail_display_plugin_widget_disconnect_children, mail_display);
-	}
-}
-
-static void
-mail_display_constructed (GObject *object)
-{
-	e_extensible_load_extensions (E_EXTENSIBLE (object));
-
-	/* Chain up to parent's constructed() method. */
-	G_OBJECT_CLASS (e_mail_display_parent_class)->constructed (object);
-}
-
-static void
-mail_display_set_property (GObject *object,
-                           guint property_id,
-                           const GValue *value,
-                           GParamSpec *pspec)
-{
-	switch (property_id) {
-		case PROP_PART_LIST:
-			e_mail_display_set_parts_list (
-				E_MAIL_DISPLAY (object),
-				g_value_get_pointer (value));
-			return;
-		case PROP_MODE:
-			e_mail_display_set_mode (
-				E_MAIL_DISPLAY (object),
-				g_value_get_int (value));
-			return;
-		case PROP_HEADERS_COLLAPSABLE:
-			e_mail_display_set_headers_collapsable (
-				E_MAIL_DISPLAY (object),
-				g_value_get_boolean (value));
-			return;
-		case PROP_HEADERS_COLLAPSED:
-			e_mail_display_set_headers_collapsed (
-				E_MAIL_DISPLAY (object),
-				g_value_get_boolean (value));
-			return;
-	}
-
-	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-mail_display_get_property (GObject *object,
-                           guint property_id,
-                           GValue *value,
-                           GParamSpec *pspec)
-{
-	switch (property_id) {
-		case PROP_PART_LIST:
-			g_value_set_pointer (
-				value, e_mail_display_get_parts_list (
-				E_MAIL_DISPLAY (object)));
-			return;
-		case PROP_MODE:
-			g_value_set_int (
-				value, e_mail_display_get_mode (
-				E_MAIL_DISPLAY (object)));
-			return;
-		case PROP_HEADERS_COLLAPSABLE:
-			g_value_set_boolean (
-				value, e_mail_display_get_headers_collapsable (
-				E_MAIL_DISPLAY (object)));
-			return;
-		case PROP_HEADERS_COLLAPSED:
-			g_value_set_boolean (
-				value, e_mail_display_get_headers_collapsed (
-				E_MAIL_DISPLAY (object)));
-			return;
-	}
-
-	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-mail_display_dispose (GObject *object)
-{
-	EMailDisplayPrivate *priv;
-
-	priv = E_MAIL_DISPLAY_GET_PRIVATE (object);
-
-	if (priv->scheduled_reload > 0) {
-		g_source_remove (priv->scheduled_reload);
-		priv->scheduled_reload = 0;
-	}
-
-	if (priv->widgets) {
-		g_hash_table_foreach (priv->widgets, mail_display_plugin_widget_disconnect, object);
-		g_hash_table_destroy (priv->widgets);
-		priv->widgets = NULL;
-	}
-
-	g_clear_object (&priv->part_list);
-	g_clear_object (&priv->settings);
-	g_clear_object (&priv->formatter);
-
-	/* Chain up to parent's dispose() method. */
-	G_OBJECT_CLASS (e_mail_display_parent_class)->dispose (object);
-}
-
-static void
-mail_display_realize (GtkWidget *widget)
-{
-	/* Chain up to parent's realize() method. */
-	GTK_WIDGET_CLASS (e_mail_display_parent_class)->realize (widget);
-
-	mail_display_update_formatter_colors (E_MAIL_DISPLAY (widget));
-}
-
-static void
-mail_display_style_set (GtkWidget *widget,
-                        GtkStyle *previous_style)
-{
-	EMailDisplay *display = E_MAIL_DISPLAY (widget);
-
-	mail_display_update_formatter_colors (display);
-
-	/* Chain up to parent's style_set() method. */
-	GTK_WIDGET_CLASS (e_mail_display_parent_class)->
-		style_set (widget, previous_style);
+	else if (E_IS_ATTACHMENT_BUTTON (widget))
+		g_signal_handlers_disconnect_by_data (widget, mail_display);
+	else if (GTK_IS_CONTAINER (widget))
+		gtk_container_foreach (
+			widget,
+			mail_display_plugin_widget_disconnect_children,
+			mail_display);
 }
 
 static gboolean
@@ -440,6 +252,7 @@ mail_display_link_clicked (WebKitWebView *web_view,
 
 	if (g_str_has_prefix (uri, "file://")) {
 		gchar *filename;
+
 		filename = g_filename_from_uri (uri, NULL, NULL);
 
 		if (g_file_test (filename, G_FILE_TEST_IS_DIR)) {
@@ -458,18 +271,18 @@ mail_display_link_clicked (WebKitWebView *web_view,
 		return TRUE;
 
 	} else if (g_ascii_strncasecmp (uri, "thismessage:", 12) == 0) {
-		/* ignore */ ;
+		/* ignore */
 		webkit_web_policy_decision_ignore (policy_decision);
 		return TRUE;
 
 	} else if (g_ascii_strncasecmp (uri, "cid:", 4) == 0) {
-		/* ignore */ ;
+		/* ignore */
 		webkit_web_policy_decision_ignore (policy_decision);
 		return TRUE;
 
 	}
 
-	/* Let webkit handle it */
+	/* Let WebKit handle it. */
 	return FALSE;
 }
 
@@ -479,12 +292,10 @@ webkit_request_load_from_file (WebKitNetworkRequest *request,
 {
 	gchar *data = NULL;
 	gsize length = 0;
-	gboolean status;
 	gchar *b64, *new_uri;
 	gchar *ct;
 
-	status = g_file_get_contents (path, &data, &length, NULL);
-	if (!status)
+	if (!g_file_get_contents (path, &data, &length, NULL))
 		return;
 
 	b64 = g_base64_encode ((guchar *) data, length);
@@ -512,15 +323,15 @@ mail_display_resource_requested (WebKitWebView *web_view,
 	const gchar *uri = webkit_network_request_get_uri (request);
 
 	part_list = display->priv->part_list;
-	if (!part_list) {
+	if (part_list == NULL)
 		return;
-	}
 
-        /* Redirect cid:part_id to mail://mail_id/cid:part_id */
+	/* Redirect cid:part_id to mail://mail_id/cid:part_id */
 	if (g_str_has_prefix (uri, "cid:")) {
+		gchar *new_uri;
 
-		/* Always write raw content of CID object */
-		gchar *new_uri = e_mail_part_build_uri (
+		/* Always write raw content of CID object. */
+		new_uri = e_mail_part_build_uri (
 			part_list->folder, part_list->message_uid,
 			"part_id", G_TYPE_STRING, uri,
 			"mode", G_TYPE_INT, E_MAIL_FORMATTER_MODE_RAW, NULL);
@@ -529,23 +340,22 @@ mail_display_resource_requested (WebKitWebView *web_view,
 
 		g_free (new_uri);
 
-        /* WebKit won't allow to load a local file when displaing "remote" mail://,
-	   protocol, so we need to handle this manually */
+	/* WebKit won't allow to load a local file when displaying
+	 * "remote" mail:// protocol, so we need to handle this manually. */
 	} else if (g_str_has_prefix (uri, "file:")) {
 		gchar *path;
 
 		path = g_filename_from_uri (uri, NULL, NULL);
-		if (!path)
+		if (path == NULL)
 			return;
 
 		webkit_request_load_from_file (request, path);
 
 		g_free (path);
 
-        /* Redirect http(s) request to evo-http(s) protocol. See EMailRequest for
-         * further details about this. */
+	/* Redirect http(s) request to evo-http(s) protocol.
+	 * See EMailRequest for further details about this. */
 	} else if (g_str_has_prefix (uri, "http:") || g_str_has_prefix (uri, "https")) {
-
 		gchar *new_uri, *mail_uri, *enc;
 		SoupURI *soup_uri;
 		GHashTable *query;
@@ -553,17 +363,18 @@ mail_display_resource_requested (WebKitWebView *web_view,
 		CamelStream *stream;
 		EMailImageLoadingPolicy image_policy;
 
-                /* Open Evolution's cache */
-		uri_md5 = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1);
+		/* Open Evolution's cache */
+		uri_md5 = g_compute_checksum_for_string (
+			G_CHECKSUM_MD5, uri, -1);
 		stream = camel_data_cache_get (
-				emd_global_http_cache, "http", uri_md5, NULL);
+			emd_global_http_cache, "http", uri_md5, NULL);
 		g_free (uri_md5);
 
-                /* If the URI is not cached and we are not allowed to load it
-                 * then redirect to invalid URI, so that webkit would display
-                 * a native placeholder for it. */
+		/* If the URI is not cached and we are not allowed to load it
+		 * then redirect to invalid URI, so that webkit would display
+		 * a native placeholder for it. */
 		image_policy = e_mail_formatter_get_image_loading_policy (
-					display->priv->formatter);
+			display->priv->formatter);
 		if (!stream && !display->priv->force_image_load &&
 		    (image_policy == E_MAIL_IMAGE_LOADING_POLICY_NEVER)) {
 			webkit_network_request_set_uri (request, "about:blank");
@@ -576,13 +387,12 @@ mail_display_resource_requested (WebKitWebView *web_view,
 			part_list->message_uid, NULL, NULL);
 
 		soup_uri = soup_uri_new (new_uri);
-		if (soup_uri->query) {
+		if (soup_uri->query)
 			query = soup_form_decode (soup_uri->query);
-		} else {
+		else
 			query = g_hash_table_new_full (
 				g_str_hash, g_str_equal,
 				g_free, g_free);
-		}
 		enc = soup_uri_encode (mail_uri, NULL);
 		g_hash_table_insert (query, g_strdup ("__evo-mail"), enc);
 
@@ -613,33 +423,34 @@ find_element_by_id (WebKitDOMDocument *document,
 {
 	WebKitDOMNodeList *frames;
 	WebKitDOMElement *element;
-	gulong i, length;
+	gulong ii, length;
 
 	if (!WEBKIT_DOM_IS_DOCUMENT (document))
 		return NULL;
 
-        /* Try to look up the element in this DOM document */
+	/* Try to look up the element in this DOM document */
 	element = webkit_dom_document_get_element_by_id (document, id);
-	if (element)
+	if (element != NULL)
 		return element;
 
-        /* If the element is not here then recursively scan all frames */
-	frames = webkit_dom_document_get_elements_by_tag_name (document, "iframe");
+	/* If the element is not here then recursively scan all frames */
+	frames = webkit_dom_document_get_elements_by_tag_name (
+		document, "iframe");
 	length = webkit_dom_node_list_get_length (frames);
-	for (i = 0; i < length; i++) {
+	for (ii = 0; ii < length; ii++) {
+		WebKitDOMHTMLIFrameElement *iframe;
+		WebKitDOMDocument *frame_doc;
+		WebKitDOMElement *element;
 
-		WebKitDOMHTMLIFrameElement *iframe =
-			WEBKIT_DOM_HTML_IFRAME_ELEMENT (
-				webkit_dom_node_list_item (frames, i));
+		iframe = WEBKIT_DOM_HTML_IFRAME_ELEMENT (
+			webkit_dom_node_list_item (frames, ii));
 
-		WebKitDOMDocument *frame_doc =
-			webkit_dom_html_iframe_element_get_content_document (iframe);
+		frame_doc = webkit_dom_html_iframe_element_get_content_document (iframe);
 
-		WebKitDOMElement *el =
-			find_element_by_id (frame_doc, id);
+		element = find_element_by_id (frame_doc, id);
 
-		if (el)
-			return el;
+		if (element != NULL)
+			return element;
 	}
 
 	return NULL;
@@ -657,7 +468,7 @@ mail_display_plugin_widget_resize (GtkWidget *widget,
 
 	parent_element = g_object_get_data (G_OBJECT (widget), "parent_element");
 
-	if (!parent_element || !WEBKIT_DOM_IS_ELEMENT (parent_element)) {
+	if (!WEBKIT_DOM_IS_ELEMENT (parent_element)) {
 		d (
 			printf ("%s: %s does not have (valid) parent element!\n",
 			G_STRFUNC, (gchar *) g_object_get_data (object, "uri")));
@@ -676,11 +487,11 @@ mail_display_plugin_widget_resize (GtkWidget *widget,
 	 * WebKit to go crazy when zooming. */
 	height = height * (1 / scale);
 
-        /* Int -> Str */
+	/* Int -> Str */
 	dim = g_strdup_printf ("%d", height);
 
-        /* Set height of the containment <object> to match height of the
-         * GtkWidget it contains */
+	/* Set height of the containment <object> to match height of the
+	 * GtkWidget it contains */
 	webkit_dom_html_object_element_set_height (
 		WEBKIT_DOM_HTML_OBJECT_ELEMENT (parent_element), dim);
 	g_free (dim);
@@ -690,7 +501,7 @@ static void
 mail_display_plugin_widget_realize_cb (GtkWidget *widget,
                                        gpointer user_data)
 {
-	WebKitDOMHTMLElement *el;
+	WebKitDOMHTMLElement *element;
 
 	if (GTK_IS_BOX (widget)) {
 		GList *children;
@@ -705,18 +516,18 @@ mail_display_plugin_widget_realize_cb (GtkWidget *widget,
 	}
 
 	/* First check if we are actually supposed to be visible */
-	el = g_object_get_data (G_OBJECT (widget), "parent_element");
-	if (!el || !WEBKIT_DOM_IS_HTML_ELEMENT (el)) {
+	element = g_object_get_data (G_OBJECT (widget), "parent_element");
+	if (element == NULL || !WEBKIT_DOM_IS_HTML_ELEMENT (element)) {
 		g_warning ("UAAAAA");
 	} else {
-		if (webkit_dom_html_element_get_hidden (el)) {
+		if (webkit_dom_html_element_get_hidden (element)) {
 			gtk_widget_hide (widget);
 			return;
 		}
 	}
 
-        /* Initial resize of the <object> element when the widget
-         * is displayed for the first time. */
+	/* Initial resize of the <object> element when the widget
+	 * is displayed for the first time. */
 	mail_display_plugin_widget_resize (widget, NULL, user_data);
 }
 
@@ -729,19 +540,19 @@ plugin_widget_set_parent_element (GtkWidget *widget,
 	WebKitDOMElement *element;
 
 	uri = g_object_get_data (G_OBJECT (widget), "uri");
-	if (!uri || !*uri)
+	if (uri == NULL || *uri == '\0')
 		return;
 
 	document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (display));
 	element = find_element_by_id (document, uri);
 
-	if (!element || !WEBKIT_DOM_IS_ELEMENT (element)) {
+	if (!WEBKIT_DOM_IS_ELEMENT (element)) {
 		g_warning ("Failed to find parent <object> for '%s' - no ID set?", uri);
 		return;
 	}
 
-        /* Assign the WebKitDOMElement to "parent_element" data of the GtkWidget
-         * and the GtkWidget to "widget" data of the DOM Element */
+	/* Assign the WebKitDOMElement to "parent_element" data of the GtkWidget
+	 * and the GtkWidget to "widget" data of the DOM Element */
 	g_object_set_data (G_OBJECT (widget), "parent_element", element);
 	g_object_set_data (G_OBJECT (element), "widget", widget);
 
@@ -757,24 +568,20 @@ toggle_widget_visibility (EAttachmentButton *button,
                           EMailDisplay *display,
                           WebKitDOMElement *element)
 {
+	GtkWidget *widget = NULL;
 	gchar *id;
-	GtkWidget *widget;
 
 	id = webkit_dom_html_element_get_id (WEBKIT_DOM_HTML_ELEMENT (element));
-	if (!id || !*id) {
+	if (id == NULL || *id == '\0')
 		return;
-	}
 
-	if (!display->priv->widgets) {
-		g_free (id);
-		return;
-	}
+	if (display->priv->widgets != NULL)
+		widget = g_hash_table_lookup (display->priv->widgets, id);
 
-	widget = g_hash_table_lookup (display->priv->widgets, id);
 	g_free (id);
-	if (!widget) {
+
+	if (widget == NULL)
 		return;
-	}
 
 	/* If the widget encapsulates EAttachmentBar then check, whether
 	 * the attachment bar is not empty. We want to display it only
@@ -787,16 +594,15 @@ toggle_widget_visibility (EAttachmentButton *button,
 			EAttachmentStore *store;
 
 			store = e_attachment_bar_get_store (
-					E_ATTACHMENT_BAR (children->data));
+				E_ATTACHMENT_BAR (children->data));
 
 			g_list_free (children);
 
 			/* Don't allow to display such attachment bar,
 			 * but always allow to hide it */
 			if (e_attachment_button_get_expanded (button) &&
-			    (e_attachment_store_get_num_attachments (store) == 0)) {
+			    (e_attachment_store_get_num_attachments (store) == 0))
 				return;
-			}
 		}
 	}
 
@@ -804,11 +610,10 @@ toggle_widget_visibility (EAttachmentButton *button,
 		WEBKIT_DOM_HTML_ELEMENT (element),
 		!e_attachment_button_get_expanded (button));
 
-	if (e_attachment_button_get_expanded (button)) {
+	if (e_attachment_button_get_expanded (button))
 		gtk_widget_show (widget);
-	} else {
+	else
 		gtk_widget_hide (widget);
-	}
 }
 
 /**
@@ -823,13 +628,13 @@ bind_iframe_content_visibility (WebKitDOMElement *iframe,
 {
 	WebKitDOMDocument *document;
 	WebKitDOMNodeList *nodes;
-	gulong i, length;
+	gulong ii, length;
 
-	if (!iframe || !WEBKIT_DOM_IS_HTML_IFRAME_ELEMENT (iframe))
+	if (!WEBKIT_DOM_IS_HTML_IFRAME_ELEMENT (iframe))
 		return;
 
 	document = webkit_dom_html_iframe_element_get_content_document (
-			WEBKIT_DOM_HTML_IFRAME_ELEMENT (iframe));
+		WEBKIT_DOM_HTML_IFRAME_ELEMENT (iframe));
 	if (!WEBKIT_DOM_IS_DOCUMENT (document))
 		return;
 
@@ -838,19 +643,20 @@ bind_iframe_content_visibility (WebKitDOMElement *iframe,
 
 	d ({
 		gchar *name = webkit_dom_html_iframe_element_get_name (
-				WEBKIT_DOM_HTML_IFRAME_ELEMENT (iframe));
+			WEBKIT_DOM_HTML_IFRAME_ELEMENT (iframe));
 		printf ("Found %ld objects within iframe %s\n", length, name);
 		g_free (name);
 	});
 
-        /* Iterate through all <object>s and bind visibility of their widget
-         * with expanded-state of related attachment button */
-	for (i = 0; i < length; i++) {
+	/* Iterate through all <object>s and bind visibility of their widget
+	 * with expanded-state of related attachment button */
+	for (ii = 0; ii < length; ii++) {
 
-		WebKitDOMNode *node = webkit_dom_node_list_item (nodes, i);
+		WebKitDOMNode *node = webkit_dom_node_list_item (nodes, ii);
 
 		/* Initial sync */
-		toggle_widget_visibility (button, display, WEBKIT_DOM_ELEMENT (node));
+		toggle_widget_visibility (
+			button, display, WEBKIT_DOM_ELEMENT (node));
 	}
 }
 
@@ -872,11 +678,13 @@ attachment_button_expanded (GObject *object,
 		(gchar *) g_object_get_data (object, "uri"),
 		(e_attachment_button_get_expanded (button) ? "expanded" : "collapsed")));
 
-	expanded = e_attachment_button_get_expanded (button) &&
-			gtk_widget_get_visible (GTK_WIDGET (button));
+	expanded =
+		e_attachment_button_get_expanded (button) &&
+		gtk_widget_get_visible (GTK_WIDGET (button));
 
 	document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (display));
-	element = find_element_by_id (document, g_object_get_data (object, "attachment_id"));
+	element = find_element_by_id (
+		document, g_object_get_data (object, "attachment_id"));
 
 	if (!WEBKIT_DOM_IS_ELEMENT (element)) {
 		d (
@@ -885,12 +693,15 @@ attachment_button_expanded (GObject *object,
 		return;
 	}
 
-        /* Show or hide the DIV which contains the attachment (iframe, image...) */
+	/* Show or hide the DIV which contains
+	 * the attachment (iframe, image...). */
 	css = webkit_dom_element_get_style (element);
 	webkit_dom_css_style_declaration_set_property (
 		css, "display", expanded ? "block" : "none", "", NULL);
 
-	id = g_strconcat (g_object_get_data (object, "attachment_id"), ".iframe", NULL);
+	id = g_strconcat (
+		g_object_get_data (object, "attachment_id"),
+		".iframe", NULL);
 	element = find_element_by_id (document, id);
 	g_free (id);
 
@@ -945,55 +756,55 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
 	gchar *part_id, *type, *object_uri;
 
 	part_id = g_hash_table_lookup (param, "data");
-	if (!part_id || !g_str_has_prefix (uri, "mail://"))
+	if (part_id == NULL || !g_str_has_prefix (uri, "mail://"))
 		return NULL;
 
 	type = g_hash_table_lookup (param, "type");
-	if (!type)
+	if (type == NULL)
 		return NULL;
 
 	display = E_MAIL_DISPLAY (web_view);
 
-	if ((widget = g_hash_table_lookup (display->priv->widgets, part_id)) != NULL) {
+	widget = g_hash_table_lookup (display->priv->widgets, part_id);
+	if (widget != NULL) {
 		d (printf ("Handeled %s widget request from cache\n", part_id));
 		return widget;
 	}
 
-	/* Findt EMailPart representing requested widget */
+	/* Find the EMailPart representing the requested widget. */
 	part = e_mail_part_list_find_part (display->priv->part_list, part_id);
-	if (!part) {
+	if (part == NULL)
 		return NULL;
-	}
 
 	reg = e_mail_formatter_get_extension_registry (display->priv->formatter);
 	extensions = e_mail_extension_registry_get_for_mime_type (reg, type);
-	if (!extensions)
+	if (extensions == NULL)
 		return NULL;
 
 	extension = NULL;
 	for (iter = g_queue_peek_head_link (extensions); iter; iter = iter->next) {
 
 		extension = iter->data;
-		if (!extension)
+		if (extension == NULL)
 			continue;
 
 		if (e_mail_formatter_extension_has_widget (extension))
 			break;
 	}
 
-	if (!extension)
+	if (extension == NULL)
 		return NULL;
 
 	/* Get the widget from formatter */
 	widget = e_mail_formatter_extension_get_widget (
-			extension, display->priv->part_list, part, param);
+		extension, display->priv->part_list, part, param);
 	d (
 		printf ("Created widget %s (%p) for part %s\n",
 			G_OBJECT_TYPE_NAME (widget), widget, part_id));
 
-	/* Should not happen! WebKit will display an ugly 'Plug-in not available'
-	 * placeholder instead of hiding the <object> element */
-	if (!widget)
+	/* Should not happen! WebKit will display an ugly 'Plug-in not
+	 * available' placeholder instead of hiding the <object> element. */
+	if (widget == NULL)
 		return NULL;
 
 	/* Attachment button has URI different then the actual PURI because
@@ -1007,10 +818,12 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
 		else
 			attachment_part_id = part_id;
 
-		object_uri = g_strconcat (attachment_part_id, ".attachment_button", NULL);
+		object_uri = g_strconcat (
+			attachment_part_id, ".attachment_button", NULL);
 		g_object_set_data_full (
 			G_OBJECT (widget), "attachment_id",
-			g_strdup (attachment_part_id), (GDestroyNotify) g_free);
+			g_strdup (attachment_part_id),
+			(GDestroyNotify) g_free);
 	} else {
 		object_uri = g_strdup (part_id);
 	}
@@ -1020,13 +833,13 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
 		G_OBJECT (widget), "uri",
 		object_uri, (GDestroyNotify) g_free);
 
-	/* Set pointer to the <object> element as GObject data "parent_element"
-	 * and set pointer to the widget as GObject data "widget" to the <object>
-	 * element */
+	/* Set pointer to the <object> element as GObject data
+	 * "parent_element" and set pointer to the widget as GObject
+	 * data "widget" to the <object> element. */
 	plugin_widget_set_parent_element (widget, display);
 
-        /* Resizing a GtkWidget requires changing size of parent
-         * <object> HTML element in DOM. */
+	/* Resizing a GtkWidget requires changing size of parent
+	 * <object> HTML element in DOM. */
 	g_signal_connect (
 		widget, "realize",
 		G_CALLBACK (mail_display_plugin_widget_realize_cb), display);
@@ -1038,25 +851,28 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
 		GtkWidget *box = NULL;
 		EAttachmentStore *store;
 
-                /* Only when packed in box (grid does not work),
+		/* Only when packed in box (grid does not work),
 		 * EAttachmentBar reports correct height */
 		box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
 		gtk_box_pack_start (GTK_BOX (box), widget, TRUE, TRUE, 0);
 
-                /* When EAttachmentBar is expanded/collapsed it does not
-                 * emit size-allocate signal despite it changes it's height. */
+		/* When EAttachmentBar is expanded/collapsed it does not
+		 * emit size-allocate signal despite it changes it's height. */
 		g_signal_connect (
 			widget, "notify::expanded",
-			G_CALLBACK (mail_display_plugin_widget_resize), display);
+			G_CALLBACK (mail_display_plugin_widget_resize),
+			display);
 		g_signal_connect (
 			widget, "notify::active-view",
-			G_CALLBACK (mail_display_plugin_widget_resize), display);
+			G_CALLBACK (mail_display_plugin_widget_resize),
+			display);
 
 		/* Always hide an attachment bar without attachments */
 		store = e_attachment_bar_get_store (E_ATTACHMENT_BAR (widget));
 		g_signal_connect (
 			store, "notify::num-attachments",
-			G_CALLBACK (mail_display_attachment_count_changed), box);
+			G_CALLBACK (mail_display_attachment_count_changed),
+			box);
 
 		gtk_widget_show (widget);
 		gtk_widget_show (box);
@@ -1068,9 +884,9 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
 
 	} else if (E_IS_ATTACHMENT_BUTTON (widget)) {
 
-                /* Bind visibility of DOM element containing related
-                 * attachment with 'expanded' property of this
-                 * attachment button. */
+		/* Bind visibility of DOM element containing related
+		 * attachment with 'expanded' property of this
+		 * attachment button. */
 		WebKitDOMElement *attachment;
 		WebKitDOMDocument *document;
 		EMailPartAttachment *empa = (EMailPartAttachment *) part;
@@ -1081,13 +897,14 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
 		else
 			attachment_part_id = part_id;
 
-		/* Find attachment-wrapper div which contains the content of the
-		 * attachment (iframe) */
-		document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (display));
+		/* Find attachment-wrapper div which contains
+		 * the content of the attachment (iframe). */
+		document = webkit_web_view_get_dom_document (
+			WEBKIT_WEB_VIEW (display));
 		attachment = find_element_by_id (document, attachment_part_id);
 
 		/* None found? Attachment cannot be expanded */
-		if (!attachment) {
+		if (attachment == NULL) {
 			e_attachment_button_set_expandable (
 				E_ATTACHMENT_BUTTON (widget), FALSE);
 		} else {
@@ -1097,17 +914,19 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
 				E_ATTACHMENT_BUTTON (widget), TRUE);
 
 			/* Show/hide the attachment when the EAttachmentButton
- *                       * is expanded/collapsed or shown/hidden */
+			 * is expanded/collapsed or shown/hidden. */
 			g_signal_connect (
 				widget, "notify::expanded",
-				G_CALLBACK (attachment_button_expanded), display);
+				G_CALLBACK (attachment_button_expanded),
+				display);
 			g_signal_connect (
 				widget, "notify::visible",
-				G_CALLBACK (attachment_button_expanded), display);
+				G_CALLBACK (attachment_button_expanded),
+				display);
 
-                        /* Automatically expand attachments that have inline
-			 * disposition or the EMailParts have specific force_inline
-			 * flag set */
+			/* Automatically expand attachments that have inline
+			 * disposition or the EMailParts have specific
+			 * force_inline flag set. */
 			disposition =
 				camel_mime_part_get_content_disposition (part->part);
 			if (!part->force_collapse &&
@@ -1151,19 +970,19 @@ toggle_headers_visibility (WebKitDOMElement *button,
 
 	short_headers = webkit_dom_document_get_element_by_id (
 		document, "__evo-short-headers");
-	if (!short_headers)
+	if (short_headers == NULL)
 		return;
 
 	css_short = webkit_dom_element_get_style (short_headers);
 
 	full_headers = webkit_dom_document_get_element_by_id (
 		document, "__evo-full-headers");
-	if (!full_headers)
+	if (full_headers == NULL)
 		return;
 
 	css_full = webkit_dom_element_get_style (full_headers);
 	css_value = webkit_dom_css_style_declaration_get_property_value (
-			css_full, "display");
+		css_full, "display");
 	expanded = (g_strcmp0 (css_value, "block") == 0);
 	g_free (css_value);
 
@@ -1182,7 +1001,8 @@ toggle_headers_visibility (WebKitDOMElement *button,
 	webkit_dom_html_image_element_set_src (
 		WEBKIT_DOM_HTML_IMAGE_ELEMENT (button), path);
 
-	e_mail_display_set_headers_collapsed (E_MAIL_DISPLAY (web_view), expanded);
+	e_mail_display_set_headers_collapsed (
+		E_MAIL_DISPLAY (web_view), expanded);
 
 	d (printf ("Headers %s!\n", expanded ? "collapsed" : "expanded"));
 }
@@ -1201,13 +1021,14 @@ toggle_address_visibility (WebKitDOMElement *button,
 	const gchar *path;
 	gboolean expanded;
 
-	document = webkit_dom_node_get_owner_document (WEBKIT_DOM_NODE (button));
+	document = webkit_dom_node_get_owner_document (
+		WEBKIT_DOM_NODE (button));
 
 	id = g_strconcat ("__evo-moreaddr-", address, NULL);
 	full_addr = webkit_dom_document_get_element_by_id (document, id);
 	g_free (id);
 
-	if (!full_addr)
+	if (full_addr == NULL)
 		return;
 
 	css_full = webkit_dom_element_get_style (full_addr);
@@ -1216,7 +1037,7 @@ toggle_address_visibility (WebKitDOMElement *button,
 	ellipsis = webkit_dom_document_get_element_by_id (document, id);
 	g_free (id);
 
-	if (!ellipsis)
+	if (ellipsis == NULL)
 		return;
 
 	css_ellipsis = webkit_dom_element_get_style (ellipsis);
@@ -1230,18 +1051,17 @@ toggle_address_visibility (WebKitDOMElement *button,
 	webkit_dom_css_style_declaration_set_property (
 		css_ellipsis, "display", (expanded ? "inline" : "none"), "", NULL);
 
-	if (expanded) {
+	if (expanded)
 		path = "evo-file://" EVOLUTION_IMAGESDIR "/plus.png";
-	} else {
+	else
 		path = "evo-file://" EVOLUTION_IMAGESDIR "/minus.png";
-	}
 
 	if (!WEBKIT_DOM_IS_HTML_IMAGE_ELEMENT (button)) {
 		id = g_strconcat ("__evo-moreaddr-img-", address, NULL);
 		button = webkit_dom_document_get_element_by_id (document, id);
 		g_free (id);
 
-		if (!button)
+		if (button == NULL)
 			return;
 	}
 
@@ -1260,7 +1080,7 @@ setup_DOM_bindings (GObject *object,
 	WebKitLoadStatus load_status;
 	WebKitDOMDocument *document;
 	WebKitDOMElement *button;
-	gint i = 0;
+	gint ii = 0;
 
 	frame = WEBKIT_WEB_FRAME (object);
 	load_status = webkit_web_frame_get_load_status (frame);
@@ -1271,38 +1091,40 @@ setup_DOM_bindings (GObject *object,
 	document = webkit_web_view_get_dom_document (web_view);
 
 	button = webkit_dom_document_get_element_by_id (
-			document, "__evo-collapse-headers-img");
-	if (button) {
+		document, "__evo-collapse-headers-img");
+	if (button != NULL)
 		webkit_dom_event_target_add_event_listener (
 			WEBKIT_DOM_EVENT_TARGET (button), "click",
-			G_CALLBACK (toggle_headers_visibility), FALSE, web_view);
-	}
+			G_CALLBACK (toggle_headers_visibility),
+			FALSE, web_view);
 
-	for (i = 0; i < 3; i++) {
+	for (ii = 0; ii < 3; ii++) {
 		gchar *id;
-		id = g_strconcat ("__evo-moreaddr-img-", addresses[i], NULL);
+
+		id = g_strconcat ("__evo-moreaddr-img-", addresses[ii], NULL);
 		button = webkit_dom_document_get_element_by_id (document, id);
 		g_free (id);
 
-		if (!button)
+		if (button == NULL)
 			continue;
 
 		webkit_dom_event_target_add_event_listener (
 			WEBKIT_DOM_EVENT_TARGET (button), "click",
 			G_CALLBACK (toggle_address_visibility), FALSE,
-			(gpointer) addresses[i]);
+			(gpointer) addresses[ii]);
 
-		id = g_strconcat ("__evo-moreaddr-ellipsis-", addresses[i], NULL);
+		id = g_strconcat (
+			"__evo-moreaddr-ellipsis-", addresses[ii], NULL);
 		button = webkit_dom_document_get_element_by_id (document, id);
 		g_free (id);
 
-		if (!button)
+		if (button == NULL)
 			continue;
 
 		webkit_dom_event_target_add_event_listener (
 			WEBKIT_DOM_EVENT_TARGET (button), "click",
 			G_CALLBACK (toggle_address_visibility), FALSE,
-			(gpointer) addresses[i]);
+			(gpointer) addresses[ii]);
 	}
 }
 
@@ -1331,13 +1153,14 @@ mail_parts_bind_dom (GObject *object,
 		return;
 
 	frame_name = webkit_web_frame_get_name (frame);
-	if (!frame_name || !*frame_name)
+	if (frame_name == NULL || *frame_name == '\0')
 		frame_name = ".message.headers";
 
 	for (iter = display->priv->part_list->list; iter; iter = iter->next) {
 
 		EMailPart *part = iter->data;
-		if (!part)
+
+		if (part == NULL)
 			continue;
 
 		if (g_strcmp0 (part->id, frame_name) == 0)
@@ -1345,23 +1168,26 @@ mail_parts_bind_dom (GObject *object,
 	}
 
 	document = webkit_web_view_get_dom_document (web_view);
-	while (iter) {
-
+	while (iter != NULL) {
 		EMailPart *part = iter->data;
-		if (!part) {
+
+		if (part == NULL) {
 			iter = iter->next;
 			continue;
 		}
 
-		/* Iterate only the parts rendered in the frame and all it's subparts */
+		/* Iterate only the parts rendered in
+		 * the frame and all it's subparts. */
 		if (!g_str_has_prefix (part->id, frame_name))
 			break;
 
-		if (part->bind_func) {
-			WebKitDOMElement *el = find_element_by_id (document, part->id);
-			if (el) {
+		if (part->bind_func != NULL) {
+			WebKitDOMElement *element;
+
+			element = find_element_by_id (document, part->id);
+			if (element != NULL) {
 				d (printf ("/*bind_func*/ for %s\n", part->id));
-				part->bind_func (part, el);
+				part->bind_func (part, element);
 			}
 		}
 
@@ -1389,15 +1215,209 @@ mail_display_uri_changed (EMailDisplay *display,
 {
 	d (printf ("EMailDisplay URI changed, recreating widgets hashtable\n"));
 
-	if (display->priv->widgets) {
-		g_hash_table_foreach (display->priv->widgets, mail_display_plugin_widget_disconnect, display);
+	if (display->priv->widgets != NULL) {
+		g_hash_table_foreach (
+			display->priv->widgets,
+			mail_display_plugin_widget_disconnect, display);
 		g_hash_table_destroy (display->priv->widgets);
 	}
 
 	display->priv->widgets = g_hash_table_new_full (
-					g_str_hash, g_str_equal,
-					(GDestroyNotify) g_free,
-					(GDestroyNotify) g_object_unref);
+		(GHashFunc) g_str_hash,
+		(GEqualFunc) g_str_equal,
+		(GDestroyNotify) g_free,
+		(GDestroyNotify) g_object_unref);
+}
+
+static void
+mail_display_set_property (GObject *object,
+                           guint property_id,
+                           const GValue *value,
+                           GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_PART_LIST:
+			e_mail_display_set_parts_list (
+				E_MAIL_DISPLAY (object),
+				g_value_get_pointer (value));
+			return;
+		case PROP_MODE:
+			e_mail_display_set_mode (
+				E_MAIL_DISPLAY (object),
+				g_value_get_int (value));
+			return;
+		case PROP_HEADERS_COLLAPSABLE:
+			e_mail_display_set_headers_collapsable (
+				E_MAIL_DISPLAY (object),
+				g_value_get_boolean (value));
+			return;
+		case PROP_HEADERS_COLLAPSED:
+			e_mail_display_set_headers_collapsed (
+				E_MAIL_DISPLAY (object),
+				g_value_get_boolean (value));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mail_display_get_property (GObject *object,
+                           guint property_id,
+                           GValue *value,
+                           GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_PART_LIST:
+			g_value_set_pointer (
+				value, e_mail_display_get_parts_list (
+				E_MAIL_DISPLAY (object)));
+			return;
+		case PROP_MODE:
+			g_value_set_int (
+				value, e_mail_display_get_mode (
+				E_MAIL_DISPLAY (object)));
+			return;
+		case PROP_HEADERS_COLLAPSABLE:
+			g_value_set_boolean (
+				value, e_mail_display_get_headers_collapsable (
+				E_MAIL_DISPLAY (object)));
+			return;
+		case PROP_HEADERS_COLLAPSED:
+			g_value_set_boolean (
+				value, e_mail_display_get_headers_collapsed (
+				E_MAIL_DISPLAY (object)));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mail_display_dispose (GObject *object)
+{
+	EMailDisplayPrivate *priv;
+
+	priv = E_MAIL_DISPLAY_GET_PRIVATE (object);
+
+	if (priv->scheduled_reload > 0) {
+		g_source_remove (priv->scheduled_reload);
+		priv->scheduled_reload = 0;
+	}
+
+	if (priv->widgets != NULL) {
+		g_hash_table_foreach (
+			priv->widgets,
+			mail_display_plugin_widget_disconnect, object);
+		g_hash_table_destroy (priv->widgets);
+		priv->widgets = NULL;
+	}
+
+	g_clear_object (&priv->part_list);
+	g_clear_object (&priv->settings);
+	g_clear_object (&priv->formatter);
+
+	/* Chain up to parent's dispose() method. */
+	G_OBJECT_CLASS (e_mail_display_parent_class)->dispose (object);
+}
+
+static void
+mail_display_constructed (GObject *object)
+{
+	e_extensible_load_extensions (E_EXTENSIBLE (object));
+
+	/* Chain up to parent's constructed() method. */
+	G_OBJECT_CLASS (e_mail_display_parent_class)->constructed (object);
+}
+
+static void
+mail_display_realize (GtkWidget *widget)
+{
+	/* Chain up to parent's realize() method. */
+	GTK_WIDGET_CLASS (e_mail_display_parent_class)->realize (widget);
+
+	mail_display_update_formatter_colors (E_MAIL_DISPLAY (widget));
+}
+
+static void
+mail_display_style_set (GtkWidget *widget,
+                        GtkStyle *previous_style)
+{
+	EMailDisplay *display = E_MAIL_DISPLAY (widget);
+
+	mail_display_update_formatter_colors (display);
+
+	/* Chain up to parent's style_set() method. */
+	GTK_WIDGET_CLASS (e_mail_display_parent_class)->
+		style_set (widget, previous_style);
+}
+
+static gboolean
+mail_display_button_press_event (GtkWidget *widget,
+                                 GdkEventButton *event)
+{
+	WebKitHitTestResult *hit_test;
+	WebKitHitTestResultContext context;
+	gchar *image_src;
+	gboolean visible;
+	GtkAction *action;
+	GList *extensions, *iter;
+	EWebView *web_view = E_WEB_VIEW (widget);
+
+	if (event->button != 3)
+		goto chainup;
+
+	hit_test = webkit_web_view_get_hit_test_result (
+		WEBKIT_WEB_VIEW (web_view), event);
+
+	g_object_get (
+		G_OBJECT (hit_test),
+		"context", &context,
+		"image-uri", &image_src,
+		NULL);
+
+	if ((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE)) {
+		visible = image_src && g_str_has_prefix (image_src, "cid:");
+		if (!visible && image_src) {
+			CamelStream *image_stream;
+
+			image_stream = camel_data_cache_get (
+				emd_global_http_cache, "http",
+				image_src, NULL);
+
+			visible = (image_stream != NULL);
+
+			if (image_stream != NULL)
+				g_object_unref (image_stream);
+		}
+
+		if (image_src != NULL)
+			g_free (image_src);
+
+		action = e_web_view_get_action (web_view, "image-save");
+		if (action != NULL)
+			gtk_action_set_visible (action, visible);
+	}
+
+	extensions = e_extensible_list_extensions (
+		E_EXTENSIBLE (web_view), E_TYPE_EXTENSION);
+	for (iter = extensions; iter; iter = g_list_next (iter)) {
+		EExtension *extension = iter->data;
+
+		if (!E_IS_MAIL_DISPLAY_POPUP_EXTENSION (extension))
+			continue;
+
+		e_mail_display_popup_extension_update_actions (
+			E_MAIL_DISPLAY_POPUP_EXTENSION (extension), hit_test);
+	}
+	g_list_free (extensions);
+
+	g_object_unref (hit_test);
+
+chainup:
+	/* Chain up to parent's button_press_event() method. */
+	return GTK_WIDGET_CLASS (e_mail_display_parent_class)->
+		button_press_event (widget, event);
 }
 
 static void
@@ -1407,9 +1427,11 @@ mail_display_set_fonts (EWebView *web_view,
 {
 	EMailDisplay *display = E_MAIL_DISPLAY (web_view);
 	gboolean use_custom_font;
-	gchar *monospace_font, *variable_font;
+	gchar *monospace_font;
+	gchar *variable_font;
 
-	use_custom_font = g_settings_get_boolean (display->priv->settings, "use-custom-font");
+	use_custom_font = g_settings_get_boolean (
+		display->priv->settings, "use-custom-font");
 	if (!use_custom_font) {
 		*monospace = NULL;
 		*variable = NULL;
@@ -1417,19 +1439,17 @@ mail_display_set_fonts (EWebView *web_view,
 	}
 
 	monospace_font = g_settings_get_string (
-				display->priv->settings,
-				"monospace-font");
+		display->priv->settings, "monospace-font");
 	variable_font = g_settings_get_string (
-				display->priv->settings,
-				"variable-width-font");
+		display->priv->settings, "variable-width-font");
 
-	*monospace = monospace_font ? pango_font_description_from_string (monospace_font) : NULL;
-	*variable = variable_font ? pango_font_description_from_string (variable_font) : NULL;
+	*monospace = (monospace_font != NULL) ?
+		pango_font_description_from_string (monospace_font) : NULL;
+	*variable = (variable_font != NULL) ?
+		pango_font_description_from_string (variable_font) : NULL;
 
-	if (monospace_font)
-		g_free (monospace_font);
-	if (variable_font)
-		g_free (variable_font);
+	g_free (monospace_font);
+	g_free (variable_font);
 }
 
 static void
@@ -1447,14 +1467,14 @@ e_mail_display_class_init (EMailDisplayClass *class)
 	object_class->get_property = mail_display_get_property;
 	object_class->dispose = mail_display_dispose;
 
-	web_view_class = E_WEB_VIEW_CLASS (class);
-	web_view_class->set_fonts = mail_display_set_fonts;
-
 	widget_class = GTK_WIDGET_CLASS (class);
 	widget_class->realize = mail_display_realize;
 	widget_class->style_set = mail_display_style_set;
 	widget_class->button_press_event = mail_display_button_press_event;
 
+	web_view_class = E_WEB_VIEW_CLASS (class);
+	web_view_class->set_fonts = mail_display_set_fonts;
+
 	g_object_class_install_property (
 		object_class,
 		PROP_PART_LIST,
@@ -1462,7 +1482,8 @@ e_mail_display_class_init (EMailDisplayClass *class)
 			"part-list",
 			"Part List",
 			NULL,
-			G_PARAM_READWRITE));
+			G_PARAM_READWRITE |
+			G_PARAM_STATIC_STRINGS));
 
 	g_object_class_install_property (
 		object_class,
@@ -1474,7 +1495,8 @@ e_mail_display_class_init (EMailDisplayClass *class)
 			E_MAIL_FORMATTER_MODE_INVALID,
 			G_MAXINT,
 			E_MAIL_FORMATTER_MODE_NORMAL,
-			G_PARAM_READWRITE));
+			G_PARAM_READWRITE |
+			G_PARAM_STATIC_STRINGS));
 
 	g_object_class_install_property (
 		object_class,
@@ -1484,7 +1506,8 @@ e_mail_display_class_init (EMailDisplayClass *class)
 			"Headers Collapsable",
 			NULL,
 			FALSE,
-			G_PARAM_READWRITE));
+			G_PARAM_READWRITE |
+			G_PARAM_STATIC_STRINGS));
 
 	g_object_class_install_property (
 		object_class,
@@ -1494,7 +1517,8 @@ e_mail_display_class_init (EMailDisplayClass *class)
 			"Headers Collapsed",
 			NULL,
 			FALSE,
-			G_PARAM_READWRITE));
+			G_PARAM_READWRITE |
+			G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -1562,35 +1586,44 @@ e_mail_display_init (EMailDisplay *display)
 
 	actions = e_web_view_get_action_group (E_WEB_VIEW (display), "mailto");
 	gtk_action_group_add_actions (
-		actions, mailto_entries, G_N_ELEMENTS (mailto_entries), display);
+		actions, mailto_entries,
+		G_N_ELEMENTS (mailto_entries), display);
 	ui_manager = e_web_view_get_ui_manager (E_WEB_VIEW (display));
 	gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, NULL);
 
 	actions = e_web_view_get_action_group (E_WEB_VIEW (display), "image");
 	gtk_action_group_add_actions (
-		actions, image_entries, G_N_ELEMENTS (image_entries), display);
+		actions, image_entries,
+		G_N_ELEMENTS (image_entries), display);
 	gtk_ui_manager_add_ui_from_string (ui_manager, image_ui, -1, NULL);
 
-	e_web_view_install_request_handler (E_WEB_VIEW (display), E_TYPE_MAIL_REQUEST);
-	e_web_view_install_request_handler (E_WEB_VIEW (display), E_TYPE_HTTP_REQUEST);
-	e_web_view_install_request_handler (E_WEB_VIEW (display), E_TYPE_FILE_REQUEST);
-	e_web_view_install_request_handler (E_WEB_VIEW (display), E_TYPE_STOCK_REQUEST);
+	e_web_view_install_request_handler (
+		E_WEB_VIEW (display), E_TYPE_MAIL_REQUEST);
+	e_web_view_install_request_handler (
+		E_WEB_VIEW (display), E_TYPE_HTTP_REQUEST);
+	e_web_view_install_request_handler (
+		E_WEB_VIEW (display), E_TYPE_FILE_REQUEST);
+	e_web_view_install_request_handler (
+		E_WEB_VIEW (display), E_TYPE_STOCK_REQUEST);
 
-	if (!emd_global_http_cache) {
+	if (emd_global_http_cache == NULL) {
 		user_cache_dir = e_get_user_cache_dir ();
 		emd_global_http_cache = camel_data_cache_new (user_cache_dir, NULL);
 
 		/* cache expiry - 2 hour access, 1 day max */
-		camel_data_cache_set_expire_age (emd_global_http_cache, 24 * 60 * 60);
-		camel_data_cache_set_expire_access (emd_global_http_cache, 2 * 60 * 60);
+		camel_data_cache_set_expire_age (
+			emd_global_http_cache, 24 * 60 * 60);
+		camel_data_cache_set_expire_access (
+			emd_global_http_cache, 2 * 60 * 60);
 	}
 }
 
 EMailFormatterMode
 e_mail_display_get_mode (EMailDisplay *display)
 {
-	g_return_val_if_fail (E_IS_MAIL_DISPLAY (display),
-			E_MAIL_FORMATTER_MODE_NORMAL);
+	g_return_val_if_fail (
+		E_IS_MAIL_DISPLAY (display),
+		E_MAIL_FORMATTER_MODE_NORMAL);
 
 	return display->priv->mode;
 }
@@ -1600,6 +1633,7 @@ e_mail_display_set_mode (EMailDisplay *display,
                          EMailFormatterMode mode)
 {
 	EMailFormatter *formatter;
+
 	g_return_if_fail (E_IS_MAIL_DISPLAY (display));
 
 	if (display->priv->mode == mode)
@@ -1607,11 +1641,10 @@ e_mail_display_set_mode (EMailDisplay *display,
 
 	display->priv->mode = mode;
 
-	if (display->priv->mode == E_MAIL_FORMATTER_MODE_PRINTING) {
+	if (display->priv->mode == E_MAIL_FORMATTER_MODE_PRINTING)
 		formatter = e_mail_formatter_print_new ();
-	} else {
+	else
 		formatter = e_mail_formatter_new ();
-	}
 
 	g_clear_object (&display->priv->formatter);
 	display->priv->formatter = formatter;
@@ -1619,7 +1652,8 @@ e_mail_display_set_mode (EMailDisplay *display,
 
 	g_signal_connect (
 		formatter, "notify::image-loading-policy",
-		G_CALLBACK (formatter_image_loading_policy_changed_cb), display);
+		G_CALLBACK (formatter_image_loading_policy_changed_cb),
+		display);
 
 	g_object_connect (
 		formatter,
@@ -1675,12 +1709,12 @@ e_mail_display_set_parts_list (EMailDisplay *display,
 	if (display->priv->part_list == part_list)
 		return;
 
-	if (part_list) {
+	if (part_list != NULL) {
 		g_return_if_fail (E_IS_MAIL_PART_LIST (part_list));
 		g_object_ref (part_list);
 	}
 
-	if (display->priv->part_list)
+	if (display->priv->part_list != NULL)
 		g_object_unref (display->priv->part_list);
 
 	display->priv->part_list = part_list;
@@ -1702,7 +1736,7 @@ e_mail_display_set_headers_collapsable (EMailDisplay *display,
 {
 	g_return_if_fail (E_IS_MAIL_DISPLAY (display));
 
-	if ((display->priv->headers_collapsable ? 1 : 0) == (collapsable ? 1 : 0))
+	if (display->priv->headers_collapsable == collapsable)
 		return;
 
 	display->priv->headers_collapsable = collapsable;
@@ -1728,7 +1762,7 @@ e_mail_display_set_headers_collapsed (EMailDisplay *display,
 {
 	g_return_if_fail (E_IS_MAIL_DISPLAY (display));
 
-	if ((display->priv->headers_collapsed ? 1 : 0) == (collapsed ? 1 : 0))
+	if (display->priv->headers_collapsed == collapsed)
 		return;
 
 	display->priv->headers_collapsed = collapsed;
@@ -1740,15 +1774,15 @@ void
 e_mail_display_load (EMailDisplay *display,
                      const gchar *msg_uri)
 {
-	gchar *uri;
 	EMailPartList *part_list;
+	gchar *uri;
 
 	g_return_if_fail (E_IS_MAIL_DISPLAY (display));
 
 	display->priv->force_image_load = FALSE;
 
 	part_list = display->priv->part_list;
-	if (!part_list) {
+	if (part_list == NULL) {
 		e_web_view_clear (E_WEB_VIEW (display));
 		return;
 	}
@@ -1756,8 +1790,10 @@ e_mail_display_load (EMailDisplay *display,
 	uri = e_mail_part_build_uri (
 		part_list->folder, part_list->message_uid,
 		"mode", G_TYPE_INT, display->priv->mode,
-		"headers_collapsable", G_TYPE_BOOLEAN, display->priv->headers_collapsable,
-		"headers_collapsed", G_TYPE_BOOLEAN, display->priv->headers_collapsed,
+		"headers_collapsable", G_TYPE_BOOLEAN,
+		display->priv->headers_collapsable,
+		"headers_collapsed", G_TYPE_BOOLEAN,
+		display->priv->headers_collapsed,
 		NULL);
 
 	e_web_view_load_uri (E_WEB_VIEW (display), uri);
@@ -1779,7 +1815,7 @@ do_reload_display (EMailDisplay *display)
 
 	display->priv->scheduled_reload = 0;
 
-	if (!uri || !*uri)
+	if (uri == NULL || *uri == '\0')
 		return FALSE;
 
 	if (strstr (uri, "?") == NULL) {
@@ -1794,9 +1830,12 @@ do_reload_display (EMailDisplay *display)
 	collapsed = g_strdup_printf ("%d", display->priv->headers_collapsed);
 
 	table = soup_form_decode (soup_uri->query);
-	g_hash_table_replace (table, g_strdup ("mode"), mode);
-	g_hash_table_replace (table, g_strdup ("headers_collapsable"), collapsable);
-	g_hash_table_replace (table, g_strdup ("headers_collapsed"), collapsed);
+	g_hash_table_replace (
+		table, g_strdup ("mode"), mode);
+	g_hash_table_replace (
+		table, g_strdup ("headers_collapsable"), collapsable);
+	g_hash_table_replace (
+		table, g_strdup ("headers_collapsed"), collapsed);
 
 	query = soup_form_encode_hash (table);
 
@@ -1879,6 +1918,7 @@ e_mail_display_set_status (EMailDisplay *display,
 		status);
 
 	e_web_view_load_string (E_WEB_VIEW (display), str);
+
 	g_free (str);
 }
 
@@ -1899,13 +1939,12 @@ mail_display_get_frame_selection_text (WebKitDOMElement *iframe)
 		WebKitDOMRange *range;
 
 		range = webkit_dom_dom_selection_get_range_at (selection, 0, NULL);
-		if (range) {
+		if (range != NULL)
 			return webkit_dom_range_to_string (range, NULL);
-		}
 	}
 
 	frames = webkit_dom_document_get_elements_by_tag_name (
-			document, "IFRAME");
+		document, "IFRAME");
 	length = webkit_dom_node_list_get_length (frames);
 	for (ii = 0; ii < length; ii++) {
 		WebKitDOMNode *node;
@@ -1914,11 +1953,10 @@ mail_display_get_frame_selection_text (WebKitDOMElement *iframe)
 		node = webkit_dom_node_list_item (frames, ii);
 
 		text = mail_display_get_frame_selection_text (
-				WEBKIT_DOM_ELEMENT (node));
+			WEBKIT_DOM_ELEMENT (node));
 
-		if (text) {
+		if (text != NULL)
 			return text;
-		}
 	}
 
 	return NULL;
@@ -1947,11 +1985,10 @@ e_mail_display_get_selection_plain_text (EMailDisplay *display)
 		node = webkit_dom_node_list_item (frames, ii);
 
 		text = mail_display_get_frame_selection_text (
-				WEBKIT_DOM_ELEMENT (node));
+			WEBKIT_DOM_ELEMENT (node));
 
-		if (text) {
+		if (text != NULL)
 			return text;
-		}
 	}
 
 	return NULL;
@@ -1981,8 +2018,8 @@ e_mail_display_set_charset (EMailDisplay *display,
 {
 	g_return_if_fail (E_IS_MAIL_DISPLAY (display));
 
-	if (display->priv->formatter) {
+	if (display->priv->formatter != NULL)
 		e_mail_formatter_set_charset (
 			display->priv->formatter, charset);
-	}
 }
+



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]