aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYuuki Harano2020-10-03 20:09:07 +0900
committerJeff Walsh2020-11-24 12:24:40 +1100
commitbb6862df1beddeaa4802af58b94332ba48afbb4f (patch)
tree7476771f8fef3b39432b30b50f72f750790ce983 /src
parent640f770b79b3c646fab8cad63076a7d58acdc44a (diff)
downloademacs-bb6862df1beddeaa4802af58b94332ba48afbb4f.tar.gz
emacs-bb6862df1beddeaa4802af58b94332ba48afbb4f.zip
Fix crash on drag and drop
* src/pgtkterm.c (pgtk_select): Move dispatch before g_main_context_query. (drag_drop): Remove drag_drop. (drag_data_received): Rename arg. (pgtk_set_event_handler): Remove drag-drop callback.
Diffstat (limited to 'src')
-rw-r--r--src/pgtkterm.c51
1 files changed, 16 insertions, 35 deletions
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index a5cf0a8159d..c66379e6e4b 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -3841,6 +3841,20 @@ pgtk_select (int fds_lim, fd_set * rfds, fd_set * wfds, fd_set * efds,
3841 Note that, as implemented, this failure is completely silent: there is 3841 Note that, as implemented, this failure is completely silent: there is
3842 no feedback to the caller. */ 3842 no feedback to the caller. */
3843 3843
3844 /* Before sleep, dispatch draw events.
3845 * Don't do this after g_main_context_query(), because fd may be closed
3846 * in dispatch.
3847 */
3848 if (context_acquired)
3849 {
3850 int pselect_errno = errno;
3851 block_input ();
3852 while (g_main_context_pending (context))
3853 g_main_context_dispatch (context);
3854 unblock_input ();
3855 errno = pselect_errno;
3856 }
3857
3844 if (rfds) 3858 if (rfds)
3845 all_rfds = *rfds; 3859 all_rfds = *rfds;
3846 else 3860 else
@@ -3895,17 +3909,6 @@ pgtk_select (int fds_lim, fd_set * rfds, fd_set * wfds, fd_set * efds,
3895 tmop = &tmo; 3909 tmop = &tmo;
3896 } 3910 }
3897 3911
3898 /* Before sleep, dispatch draw events. */
3899 if (context_acquired)
3900 {
3901 int pselect_errno = errno;
3902 block_input ();
3903 while (g_main_context_pending (context))
3904 g_main_context_dispatch (context);
3905 unblock_input ();
3906 errno = pselect_errno;
3907 }
3908
3909 fds_lim = max_fds + 1; 3912 fds_lim = max_fds + 1;
3910 nfds = thread_select (pselect, fds_lim, 3913 nfds = thread_select (pselect, fds_lim,
3911 &all_rfds, have_wfds ? &all_wfds : NULL, efds, 3914 &all_rfds, have_wfds ? &all_wfds : NULL, efds,
@@ -6509,31 +6512,11 @@ scroll_event (GtkWidget * widget, GdkEvent * event, gpointer * user_data)
6509 return TRUE; 6512 return TRUE;
6510} 6513}
6511 6514
6512static gboolean
6513drag_drop (GtkWidget * widget,
6514 GdkDragContext * context,
6515 gint x, gint y, guint time_, gpointer user_data)
6516{
6517 PGTK_TRACE ("drag_drop");
6518 GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
6519 PGTK_TRACE ("drag_drop: target: %p", (void *) target);
6520
6521 if (target == GDK_NONE)
6522 {
6523 gtk_drag_finish (context, TRUE, FALSE, time_);
6524 return FALSE;
6525 }
6526
6527 gtk_drag_get_data (widget, context, target, time_);
6528
6529 return TRUE;
6530}
6531
6532static void 6515static void
6533drag_data_received (GtkWidget * widget, GdkDragContext * context, 6516drag_data_received (GtkWidget * widget, GdkDragContext * context,
6534 gint x, gint y, 6517 gint x, gint y,
6535 GtkSelectionData * data, 6518 GtkSelectionData * data,
6536 guint info, guint time_, gpointer user_data) 6519 guint info, guint time, gpointer user_data)
6537{ 6520{
6538 PGTK_TRACE ("drag_data_received:"); 6521 PGTK_TRACE ("drag_data_received:");
6539 struct frame *f = pgtk_any_window_to_frame (gtk_widget_get_window (widget)); 6522 struct frame *f = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
@@ -6567,7 +6550,7 @@ drag_data_received (GtkWidget * widget, GdkDragContext * context,
6567 } 6550 }
6568 PGTK_TRACE ("drag_data_received: that's all."); 6551 PGTK_TRACE ("drag_data_received: that's all.");
6569 6552
6570 gtk_drag_finish (context, TRUE, FALSE, time_); 6553 gtk_drag_finish (context, TRUE, FALSE, time);
6571} 6554}
6572 6555
6573void 6556void
@@ -6622,8 +6605,6 @@ pgtk_set_event_handler (struct frame *f)
6622 G_CALLBACK (pgtk_selection_lost), NULL); 6605 G_CALLBACK (pgtk_selection_lost), NULL);
6623 g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "configure-event", 6606 g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "configure-event",
6624 G_CALLBACK (configure_event), NULL); 6607 G_CALLBACK (configure_event), NULL);
6625 g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "drag-drop",
6626 G_CALLBACK (drag_drop), NULL);
6627 g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "drag-data-received", 6608 g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "drag-data-received",
6628 G_CALLBACK (drag_data_received), NULL); 6609 G_CALLBACK (drag_data_received), NULL);
6629 g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "draw", 6610 g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "draw",