aboutsummaryrefslogtreecommitdiffstats
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorPo Lu2022-06-21 22:03:42 +0800
committerPo Lu2022-06-21 22:05:21 +0800
commitbe35c92c90d455739a6ff9d4beefa2b35d044852 (patch)
tree19c5be6b9e09ccb45c58a5008f8f956f3ad92d57 /src/keyboard.c
parentb1af8c2c00aefe6aa554a468e65b6e07c9f14722 (diff)
downloademacs-be35c92c90d455739a6ff9d4beefa2b35d044852.tar.gz
emacs-be35c92c90d455739a6ff9d4beefa2b35d044852.zip
Rewrite PGTK selection code from scratch
* src/frame.c (delete_frame): Clear selections and swallow special events. * src/keyboard.c (kbd_buffer_get_event, process_special_events): Also handle selection events on PGTK. * src/keyboard.h (union buffered_input_event): Include selection events on PGTK. * src/pgtkselect.c (symbol_to_gtk_clipboard, LOCAL_SELECTION): New functions and macros. (selection_type_to_quarks, get_func, clear_func): Delete functions. (pgtk_selection_init, pgtk_selection_lost): (pgtk_selection_usable): New functions. (Fpgtk_own_selection_internal, Fpgtk_disown_selection_internal) (Fpgtk_selection_exists_p, Fpgtk_selection_owner_p) (Fpgtk_get_selection_internal): Complete rewrite. (syms_of_pgtkselect): Update defsyms and add more hooks. * src/pgtkselect.h: Delete file. * src/pgtkterm.c (evq_enqueue): Set last user time based on the event. (pgtk_any_window_to_frame, button_event): Fix coding style. (pgtk_set_event_handler): Add selection events. (pgtk_find_selection_owner, pgtk_selection_event): New functions. (pgtk_term_init): Remove call to `pgtk_selection_init'. * src/pgtkterm.h (struct pgtk_display_info): New field `display'. (enum selection_input_event): New struct. New macros for accessing its fields.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index c41727d6c6e..6bc2afd40ac 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -4003,15 +4003,20 @@ kbd_buffer_get_event (KBOARD **kbp,
4003 case SELECTION_REQUEST_EVENT: 4003 case SELECTION_REQUEST_EVENT:
4004 case SELECTION_CLEAR_EVENT: 4004 case SELECTION_CLEAR_EVENT:
4005 { 4005 {
4006#ifdef HAVE_X11 4006#if defined HAVE_X11 || HAVE_PGTK
4007 /* Remove it from the buffer before processing it, 4007 /* Remove it from the buffer before processing it,
4008 since otherwise swallow_events will see it 4008 since otherwise swallow_events will see it
4009 and process it again. */ 4009 and process it again. */
4010 struct selection_input_event copy = event->sie; 4010 struct selection_input_event copy = event->sie;
4011 kbd_fetch_ptr = next_kbd_event (event); 4011 kbd_fetch_ptr = next_kbd_event (event);
4012 input_pending = readable_events (0); 4012 input_pending = readable_events (0);
4013
4014#ifdef HAVE_X11
4013 x_handle_selection_event (&copy); 4015 x_handle_selection_event (&copy);
4014#else 4016#else
4017 pgtk_handle_selection_event (&copy);
4018#endif
4019#else
4015 /* We're getting selection request events, but we don't have 4020 /* We're getting selection request events, but we don't have
4016 a window system. */ 4021 a window system. */
4017 emacs_abort (); 4022 emacs_abort ();
@@ -4381,7 +4386,7 @@ process_special_events (void)
4381 if (event->kind == SELECTION_REQUEST_EVENT 4386 if (event->kind == SELECTION_REQUEST_EVENT
4382 || event->kind == SELECTION_CLEAR_EVENT) 4387 || event->kind == SELECTION_CLEAR_EVENT)
4383 { 4388 {
4384#ifdef HAVE_X11 4389#if defined HAVE_X11 || defined HAVE_PGTK
4385 4390
4386 /* Remove the event from the fifo buffer before processing; 4391 /* Remove the event from the fifo buffer before processing;
4387 otherwise swallow_events called recursively could see it 4392 otherwise swallow_events called recursively could see it
@@ -4406,8 +4411,13 @@ process_special_events (void)
4406 moved_events * sizeof *kbd_fetch_ptr); 4411 moved_events * sizeof *kbd_fetch_ptr);
4407 kbd_fetch_ptr = next_kbd_event (kbd_fetch_ptr); 4412 kbd_fetch_ptr = next_kbd_event (kbd_fetch_ptr);
4408 input_pending = readable_events (0); 4413 input_pending = readable_events (0);
4414
4415#ifdef HAVE_X11
4409 x_handle_selection_event (&copy); 4416 x_handle_selection_event (&copy);
4410#else 4417#else
4418 pgtk_handle_selection_event (&copy);
4419#endif
4420#else
4411 /* We're getting selection request events, but we don't have 4421 /* We're getting selection request events, but we don't have
4412 a window system. */ 4422 a window system. */
4413 emacs_abort (); 4423 emacs_abort ();