[balsa/gtk3] Put attachment list in its own pane
- From: Peter Bloomfield <PeterB src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/gtk3] Put attachment list in its own pane
- Date: Fri, 21 Jun 2013 16:26:25 +0000 (UTC)
commit 752eadc00dc53883c3b34b3b62cfd8857f8df9e7
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Fri Jun 21 12:25:51 2013 -0400
Put attachment list in its own pane
* src/sendmsg-window.c (remove_attachment), (change_attach_mode),
(show_attachment_widget), (add_attachment),
(add_urlref_attachment), (create_info_pane), (sw_attachment_list),
(sendmsg_window_new): put attachment list in its own pane.
* src/sendmsg-window.h: add members tree_view and paned, and
remove member attachments[].
ChangeLog | 9 ++++
src/sendmsg-window.c | 125 +++++++++++++++++++++++++++++++------------------
src/sendmsg-window.h | 3 +-
3 files changed, 90 insertions(+), 47 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 864e009..fe27e37 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2013-06-21 Peter Bloomfield
+
+ * src/sendmsg-window.c (remove_attachment), (change_attach_mode),
+ (show_attachment_widget), (add_attachment),
+ (add_urlref_attachment), (create_info_pane), (sw_attachment_list),
+ (sendmsg_window_new): put attachment list in its own pane.
+ * src/sendmsg-window.h: add members tree_view and paned, and
+ remove member attachments[].
+
2013-06-17 Peter Bloomfield
* src/sendmsg-window.c (create_info_pane): allow the recipients
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index a357e56..aa8795b 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -704,7 +704,7 @@ static BalsaAttachInfo* balsa_attach_info_new();
static void balsa_attach_info_destroy(GObject * object);
-#define BALSA_MSG_ATTACH_MODEL(x) gtk_tree_view_get_model(GTK_TREE_VIEW((x)->attachments[1]))
+#define BALSA_MSG_ATTACH_MODEL(x) gtk_tree_view_get_model(GTK_TREE_VIEW((x)->tree_view))
#define TYPE_BALSA_ATTACH_INFO \
@@ -1696,7 +1696,7 @@ remove_attachment(GtkWidget * menu_item, BalsaAttachInfo *info)
g_return_if_fail(info->bm != NULL);
/* get the selected element */
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(info->bm->attachments[1]));
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(info->bm->tree_view));
if (!gtk_tree_selection_get_selected(selection, &model, &iter))
return;
@@ -1738,7 +1738,7 @@ change_attach_mode(GtkWidget * menu_item, BalsaAttachInfo *info)
g_return_if_fail(info->bm != NULL);
/* get the selected element */
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(info->bm->attachments[1]));
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(info->bm->tree_view));
if (!gtk_tree_selection_get_selected(selection, &model, &iter))
return;
@@ -1837,21 +1837,47 @@ on_open_url_cb(GtkWidget * menu_item, BalsaAttachInfo * info)
}
}
-
+static GtkWidget * sw_attachment_list(BalsaSendmsg *bsmsg);
static void
show_attachment_widget(BalsaSendmsg *bsmsg)
{
- int pos;
- for(pos=0; pos<4; pos++)
- gtk_widget_show_all(GTK_WIDGET(bsmsg->attachments[pos]));
-}
+ GtkPaned *outer_paned;
+ GtkWidget *child;
-static void
-hide_attachment_widget(BalsaSendmsg *bsmsg)
-{
- int pos;
- for(pos=0; pos<4; pos++)
- gtk_widget_hide(GTK_WIDGET(bsmsg->attachments[pos]));
+ outer_paned = GTK_PANED(bsmsg->paned);
+ child = gtk_paned_get_child1(outer_paned);
+
+ if (!GTK_IS_PANED(child)) {
+ gint position;
+ GtkRequisition minimum_size;
+ GtkWidget *paned;
+ GtkPaned *inner_paned;
+
+ position = gtk_paned_get_position(outer_paned);
+ if (position <= 0) {
+ gtk_widget_get_preferred_size(child, &minimum_size, NULL);
+ position = minimum_size.height;
+ }
+ gtk_container_remove(GTK_CONTAINER(bsmsg->paned),
+ g_object_ref(child));
+
+ paned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+ gtk_widget_show(paned);
+
+ inner_paned = GTK_PANED(paned);
+ gtk_paned_add1(inner_paned, child);
+ g_object_unref(child);
+
+ child = sw_attachment_list(bsmsg);
+ gtk_widget_show_all(child);
+ gtk_paned_add2(inner_paned, child);
+ gtk_paned_set_position(inner_paned, position);
+
+ gtk_widget_get_preferred_size(child, &minimum_size, NULL);
+ gtk_paned_add1(outer_paned, paned);
+ gtk_paned_set_position(outer_paned,
+ position + minimum_size.height);
+ }
}
/* Ask the user for a charset; returns ((LibBalsaCodeset) -1) on cancel. */
@@ -2116,6 +2142,8 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
utf8name = g_strdup(uri_utf8);
}
+ show_attachment_widget(bsmsg);
+
model = BALSA_MSG_ATTACH_MODEL(bsmsg);
gtk_list_store_append(GTK_LIST_STORE(model), &iter);
@@ -2208,8 +2236,6 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
g_free(content_type);
g_free(content_desc);
- show_attachment_widget(bsmsg);
-
return TRUE;
}
@@ -2239,6 +2265,8 @@ add_urlref_attachment(BalsaSendmsg * bsmsg, gchar *url)
attach_data = balsa_attach_info_new(bsmsg);
attach_data->charset = NULL;
+ show_attachment_widget(bsmsg);
+
model = BALSA_MSG_ATTACH_MODEL(bsmsg);
gtk_list_store_append(GTK_LIST_STORE(model), &iter);
@@ -2283,8 +2311,6 @@ add_urlref_attachment(BalsaSendmsg * bsmsg, gchar *url)
g_object_unref(pixbuf);
g_free(url);
- show_attachment_widget(bsmsg);
-
return TRUE;
}
@@ -2908,13 +2934,7 @@ static GtkWidget *
create_info_pane(BalsaSendmsg * bsmsg)
{
guint row = 0;
- GtkWidget *sw;
GtkWidget *grid;
- GtkWidget *frame;
- GtkListStore *store;
- GtkCellRenderer *renderer;
- GtkTreeView *view;
- GtkTreeViewColumn *column;
grid = gtk_grid_new();
gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
@@ -2977,22 +2997,39 @@ create_info_pane(BalsaSendmsg * bsmsg)
&balsa_app.fcc_mru);
create_email_or_string_entry(grid, _("F_cc:"), ++row, bsmsg->fcc);
+ gtk_widget_show_all(grid);
+ return grid;
+}
+
+static GtkWidget *
+sw_attachment_list(BalsaSendmsg *bsmsg)
+{
+ GtkWidget *grid;
+ GtkWidget *label;
+ GtkWidget *sw;
+ GtkListStore *store;
+ GtkWidget *tree_view;
+ GtkCellRenderer *renderer;
+ GtkTreeView *view;
+ GtkTreeViewColumn *column;
+ GtkWidget *frame;
+
+ grid = gtk_grid_new();
+ gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
+ gtk_grid_set_column_spacing(GTK_GRID(grid), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(grid), 6);
+
/* Attachment list */
- bsmsg->attachments[0] = gtk_label_new_with_mnemonic(_("_Attachments:"));
- gtk_misc_set_alignment(GTK_MISC(bsmsg->attachments[0]), 0.0, 0.5);
- gtk_misc_set_padding(GTK_MISC(bsmsg->attachments[0]), GNOME_PAD_SMALL,
+ label = gtk_label_new_with_mnemonic(_("_Attachments:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_misc_set_padding(GTK_MISC(label), GNOME_PAD_SMALL,
GNOME_PAD_SMALL);
- ++row;
- gtk_grid_attach(GTK_GRID(grid), bsmsg->attachments[0], 0, row, 1, 1);
+ gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 1, 1);
sw = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
-#if 0
- g_signal_connect(sw, "size-request",
- G_CALLBACK(sw_scroll_size_request), NULL);
-#endif
store = gtk_list_store_new(ATTACH_NUM_COLUMNS,
TYPE_BALSA_ATTACH_INFO,
@@ -3002,13 +3039,13 @@ create_info_pane(BalsaSendmsg * bsmsg)
G_TYPE_UINT64,
G_TYPE_STRING);
- bsmsg->attachments[1] = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
- gtk_widget_set_vexpand(bsmsg->attachments[1], TRUE);
- view = GTK_TREE_VIEW(bsmsg->attachments[1]);
+ bsmsg->tree_view = tree_view =
+ gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ gtk_widget_set_vexpand(tree_view, TRUE);
+ view = GTK_TREE_VIEW(tree_view);
gtk_tree_view_set_headers_visible(view, TRUE);
gtk_tree_view_set_rules_hint(view, TRUE);
g_object_unref(store);
- bsmsg->attachments[2] = NULL;
/* column for type icon */
renderer = gtk_cell_renderer_pixbuf_new();
@@ -3069,21 +3106,16 @@ create_info_pane(BalsaSendmsg * bsmsg)
drop_types, ELEMENTS(drop_types),
GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
- gtk_widget_set_size_request(bsmsg->attachments[1], -1, 100);
+ gtk_widget_set_size_request(tree_view, -1, 100);
frame = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
- gtk_container_add(GTK_CONTAINER(sw), bsmsg->attachments[1]);
+ gtk_container_add(GTK_CONTAINER(sw), tree_view);
gtk_container_add(GTK_CONTAINER(frame), sw);
gtk_widget_set_hexpand(frame, TRUE);
- gtk_grid_attach(GTK_GRID(grid), frame, 1, row, 1, 1);
-
- bsmsg->attachments[2] = sw;
- bsmsg->attachments[3] = frame;
+ gtk_grid_attach(GTK_GRID(grid), frame, 1, 0, 1, 1);
- gtk_widget_show_all(grid);
- hide_attachment_widget(bsmsg);
return grid;
}
@@ -4682,12 +4714,13 @@ sendmsg_window_new()
/* Paned window for the addresses at the top, and the content at the
* bottom: */
- paned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+ bsmsg->paned = paned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
gtk_box_pack_start(GTK_BOX(main_box), paned, TRUE, TRUE, 0);
gtk_widget_show(paned);
/* create the top portion with the to, from, etc in it */
gtk_paned_add1(GTK_PANED(paned), create_info_pane(bsmsg));
+ bsmsg->tree_view = NULL;
/* create text area for the message */
gtk_paned_add2(GTK_PANED(paned), create_text_area(bsmsg));
diff --git a/src/sendmsg-window.h b/src/sendmsg-window.h
index 7007f08..65b5e65 100644
--- a/src/sendmsg-window.h
+++ b/src/sendmsg-window.h
@@ -65,7 +65,7 @@ extern "C" {
#if !defined(ENABLE_TOUCH_UI)
GtkWidget *replyto[2];
#endif /* ENABLE_TOUCH_UI */
- GtkWidget *attachments[4];
+ GtkWidget *tree_view;
gchar *in_reply_to;
GList *references;
GtkWidget *text;
@@ -117,6 +117,7 @@ extern "C" {
#if !defined(ENABLE_TOUCH_UI)
GtkActionGroup *gpg_action_group;
#endif /* ENABLE_TOUCH_UI */
+ GtkWidget *paned;
};
BalsaSendmsg *sendmsg_window_compose(void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]