[balsa/popover: 6/6] More GMenu porting



commit 9b4a8431620b0dce36e69637d0a6cd2655d63a9f
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Fri May 1 11:05:36 2020 -0400

    More GMenu porting

 src/sendmsg-window.c | 98 +++++++++++++++++++++++++---------------------------
 1 file changed, 47 insertions(+), 51 deletions(-)
---
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index c2485b7c2..ec3f9eaeb 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -1318,16 +1318,6 @@ remove_attachment(GSimpleAction *action,
     gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
 }
 
-static void
-set_attach_menu_sensitivity(GtkWidget * widget, gpointer data)
-{
-    gint mode =
-        GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "new-mode"));
-
-    if (mode)
-        gtk_widget_set_sensitive(widget, mode != GPOINTER_TO_INT(data));
-}
-
 /* change attachment mode - right mouse button callback */
 static void
 change_attach_mode(GSimpleAction *action,
@@ -1392,11 +1382,6 @@ change_attach_mode(GSimpleAction *action,
     info->mode = new_mode;
     gtk_list_store_set(GTK_LIST_STORE(model), &iter, ATTACH_MODE_COLUMN,
                       info->mode, -1);
-
-    /* set the menu's sensitivities */
-    gtk_container_forall(GTK_CONTAINER(gtk_widget_get_parent(menu_item)),
-                        set_attach_menu_sensitivity,
-                         GINT_TO_POINTER(info->mode));
 }
 
 
@@ -1406,7 +1391,7 @@ attachment_menu_vfs_cb(GSimpleAction *action,
                        GVariant      *parameter,
                        gpointer       user_data)
 {
-    const gchar *app = g_variant_get_string(parameter);
+    const gchar *app = g_variant_get_string(parameter, NULL);
     BalsaAttachInfo *info = user_data;
     GError *err = NULL;
     gboolean result;
@@ -1422,8 +1407,11 @@ attachment_menu_vfs_cb(GSimpleAction *action,
 
 /* URL external body - right mouse button callback */
 static void
-on_open_url_cb(GtkWidget * menu_item, BalsaAttachInfo * info)
+on_open_url_cb(GSimpleAction *action,
+               GVariant      *parameter,
+               gpointer       user_data)
 {
+    BalsaAttachInfo *info = user_data;
 #if GTK_CHECK_VERSION(3, 22, 0)
     GtkWidget *toplevel;
 #else /* GTK_CHECK_VERSION(3, 22, 0) */
@@ -1432,19 +1420,17 @@ on_open_url_cb(GtkWidget * menu_item, BalsaAttachInfo * info)
     GError *err = NULL;
     const gchar * uri;
 
-    g_return_if_fail(info != NULL);
     uri = libbalsa_vfs_get_uri(info->file_uri);
-    g_return_if_fail(uri != NULL);
 
     g_message("open URL %s", uri);
 #if GTK_CHECK_VERSION(3, 22, 0)
-    toplevel = gtk_widget_get_toplevel(GTK_WIDGET(menu_item));
+    toplevel = gtk_widget_get_toplevel(info->bm->window);
     if (gtk_widget_is_toplevel(toplevel)) {
         gtk_show_uri_on_window(GTK_WINDOW(toplevel), uri,
                                gtk_get_current_event_time(), &err);
     }
 #else  /* GTK_CHECK_VERSION(3, 22, 0) */
-    screen = gtk_widget_get_screen(menu_item);
+    screen = gtk_widget_get_screen(info->bm->window);
     gtk_show_uri(screen, uri, gtk_get_current_event_time(), &err);
 #endif /* GTK_CHECK_VERSION(3, 22, 0) */
     if (err) {
@@ -1676,16 +1662,15 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
     gchar *utf8name;
     GError *err = NULL;
     GdkPixbuf *pixbuf;
-    GtkWidget *menu_item;
     gchar *content_desc;
-    GMenu *menu;
-    GMenuItem *menu_item;
-    static GActionEntry[] attachment_entries = {
+    GSimpleActionGroup *simple;
+    static GActionEntry attachment_entries[] = {
         {"new-mode", change_attach_mode},
-        {"remove-attachment", remove_attachment},
+        {"remove", remove_attachment},
         {"launch-app", attachment_menu_vfs_cb},
     };
-    GSimpleActionGroup *simple;
+    GMenu *menu;
+    GMenuItem *menu_item;
 
     if (balsa_app.debug)
        fprintf(stderr, "Trying to attach '%s'\n", filename);
@@ -1781,7 +1766,7 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
                                     attachment_entries,
                                     G_N_ELEMENTS(attachment_entries),
                                     attach_data);
-    gtk_widget_insert_action_group(GTK_WIDGET(bsmsg->window),
+    gtk_widget_insert_action_group(bsmsg->window,
                                    "attachment",
                                    G_ACTION_GROUP(simple));
     g_object_unref(simple);
@@ -1792,7 +1777,7 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
     if (can_inline) {
         menu_item = g_menu_item_new(_(attach_modes[LIBBALSA_ATTACH_AS_INLINE]),
                                     NULL);
-        g_menu_item_set_action_and_target(menu_item, "new-mode", "i",
+        g_menu_item_set_action_and_target(menu_item, "attachment.new-mode", "i",
                                           LIBBALSA_ATTACH_AS_INLINE);
         g_menu_append_item(menu, menu_item);
     }
@@ -1801,7 +1786,7 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
     if (can_inline || !is_a_temp_file) {
         menu_item = g_menu_item_new(_(attach_modes[LIBBALSA_ATTACH_AS_ATTACHMENT]),
                                     NULL);
-        g_menu_item_set_action_and_target(menu_item, "new-mode", "i",
+        g_menu_item_set_action_and_target(menu_item, "attachment.new-mode", "i",
                                           LIBBALSA_ATTACH_AS_ATTACHMENT);
         g_menu_append_item(menu, menu_item);
     }
@@ -1810,13 +1795,13 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
     if (!is_a_temp_file) {
         menu_item = g_menu_item_new(_(attach_modes[LIBBALSA_ATTACH_AS_EXTBODY]),
                                     NULL);
-        g_menu_item_set_action_and_target(menu_item, "new-mode", "i",
+        g_menu_item_set_action_and_target(menu_item, "attachment.new-mode", "i",
                                           LIBBALSA_ATTACH_AS_EXTBODY);
         g_menu_append_item(menu, menu_item);
     }
 
     /* an attachment can be removed */
-    g_menu_append(menu, _("Remove"), "remove-attachment");
+    g_menu_append(menu, _("Remove"), "attachment.remove");
 
     /* add the usual vfs menu so the user can inspect what (s)he actually
        attached... (only for non-message attachments) */
@@ -1825,7 +1810,8 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
                                                "attachment.launch-app");
     }
 
-    attach_data->popup_menu = gtk_popover_new_from_model(G_MENU_MODEL(menu));
+    attach_data->popup_menu =
+        gtk_popover_new_from_model(bsmsg->window, G_MENU_MODEL(menu));
     g_object_unref(menu);
 
     gtk_widget_show_all(attach_data->popup_menu);
@@ -1860,7 +1846,13 @@ add_urlref_attachment(BalsaSendmsg * bsmsg, gchar *url)
     GtkTreeIter iter;
     BalsaAttachInfo *attach_data;
     GdkPixbuf * pixbuf;
-    GtkWidget *menu_item;
+    GSimpleActionGroup *simple;
+    static GActionEntry attachment_entries[] = {
+        {"remove", remove_attachment},
+        {"open", on_open_url_cb},
+    };
+    GMenu *menu;
+    GMenu *open_menu;
 
     if (balsa_app.debug)
        fprintf(stderr, "Trying to attach '%s'\n", url);
@@ -1885,26 +1877,30 @@ add_urlref_attachment(BalsaSendmsg * bsmsg, gchar *url)
     attach_data->mode = LIBBALSA_ATTACH_AS_EXTBODY;
 
     /* build the attachment's popup menu - may only be removed */
-    attach_data->popup_menu = gtk_menu_new();
-    menu_item =
-       gtk_menu_item_new_with_label(_("Remove"));
-    g_signal_connect(menu_item, "activate",
-                    G_CALLBACK(remove_attachment),
-                    (gpointer)attach_data);
-    gtk_menu_shell_append(GTK_MENU_SHELL(attach_data->popup_menu),
-                         menu_item);
+    simple = g_simple_action_group_new();
+    g_action_map_add_action_entries(G_ACTION_MAP(simple),
+                                    attachment_entries,
+                                    G_N_ELEMENTS(attachment_entries),
+                                    attach_data);
+    gtk_widget_insert_action_group(bsmsg->window,
+                                   "urlref-attachment",
+                                   G_ACTION_GROUP(simple));
+    g_object_unref(simple);
+
+    menu = g_menu_new();
+    g_menu_append(menu, _("Remove"), "urlref-attachment.remove");
 
     /* add a separator and the usual vfs menu so the user can inspect what
        (s)he actually attached... (only for non-message attachments) */
-    gtk_menu_shell_append(GTK_MENU_SHELL(attach_data->popup_menu),
-                         gtk_separator_menu_item_new());
-    menu_item =
-       gtk_menu_item_new_with_label(_("Open…"));
-    g_signal_connect(menu_item, "activate",
-                    G_CALLBACK(on_open_url_cb),
-                    (gpointer)attach_data);
-    gtk_menu_shell_append(GTK_MENU_SHELL(attach_data->popup_menu),
-                         menu_item);
+    open_menu = g_menu_new();
+    g_menu_append(open_menu, _("Open…"), "urlref-attachment.open");
+
+    g_menu_append_section(menu, NULL, G_MENU_MODEL(open_menu));
+    g_object_unref(open_menu);
+
+    attach_data->popup_menu =
+        gtk_popover_new_from_model(bsmsg->window, G_MENU_MODEL(menu));
+    g_object_unref(menu);
     gtk_widget_show_all(attach_data->popup_menu);
 
     /* append to the list store */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]