X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fselect-gtk.c;h=b1251baa2194972236ddd743cf9b1cd8cad44c7b;hb=0d83c23c319751850760298ca61808af61b24105;hp=665e3361bacf6de91e4f06469d82f8a5e566ab4c;hpb=21db8709c0c2dcedbd278c7fe571290d5ce80a71;p=chise%2Fxemacs-chise.git.1 diff --git a/src/select-gtk.c b/src/select-gtk.c index 665e336..b1251ba 100644 --- a/src/select-gtk.c +++ b/src/select-gtk.c @@ -209,6 +209,40 @@ emacs_gtk_selection_handle (GtkWidget *widget, } +void +emacs_gtk_selection_clear_event_handle (GtkWidget *widget, + GdkEventSelection *event, + gpointer data) +{ + GdkAtom selection = event->selection; + guint32 changed_owner_time = event->time; + struct device *d = decode_gtk_device (Qnil); + + Lisp_Object selection_symbol, local_selection_time_lisp; + guint32 local_selection_time; + + selection_symbol = atom_to_symbol (d, selection); + + local_selection_time_lisp = Fget_selection_timestamp (selection_symbol); + + /* We don't own the selection, so that's fine. */ + if (NILP (local_selection_time_lisp)) + return; + + local_selection_time = *(guint32 *) XOPAQUE_DATA (local_selection_time_lisp); + + /* This SelectionClear is for a selection that we no longer own, so we can + disregard it. (That is, we have reasserted the selection since this + request was generated.) + */ + if (changed_owner_time != GDK_CURRENT_TIME && + local_selection_time > changed_owner_time) + return; + + handle_selection_clear (selection_symbol); +} + + static GtkWidget *reading_selection_reply; static GdkAtom reading_which_selection;