[balsa/mime-widgets] mime-widget: subclass GtkBox instead of GObject
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/mime-widgets] mime-widget: subclass GtkBox instead of GObject
- Date: Sun, 15 Sep 2019 01:22:59 +0000 (UTC)
commit 83bcd1988af3e2ebb7338d036c32f5fe358c0c97
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Sat Sep 14 21:21:06 2019 -0400
mime-widget: subclass GtkBox instead of GObject
This makes BalsaMimeWidget inherit from GtkBox, so it is
actually a widget. A subclass that used to create a vertical
GtkBox can use the BalsaMimeWidget itself. Other subclasses can
add their custom widget to the BalsaMimeWidget.
* src/balsa-message.c (bm_find_scroll_to_rectangle),
(bm_find_entry_changed_cb), (bm_find_again), (balsa_message_init),
(balsa_message_destroy), (part_info_init), (add_part),
(gtk_tree_hide_func), (balsa_message_current_part_widget),
(balsa_message_can_select), (balsa_message_grab_focus),
(balsa_message_can_zoom), (balsa_message_zoom),
(balsa_message_find_in_message):
* src/balsa-mime-widget-crypto.c (balsa_mime_widget_new_signature),
(balsa_mime_widget_new_pgpkey):
* src/balsa-mime-widget-image.c (img_check_size),
(balsa_mime_widget_new_image):
* src/balsa-mime-widget-message.c (balsa_mime_widget_new_message),
(bmw_message_extbody_url), (bmw_message_extbody_mail),
(balsa_mime_widget_new_message_tl):
* src/balsa-mime-widget-multipart.c
(balsa_mime_widget_new_multipart):
* src/balsa-mime-widget-text.c (balsa_mime_widget_new_text),
(bm_widget_new_html), (bm_widget_new_vcard):
* src/balsa-mime-widget-vcalendar.c
(balsa_mime_widget_new_vcalendar):
* src/balsa-mime-widget.c (balsa_mime_widget_init),
(balsa_mime_widget_new), (balsa_mime_widget_new_unknown):
* src/balsa-mime-widget.h:
ChangeLog | 33 ++++++++++
src/balsa-message.c | 69 ++++++++++----------
src/balsa-mime-widget-crypto.c | 9 +--
src/balsa-mime-widget-image.c | 11 ++--
src/balsa-mime-widget-message.c | 34 ++++------
src/balsa-mime-widget-multipart.c | 11 ++--
src/balsa-mime-widget-text.c | 6 +-
src/balsa-mime-widget-vcalendar.c | 8 +--
src/balsa-mime-widget.c | 128 ++++++++++++++++----------------------
src/balsa-mime-widget.h | 6 +-
10 files changed, 159 insertions(+), 156 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 7bc2e8b7c..bbacb26d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2019-09-14 Peter Bloomfield <pbloomfield bellsouth net>
+
+ mime-widget: subclass GtkBox instead of GObject
+
+ This makes BalsaMimeWidget inherit from GtkBox, so it is
+ actually a widget. A subclass that used to create a vertical
+ GtkBox can use the BalsaMimeWidget itself. Other subclasses can
+ add their custom widget to the BalsaMimeWidget.
+
+ * src/balsa-message.c (bm_find_scroll_to_rectangle),
+ (bm_find_entry_changed_cb), (bm_find_again), (balsa_message_init),
+ (balsa_message_destroy), (part_info_init), (add_part),
+ (gtk_tree_hide_func), (balsa_message_current_part_widget),
+ (balsa_message_can_select), (balsa_message_grab_focus),
+ (balsa_message_can_zoom), (balsa_message_zoom),
+ (balsa_message_find_in_message):
+ * src/balsa-mime-widget-crypto.c (balsa_mime_widget_new_signature),
+ (balsa_mime_widget_new_pgpkey):
+ * src/balsa-mime-widget-image.c (img_check_size),
+ (balsa_mime_widget_new_image):
+ * src/balsa-mime-widget-message.c (balsa_mime_widget_new_message),
+ (bmw_message_extbody_url), (bmw_message_extbody_mail),
+ (balsa_mime_widget_new_message_tl):
+ * src/balsa-mime-widget-multipart.c
+ (balsa_mime_widget_new_multipart):
+ * src/balsa-mime-widget-text.c (balsa_mime_widget_new_text),
+ (bm_widget_new_html), (bm_widget_new_vcard):
+ * src/balsa-mime-widget-vcalendar.c
+ (balsa_mime_widget_new_vcalendar):
+ * src/balsa-mime-widget.c (balsa_mime_widget_init),
+ (balsa_mime_widget_new), (balsa_mime_widget_new_unknown):
+ * src/balsa-mime-widget.h:
+
2019-09-13 Peter Bloomfield <pbloomfield bellsouth net>
mime-widget-text: Actually show the context menu
diff --git a/src/balsa-message.c b/src/balsa-message.c
index a7a9643f8..295b07e2e 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -370,7 +370,7 @@ bm_find_scroll_to_rectangle(BalsaMessage * balsa_message,
GtkScrolledWindow *scroll = GTK_SCROLLED_WINDOW(balsa_message->scroll);
gtk_widget_translate_coordinates(widget,
- balsa_mime_widget_get_widget(balsa_message->bm_widget),
+ GTK_WIDGET(balsa_message->bm_widget),
rectangle->x, rectangle->y,
&x, &y);
@@ -447,7 +447,7 @@ bm_find_entry_changed_cb(GtkEditable * editable, gpointer data)
{
const gchar *text = gtk_entry_get_text(GTK_ENTRY(editable));
BalsaMessage *balsa_message = data;
- GtkWidget *widget = balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget);
+ GtkWidget *widget = GTK_WIDGET(balsa_message->current_part->mime_widget);
gboolean found = FALSE;
if (GTK_IS_TEXT_VIEW(widget)) {
@@ -507,7 +507,7 @@ static void
bm_find_again(BalsaMessage * balsa_message, gboolean find_forward)
{
const gchar *text = gtk_entry_get_text(GTK_ENTRY(balsa_message->find_entry));
- GtkWidget *widget = balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget);
+ GtkWidget *widget = GTK_WIDGET(balsa_message->current_part->mime_widget);
gboolean found;
balsa_message->find_forward = find_forward;
@@ -709,10 +709,10 @@ balsa_message_init(BalsaMessage * balsa_message)
g_free(buttons);
/* Widget to hold message */
- g_signal_connect(balsa_mime_widget_get_widget(balsa_message->bm_widget), "focus_in_event",
+ g_signal_connect(GTK_WIDGET(balsa_message->bm_widget), "focus_in_event",
G_CALLBACK(balsa_mime_widget_limit_focus),
(gpointer) balsa_message);
- g_signal_connect(balsa_mime_widget_get_widget(balsa_message->bm_widget), "focus_out_event",
+ g_signal_connect(GTK_WIDGET(balsa_message->bm_widget), "focus_out_event",
G_CALLBACK(balsa_mime_widget_unlimit_focus),
(gpointer) balsa_message);
@@ -720,7 +720,7 @@ balsa_message_init(BalsaMessage * balsa_message)
* provide one, but it would also set it up to scroll on grab-focus,
* which has been really annoying for a long time :-( */
viewport = gtk_viewport_new(NULL, NULL);
- gtk_container_add(GTK_CONTAINER(viewport), balsa_mime_widget_get_widget(balsa_message->bm_widget));
+ gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(balsa_message->bm_widget));
gtk_container_add(GTK_CONTAINER(balsa_message->scroll), viewport);
/* structure view */
@@ -813,7 +813,6 @@ balsa_message_destroy(GObject * object)
g_clear_object(&balsa_message->save_all_popup);
g_clear_object(&balsa_message->parts_popup);
- g_clear_object(&balsa_message->bm_widget);
g_clear_object(&balsa_message->face_box);
#ifdef HAVE_HTML_WIDGET
@@ -1326,7 +1325,8 @@ part_info_init(BalsaMessage * balsa_message, BalsaPartInfo * info)
g_return_if_fail(info != NULL);
g_return_if_fail(info->body != NULL);
- info->mime_widget = balsa_mime_widget_new(balsa_message, info->body, info->popup_menu);
+ info->mime_widget =
+ g_object_ref_sink(balsa_mime_widget_new(balsa_message, info->body, info->popup_menu));
}
@@ -2196,30 +2196,27 @@ static LibBalsaMessageBody *
add_part(BalsaMessage * balsa_message, BalsaPartInfo * info, GtkWidget * container)
{
GtkTreeSelection *selection;
- GtkWidget *widget;
LibBalsaMessageBody *body;
GtkWidget *info_container;
- if (!info)
+ if (info == NULL)
return NULL;
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(balsa_message->treeview));
- if (info->path &&
+ if (info->path != NULL &&
!gtk_tree_selection_path_is_selected(selection, info->path))
gtk_tree_selection_select_path(selection, info->path);
if (info->mime_widget == NULL)
part_info_init(balsa_message, info);
- if ((widget = balsa_mime_widget_get_widget(info->mime_widget)))
- gtk_box_pack_start(GTK_BOX(container), widget, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(container), GTK_WIDGET(info->mime_widget), TRUE, TRUE, 0);
info_container = balsa_mime_widget_get_container(info->mime_widget);
- body =
- add_multipart(balsa_message, info->body,
- info_container != NULL ?
- info_container : container);
+ body = add_multipart(balsa_message, info->body,
+ info_container != NULL ?
+ info_container : container);
return body;
}
@@ -2232,12 +2229,16 @@ gtk_tree_hide_func(GtkTreeModel * model, GtkTreePath * path,
BalsaPartInfo *info;
gtk_tree_model_get(model, iter, PART_INFO_COLUMN, &info, -1);
- if (info) {
- GtkWidget *widget, *parent;
- if (info->mime_widget && (widget = balsa_mime_widget_get_widget(info->mime_widget))
- && (parent = gtk_widget_get_parent(widget)))
- gtk_container_remove(GTK_CONTAINER(parent), widget);
+ if (info != NULL) {
+ if (info->mime_widget != NULL) {
+ GtkWidget *widget, *parent;
+
+ widget = GTK_WIDGET(info->mime_widget);
+ if ((parent = gtk_widget_get_parent(widget)) != NULL)
+ gtk_container_remove(GTK_CONTAINER(parent), widget);
+ }
+
g_object_unref(info);
}
@@ -2295,7 +2296,7 @@ balsa_message_current_part_widget(BalsaMessage * balsa_message)
{
if (balsa_message && balsa_message->current_part &&
balsa_message->current_part->mime_widget)
- return balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget);
+ return GTK_WIDGET(balsa_message->current_part->mime_widget);
else
return NULL;
}
@@ -2326,9 +2327,10 @@ balsa_message_can_select(BalsaMessage * balsa_message)
g_return_val_if_fail(balsa_message != NULL, FALSE);
if (balsa_message->current_part == NULL
- || (w = balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget)) == NULL)
+ || balsa_message->current_part->mime_widget == NULL)
return FALSE;
+ w = GTK_WIDGET(balsa_message->current_part->mime_widget);
return GTK_IS_EDITABLE(w) || GTK_IS_TEXT_VIEW(w)
#ifdef HAVE_HTML_WIDGET
|| libbalsa_html_can_select(w)
@@ -2344,7 +2346,7 @@ balsa_message_grab_focus(BalsaMessage * balsa_message)
g_return_val_if_fail(balsa_message != NULL, FALSE);
g_return_val_if_fail(balsa_message->current_part != NULL, FALSE);
- widget = balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget);
+ widget = GTK_WIDGET(balsa_message->current_part->mime_widget);
g_return_val_if_fail(widget != NULL, FALSE);
gtk_widget_set_can_focus(widget, TRUE);
@@ -2644,7 +2646,7 @@ gboolean
balsa_message_can_zoom(BalsaMessage * balsa_message)
{
return balsa_message->current_part
- && libbalsa_html_can_zoom(balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget));
+ && libbalsa_html_can_zoom(GTK_WIDGET(balsa_message->current_part->mime_widget));
}
/* Zoom an html item. */
@@ -2666,7 +2668,7 @@ balsa_message_zoom(BalsaMessage * balsa_message, gint in_out)
g_object_set_data(G_OBJECT(balsa_message->message), BALSA_MESSAGE_ZOOM_KEY,
GINT_TO_POINTER(zoom));
- libbalsa_html_zoom(balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget), in_out);
+ libbalsa_html_zoom(GTK_WIDGET(balsa_message->current_part->mime_widget), in_out);
}
#endif /* HAVE_HTML_WIDGET */
@@ -3293,13 +3295,16 @@ balsa_message_find_in_message(BalsaMessage * balsa_message)
{
GtkWidget *w;
- if (balsa_message->current_part
- && (w = balsa_mime_widget_get_widget(balsa_message->current_part->mime_widget))
- && (GTK_IS_TEXT_VIEW(w)
+ if (balsa_message->current_part == NULL ||
+ balsa_message->current_part->mime_widget == NULL)
+ return;
+
+ w = GTK_WIDGET(balsa_message->current_part->mime_widget);
+ if (GTK_IS_TEXT_VIEW(w)
#ifdef HAVE_HTML_WIDGET
- || libbalsa_html_can_search(w)
+ || libbalsa_html_can_search(w)
#endif /* HAVE_HTML_WIDGET */
- )) {
+ ) {
if (GTK_IS_TEXT_VIEW(w)) {
GtkTextView *text_view = (GtkTextView *) w;
GtkTextBuffer *buffer = gtk_text_view_get_buffer(text_view);
diff --git a/src/balsa-mime-widget-crypto.c b/src/balsa-mime-widget-crypto.c
index 02ff5f8d0..8e32d05f1 100644
--- a/src/balsa-mime-widget-crypto.c
+++ b/src/balsa-mime-widget-crypto.c
@@ -51,7 +51,8 @@ balsa_mime_widget_new_signature(BalsaMessage * bm,
return NULL;
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- balsa_mime_widget_set_widget(mw, balsa_mime_widget_signature_widget(mime_body, content_type));
+ gtk_container_add(GTK_CONTAINER(mw),
+ balsa_mime_widget_signature_widget(mime_body, content_type));
return mw;
}
@@ -76,12 +77,8 @@ balsa_mime_widget_new_pgpkey(BalsaMessage *bm,
err ? err->message : "Unknown error");
g_clear_error(&err);
} else {
- GtkWidget *widget;
-
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- balsa_mime_widget_set_widget(mw, widget);
- if (!create_import_keys_widget(GTK_BOX(widget), body_buf, &err)) {
+ if (!create_import_keys_widget(GTK_BOX(mw), body_buf, &err)) {
balsa_information(LIBBALSA_INFORMATION_ERROR, _("Could not process GnuPG keys: %s"),
err ? err->message : "Unknown error");
g_clear_error(&err);
diff --git a/src/balsa-mime-widget-image.c b/src/balsa-mime-widget-image.c
index 864aceac7..70808486b 100644
--- a/src/balsa-mime-widget-image.c
+++ b/src/balsa-mime-widget-image.c
@@ -36,6 +36,7 @@ struct _BalsaMimeWidgetImage {
guint img_check_size_id;
GdkPixbuf *pixbuf;
+ GtkWidget *image;
};
G_DEFINE_TYPE(BalsaMimeWidgetImage,
@@ -90,7 +91,7 @@ img_check_size(BalsaMimeWidgetImage * mwi)
mwi->img_check_size_id = 0;
- widget = balsa_mime_widget_get_widget((BalsaMimeWidget *) mwi);
+ widget = GTK_WIDGET(mwi);
viewport = gtk_widget_get_ancestor(widget, GTK_TYPE_VIEWPORT);
if (viewport == NULL) {
return G_SOURCE_REMOVE;
@@ -106,7 +107,7 @@ img_check_size(BalsaMimeWidgetImage * mwi)
return G_SOURCE_REMOVE;
}
- image = GTK_IMAGE(gtk_bin_get_child(GTK_BIN(widget)));
+ image = GTK_IMAGE(mwi->image);
if (gtk_image_get_storage_type(image) == GTK_IMAGE_PIXBUF)
curr_w = gdk_pixbuf_get_width(gtk_image_get_pixbuf(image));
else
@@ -198,13 +199,13 @@ balsa_mime_widget_new_image(BalsaMessage * bm,
mw = (BalsaMimeWidget *) mwi;
widget = gtk_event_box_new();
- balsa_mime_widget_set_widget(mw, widget);
+ gtk_container_add(GTK_CONTAINER(mw), widget);
g_signal_connect(widget, "button-press-event",
G_CALLBACK(balsa_image_button_press_cb), data);
- image = gtk_image_new_from_icon_name("image-missing",
- GTK_ICON_SIZE_BUTTON);
+ mwi->image = image = gtk_image_new_from_icon_name("image-missing",
+ GTK_ICON_SIZE_BUTTON);
g_signal_connect_swapped(image, "size-allocate",
G_CALLBACK(img_size_allocate_cb), mwi);
gtk_container_add(GTK_CONTAINER(widget), image);
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index bf78a6a82..6d1e7e0e7 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -128,7 +128,7 @@ balsa_mime_widget_new_message(BalsaMessage * bm,
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
widget = gtk_frame_new(NULL);
- balsa_mime_widget_set_widget(mw, widget);
+ gtk_container_add(GTK_CONTAINER(mw), widget);
container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
balsa_mime_widget_set_container(mw, container);
@@ -151,7 +151,7 @@ balsa_mime_widget_new_message(BalsaMessage * bm,
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
widget = gtk_frame_new(_("message headers"));
- balsa_mime_widget_set_widget(mw, widget);
+ gtk_container_add(GTK_CONTAINER(mw), widget);
header_widget = bm_header_widget_new(bm, NULL);
balsa_mime_widget_set_header_widget(mw, header_widget);
@@ -177,7 +177,6 @@ bmw_message_extbody_url(LibBalsaMessageBody * mime_body,
GString *msg = NULL;
gchar *url;
BalsaMimeWidget *mw;
- GtkWidget *widget;
if (url_type == RFC2046_EXTBODY_LOCALFILE) {
url = libbalsa_message_body_get_parameter(mime_body, "name");
@@ -242,18 +241,15 @@ bmw_message_extbody_url(LibBalsaMessageBody * mime_body,
/* now create & return the widget... */
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- balsa_mime_widget_set_widget(mw, widget);
-
- gtk_container_set_border_width(GTK_CONTAINER(widget),
+ gtk_container_set_border_width(GTK_CONTAINER(mw),
BMW_CONTAINER_BORDER);
- gtk_box_pack_start(GTK_BOX(widget), gtk_label_new(msg->str), FALSE,
+ gtk_box_pack_start(GTK_BOX(mw), gtk_label_new(msg->str), FALSE,
FALSE, 0);
g_string_free(msg, TRUE);
button = gtk_button_new_with_label(url);
- gtk_box_pack_start(GTK_BOX(widget), button, FALSE, FALSE,
+ gtk_box_pack_start(GTK_BOX(mw), button, FALSE, FALSE,
BMW_BUTTON_PACK_SPACE);
g_object_set_data_full(G_OBJECT(button), "call_url", url,
(GDestroyNotify) g_free);
@@ -271,7 +267,6 @@ bmw_message_extbody_mail(LibBalsaMessageBody * mime_body)
GString *msg = NULL;
gchar *mail_subject, *mail_site;
BalsaMimeWidget *mw;
- GtkWidget *widget;
mail_site = libbalsa_message_body_get_parameter(mime_body, "server");
@@ -292,20 +287,17 @@ bmw_message_extbody_mail(LibBalsaMessageBody * mime_body)
/* now create & return the widget... */
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- balsa_mime_widget_set_widget(mw, widget);
-
- gtk_container_set_border_width(GTK_CONTAINER(widget),
+ gtk_container_set_border_width(GTK_CONTAINER(mw),
BMW_CONTAINER_BORDER);
- gtk_box_pack_start(GTK_BOX(widget), gtk_label_new(msg->str), FALSE,
+ gtk_box_pack_start(GTK_BOX(mw), gtk_label_new(msg->str), FALSE,
FALSE, 0);
g_string_free(msg, TRUE);
button =
gtk_button_new_with_mnemonic(_
("Se_nd message to obtain this part"));
- gtk_box_pack_start(GTK_BOX(widget), button, FALSE, FALSE,
+ gtk_box_pack_start(GTK_BOX(mw), button, FALSE, FALSE,
BMW_BUTTON_PACK_SPACE);
g_signal_connect(button, "clicked",
G_CALLBACK(extbody_send_mail), (gpointer) mime_body);
@@ -420,26 +412,22 @@ balsa_mime_widget_new_message_tl(BalsaMessage * bm,
GtkWidget * const * tl_buttons)
{
BalsaMimeWidget *mw;
- GtkWidget *widget;
GtkWidget *headers;
GtkWidget *container;
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
- balsa_mime_widget_set_widget(mw, widget);
-
- gtk_container_set_border_width(GTK_CONTAINER(widget), BMW_MESSAGE_PADDING);
+ gtk_container_set_border_width(GTK_CONTAINER(mw), BMW_MESSAGE_PADDING);
headers = bm_header_widget_new(bm, tl_buttons);
balsa_mime_widget_set_header_widget(mw, headers);
- gtk_box_pack_start(GTK_BOX(widget), headers, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(mw), headers, FALSE, FALSE, 0);
container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
balsa_mime_widget_set_container(mw, container);
- gtk_box_pack_start(GTK_BOX(widget), container, TRUE, TRUE,
+ gtk_box_pack_start(GTK_BOX(mw), container, TRUE, TRUE,
BMW_CONTAINER_BORDER - BMW_MESSAGE_PADDING);
return mw;
diff --git a/src/balsa-mime-widget-multipart.c b/src/balsa-mime-widget-multipart.c
index 514f82a2d..61d28454b 100644
--- a/src/balsa-mime-widget-multipart.c
+++ b/src/balsa-mime-widget-multipart.c
@@ -40,9 +40,9 @@ balsa_mime_widget_new_multipart(BalsaMessage * bm,
g_return_val_if_fail(content_type != NULL, NULL);
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
- balsa_mime_widget_set_widget(mw, widget);
- balsa_mime_widget_set_container(mw, widget);
+ gtk_box_set_spacing(GTK_BOX(mw), BMW_MESSAGE_PADDING);
+
+ widget = GTK_WIDGET(mw);
if (g_ascii_strcasecmp("multipart/signed", content_type) == 0 &&
mime_body->parts != NULL &&
@@ -52,8 +52,11 @@ balsa_mime_widget_new_multipart(BalsaMessage * bm,
balsa_mime_widget_crypto_frame(mime_body->parts->next, widget,
mime_body->was_encrypted, FALSE, NULL);
- balsa_mime_widget_set_widget(mw, crypto_frame);
+ mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
+ gtk_container_add(GTK_CONTAINER(mw), crypto_frame);
}
+ balsa_mime_widget_set_container(mw, widget);
+
return mw;
}
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index bc8f51ce9..262020dc4 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -296,7 +296,7 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
}
mw = (BalsaMimeWidget *) mwt;
- balsa_mime_widget_set_widget(mw, widget);
+ gtk_container_add(GTK_CONTAINER(mw), widget);
return mw;
}
@@ -1176,7 +1176,7 @@ bm_widget_new_html(BalsaMessage * bm, LibBalsaMessageBody * mime_body)
libbalsa_html_new(mime_body,
(LibBalsaHtmlCallback) bm_widget_on_url,
(LibBalsaHtmlCallback) handle_url);
- balsa_mime_widget_set_widget(mw, widget);
+ gtk_container_add(GTK_CONTAINER(mw), widget);
g_object_set_data(G_OBJECT(widget), "mime-body", mime_body);
@@ -1231,7 +1231,7 @@ bm_widget_new_vcard(BalsaMessage *bm, LibBalsaMessageBody *mime_body,
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
widget = gtk_grid_new();
g_object_set_data(G_OBJECT(widget), "mime-body", mime_body);
- balsa_mime_widget_set_widget(mw, widget);
+ gtk_container_add(GTK_CONTAINER(mw), widget);
grid = (GtkGrid *) widget;
gtk_grid_set_row_spacing(grid, 6);
diff --git a/src/balsa-mime-widget-vcalendar.c b/src/balsa-mime-widget-vcalendar.c
index d5a2b1371..d2e3ff347 100644
--- a/src/balsa-mime-widget-vcalendar.c
+++ b/src/balsa-mime-widget-vcalendar.c
@@ -44,7 +44,6 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
{
LibBalsaVCal *vcal_obj;
BalsaMimeWidget *mw;
- GtkWidget *widget;
GtkWidget *label;
gchar *text;
guint event_no;
@@ -62,16 +61,13 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
- balsa_mime_widget_set_widget(mw, widget);
-
text = g_strdup_printf(_("This is an iTIP calendar ā%sā message."),
libbalsa_vcal_method_str(vcal_obj));
label = gtk_label_new(text);
g_free(text);
gtk_widget_set_halign(label, GTK_ALIGN_START);
gtk_widget_set_valign(label, GTK_ALIGN_START);
- gtk_container_add(GTK_CONTAINER(widget), label);
+ gtk_container_add(GTK_CONTAINER(mw), label);
/* a reply may be created only for unread requests */
if ((libbalsa_vcal_method(vcal_obj) == ITIP_REQUEST) &&
@@ -101,7 +97,7 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
GtkWidget *event;
event = balsa_vevent_widget(libbalsa_vcal_vevent(vcal_obj, event_no), may_reply, sender);
- gtk_container_add(GTK_CONTAINER(widget), event);
+ gtk_container_add(GTK_CONTAINER(mw), event);
}
g_object_unref(vcal_obj);
diff --git a/src/balsa-mime-widget.c b/src/balsa-mime-widget.c
index 5fc245c40..e907ae6cf 100644
--- a/src/balsa-mime-widget.c
+++ b/src/balsa-mime-widget.c
@@ -46,9 +46,6 @@ static BalsaMimeWidget *balsa_mime_widget_new_unknown(BalsaMessage * bm,
static void vadj_change_cb(GtkAdjustment *vadj, GtkWidget *widget);
typedef struct {
- /* display widget */
- GtkWidget *widget;
-
/* container widget if more sub-parts can be added */
GtkWidget *container;
@@ -56,7 +53,7 @@ typedef struct {
GtkWidget *header_widget;
} BalsaMimeWidgetPrivate;
-G_DEFINE_TYPE_WITH_PRIVATE(BalsaMimeWidget, balsa_mime_widget, G_TYPE_OBJECT)
+G_DEFINE_TYPE_WITH_PRIVATE(BalsaMimeWidget, balsa_mime_widget, GTK_TYPE_BOX)
static void
balsa_mime_widget_init(BalsaMimeWidget *self)
@@ -64,10 +61,13 @@ balsa_mime_widget_init(BalsaMimeWidget *self)
#ifdef G_OBJECT_NEEDS_TO_BE_INITIALIZED
BalsaMimeWidgetPrivate *priv = balsa_mime_widget_get_instance_private(self);
- priv->widget = NULL;
priv->container = NULL;
priv->header_widget = NULL;
#endif /* G_OBJECT_NEEDS_TO_BE_INITIALIZED */
+ g_object_set(self,
+ "orientation", GTK_ORIENTATION_VERTICAL,
+ "spacing", BMW_VBOX_SPACE,
+ NULL);
}
static void
@@ -129,47 +129,54 @@ balsa_mime_widget_new(BalsaMessage * bm, LibBalsaMessageBody * mime_body, gpoint
if (mw == NULL)
mw = balsa_mime_widget_new_unknown(bm, mime_body, content_type);
- if (mw != NULL) {
- BalsaMimeWidgetPrivate *priv = balsa_mime_widget_get_instance_private(mw);
-
- if (priv->widget) {
- g_signal_connect(priv->widget, "focus_in_event",
- G_CALLBACK(balsa_mime_widget_limit_focus),
- (gpointer) bm);
- g_signal_connect(priv->widget, "focus_out_event",
- G_CALLBACK(balsa_mime_widget_unlimit_focus),
- (gpointer) bm);
- if (mime_body->sig_info &&
- g_ascii_strcasecmp("application/pgp-signature", content_type) &&
- g_ascii_strcasecmp("application/pkcs7-signature", content_type) &&
- g_ascii_strcasecmp("application/x-pkcs7-signature", content_type)) {
- GtkWidget * signature =
- balsa_mime_widget_signature_widget(mime_body, content_type);
- priv->widget = balsa_mime_widget_crypto_frame(mime_body, priv->widget,
- mime_body->was_encrypted,
- FALSE, signature);
- } else if (mime_body->was_encrypted &&
- g_ascii_strcasecmp("multipart/signed", content_type)) {
- priv->widget = balsa_mime_widget_crypto_frame(mime_body, priv->widget,
- TRUE, TRUE, NULL);
- }
- g_object_ref_sink(priv->widget);
-
- if (GTK_IS_LAYOUT(priv->widget)) {
- GtkAdjustment *vadj;
-
- g_object_get(priv->widget, "vadjustment", &vadj,
- NULL);
- g_signal_connect(vadj, "changed",
- G_CALLBACK(vadj_change_cb), priv->widget);
- g_object_unref(vadj);
- }
-
- gtk_widget_show_all(priv->widget);
- }
+ g_signal_connect(mw, "focus_in_event",
+ G_CALLBACK(balsa_mime_widget_limit_focus), bm);
+ g_signal_connect(mw, "focus_out_event",
+ G_CALLBACK(balsa_mime_widget_unlimit_focus), bm);
+ if (mime_body->sig_info != NULL &&
+ g_ascii_strcasecmp("application/pgp-signature", content_type) != 0 &&
+ g_ascii_strcasecmp("application/pkcs7-signature", content_type) != 0 &&
+ g_ascii_strcasecmp("application/x-pkcs7-signature", content_type) != 0) {
+ GtkWidget *signature = balsa_mime_widget_signature_widget(mime_body, content_type);
+ GtkWidget *crypto_frame =
+ balsa_mime_widget_crypto_frame(mime_body, GTK_WIDGET(mw),
+ mime_body->was_encrypted,
+ FALSE, signature);
+ BalsaMimeWidgetPrivate *priv;
+ GtkWidget *container;
+
+ priv = balsa_mime_widget_get_instance_private(mw);
+ container = priv->container;
+ mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
+ gtk_container_add(GTK_CONTAINER(mw), crypto_frame);
+ priv = balsa_mime_widget_get_instance_private(mw);
+ priv->container = container;
+ } else if (mime_body->was_encrypted &&
+ g_ascii_strcasecmp("multipart/signed", content_type) != 0) {
+ GtkWidget *crypto_frame =
+ balsa_mime_widget_crypto_frame(mime_body, GTK_WIDGET(mw), TRUE, TRUE, NULL);
+ BalsaMimeWidgetPrivate *priv;
+ GtkWidget *container;
+
+ priv = balsa_mime_widget_get_instance_private(mw);
+ container = priv->container;
+ mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
+ gtk_container_add(GTK_CONTAINER(mw), crypto_frame);
+ priv = balsa_mime_widget_get_instance_private(mw);
+ priv->container = container;
}
g_free(content_type);
+ if (GTK_IS_LAYOUT(mw)) {
+ GtkAdjustment *vadj;
+
+ g_object_get(mw, "vadjustment", &vadj, NULL);
+ g_signal_connect(vadj, "changed", G_CALLBACK(vadj_change_cb), mw);
+ g_object_unref(vadj);
+ }
+
+ gtk_widget_show_all(GTK_WIDGET(mw));
+
return mw;
}
@@ -186,20 +193,17 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
gchar *content_desc;
BalsaMimeWidget *mw;
gchar *use_content_type;
- BalsaMimeWidgetPrivate *priv;
g_return_val_if_fail(mime_body != NULL, NULL);
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- priv = balsa_mime_widget_get_instance_private(mw);
- priv->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- gtk_container_set_border_width(GTK_CONTAINER(priv->widget),
+ gtk_container_set_border_width(GTK_CONTAINER(mw),
BMW_CONTAINER_BORDER);
if (mime_body->filename) {
msg = g_strdup_printf(_("File name: %s"), mime_body->filename);
- gtk_box_pack_start(GTK_BOX(priv->widget), gtk_label_new(msg), FALSE,
+ gtk_box_pack_start(GTK_BOX(mw), gtk_label_new(msg), FALSE,
FALSE, 0);
g_free(msg);
}
@@ -254,7 +258,7 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
msg_label = gtk_label_new(msg);
g_free(msg);
gtk_label_set_ellipsize(GTK_LABEL(msg_label), PANGO_ELLIPSIZE_END);
- gtk_box_pack_start(GTK_BOX(priv->widget), msg_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(mw), msg_label, FALSE, FALSE, 0);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, BMW_HBOX_SPACE);
gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE);
@@ -263,7 +267,7 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
(gpointer) mime_body)))
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
else
- gtk_box_pack_start(GTK_BOX(priv->widget),
+ gtk_box_pack_start(GTK_BOX(mw),
gtk_label_new(_("No open or view action "
"defined for this content type")),
FALSE, FALSE, 0);
@@ -275,7 +279,7 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
G_CALLBACK(balsa_mime_widget_ctx_menu_save),
(gpointer) mime_body);
- gtk_box_pack_start(GTK_BOX(priv->widget), hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(mw), hbox, FALSE, FALSE, 0);
return mw;
}
@@ -331,17 +335,6 @@ vadj_change_cb(GtkAdjustment *vadj, GtkWidget *widget)
* Getters
*/
-GtkWidget *
-balsa_mime_widget_get_widget(BalsaMimeWidget * mw)
-{
- BalsaMimeWidgetPrivate *priv =
- balsa_mime_widget_get_instance_private(mw);
-
- g_return_val_if_fail(BALSA_IS_MIME_WIDGET(mw), NULL);
-
- return priv->widget;
-}
-
GtkWidget *
balsa_mime_widget_get_container(BalsaMimeWidget * mw)
{
@@ -368,17 +361,6 @@ balsa_mime_widget_get_header_widget(BalsaMimeWidget * mw)
* Setters
*/
-void
-balsa_mime_widget_set_widget(BalsaMimeWidget * mw, GtkWidget * widget)
-{
- BalsaMimeWidgetPrivate *priv =
- balsa_mime_widget_get_instance_private(mw);
-
- g_return_if_fail(BALSA_IS_MIME_WIDGET(mw));
-
- priv->widget = widget;
-}
-
void
balsa_mime_widget_set_container(BalsaMimeWidget * mw, GtkWidget * widget)
{
diff --git a/src/balsa-mime-widget.h b/src/balsa-mime-widget.h
index afc951159..ea1ccbb09 100644
--- a/src/balsa-mime-widget.h
+++ b/src/balsa-mime-widget.h
@@ -40,12 +40,12 @@ G_BEGIN_DECLS
*/
struct _BalsaMimeWidgetClass {
- GObjectClass parent;
+ GtkBoxClass parent_class;
};
#define BALSA_TYPE_MIME_WIDGET balsa_mime_widget_get_type()
-G_DECLARE_DERIVABLE_TYPE(BalsaMimeWidget, balsa_mime_widget, BALSA, MIME_WIDGET, GObject)
+G_DECLARE_DERIVABLE_TYPE(BalsaMimeWidget, balsa_mime_widget, BALSA, MIME_WIDGET, GtkBox)
/*
* Method definitions.
@@ -60,7 +60,6 @@ void balsa_mime_widget_schedule_resize(GtkWidget * widget);
* Getters
*/
-GtkWidget *balsa_mime_widget_get_widget (BalsaMimeWidget * mw);
GtkWidget *balsa_mime_widget_get_container (BalsaMimeWidget * mw);
GtkWidget *balsa_mime_widget_get_header_widget(BalsaMimeWidget * mw);
@@ -68,7 +67,6 @@ GtkWidget *balsa_mime_widget_get_header_widget(BalsaMimeWidget * mw);
* Setters
*/
-void balsa_mime_widget_set_widget (BalsaMimeWidget * mw, GtkWidget * widget);
void balsa_mime_widget_set_container (BalsaMimeWidget * mw, GtkWidget * widget);
void balsa_mime_widget_set_header_widget(BalsaMimeWidget * mw, GtkWidget * widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]