[balsa/wip/gtk4: 140/351] Rewrite the class definitions of BalsaMimeWidget*
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 140/351] Rewrite the class definitions of BalsaMimeWidget*
- Date: Wed, 23 May 2018 21:28:43 +0000 (UTC)
commit 23e52c0ec9d06becac771084e9726cc234f8e228
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Mon Jan 29 15:11:08 2018 -0500
Rewrite the class definitions of BalsaMimeWidget*
Use the G_DECLARE* and G_DEFINE* macros to set up the class structure
of BalsaMimeWidget and its subclasses.
src/balsa-message.c | 66 +++++++++-------
src/balsa-mime-widget-callbacks.c | 7 +-
src/balsa-mime-widget-crypto.c | 27 ++++--
src/balsa-mime-widget-image.c | 2 +-
src/balsa-mime-widget-image.h | 28 +------
src/balsa-mime-widget-message.c | 87 +++++++++++++-------
src/balsa-mime-widget-multipart.c | 15 +++-
src/balsa-mime-widget-text.c | 55 +++++++------
src/balsa-mime-widget-text.h | 9 +-
src/balsa-mime-widget-vcalendar.c | 8 +-
src/balsa-mime-widget.c | 160 +++++++++++++++++++++++++-----------
src/balsa-mime-widget.h | 49 ++++++------
12 files changed, 308 insertions(+), 205 deletions(-)
---
diff --git a/src/balsa-message.c b/src/balsa-message.c
index 0b5c02c..948bea3 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -370,7 +370,8 @@ bm_find_scroll_to_rectangle(BalsaMessage * bm,
gint x, y;
GtkAdjustment *hadj, *vadj;
- gtk_widget_translate_coordinates(widget, bm->bm_widget->widget,
+ gtk_widget_translate_coordinates(widget,
+ balsa_mime_widget_get_widget(bm->bm_widget),
rectangle->x, rectangle->y,
&x, &y);
@@ -447,7 +448,7 @@ bm_find_entry_changed_cb(GtkEditable * editable, gpointer data)
{
const gchar *text = gtk_entry_get_text(GTK_ENTRY(editable));
BalsaMessage *bm = data;
- GtkWidget *widget = bm->current_part->mime_widget->widget;
+ GtkWidget *widget = balsa_mime_widget_get_widget(bm->current_part->mime_widget);
gboolean found = FALSE;
if (GTK_IS_TEXT_VIEW(widget)) {
@@ -507,7 +508,7 @@ static void
bm_find_again(BalsaMessage * bm, gboolean find_forward)
{
const gchar *text = gtk_entry_get_text(GTK_ENTRY(bm->find_entry));
- GtkWidget *widget = bm->current_part->mime_widget->widget;
+ GtkWidget *widget = balsa_mime_widget_get_widget(bm->current_part->mime_widget);
gboolean found;
bm->find_forward = find_forward;
@@ -676,6 +677,7 @@ balsa_message_init(BalsaMessage * bm)
GtkGesture *gesture;
GtkCellRenderer *renderer;
GtkTreeSelection *selection;
+ GtkWidget *widget;
bm->switcher = gtk_stack_switcher_new();
gtk_box_pack_start(GTK_BOX(bm), bm->switcher);
@@ -710,9 +712,10 @@ balsa_message_init(BalsaMessage * bm)
g_free(buttons);
/* Widget to hold message */
- g_signal_connect(bm->bm_widget->widget, "notify::has-focus",
+ widget = balsa_mime_widget_get_widget(bm->bm_widget);
+ g_signal_connect(widget, "notify::has-focus",
G_CALLBACK(balsa_mime_widget_check_focus), bm);
- gtk_container_add(GTK_CONTAINER(bm->scroll), bm->bm_widget->widget);
+ gtk_container_add(GTK_CONTAINER(bm->scroll), widget);
/* structure view */
model = gtk_tree_store_new (NUM_COLUMNS,
@@ -2158,6 +2161,7 @@ add_part(BalsaMessage * bm, BalsaPartInfo * info, GtkWidget * container)
GtkTreeSelection *selection;
GtkWidget *widget;
LibBalsaMessageBody *body;
+ GtkWidget *bm_container;
if (!info)
return NULL;
@@ -2171,15 +2175,14 @@ add_part(BalsaMessage * bm, BalsaPartInfo * info, GtkWidget * container)
if (info->mime_widget == NULL)
part_info_init(bm, info);
- if ((widget = info->mime_widget->widget)) {
+ if ((widget = balsa_mime_widget_get_widget(info->mime_widget)) != NULL) {
gtk_widget_set_vexpand(widget, TRUE);
gtk_box_pack_start(GTK_BOX(container), widget);
}
- body =
- add_multipart(bm, info->body,
- info->mime_widget->container ?
- info->mime_widget->container : container);
+ bm_container = balsa_mime_widget_get_container(info->mime_widget);
+ body = add_multipart(bm, info->body,
+ bm_container != NULL ? bm_container : container);
return body;
}
@@ -2195,9 +2198,11 @@ gtk_tree_hide_func(GtkTreeModel * model, GtkTreePath * path,
if (info) {
GtkWidget *widget, *parent;
- if (info->mime_widget && (widget = info->mime_widget->widget)
- && (parent = gtk_widget_get_parent(widget)))
+ if (info->mime_widget != NULL
+ && (widget = balsa_mime_widget_get_widget(info->mime_widget)) != NULL
+ && (parent = gtk_widget_get_parent(widget)) != NULL) {
gtk_container_remove(GTK_CONTAINER(parent), widget);
+ }
g_object_unref(info);
}
@@ -2217,7 +2222,7 @@ hide_all_parts(BalsaMessage * bm)
bm->current_part = NULL;
}
- gtk_container_foreach(GTK_CONTAINER(bm->bm_widget->container),
+ gtk_container_foreach(GTK_CONTAINER(balsa_mime_widget_get_container(bm->bm_widget)),
(GtkCallback) gtk_widget_destroy, NULL);
}
@@ -2233,7 +2238,7 @@ select_part(BalsaMessage * bm, BalsaPartInfo *info)
hide_all_parts(bm);
bm_disable_find_entry(bm);
- body = add_part(bm, info, bm->bm_widget->container);
+ body = add_part(bm, info, balsa_mime_widget_get_container(bm->bm_widget));
bm->current_part = part_info_from_body(bm, body);
g_signal_emit(G_OBJECT(bm), balsa_message_signals[SELECT_PART], 0);
@@ -2253,7 +2258,7 @@ balsa_message_current_part_widget(BalsaMessage * bmessage)
{
if (bmessage && bmessage->current_part &&
bmessage->current_part->mime_widget)
- return bmessage->current_part->mime_widget->widget;
+ return balsa_mime_widget_get_widget(bmessage->current_part->mime_widget);
else
return NULL;
}
@@ -2279,17 +2284,22 @@ balsa_get_parent_window(GtkWidget * widget)
gboolean
balsa_message_can_select(BalsaMessage * bmessage)
{
- GtkWidget *w;
+ GtkWidget *widget;
g_return_val_if_fail(bmessage != NULL, FALSE);
- if (bmessage->current_part == NULL
- || (w = bmessage->current_part->mime_widget->widget) == NULL)
+ if (bmessage->current_part == NULL) {
+ return FALSE;
+ }
+
+ widget = balsa_mime_widget_get_widget(bmessage->current_part->mime_widget);
+ if (widget == NULL) {
return FALSE;
+ }
- return GTK_IS_EDITABLE(w) || GTK_IS_TEXT_VIEW(w)
+ return GTK_IS_EDITABLE(widget) || GTK_IS_TEXT_VIEW(widget)
#ifdef HAVE_HTML_WIDGET
- || libbalsa_html_can_select(w)
+ || libbalsa_html_can_select(widget)
#endif /* HAVE_HTML_WIDGET */
;
}
@@ -2302,7 +2312,7 @@ balsa_message_grab_focus(BalsaMessage * bmessage)
g_return_val_if_fail(bmessage != NULL, FALSE);
g_return_val_if_fail(bmessage->current_part != NULL, FALSE);
- widget = bmessage->current_part->mime_widget->widget;
+ widget = balsa_mime_widget_get_widget(bmessage->current_part->mime_widget);
g_return_val_if_fail(widget != NULL, FALSE);
gtk_widget_set_can_focus(widget, TRUE);
@@ -3224,17 +3234,17 @@ message_recheck_crypto_cb(GtkWidget * button, BalsaMessage * bm)
void
balsa_message_find_in_message(BalsaMessage * bm)
{
- GtkWidget *w;
+ GtkWidget *widget;
- if (bm->current_part
- && (w = bm->current_part->mime_widget->widget)
- && (GTK_IS_TEXT_VIEW(w)
+ if (bm->current_part != NULL
+ && (widget = balsa_mime_widget_get_widget(bm->current_part->mime_widget)) != NULL
+ && (GTK_IS_TEXT_VIEW(widget)
#ifdef HAVE_HTML_WIDGET
- || libbalsa_html_can_search(w)
+ || libbalsa_html_can_search(widget)
#endif /* HAVE_HTML_WIDGET */
)) {
- if (GTK_IS_TEXT_VIEW(w)) {
- GtkTextView *text_view = (GtkTextView *) w;
+ if (GTK_IS_TEXT_VIEW(widget)) {
+ GtkTextView *text_view = (GtkTextView *) widget;
GtkTextBuffer *buffer = gtk_text_view_get_buffer(text_view);
gtk_text_buffer_get_start_iter(buffer, &bm->find_iter);
diff --git a/src/balsa-mime-widget-callbacks.c b/src/balsa-mime-widget-callbacks.c
index 513f29a..39d8ccd 100644
--- a/src/balsa-mime-widget-callbacks.c
+++ b/src/balsa-mime-widget-callbacks.c
@@ -268,19 +268,22 @@ balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEvent * event,
void
balsa_mime_widget_check_focus(GtkWidget * widget, GParamSpec * pspec, BalsaMessage * bm)
{
+ GtkContainer *container =
+ GTK_CONTAINER(balsa_mime_widget_get_container(bm->bm_widget));
+
if (gtk_widget_has_focus(widget)) {
/* Disable can_focus on other message parts so that TAB does not
* attempt to move the focus on them. */
GList *list;
list = g_list_append(NULL, widget);
- gtk_container_set_focus_chain(GTK_CONTAINER(bm->bm_widget->container), list);
+ gtk_container_set_focus_chain(container, list);
g_list_free(list);
if (bm->focus_state == BALSA_MESSAGE_FOCUS_STATE_NO)
bm->focus_state = BALSA_MESSAGE_FOCUS_STATE_YES;
} else {
- gtk_container_unset_focus_chain(GTK_CONTAINER(bm->bm_widget->container));
+ gtk_container_unset_focus_chain(container);
if (bm->message != NULL) {
if (bm->focus_state == BALSA_MESSAGE_FOCUS_STATE_HOLD) {
diff --git a/src/balsa-mime-widget-crypto.c b/src/balsa-mime-widget-crypto.c
index d0df5e6..4908803 100644
--- a/src/balsa-mime-widget-crypto.c
+++ b/src/balsa-mime-widget-crypto.c
@@ -52,7 +52,9 @@ balsa_mime_widget_new_signature(BalsaMessage * bm,
return NULL;
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = balsa_mime_widget_signature_widget(mime_body, content_type);
+ balsa_mime_widget_set_widget(mw,
+ balsa_mime_widget_signature_widget(mime_body,
+ content_type));
return mw;
}
@@ -73,19 +75,26 @@ balsa_mime_widget_new_pgpkey(BalsaMessage *bm,
body_size = libbalsa_message_body_get_content(mime_body, &body_buf, &err);
if (body_size < 0) {
- balsa_information(LIBBALSA_INFORMATION_ERROR, _("Could not save a text part: %s"),
+ balsa_information(LIBBALSA_INFORMATION_ERROR,
+ _("Could not save a text part: %s"),
err ? err->message : "Unknown error");
g_clear_error(&err);
} else {
- mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- if (!create_import_keys_widget(GTK_BOX(mw->widget), body_buf, &err)) {
- balsa_information(LIBBALSA_INFORMATION_ERROR, _("Could not process GnuPG keys: %s"),
- err ? err->message : "Unknown error");
+ GtkWidget *box;
+
+ mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
+ box = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
+ balsa_mime_widget_set_widget(mw, box);
+ if (!create_import_keys_widget(GTK_BOX(box), body_buf, &err)) {
+ balsa_information(LIBBALSA_INFORMATION_ERROR,
+ _("Could not process GnuPG keys: %s"),
+ err != NULL ? err->message : "Unknown error");
g_clear_error(&err);
- g_object_unref(G_OBJECT(mw));
+ g_object_ref_sink(box);
+ g_object_unref(box);
+ g_object_unref(mw);
mw = NULL;
- }
+ }
g_free(body_buf);
}
diff --git a/src/balsa-mime-widget-image.c b/src/balsa-mime-widget-image.c
index b0d6e5d..bcbcf16 100644
--- a/src/balsa-mime-widget-image.c
+++ b/src/balsa-mime-widget-image.c
@@ -109,7 +109,7 @@ balsa_mime_widget_new_image(BalsaMessage * bm,
G_CALLBACK(balsa_mime_widget_image_gesture_pressed_cb), data);
mw = (BalsaMimeWidget *) g_object_new(BALSA_TYPE_MIME_WIDGET_IMAGE, NULL);
- mw->widget = image;
+ balsa_mime_widget_set_widget(mw, image);
return mw;
}
diff --git a/src/balsa-mime-widget-image.h b/src/balsa-mime-widget-image.h
index 7483490..228ce89 100644
--- a/src/balsa-mime-widget-image.h
+++ b/src/balsa-mime-widget-image.h
@@ -29,34 +29,12 @@ G_BEGIN_DECLS
/*
* GObject class definitions
*/
-#define BALSA_TYPE_MIME_WIDGET_IMAGE \
- (balsa_mime_widget_image_get_type())
-#define BALSA_MIME_WIDGET_IMAGE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- BALSA_TYPE_MIME_WIDGET_IMAGE, \
- BalsaMimeWidgetImage))
+#define BALSA_TYPE_MIME_WIDGET_IMAGE balsa_mime_widget_image_get_type()
-#define BALSA_IS_MIME_WIDGET_IMAGE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), BALSA_TYPE_MIME_WIDGET_IMAGE))
+G_DECLARE_FINAL_TYPE(BalsaMimeWidgetImage, balsa_mime_widget_image,
+ BALSA, MIME_WIDGET_IMAGE, BalsaMimeWidget)
-#define BALSA_MIME_WIDGET_IMAGE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- BALSA_TYPE_MIME_WIDGET_IMAGE, \
- BalsaMimeWidgetImageClass))
-
-#define BALSA_IS_MIME_WIDGET_IMAGE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), BALSA_TYPE_MIME_WIDGET_IMAGE))
-
-#define BALSA_MIME_WIDGET_IMAGE_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS((obj), \
- BALSA_TYPE_MIME_WIDGET_IMAGE, \
- BalsaMimeWidgetImageClass))
-
-GType balsa_mime_widget_image_get_type(void);
-
-typedef struct _BalsaMimeWidgetImage BalsaMimeWidgetImage;
-typedef struct _BalsaMimeWidgetImageClass BalsaMimeWidgetImageClass;
/*
* End of GObject class definitions
*/
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index b7f1004..ecad880 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -123,29 +123,42 @@ balsa_mime_widget_new_message(BalsaMessage * bm,
}
g_free(access_type);
} else if (!g_ascii_strcasecmp("message/rfc822", content_type)) {
- GtkWidget *emb_hdrs;
+ GtkWidget *widget;
+ GtkWidget *container;
+ GtkWidget *header_widget;
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = gtk_frame_new(NULL);
+ widget = gtk_frame_new(NULL);
+ balsa_mime_widget_set_widget(mw, widget);
- mw->container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
- g_object_set(G_OBJECT(mw->container), "margin", BMW_MESSAGE_PADDING, NULL);
- gtk_container_add(GTK_CONTAINER(mw->widget), mw->container);
+ container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
+ g_object_set(G_OBJECT(container), "margin", BMW_MESSAGE_PADDING, NULL);
+ gtk_container_add(GTK_CONTAINER(widget), container);
+ balsa_mime_widget_set_container(mw, container);
- mw->header_widget = emb_hdrs = bm_header_widget_new(bm, NULL);
- gtk_box_pack_start(GTK_BOX(mw->container), emb_hdrs);
+ header_widget = bm_header_widget_new(bm, NULL);
+ gtk_box_pack_start(GTK_BOX(container), header_widget);
+ balsa_mime_widget_set_header_widget(mw, header_widget);
bmw_message_set_headers(bm, mw, mime_body,
bm->shown_headers == HEADERS_ALL);
} else if (!g_ascii_strcasecmp("text/rfc822-headers", content_type)) {
+ GtkWidget *widget;
+ GtkWidget *header_widget;
+
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = gtk_frame_new(_("message headers"));
- mw->header_widget = bm_header_widget_new(bm, NULL);
- gtk_widget_set_valign(mw->header_widget, GTK_ALIGN_START);
- gtk_widget_set_vexpand(mw->header_widget, FALSE);
- g_object_set(G_OBJECT(mw->header_widget), "margin", 5, NULL);
- gtk_container_add(GTK_CONTAINER(mw->widget), mw->header_widget);
+
+ widget = gtk_frame_new(_("message headers"));
+ balsa_mime_widget_set_widget(mw, widget);
+
+ header_widget = bm_header_widget_new(bm, NULL);
+ gtk_widget_set_valign(header_widget, GTK_ALIGN_START);
+ gtk_widget_set_vexpand(header_widget, FALSE);
+ g_object_set(G_OBJECT(header_widget), "margin", 5, NULL);
+ gtk_container_add(GTK_CONTAINER(widget), header_widget);
+ balsa_mime_widget_set_header_widget(mw, header_widget);
+
bmw_message_set_headers(bm, mw, mime_body, TRUE);
}
@@ -163,6 +176,7 @@ 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");
@@ -227,20 +241,22 @@ bmw_message_extbody_url(LibBalsaMessageBody * mime_body,
/* now create & return the widget... */
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- g_object_set(G_OBJECT(mw->widget), "margin", BMW_CONTAINER_BORDER, NULL);
+ widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
+ g_object_set(G_OBJECT(widget), "margin", BMW_CONTAINER_BORDER, NULL);
- gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg->str));
+ gtk_box_pack_start(GTK_BOX(widget), gtk_label_new(msg->str));
g_string_free(msg, TRUE);
button = gtk_button_new_with_label(url);
gtk_widget_set_margin_top(button, BMW_BUTTON_PACK_SPACE);
- gtk_box_pack_start(GTK_BOX(mw->widget), button);
+ gtk_box_pack_start(GTK_BOX(widget), button);
g_object_set_data_full(G_OBJECT(button), "call_url", url,
(GDestroyNotify) g_free);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(extbody_call_url), NULL);
+ balsa_mime_widget_set_widget(mw, widget);
+
return mw;
}
@@ -252,6 +268,7 @@ 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");
@@ -272,20 +289,21 @@ bmw_message_extbody_mail(LibBalsaMessageBody * mime_body)
/* now create & return the widget... */
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- g_object_set(G_OBJECT(mw->widget), "margin", BMW_CONTAINER_BORDER, NULL);
+ widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
+ g_object_set(G_OBJECT(widget), "margin", BMW_CONTAINER_BORDER, NULL);
- gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg->str));
+ gtk_box_pack_start(GTK_BOX(widget), gtk_label_new(msg->str));
g_string_free(msg, TRUE);
button =
gtk_button_new_with_mnemonic(_
("Se_nd message to obtain this part"));
gtk_widget_set_margin_top(button, BMW_BUTTON_PACK_SPACE);
- gtk_box_pack_start(GTK_BOX(mw->widget), button);
+ gtk_box_pack_start(GTK_BOX(widget), button);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(extbody_send_mail), (gpointer) mime_body);
+ balsa_mime_widget_set_widget(mw, widget);
return mw;
}
@@ -386,20 +404,25 @@ balsa_mime_widget_new_message_tl(BalsaMessage * bm,
{
GtkWidget *headers;
BalsaMimeWidget *mw;
+ GtkWidget *box;
+ GtkWidget *container;
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
- g_object_set(G_OBJECT(mw->widget), "margin", BMW_MESSAGE_PADDING, NULL);
+ box = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
+ balsa_mime_widget_set_widget(mw, box);
+ g_object_set(G_OBJECT(box), "margin", BMW_MESSAGE_PADDING, NULL);
- mw->header_widget = headers = bm_header_widget_new(bm, tl_buttons);
- gtk_box_pack_start(GTK_BOX(mw->widget), headers);
+ headers = bm_header_widget_new(bm, tl_buttons);
+ balsa_mime_widget_set_header_widget(mw, headers);
+ gtk_box_pack_start(GTK_BOX(box), headers);
- mw->container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
- gtk_widget_set_vexpand(mw->container, TRUE);
- gtk_widget_set_margin_top(mw->container,
+ container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
+ balsa_mime_widget_set_container(mw, container);
+ gtk_widget_set_vexpand(container, TRUE);
+ gtk_widget_set_margin_top(container,
BMW_CONTAINER_BORDER - BMW_MESSAGE_PADDING);
- gtk_box_pack_start(GTK_BOX(mw->widget), mw->container);
+ gtk_box_pack_start(GTK_BOX(box), container);
return mw;
}
@@ -688,7 +711,7 @@ bmw_message_set_headers_d(BalsaMessage * bm,
gchar *date;
GtkWidget * widget;
- if (!(widget = mw->header_widget))
+ if ((widget = balsa_mime_widget_get_header_widget(mw)) == NULL)
return;
grid = bm_header_widget_get_grid(widget);
@@ -794,8 +817,10 @@ bmw_message_set_headers(BalsaMessage * bm,
bmw_message_set_headers_d(bm, mw, part->embhdrs, part->parts,
part->embhdrs ? part->embhdrs->subject : NULL,
show_all_headers);
- if (!(widget = mw->header_widget))
+
+ if ((widget = balsa_mime_widget_get_header_widget(mw)) == NULL)
return;
+
grid = bm_header_widget_get_grid(widget);
gtk_container_foreach(GTK_CONTAINER(grid), (GtkCallback) foreach_label,
part);
diff --git a/src/balsa-mime-widget-multipart.c b/src/balsa-mime-widget-multipart.c
index 687279e..a5ece75 100644
--- a/src/balsa-mime-widget-multipart.c
+++ b/src/balsa-mime-widget-multipart.c
@@ -34,20 +34,27 @@ balsa_mime_widget_new_multipart(BalsaMessage * bm,
const gchar * content_type, gpointer data)
{
BalsaMimeWidget *mw;
+ GtkWidget *widget;
g_return_val_if_fail(mime_body != NULL, NULL);
g_return_val_if_fail(content_type != NULL, NULL);
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = mw->container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
+ widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
+ balsa_mime_widget_set_widget(mw, widget);
+ balsa_mime_widget_set_container(mw, widget);
#ifdef HAVE_GPGME
if (!g_ascii_strcasecmp("multipart/signed", content_type) &&
mime_body->parts && mime_body->parts->next &&
- mime_body->parts->next->sig_info)
- mw->widget =
- balsa_mime_widget_crypto_frame(mime_body->parts->next, mw->widget,
+ mime_body->parts->next->sig_info) {
+ GtkWidget * crypto_frame;
+
+ crypto_frame =
+ balsa_mime_widget_crypto_frame(mime_body->parts->next, widget,
mime_body->was_encrypted, FALSE, NULL);
+ balsa_mime_widget_set_widget(mw, crypto_frame);
+ }
#endif
return mw;
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index 1a92427..027117f 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -222,6 +222,7 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
GtkTextBuffer *buffer;
GError *err = NULL;
gboolean is_text_plain;
+ GtkWidget *widget;
g_return_val_if_fail(mime_body != NULL, NULL);
@@ -264,18 +265,17 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
/* create the mime object and the text/source view widget */
mwt = g_object_new(BALSA_TYPE_MIME_WIDGET_TEXT, NULL);
- mw = (BalsaMimeWidget *) mwt;
- mw->widget = create_text_widget(content_type);
+ widget = create_text_widget(content_type);
/* configure text or source view */
- gtk_text_view_set_editable(GTK_TEXT_VIEW(mw->widget), FALSE);
- gtk_text_view_set_left_margin(GTK_TEXT_VIEW(mw->widget), BALSA_LEFT_MARGIN);
- gtk_text_view_set_right_margin(GTK_TEXT_VIEW(mw->widget), BALSA_RIGHT_MARGIN);
- gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(mw->widget), GTK_WRAP_WORD_CHAR);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(widget), FALSE);
+ gtk_text_view_set_left_margin(GTK_TEXT_VIEW(widget), BALSA_LEFT_MARGIN);
+ gtk_text_view_set_right_margin(GTK_TEXT_VIEW(widget), BALSA_RIGHT_MARGIN);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(widget), GTK_WRAP_WORD_CHAR);
/* set the message font */
if (!balsa_app.use_system_fonts)
- bm_modify_font_from_string(mw->widget, balsa_app.message_font);
+ bm_modify_font_from_string(widget, balsa_app.message_font);
if (libbalsa_message_body_is_flowed(mime_body)) {
/* Parse, but don't wrap. */
@@ -283,41 +283,41 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
ptr = libbalsa_wrap_rfc2646(ptr, G_MAXINT, FALSE, TRUE, delsp);
} else if (bm->wrap_text
#if HAVE_GTKSOURCEVIEW
- && !GTK_SOURCE_IS_VIEW(mw->widget)
+ && !GTK_SOURCE_IS_VIEW(widget)
#endif
)
libbalsa_wrap_string(ptr, balsa_app.browse_wrap_length);
- g_signal_connect(G_OBJECT(mw->widget), "key_press_event",
+ g_signal_connect(G_OBJECT(widget), "key_press_event",
G_CALLBACK(balsa_mime_widget_key_press_event),
(gpointer) bm);
mwt->mime_body = mime_body;
- g_signal_connect(G_OBJECT(mw->widget), "populate-popup",
+ g_signal_connect(G_OBJECT(widget), "populate-popup",
G_CALLBACK(text_view_populate_popup), mwt);
- buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mw->widget));
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
- mwt->url_list = fill_text_buf_cited(mw->widget, ptr,
+ mwt->url_list = fill_text_buf_cited(widget, ptr,
libbalsa_message_body_is_flowed(mime_body),
is_text_plain);
prepare_url_offsets(buffer, mwt->url_list);
- g_signal_connect_after(G_OBJECT(mw->widget), "realize",
+ g_signal_connect_after(G_OBJECT(widget), "realize",
G_CALLBACK(fix_text_widget), mwt->url_list);
if (mwt->url_list != NULL) {
GtkGesture *gesture;
GtkEventController *controller;
- gesture = gtk_gesture_multi_press_new(mw->widget);
- g_object_set_data_full(G_OBJECT(mw->widget), "balsa-gesture", gesture, g_object_unref);
+ gesture = gtk_gesture_multi_press_new(widget);
+ g_object_set_data_full(G_OBJECT(widget), "balsa-gesture", gesture, g_object_unref);
g_signal_connect(gesture, "pressed",
G_CALLBACK(store_button_coords), NULL);
g_signal_connect(gesture, "released",
G_CALLBACK(check_call_url), mwt->url_list);
- controller = gtk_event_controller_motion_new(mw->widget);
- g_object_set_data_full(G_OBJECT(mw->widget),
+ controller = gtk_event_controller_motion_new(widget);
+ g_object_set_data_full(G_OBJECT(widget),
"balsa-controller", controller, g_object_unref);
g_signal_connect(controller, "motion",
G_CALLBACK(mwt_controller_motion_cb), mwt);
@@ -327,7 +327,7 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
if (is_text_plain) {
/* plain-text highlighting */
- g_object_set_data(G_OBJECT(mw->widget), "phrase-highlight",
+ g_object_set_data(G_OBJECT(widget), "phrase-highlight",
GINT_TO_POINTER(PHRASE_HIGHLIGHT_ON));
phrase_highlight(buffer, "hp-bold", '*', "weight", PANGO_WEIGHT_BOLD);
phrase_highlight(buffer, "hp-underline", '_', "underline", PANGO_UNDERLINE_SINGLE);
@@ -335,10 +335,13 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
}
/* size allocation may not be correct, so we'll check back later */
- balsa_mime_widget_schedule_resize(mw->widget);
-
+ balsa_mime_widget_schedule_resize(widget);
+
g_free(ptr);
+ mw = (BalsaMimeWidget *) mwt;
+ balsa_mime_widget_set_widget(mw, widget);
+
return mw;
}
@@ -1272,8 +1275,9 @@ static BalsaMimeWidget *
bm_widget_new_vcard(BalsaMessage *bm, LibBalsaMessageBody *mime_body,
gchar *ptr, size_t len)
{
- BalsaMimeWidget *mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
+ BalsaMimeWidget *mw;
LibBalsaAddress *addr;
+ GtkWidget *widget;
GtkGrid *grid;
GtkWidget *w;
int row = 1;
@@ -1284,8 +1288,12 @@ bm_widget_new_vcard(BalsaMessage *bm, LibBalsaMessageBody *mime_body,
if (!addr)
return NULL;
- mw->widget = gtk_grid_new();
- grid = (GtkGrid*)mw->widget;
+ 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);
+
+ grid = (GtkGrid *) widget;
gtk_grid_set_row_spacing(grid, 6);
gtk_grid_set_column_spacing(grid, 12);
@@ -1305,7 +1313,6 @@ bm_widget_new_vcard(BalsaMessage *bm, LibBalsaMessageBody *mime_body,
GRID_ATTACH(grid, addr->address_list->data, _("Email Address:"));
}
- g_object_set_data(G_OBJECT(mw->widget), "mime-body", mime_body);
return mw;
}
diff --git a/src/balsa-mime-widget-text.h b/src/balsa-mime-widget-text.h
index 5b4dea5..32f1c49 100644
--- a/src/balsa-mime-widget-text.h
+++ b/src/balsa-mime-widget-text.h
@@ -29,12 +29,11 @@ G_BEGIN_DECLS
/*
* Type declaration.
*/
-GType balsa_mime_widget_text_get_type(void);
+
#define BALSA_TYPE_MIME_WIDGET_TEXT balsa_mime_widget_text_get_type()
-#define BALSA_MIME_WIDGET_TEXT(obj) \
- G_TYPE_CHECK_INSTANCE_CAST (obj, BALSA_TYPE_MIME_WIDGET_TEXT, BalsaMimeWidgetText)
-typedef struct _BalsaMimeWidgetText BalsaMimeWidgetText;
-typedef struct _BalsaMimeWidgetTextClass BalsaMimeWidgetTextClass;
+
+G_DECLARE_FINAL_TYPE(BalsaMimeWidgetText, balsa_mime_widget_text,
+ BALSA, MIME_WIDGET_TEXT, BalsaMimeWidget)
/*
* Method definitions.
diff --git a/src/balsa-mime-widget-vcalendar.c b/src/balsa-mime-widget-vcalendar.c
index 039e83c..d98b52e 100644
--- a/src/balsa-mime-widget-vcalendar.c
+++ b/src/balsa-mime-widget-vcalendar.c
@@ -44,6 +44,7 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
{
LibBalsaVCal *vcal_obj;
BalsaMimeWidget *mw;
+ GtkWidget *widget;
GtkWidget *label;
gchar *text;
GList *l;
@@ -60,7 +61,8 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
return NULL;
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
- mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
+ 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_to_str(vcal_obj->method));
@@ -68,7 +70,7 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
g_free(text);
gtk_widget_set_halign(label, GTK_ALIGN_START);
gtk_widget_set_valign(label, GTK_ALIGN_START);
- gtk_container_add(GTK_CONTAINER(mw->widget), label);
+ gtk_container_add(GTK_CONTAINER(widget), label);
/* a reply may be created only for unread requests */
if ((vcal_obj->method == ITIP_REQUEST) &&
@@ -92,7 +94,7 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
GtkWidget *event =
balsa_vevent_widget((LibBalsaVEvent *) l->data, may_reply,
sender);
- gtk_container_add(GTK_CONTAINER(mw->widget), event);
+ gtk_container_add(GTK_CONTAINER(widget), event);
}
g_object_unref(vcal_obj);
diff --git a/src/balsa-mime-widget.c b/src/balsa-mime-widget.c
index 4762ac6..947dcc0 100644
--- a/src/balsa-mime-widget.c
+++ b/src/balsa-mime-widget.c
@@ -36,10 +36,6 @@
#include "balsa-mime-widget.h"
-/* object related functions */
-static void balsa_mime_widget_init (GTypeInstance *instance, gpointer g_class);
-
-
/* fall-back widget (unknown/unsupported mime type) */
static BalsaMimeWidget *balsa_mime_widget_new_unknown(BalsaMessage * bm,
LibBalsaMessageBody *
@@ -49,41 +45,34 @@ static BalsaMimeWidget *balsa_mime_widget_new_unknown(BalsaMessage * bm,
static void vadj_change_cb(GtkAdjustment *vadj, GtkWidget *widget);
+typedef struct {
+ /* display widget */
+ GtkWidget *widget;
-GType
-balsa_mime_widget_get_type()
-{
- static GType balsa_mime_widget_type = 0;
-
- if (!balsa_mime_widget_type) {
- static const GTypeInfo balsa_mime_widget_info = {
- sizeof(BalsaMimeWidgetClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- NULL, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(BalsaMimeWidget),
- 0, /* n_preallocs */
- (GInstanceInitFunc) balsa_mime_widget_init
- };
-
- balsa_mime_widget_type =
- g_type_register_static(G_TYPE_OBJECT, "BalsaMimeWidget",
- &balsa_mime_widget_info, 0);
- }
+ /* container widget if more sub-parts can be added */
+ GtkWidget *container;
- return balsa_mime_widget_type;
-}
+ /* headers */
+ GtkWidget *header_widget;
+} BalsaMimeWidgetPrivate;
+G_DEFINE_TYPE_WITH_PRIVATE(BalsaMimeWidget, balsa_mime_widget, G_TYPE_OBJECT)
static void
-balsa_mime_widget_init (GTypeInstance *instance, gpointer g_class)
+balsa_mime_widget_class_init(BalsaMimeWidgetClass * klass)
{
- BalsaMimeWidget *self = (BalsaMimeWidget *)instance;
+}
- self->widget = NULL;
- self->container = NULL;
+static void
+balsa_mime_widget_init(BalsaMimeWidget * self)
+{
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(self, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ priv->widget = NULL;
+ priv->container = NULL;
+ priv->header_widget = NULL;
}
@@ -142,9 +131,13 @@ balsa_mime_widget_new(BalsaMessage * bm, LibBalsaMessageBody * mime_body, gpoint
if (!mw)
mw = balsa_mime_widget_new_unknown(bm, mime_body, content_type);
- if (mw) {
- if (mw->widget) {
- g_signal_connect(mw->widget, "notify::has-focus",
+ if (mw != NULL) {
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ if (priv->widget != NULL) {
+ g_signal_connect(priv->widget, "notify::has-focus",
G_CALLBACK(balsa_mime_widget_check_focus), bm);
#ifdef HAVE_GPGME
if (mime_body->sig_info &&
@@ -153,27 +146,25 @@ balsa_mime_widget_new(BalsaMessage * bm, LibBalsaMessageBody * mime_body, gpoint
g_ascii_strcasecmp("application/x-pkcs7-signature", content_type)) {
GtkWidget * signature =
balsa_mime_widget_signature_widget(mime_body, content_type);
- mw->widget = balsa_mime_widget_crypto_frame(mime_body, mw->widget,
+ 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)) {
- mw->widget = balsa_mime_widget_crypto_frame(mime_body, mw->widget,
+ priv->widget = balsa_mime_widget_crypto_frame(mime_body, priv->widget,
TRUE, TRUE, NULL);
}
#endif
- g_object_ref_sink(mw->widget);
+ g_object_ref_sink(priv->widget);
- if (GTK_IS_LAYOUT(mw->widget)) {
+ if (GTK_IS_LAYOUT(priv->widget)) {
GtkAdjustment *vadj;
- g_object_get(G_OBJECT(mw->widget), "vadjustment", &vadj,
+ g_object_get(G_OBJECT(priv->widget), "vadjustment", &vadj,
NULL);
g_signal_connect(vadj, "changed",
- G_CALLBACK(vadj_change_cb), mw->widget);
+ G_CALLBACK(vadj_change_cb), priv->widget);
}
-
- gtk_widget_show(mw->widget);
}
}
g_free(content_type);
@@ -187,6 +178,7 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
LibBalsaMessageBody * mime_body,
const gchar * content_type)
{
+ BalsaMimeWidgetPrivate *priv;
GtkWidget *hbox;
GtkWidget *button = NULL;
gchar *msg;
@@ -197,13 +189,15 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
g_return_val_if_fail(mime_body, NULL);
mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
+ priv = G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
- mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
- g_object_set(G_OBJECT(mw->widget), "margin", BMW_CONTAINER_BORDER, NULL);
+ priv->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
+ g_object_set(G_OBJECT(priv->widget), "margin", BMW_CONTAINER_BORDER, NULL);
if (mime_body->filename) {
msg = g_strdup_printf(_("File name: %s"), mime_body->filename);
- gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg));
+ gtk_box_pack_start(GTK_BOX(priv->widget), gtk_label_new(msg));
g_free(msg);
}
@@ -257,7 +251,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(mw->widget), msg_label);
+ gtk_box_pack_start(GTK_BOX(priv->widget), msg_label);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, BMW_HBOX_SPACE);
gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE);
@@ -267,7 +261,7 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
gtk_widget_set_hexpand(button, TRUE);
gtk_box_pack_start(GTK_BOX(hbox), button);
} else {
- gtk_box_pack_start(GTK_BOX(mw->widget),
+ gtk_box_pack_start(GTK_BOX(priv->widget),
gtk_label_new(_("No open or view action "
"defined for this content type")));
}
@@ -280,7 +274,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(mw->widget), hbox);
+ gtk_box_pack_start(GTK_BOX(priv->widget), hbox);
return mw;
}
@@ -330,3 +324,71 @@ vadj_change_cb(GtkAdjustment *vadj, GtkWidget *widget)
libbalsa_clear_source_id(&resize_idle_id);
balsa_mime_widget_schedule_resize(widget);
}
+
+/*
+ * Getters
+ */
+
+GtkWidget *
+balsa_mime_widget_get_widget(BalsaMimeWidget * mw)
+{
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ return priv->widget;
+}
+
+GtkWidget *
+balsa_mime_widget_get_container(BalsaMimeWidget * mw)
+{
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ return priv->container;
+}
+
+GtkWidget *
+balsa_mime_widget_get_header_widget(BalsaMimeWidget * mw)
+{
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ return priv->header_widget;
+}
+
+/*
+ * Setters
+ */
+
+void
+balsa_mime_widget_set_widget(BalsaMimeWidget * mw, GtkWidget * widget)
+{
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ priv->widget = widget;
+}
+
+void
+balsa_mime_widget_set_container(BalsaMimeWidget * mw, GtkWidget * widget)
+{
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ priv->container = widget;
+}
+
+void
+balsa_mime_widget_set_header_widget(BalsaMimeWidget * mw, GtkWidget * widget)
+{
+ BalsaMimeWidgetPrivate *priv =
+ G_TYPE_INSTANCE_GET_PRIVATE(mw, BALSA_TYPE_MIME_WIDGET,
+ BalsaMimeWidgetPrivate);
+
+ priv->header_widget = widget;
+}
diff --git a/src/balsa-mime-widget.h b/src/balsa-mime-widget.h
index e08b151..afc9511 100644
--- a/src/balsa-mime-widget.h
+++ b/src/balsa-mime-widget.h
@@ -35,41 +35,42 @@ G_BEGIN_DECLS
#define BMW_HEADER_MARGIN_LEFT 2
#define BMW_HEADER_MARGIN_RIGHT 15
-
-#define BALSA_TYPE_MIME_WIDGET (balsa_mime_widget_get_type ())
-#define BALSA_MIME_WIDGET(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, BALSA_TYPE_MIME_WIDGET,
BalsaMimeWidget)
-#define BALSA_MIME_WIDGET_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, BALSA_TYPE_MIME_WIDGET,
BalsaMimeWidgetClass)
-#define BALSA_IS_MIME_WIDGET(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, BALSA_TYPE_MIME_WIDGET)
-
-
-typedef struct _BalsaMimeWidgetClass BalsaMimeWidgetClass;
-
-
-struct _BalsaMimeWidget {
- GObject parent;
-
- /* display widget */
- GtkWidget *widget;
-
- /* container widget if more sub-parts can be added */
- GtkWidget *container;
-
- /* headers */
- GtkWidget *header_widget;
-};
-
+/*
+ * GObject class definitions
+ */
struct _BalsaMimeWidgetClass {
GObjectClass parent;
};
+#define BALSA_TYPE_MIME_WIDGET balsa_mime_widget_get_type()
+
+G_DECLARE_DERIVABLE_TYPE(BalsaMimeWidget, balsa_mime_widget, BALSA, MIME_WIDGET, GObject)
+
+/*
+ * Method definitions.
+ */
-GType balsa_mime_widget_get_type (void);
BalsaMimeWidget *balsa_mime_widget_new(BalsaMessage * bm,
LibBalsaMessageBody * mime_body,
gpointer data);
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);
+
+/*
+ * 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);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]