[balsa/wip/gtk4: 76/351] Yet more drag-and-drop changes



commit fc8f7acc458746b990833e85c93f2628f17ffb93
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Fri Dec 1 22:30:46 2017 -0500

    Yet more drag-and-drop changes

 libbalsa/address.c   |   34 ++++++++++++++++++------------
 libbalsa/address.h   |    2 +-
 src/ab-main.c        |   10 ++++----
 src/balsa-index.c    |   12 +++++-----
 src/balsa-mblist.c   |   12 +++++-----
 src/main-window.c    |   12 +++++-----
 src/sendmsg-window.c |   55 ++++++++++++++++++++-----------------------------
 7 files changed, 67 insertions(+), 70 deletions(-)
---
diff --git a/libbalsa/address.c b/libbalsa/address.c
index 5ef0810..582464a 100644
--- a/libbalsa/address.c
+++ b/libbalsa/address.c
@@ -861,9 +861,9 @@ add_row(GtkWidget*button, gpointer data)
     gtk_tree_path_free(path);
 }
 
-GtkTargetEntry libbalsa_address_target_list[] = {
-    {"text/plain",           0                  },
-    {"x-application/x-addr", GTK_TARGET_SAME_APP}
+const gchar *libbalsa_address_target_list[] = {
+    "text/plain",
+    "x-application/x-addr"
 };
 
 static void
@@ -920,18 +920,24 @@ addrlist_drag_drop_cb(GtkWidget *widget, GdkDragContext *context,
                       gint x, gint y, guint time, gpointer user_data)
 {
   gboolean        is_valid_drop_site;
-  GdkAtom         target_type;
-  GList          *targets;
+  GdkContentFormats *formats;
 
   /* Check to see if (x,y) is a valid drop site within widget */
   is_valid_drop_site = TRUE;
 
   /* If the source offers a target */
-  targets = gdk_drag_context_list_targets(context);
-  if (targets) {
+  formats = gdk_drag_context_get_formats(context);
+  if (formats != NULL) {
+      const gchar * const *mime_types;
+      gsize                n_mime_types;
+      GdkAtom              target_type;
+
+      mime_types = gdk_content_formats_get_mime_types(formats, &n_mime_types);
+      g_assert(n_mime_types > LIBBALSA_ADDRESS_TRG_ADDRESS);
+
       /* Choose the best target type */
-      target_type = GDK_POINTER_TO_ATOM
-        (g_list_nth_data (targets, LIBBALSA_ADDRESS_TRG_ADDRESS));
+      target_type =
+          gdk_atom_intern_static_string(mime_types[LIBBALSA_ADDRESS_TRG_ADDRESS]);
 
       /* Request the data from the source. */
       printf("drag_drop requests target=%p\n", target_type);
@@ -981,7 +987,7 @@ libbalsa_address_get_edit_widget(const LibBalsaAddress *address,
         if (cnt == EMAIL_ADDRESS) {
             GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1);
             GtkWidget *but = gtk_button_new_with_mnemonic(_("A_dd"));
-            GtkTargetList *list;
+            GdkContentFormats *formats;
 
             entries[cnt] = lba_address_list_widget(changed_cb,
                                                    changed_data);
@@ -991,13 +997,13 @@ libbalsa_address_get_edit_widget(const LibBalsaAddress *address,
             g_signal_connect(but, "clicked", G_CALLBACK(add_row),
                              entries[cnt]);
 
-            list = gtk_target_list_new(libbalsa_address_target_list,
-                                       G_N_ELEMENTS(libbalsa_address_target_list));
+            formats = gdk_content_formats_new(libbalsa_address_target_list,
+                                              G_N_ELEMENTS(libbalsa_address_target_list));
             gtk_drag_dest_set(entries[cnt],
                               GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT,
-                              list,
+                              formats,
                               GDK_ACTION_COPY);
-            gtk_target_list_unref(list);
+            gdk_content_formats_unref(formats);
 
             g_signal_connect(G_OBJECT(entries[cnt]), "drag-data-received",
                              G_CALLBACK(addrlist_drag_received_cb), NULL);
diff --git a/libbalsa/address.h b/libbalsa/address.h
index 1a9597e..e88a462 100644
--- a/libbalsa/address.h
+++ b/libbalsa/address.h
@@ -122,7 +122,7 @@ enum {
     LIBBALSA_ADDRESS_TRG_NONE
 };
 
-extern GtkTargetEntry libbalsa_address_target_list[2];
+extern const gchar *libbalsa_address_target_list[2];
 
 GtkWidget *libbalsa_address_get_edit_widget(const LibBalsaAddress *addr,
                                             GtkWidget **entries,
diff --git a/src/ab-main.c b/src/ab-main.c
index 688c7bd..7f6a543 100644
--- a/src/ab-main.c
+++ b/src/ab-main.c
@@ -718,7 +718,7 @@ bab_window_list_new(void)
     GtkCellRenderer *renderer;
     GtkTreeViewColumn *column;
     GtkTreeSelection *selection;
-    GtkTargetList *list;
+    GdkContentFormats *formats;
 
     store =
         gtk_list_store_new(N_COLUMNS,
@@ -751,13 +751,13 @@ bab_window_list_new(void)
     gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 
 
-    list = gtk_target_list_new(libbalsa_address_target_list,
-                               G_N_ELEMENTS(libbalsa_address_target_list));
+    formats = gdk_content_formats_new(libbalsa_address_target_list,
+                                      G_N_ELEMENTS(libbalsa_address_target_list));
     gtk_drag_source_set(GTK_WIDGET(tree),
                         GDK_BUTTON1_MASK,
-                        list,
+                        formats,
                         GDK_ACTION_COPY);
-    gtk_target_list_unref(list);
+    gdk_content_formats_unref(formats);
 
     g_signal_connect(G_OBJECT(tree), "drag-data-get",
                      G_CALLBACK(addrlist_drag_get_cb), NULL);
diff --git a/src/balsa-index.c b/src/balsa-index.c
index 7fce10d..05a5601 100644
--- a/src/balsa-index.c
+++ b/src/balsa-index.c
@@ -105,8 +105,8 @@ enum {
     TARGET_MESSAGES
 };
 
-static GtkTargetEntry index_drag_types[] = {
-    {"x-application/x-message-list", GTK_TARGET_SAME_APP}
+static const gchar * index_drag_types[] = {
+    "x-application/x-message-list"
 };
 
 static void bndx_drag_cb(GtkWidget* widget,
@@ -297,7 +297,7 @@ bndx_instance_init(BalsaIndex * index)
     GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view);
     GtkCellRenderer *renderer;
     GtkTreeViewColumn *column;
-    GtkTargetList *list;
+    GdkContentFormats *formats;
 
 #if defined(TREE_VIEW_FIXED_HEIGHT)
     gtk_tree_view_set_fixed_height_mode(tree_view, TRUE);
@@ -447,13 +447,13 @@ bndx_instance_init(BalsaIndex * index)
                            NULL);
     gtk_tree_view_set_enable_search(tree_view, FALSE);
 
-    list = gtk_target_list_new(index_drag_types, G_N_ELEMENTS(index_drag_types));
+    formats = gdk_content_formats_new(index_drag_types, G_N_ELEMENTS(index_drag_types));
     gtk_drag_source_set(GTK_WIDGET (index),
                         GDK_BUTTON1_MASK | GDK_SHIFT_MASK | GDK_CONTROL_MASK,
-                        list,
+                        formats,
                         GDK_ACTION_DEFAULT | GDK_ACTION_COPY |
                         GDK_ACTION_MOVE);
-    gtk_target_list_unref(list);
+    gdk_content_formats_unref(formats);
 
     g_signal_connect(index, "drag-data-get",
                      G_CALLBACK(bndx_drag_cb), NULL);
diff --git a/src/balsa-mblist.c b/src/balsa-mblist.c
index 7219d99..97a6994 100644
--- a/src/balsa-mblist.c
+++ b/src/balsa-mblist.c
@@ -75,8 +75,8 @@ enum {
 };
 static gint balsa_mblist_signals[LAST_SIGNAL] = { 0 };
 
-static GtkTargetEntry bmbl_drop_types[] = {
-    {"x-application/x-message-list", GTK_TARGET_SAME_APP}
+static const gchar * bmbl_drop_types[] = {
+    "x-application/x-message-list"
 };
 
 static GtkTreeViewClass *parent_class = NULL;
@@ -1169,20 +1169,20 @@ balsa_mblist_close_lru_peer_mbx(BalsaMBList * mblist,
 void
 balsa_mblist_default_signal_bindings(BalsaMBList * mblist)
 {
-    GtkTargetList *list;
+    GdkContentFormats *formats;
 
     g_signal_connect(G_OBJECT(mblist), "button_press_event",
                      G_CALLBACK(bmbl_button_press_cb), NULL);
     g_signal_connect_after(G_OBJECT(mblist), "size-allocate",
                            G_CALLBACK(bmbl_column_resize), NULL);
 
-    list = gtk_target_list_new(bmbl_drop_types, G_N_ELEMENTS(bmbl_drop_types));
+    formats = gdk_content_formats_new(bmbl_drop_types, G_N_ELEMENTS(bmbl_drop_types));
     gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(mblist),
-                                         list,
+                                         formats,
                                          GDK_ACTION_DEFAULT |
                                          GDK_ACTION_COPY |
                                          GDK_ACTION_MOVE);
-    gtk_target_list_unref(list);
+    gdk_content_formats_unref(formats);
 
     g_signal_connect(G_OBJECT(mblist), "drag-data-received",
                      G_CALLBACK(bmbl_drag_cb), NULL);
diff --git a/src/main-window.c b/src/main-window.c
index 22ae1b4..291d8cb 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -82,8 +82,8 @@ enum {
 };
 
 #define NUM_DROP_TYPES 1
-static GtkTargetEntry notebook_drop_types[NUM_DROP_TYPES] = {
-    {"x-application/x-message-list", GTK_TARGET_SAME_APP}
+static const gchar * notebook_drop_types[NUM_DROP_TYPES] = {
+    "x-application/x-message-list"
 };
 
 /* Define thread-related globals, including dialogs */
@@ -2213,7 +2213,7 @@ balsa_window_new()
 #endif
     GtkAdjustment *hadj, *vadj;
     GAction *action;
-    GtkTargetList *list;
+    GdkContentFormats *formats;
 
     /* Call to register custom balsa pixmaps with GNOME_STOCK_PIXMAPS
      * - allows for grey out */
@@ -2273,11 +2273,11 @@ balsa_window_new()
     g_signal_connect(G_OBJECT(window->notebook), "switch_page",
                      G_CALLBACK(bw_notebook_switch_page_cb), window);
 
-    list = gtk_target_list_new(notebook_drop_types, NUM_DROP_TYPES);
+    formats = gdk_content_formats_new(notebook_drop_types, NUM_DROP_TYPES);
     gtk_drag_dest_set (GTK_WIDGET (window->notebook), GTK_DEST_DEFAULT_ALL,
-                       list,
+                       formats,
                        GDK_ACTION_DEFAULT | GDK_ACTION_COPY | GDK_ACTION_MOVE);
-    gtk_target_list_unref(list);
+    gdk_content_formats_unref(formats);
 
     g_signal_connect(G_OBJECT (window->notebook), "drag-data-received",
                      G_CALLBACK (bw_notebook_drag_received_cb), NULL);
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index 897a3ca..dec2ad3 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -151,16 +151,16 @@ enum {
     TARGET_STRING
 };
 
-static GtkTargetEntry drop_types[] = {
-    { "x-application/x-message-list", GTK_TARGET_SAME_APP},
-    { "text/uri-list", 0},
-    { "STRING",     0},
-    { "text/plain", 0}
+static const gchar * drop_types[] = {
+    "x-application/x-message-list",
+    "text/uri-list",
+    "STRING",
+    "text/plain"
 };
 
-static GtkTargetEntry email_field_drop_types[] = {
-    { "STRING",     0},
-    { "text/plain", 0}
+static const gchar * email_field_drop_types[] = {
+    "STRING",
+    "text/plain"
 };
 
 static void lang_set_cb(GtkWidget *widget, BalsaSendmsg *bsmsg);
@@ -2378,7 +2378,7 @@ create_email_entry(BalsaSendmsg         * bsmsg,
                    guint                  n_types)
 {
     GtkWidget *scroll;
-    GtkTargetList *list;
+    GdkContentFormats *formats;
 
     *view = libbalsa_address_view_new(types, n_types,
                                       balsa_app.address_book_list,
@@ -2405,11 +2405,11 @@ create_email_entry(BalsaSendmsg         * bsmsg,
     g_signal_connect(*view, "open-address-book",
                     G_CALLBACK(address_book_cb), bsmsg);
 
-    list = gtk_target_list_new(email_field_drop_types, G_N_ELEMENTS(email_field_drop_types));
+    formats = gdk_content_formats_new(email_field_drop_types, G_N_ELEMENTS(email_field_drop_types));
     gtk_drag_dest_set(GTK_WIDGET(*view), GTK_DEST_DEFAULT_ALL,
-                     list,
+                     formats,
                      GDK_ACTION_COPY | GDK_ACTION_MOVE);
-    gtk_target_list_unref(list);
+    gdk_content_formats_unref(formats);
 
     libbalsa_address_view_set_domain(*view, bsmsg->ident->domain);
     g_signal_connect_swapped(gtk_tree_view_get_model(GTK_TREE_VIEW(*view)),
@@ -2628,7 +2628,7 @@ sw_attachment_list(BalsaSendmsg *bsmsg)
     GtkTreeView *view;
     GtkTreeViewColumn *column;
     GtkWidget *frame;
-    GtkTargetList *list;
+    GdkContentFormats *formats;
 
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
@@ -2717,11 +2717,11 @@ sw_attachment_list(BalsaSendmsg *bsmsg)
     g_signal_connect(G_OBJECT(bsmsg->window), "drag_data_received",
                     G_CALLBACK(attachments_add), bsmsg);
 
-    list = gtk_target_list_new(drop_types, G_N_ELEMENTS(drop_types));
+    formats = gdk_content_formats_new(drop_types, G_N_ELEMENTS(drop_types));
     gtk_drag_dest_set(GTK_WIDGET(bsmsg->window), GTK_DEST_DEFAULT_ALL,
-                     list,
+                     formats,
                      GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
-    gtk_target_list_unref(list);
+    gdk_content_formats_unref(formats);
 
     frame = gtk_frame_new(NULL);
     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
@@ -2777,7 +2777,7 @@ drag_data_quote(GtkWidget        * widget,
 
     target = gtk_selection_data_get_target(selection_data);
 
-    if (target == gdk_atom_intern_static_string(drop_types[TARGET_MESSAGES].target)) {
+    if (target == gdk_atom_intern_static_string(drop_types[TARGET_MESSAGES])) {
        index =
             *(BalsaIndex **) gtk_selection_data_get_data(selection_data);
        mailbox = index->mailbox_node->mailbox;
@@ -2799,7 +2799,7 @@ drag_data_quote(GtkWidget        * widget,
             g_string_free(body, TRUE);
         }
         balsa_index_selected_msgnos_free(index, selected);
-    } else if (target == gdk_atom_intern_static_string(drop_types[TARGET_URI_LIST].target)) {
+    } else if (target == gdk_atom_intern_static_string(drop_types[TARGET_URI_LIST])) {
         GSList *uri_list =
             uri2gslist((gchar *)
                        gtk_selection_data_get_data(selection_data));
@@ -2864,7 +2864,7 @@ create_text_area(BalsaSendmsg * bsmsg)
 #endif                          /* HAVE_GSPELL_1_2 */
 #endif                          /* HAVE_GSPELL */
     GtkWidget *scroll;
-    GtkTargetList *list;
+    GdkContentFormats *formats;
 
 #if HAVE_GTKSOURCEVIEW
     bsmsg->text = libbalsa_source_view_new(TRUE);
@@ -2929,12 +2929,12 @@ create_text_area(BalsaSendmsg * bsmsg)
     g_signal_connect(G_OBJECT(bsmsg->text), "drag_data_received",
                     G_CALLBACK(drag_data_quote), bsmsg);
 
-    list = gtk_target_list_new(drop_types, G_N_ELEMENTS(drop_types));
+    formats = gdk_content_formats_new(drop_types, G_N_ELEMENTS(drop_types));
     /* GTK_DEST_DEFAULT_ALL in drag_set would trigger bug 150141 */
     gtk_drag_dest_set(GTK_WIDGET(bsmsg->text), 0,
-                     list,
+                     formats,
                      GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
-    gtk_target_list_unref(list);
+    gdk_content_formats_unref(formats);
 
     gtk_widget_show(scroll);
 
@@ -4077,16 +4077,7 @@ create_lang_menu(GtkWidget * parent, BalsaSendmsg * bsmsg)
     preferred_lang = balsa_app.spell_check_lang ?
         balsa_app.spell_check_lang : setlocale(LC_CTYPE, NULL);
 
-#if HAVE_GTKSPELL_3_0_3
-    lang_list = gtk_spell_checker_get_language_list();
-#elif HAVE_GSPELL
-    lang_list = gspell_language_get_available();
-#else                           /* HAVE_GTKSPELL_3_0_3 */
-    broker = enchant_broker_init();
-    lang_list = NULL;
-    enchant_broker_list_dicts(broker, sw_broker_cb, &lang_list);
-#endif                          /* HAVE_GTKSPELL_3_0_3 */
-
+    langs = gtk_menu_new();
     for (i = 0; i < G_N_ELEMENTS(locales); i++) {
         gconstpointer found;
 


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