[balsa] ab-main: Use GMenu API instead of GtkBuilder
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa] ab-main: Use GMenu API instead of GtkBuilder
- Date: Wed, 18 Sep 2019 16:34:57 +0000 (UTC)
commit 606d1ee26c356b81acc1572f8fb6ee36c9ef7845
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Wed Sep 18 12:34:27 2019 -0400
ab-main: Use GMenu API instead of GtkBuilder
* src/ab-main.c (bab_cleanup), (set_address_book_menu_items),
(file_delete_activated):
* ui/ab-main.ui: no need for place-holder
ChangeLog | 8 +++++++
src/ab-main.c | 74 ++++++++++++++++++++++++-----------------------------------
ui/ab-main.ui | 3 ---
3 files changed, 38 insertions(+), 47 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index ed5a8ad98..6479bb3c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2019-09-18 Peter Bloomfield <pbloomfield bellsouth net>
+
+ ab-main: Use GMenu API instead of GtkBuilder
+
+ * src/ab-main.c (bab_cleanup), (set_address_book_menu_items),
+ (file_delete_activated):
+ * ui/ab-main.ui: no need for place-holder
+
2019-09-18 Peter Bloomfield <pbloomfield bellsouth net>
address-book-config: Do not crash
diff --git a/src/ab-main.c b/src/ab-main.c
index 7fa0aabbe..0588acaa3 100644
--- a/src/ab-main.c
+++ b/src/ab-main.c
@@ -68,12 +68,14 @@ struct ABMainWindow {
LibBalsaAddress *displayed_address;
GMenu *file_menu;
+ GMenu *books_menu;
} contacts_app;
static void
bab_cleanup(void)
{
+ g_object_unref(contacts_app.books_menu);
gtk_main_quit();
}
@@ -256,63 +258,47 @@ address_changed_cb(struct ABMainWindow *aw)
static void
set_address_book_menu_items(void)
{
- GString *string;
GList *l;
guint pos;
- gchar *s;
- GtkBuilder *builder;
- GMenuModel *menu_model;
+ GMenu *menu = contacts_app.books_menu;
- pos = g_menu_model_get_n_items(G_MENU_MODEL (contacts_app.file_menu));
- g_menu_remove(contacts_app.file_menu, --pos);
+ if (menu == NULL) {
+ contacts_app.books_menu = menu = g_menu_new();
+ g_menu_append_section(contacts_app.file_menu, NULL, G_MENU_MODEL(menu));
+ } else {
+ g_menu_remove_all(menu);
+ }
pos = 0;
- string = g_string_new(NULL);
- g_string_append(string, "<interface>");
- g_string_append(string, "<menu id='address-book-menu'>");
- g_string_append(string, "<section>");
- for (l = contacts_app.address_book_list; l; l = l->next) {
+ for (l = contacts_app.address_book_list; l != NULL; l = l->next) {
LibBalsaAddressBook *address_book = l->data;
+ const gchar *name;
+ gchar *label;
+ gchar *detailed_action;
+ gchar *accel;
+ GMenuItem *item;
- if (!address_book)
+ if (address_book == NULL)
continue;
- g_string_append(string, "<item>");
-
- g_string_append(string, "<attribute name='label'>");
- g_string_append_printf(string, "_%d:%s", ++pos,
- libbalsa_address_book_get_name(address_book));
- g_string_append(string, "</attribute>");
+ name = libbalsa_address_book_get_name(address_book);
- g_string_append(string, "<attribute name='action'>");
- g_string_append(string, "win.address-book");
- g_string_append(string, "</attribute>");
+ label = g_strdup_printf("_%d:%s", ++pos, name);
+ detailed_action = g_strdup_printf("win.address-book::%s", name);
+ item = g_menu_item_new(label, detailed_action);
+ g_free(detailed_action);
+ g_free(label);
- g_string_append(string, "<attribute name='target'>");
- g_string_append(string, libbalsa_address_book_get_name(address_book));
- g_string_append(string, "</attribute>");
+ accel = g_strdup_printf("<Primary>%d", pos);
+ g_menu_item_set_attribute(item, "accel", "s", accel);
+ g_free(accel);
- g_string_append(string, "<attribute name='accel'>");
- g_string_append_printf(string, "<Primary>%d", pos);
- g_string_append(string, "</attribute>");
-
- g_string_append(string, "</item>");
+ g_menu_append_item(menu, item);
+ g_object_unref(item);
}
- g_string_append(string, "</section>");
- g_string_append(string, "</menu>");
- g_string_append(string, "</interface>");
- s = g_string_free(string, FALSE);
-
- builder = gtk_builder_new_from_string(s, -1);
- g_free(s);
- menu_model =
- G_MENU_MODEL(gtk_builder_get_object(builder, "address-book-menu"));
- g_menu_append_section(contacts_app.file_menu, NULL, menu_model);
libbalsa_window_set_accels(GTK_APPLICATION_WINDOW(contacts_app.window),
- menu_model);
-
- g_object_unref(builder);
+ G_MENU_MODEL(menu));
}
static gboolean
@@ -452,8 +438,8 @@ file_delete_activated(GSimpleAction * action,
const gchar *config_prefix;
GList *list;
- if (!(address_book = contacts_app.address_book)
- || !g_list_next(contacts_app.address_book_list))
+ if ((address_book = contacts_app.address_book) == NULL
+ || contacts_app.address_book_list->next == NULL)
return;
config_prefix = libbalsa_address_book_get_config_prefix(address_book);
diff --git a/ui/ab-main.ui b/ui/ab-main.ui
index f530dc56b..a02f78fbd 100644
--- a/ui/ab-main.ui
+++ b/ui/ab-main.ui
@@ -57,9 +57,6 @@
<attribute name='action'>win.file-quit</attribute>
</item>
</section>
- <section>
- <!-- Placeholder for the address books section -->
- </section>
</submenu>
<submenu>
<attribute name='label' translatable='yes'>_Entry</attribute>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]