diff options
| author | Po Lu | 2022-06-21 22:03:42 +0800 |
|---|---|---|
| committer | Po Lu | 2022-06-21 22:05:21 +0800 |
| commit | be35c92c90d455739a6ff9d4beefa2b35d044852 (patch) | |
| tree | 19c5be6b9e09ccb45c58a5008f8f956f3ad92d57 /src/keyboard.c | |
| parent | b1af8c2c00aefe6aa554a468e65b6e07c9f14722 (diff) | |
| download | emacs-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.c | 14 |
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 (©); | 4015 | x_handle_selection_event (©); |
| 4014 | #else | 4016 | #else |
| 4017 | pgtk_handle_selection_event (©); | ||
| 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 (©); | 4416 | x_handle_selection_event (©); |
| 4410 | #else | 4417 | #else |
| 4418 | pgtk_handle_selection_event (©); | ||
| 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 (); |