[balsa/wip/gtk4: 135/351] address-view: Clean up
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 135/351] address-view: Clean up
- Date: Wed, 23 May 2018 21:28:17 +0000 (UTC)
commit efa0fa941ed670fe83bc10a5c7fb46b1c809f4f8
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Thu Jan 25 18:34:39 2018 -0500
address-view: Clean up
libbalsa/address-view.c | 93 ++++++++++++++++++++++++++---------------------
1 files changed, 52 insertions(+), 41 deletions(-)
---
diff --git a/libbalsa/address-view.c b/libbalsa/address-view.c
index a2773fd..848f529 100644
--- a/libbalsa/address-view.c
+++ b/libbalsa/address-view.c
@@ -158,12 +158,14 @@ enum {
LIBBALSA_ADDRESS_VIEW_ENTRY_COLUMN
};
-#define lbav_get_button_at(grid, row) \
- gtk_grid_get_child_at((grid), LIBBALSA_ADDRESS_VIEW_BUTTON_COLUMN, (row))
-#define lbav_get_combo_at(grid, row) \
- gtk_grid_get_child_at((grid), LIBBALSA_ADDRESS_VIEW_COMBO_COLUMN, (row))
-#define lbav_get_entry_at(grid, row) \
- gtk_grid_get_child_at((grid), LIBBALSA_ADDRESS_VIEW_ENTRY_COLUMN, (row))
+#define lbav_get_button(a,r) \
+ gtk_grid_get_child_at((GtkGrid*)(a),LIBBALSA_ADDRESS_VIEW_BUTTON_COLUMN,(r))
+#define lbav_get_combo(a,r) \
+ gtk_grid_get_child_at((GtkGrid*)(a),LIBBALSA_ADDRESS_VIEW_COMBO_COLUMN,(r))
+#define lbav_get_entry(a,r) \
+ gtk_grid_get_child_at((GtkGrid*)(a),LIBBALSA_ADDRESS_VIEW_ENTRY_COLUMN,(r))
+#define lbav_remove_row(a,r) \
+ gtk_grid_remove_row((GtkGrid*)(a),(r))
typedef enum {
WITH_BOOK_ICON,
@@ -329,21 +331,20 @@ static void
lbav_close_button_clicked(GtkWidget * button,
LibBalsaAddressView * address_view)
{
- GtkGrid *grid = (GtkGrid *) address_view;
gint row;
GtkWidget *child;
gint type;
- for (row = 0; (child = lbav_get_button_at(grid, row)) != NULL; row++) {
+ for (row = 0; (child = lbav_get_button(address_view, row)) != NULL; row++) {
if (child == button) {
break;
}
}
- child = lbav_get_combo_at(grid, row);
+ child = lbav_get_combo(address_view, row);
type = gtk_combo_box_get_active(GTK_COMBO_BOX(child));
- gtk_grid_remove_row(grid, row);
+ lbav_remove_row(address_view, row);
/* Make sure the view has at least one row: */
lbav_ensure_blank_row(address_view, type);
@@ -390,7 +391,6 @@ lbav_combo_changed_idle(LibBalsaAddressView * address_view)
{
/* The type of an address was changed. We make it the last address
* of the new type, moving the row if necessary. */
- GtkGrid *grid = (GtkGrid *) address_view;
GtkWidget *combo_box = address_view->changed_combo;
gint row;
GtkWidget *child;
@@ -398,18 +398,21 @@ lbav_combo_changed_idle(LibBalsaAddressView * address_view)
const gchar *name;
gint new_type;
- for (row = 0; (child = lbav_get_combo_at(grid, row)) != NULL; row++) {
+ /* Find the row of the address whose type was changed */
+ for (row = 0; (child = lbav_get_combo(address_view, row)) != NULL; row++) {
if (child == combo_box) {
break;
}
}
old_row = row;
- child = lbav_get_entry_at(grid, row);
+ /* Save the address */
+ child = lbav_get_entry(address_view, row);
name = gtk_entry_get_text(GTK_ENTRY(child));
+ /* Find the new row for the addrress */
new_type = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box));
- for (row = 0; (child = lbav_get_combo_at(grid, row)) != NULL; row++) {
+ for (row = 0; (child = lbav_get_combo(address_view, row)) != NULL; row++) {
gint type;
if (row == old_row) {
@@ -423,17 +426,18 @@ lbav_combo_changed_idle(LibBalsaAddressView * address_view)
}
if (row != old_row) {
+ /* Move the address to the new row */
LibbalsaAddressViewIcon icon;
icon = (name == NULL || name[0] == '\0') ? WITH_BOOK_ICON : WITH_CLOSE_ICON;
lbav_insert_row(address_view, row, new_type, icon);
- child = lbav_get_entry_at(grid, row);
+ child = lbav_get_entry(address_view, row);
gtk_entry_set_text(GTK_ENTRY(child), name);
if (old_row > row) {
++old_row;
}
- gtk_grid_remove_row(grid, old_row);
+ lbav_remove_row(address_view, old_row);
lbav_ensure_blank_row(address_view, new_type);
g_signal_emit(address_view, address_view_signals[VIEW_CHANGED], 0);
@@ -441,6 +445,7 @@ lbav_combo_changed_idle(LibBalsaAddressView * address_view)
g_object_unref(combo_box);
g_object_unref(address_view);
+
return G_SOURCE_REMOVE;
}
@@ -458,22 +463,21 @@ static void
lbav_entry_activated(GtkEntry * entry,
LibBalsaAddressView * address_view)
{
- GtkGrid *grid = (GtkGrid *) address_view;
gint row;
GtkWidget *child;
gint type;
- for (row = 0; (child = lbav_get_entry_at(grid, row)) != NULL; row++) {
+ for (row = 0; (child = lbav_get_entry(address_view, row)) != NULL; row++) {
if (child == (GtkWidget *) entry) {
break;
}
}
- child = lbav_get_button_at(grid, row);
+ child = lbav_get_button(address_view, row);
gtk_widget_destroy(child);
lbav_set_button(address_view, row, WITH_CLOSE_ICON);
- child = lbav_get_combo_at(grid, row);
+ child = lbav_get_combo(address_view, row);
type = gtk_combo_box_get_active(GTK_COMBO_BOX(child));
lbav_ensure_blank_row(address_view, type);
@@ -569,26 +573,29 @@ lbav_insert_row(LibBalsaAddressView * address_view, gint row,
static gint
lbav_ensure_blank_row(LibBalsaAddressView * address_view, gint type)
{
- GtkGrid *grid = (GtkGrid *) address_view;
gint row;
GtkWidget *child;
g_assert(address_view->n_types == 0 || type < address_view->n_types);
/* Remove all existing blank rows */
- for (row = 0; (child = lbav_get_entry_at(grid, row)) != NULL; /* nothing */) {
+ for (row = 0; (child = lbav_get_entry(address_view, row)) != NULL; /* nothing */) {
const gchar *name;
name = gtk_entry_get_text(GTK_ENTRY(child));
if (name == NULL || name[0] == '\0') {
- gtk_grid_remove_row(grid, row);
+ lbav_remove_row(address_view, row);
} else {
+ /* Make sure the row has a close button. */
+ child = lbav_get_button(address_view, row);
+ gtk_widget_destroy(child);
+ lbav_set_button(address_view, row, WITH_CLOSE_ICON);
++row;
}
}
/* Find the last row matching type */
- for (row = 0; (child = lbav_get_combo_at(grid, row)) != NULL; row++) {
+ for (row = 0; (child = lbav_get_combo(address_view, row)) != NULL; row++) {
if (gtk_combo_box_get_active(GTK_COMBO_BOX(child)) > type) {
break;
}
@@ -637,7 +644,6 @@ static void
lbav_add_from_list(LibBalsaAddressView * address_view,
gint row, InternetAddressList * list)
{
- GtkGrid *grid = (GtkGrid *) address_view;
gint type;
int i;
@@ -650,17 +656,17 @@ lbav_add_from_list(LibBalsaAddressView * address_view,
lbav_clean_text(name);
if (i == 0) {
- child = lbav_get_combo_at(grid, row);
+ child = lbav_get_combo(address_view, row);
type = gtk_combo_box_get_active(GTK_COMBO_BOX(child));
- child = lbav_get_button_at(grid, row);
+ child = lbav_get_button(address_view, row);
gtk_widget_destroy(child);
lbav_set_button(address_view, row, WITH_CLOSE_ICON);
} else {
lbav_insert_row(address_view, ++row, type, WITH_CLOSE_ICON);
}
- child = lbav_get_entry_at(grid, row);
+ child = lbav_get_entry(address_view, row);
gtk_entry_set_text(GTK_ENTRY(child), name);
g_free(name);
}
@@ -695,17 +701,16 @@ lbav_add_from_string(LibBalsaAddressView * address_view,
static void
lbav_remove_type(LibBalsaAddressView * address_view, gint type)
{
- GtkGrid *grid = (GtkGrid *) address_view;
gint row;
GtkWidget *child;
- for (row = 0; (child = lbav_get_combo_at(grid, row)) != NULL; /* nothing */) {
+ for (row = 0; (child = lbav_get_combo(address_view, row)) != NULL; /* nothing */) {
gint this_type;
this_type = gtk_combo_box_get_active(GTK_COMBO_BOX(child));
if (this_type == type) {
- gtk_grid_remove_row(grid, row);
+ lbav_remove_row(address_view, row);
} else {
++row;
}
@@ -768,6 +773,7 @@ lbav_entry_changed_cb(GtkEntry * entry, LibBalsaAddressView * address_view)
if (gtk_widget_get_window(GTK_WIDGET(entry)))
lbav_entry_setup_matches(address_view, entry, completion,
LIBBALSA_ADDRESS_VIEW_MATCH_FAST);
+ address_view->last_was_escape = FALSE;
}
/*
@@ -782,11 +788,11 @@ lbav_key_pressed_cb(GtkEntry * entry,
guint keyval;
if (!gdk_event_get_keyval(event, &keyval) || keyval != GDK_KEY_Escape)
- return FALSE;
+ return GDK_EVENT_PROPAGATE;
if (address_view->last_was_escape) {
address_view->last_was_escape = FALSE;
- return FALSE;
+ return GDK_EVENT_PROPAGATE;
}
address_view->last_was_escape = TRUE;
@@ -799,7 +805,7 @@ lbav_key_pressed_cb(GtkEntry * entry,
g_signal_handlers_unblock_by_func(entry, lbav_entry_changed_cb,
address_view);
- return TRUE;
+ return GDK_EVENT_STOP;
}
/*
@@ -903,8 +909,13 @@ lbav_notify_has_focus_cb(GtkEntry *entry,
return;
}
+ /* If the user touched Esc, all matches were shown, so that is the
+ * list that we check; otherwise, the user has seen only fast matches,
+ * so that is the list we check. */
match = lbav_get_matching_addresses(address_view, name,
- LIBBALSA_ADDRESS_VIEW_MATCH_ALL);
+ address_view->last_was_escape ?
+ LIBBALSA_ADDRESS_VIEW_MATCH_ALL :
+ LIBBALSA_ADDRESS_VIEW_MATCH_FAST);
if (match == NULL) {
/* No matching addresses */
@@ -926,6 +937,8 @@ lbav_notify_has_focus_cb(GtkEntry *entry,
address_view);
g_free(the_addr);
+
+ lbav_entry_activated(entry, address_view);
}
g_list_free_full(match, g_object_unref);
@@ -1018,14 +1031,13 @@ libbalsa_address_view_add_to_row(LibBalsaAddressView * address_view,
GtkWidget * button,
const gchar * addresses)
{
- GtkGrid *grid = (GtkGrid *) address_view;
gint row;
GtkWidget *child;
gint type;
g_return_if_fail(LIBBALSA_IS_ADDRESS_VIEW(address_view));
- for (row = 0; (child = lbav_get_button_at(grid, row)) != NULL; row++) {
+ for (row = 0; (child = lbav_get_button(address_view, row)) != NULL; row++) {
if (child == button) {
break;
}
@@ -1033,7 +1045,7 @@ libbalsa_address_view_add_to_row(LibBalsaAddressView * address_view,
lbav_add_from_string(address_view, row, addresses);
- child = lbav_get_combo_at(grid, row);
+ child = lbav_get_combo(address_view, row);
type = gtk_combo_box_get_active(GTK_COMBO_BOX(child));
lbav_ensure_blank_row(address_view, type);
}
@@ -1098,7 +1110,6 @@ InternetAddressList *
libbalsa_address_view_get_list(LibBalsaAddressView * address_view,
const gchar * address_type)
{
- GtkGrid *grid = (GtkGrid *) address_view;
gint type;
InternetAddressList *address_list;
gint row;
@@ -1111,7 +1122,7 @@ libbalsa_address_view_get_list(LibBalsaAddressView * address_view,
|| type < address_view->n_types, NULL);
address_list = internet_address_list_new();
- for (row = 0; (child = lbav_get_combo_at(grid, row)) != NULL; row++) {
+ for (row = 0; (child = lbav_get_combo(address_view, row)) != NULL; row++) {
gint this_type;
this_type = gtk_combo_box_get_active(GTK_COMBO_BOX(child));
@@ -1120,7 +1131,7 @@ libbalsa_address_view_get_list(LibBalsaAddressView * address_view,
const gchar *name;
InternetAddressList *tmp_list;
- child = lbav_get_entry_at(grid, row);
+ child = lbav_get_entry(address_view, row);
name = gtk_entry_get_text(GTK_ENTRY(child));
tmp_list = internet_address_list_parse_string(name);
if (tmp_list != NULL) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]