/* Support for embedding GTK (4) widgets in a frame Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ #include "config.h" #include "lisp.h" #include struct embedded_widget { union vectorlike_header header; /* The frame this widget is attatched to */ Lisp_Object frame; /* A symbol representing the type of this widget */ Lisp_Object type; /* Auxiliary data */ Lisp_Object data_alist; /* Frame-relative x */ Lisp_Object fx; /* Frame-relative y */ Lisp_Object fy; /* Width of this widget */ Lisp_Object width; /* Height of this widget */ Lisp_Object height; /* A list of functions that will be called on any event. */ Lisp_Object callbacks; /* Here ends the Lisp section of this lisp_vectorlike. */ GtkWidget *actual_widget; /* The motion event controller associated with this embedded widget. */ GtkEventController *controller; /* Another motion event controller associated with this embedded widget */ GtkEventController *controller_2; } GCALIGNED_STRUCT; #define GTKWIDGETP(x) PSEUDOVECTORP (x, PVEC_EMBEDDED_WIDGET) #define XGTKWIDGET(x) (eassert (GTKWIDGETP (x)), \ XUNTAG (x, Lisp_Vectorlike, struct embedded_widget)) #define CHECK_GTKWIDGET(x) \ CHECK_TYPE (GTKWIDGETP (x), Qgtkwidgetp, x) enum { EMBEDDED_WIDGET_LISP_SIZE = PSEUDOVECSIZE (struct embedded_widget, callbacks) }; enum { EMBEDDED_WIDGET_REST_SIZE = VECSIZE (struct embedded_widget) - EMBEDDED_WIDGET_LISP_SIZE }; INLINE void EMBEDDED_WIDGET_PVEC_INIT (struct embedded_widget *b) { XSETPVECTYPESIZE (b, PVEC_EMBEDDED_WIDGET, EMBEDDED_WIDGET_LISP_SIZE, EMBEDDED_WIDGET_REST_SIZE); } extern void syms_of_pgtkembed (void); extern Lisp_Object create_embedded_widget (Lisp_Object type, Lisp_Object buffer);