X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/69815dfe3704f8a8c733843f1fd04546cbb0f4d0..7907b82297844456c193a1c471272a4949bf7774:/src/xwidget.h diff --git a/src/xwidget.h b/src/xwidget.h index cbaddf6cec..8fc382188f 100644 --- a/src/xwidget.h +++ b/src/xwidget.h @@ -1,115 +1,133 @@ -#ifndef XWIDGET_H_INCLUDED -#define XWIDGET_H_INCLUDED +/* Support for embedding graphical components in a buffer. -void x_draw_xwidget_glyph_string (struct glyph_string *s); -void syms_of_xwidget (); +Copyright (C) 2011-2016 Free Software Foundation, Inc. -//extern Lisp_Object Qxwidget; +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. -int valid_xwidget_spec_p (Lisp_Object object) ; +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. -#include +You should have received a copy of the GNU General Public License +along with GNU Emacs. If not, see . */ +#ifndef XWIDGET_H_INCLUDED +#define XWIDGET_H_INCLUDED -/* -each xwidget instance/model is described by this struct. +#include "lisp.h" -lisp pseudovector. +struct glyph_matrix; +struct glyph_string; +struct xwidget; +struct xwidget_view; +struct window; +#ifdef HAVE_XWIDGETS +# include - */ -struct xwidget{ +struct xwidget +{ struct vectorlike_header header; - Lisp_Object plist;//auxilliary data - Lisp_Object type;//the widget type - Lisp_Object buffer; //buffer where xwidget lives - Lisp_Object title;//a title that is used for button labels for instance - //here ends the lisp part. - //"height" is the marker field + /* Auxiliary data. */ + Lisp_Object plist; + + /* The widget type. */ + Lisp_Object type; + + /* The buffer where the xwidget lives. */ + Lisp_Object buffer; + + /* A title used for button labels, for instance. */ + Lisp_Object title; + + /* Here ends the Lisp part. "height" is the marker field. */ + int height; int width; - //for offscreen widgets, unused if not osr - GtkWidget* widget_osr; - GtkWidget* widgetwindow_osr; - //this is used if the widget (webkit) is to be wrapped in a scrolled window, - GtkWidget* widgetscrolledwindow_osr; - /* Non-nil means kill silently if Emacs is exited. */ - unsigned int kill_without_query : 1; + /* For offscreen widgets, unused if not osr. */ + GtkWidget *widget_osr; + GtkWidget *widgetwindow_osr; -}; + /* Used if the widget (webkit) is to be wrapped in a scrolled window. */ + GtkWidget *widgetscrolledwindow_osr; + /* Kill silently if Emacs is exited. */ + bool_bf kill_without_query : 1; +}; -//struct for each xwidget view -struct xwidget_view { +struct xwidget_view +{ struct vectorlike_header header; Lisp_Object model; Lisp_Object w; - //here ends the lisp part. - //"redisplayed" is the marker field - int redisplayed; //if touched by redisplay + /* Here ends the lisp part. "redisplayed" is the marker field. */ - int hidden;//if the "live" instance isnt drawn + /* If touched by redisplay. */ + bool redisplayed; - GtkWidget* widget; - GtkWidget* widgetwindow; - GtkWidget* emacswindow; - int x; int y; - int clip_right; int clip_bottom; int clip_top; int clip_left; + /* The "live" instance isn't drawn. */ + bool hidden; + GtkWidget *widget; + GtkWidget *widgetwindow; + GtkWidget *emacswindow; + int x; + int y; + int clip_right; + int clip_bottom; + int clip_top; + int clip_left; long handler_id; }; +#endif -/* Test for xwidget pseudovector*/ +/* Test for xwidget pseudovector. */ #define XWIDGETP(x) PSEUDOVECTORP (x, PVEC_XWIDGET) -#define XXWIDGET(a) (eassert (XWIDGETP(a)), \ - (struct xwidget *) XUNTAG(a, Lisp_Vectorlike)) +#define XXWIDGET(a) (eassert (XWIDGETP (a)), \ + (struct xwidget *) XUNTAG (a, Lisp_Vectorlike)) #define CHECK_XWIDGET(x) \ CHECK_TYPE (XWIDGETP (x), Qxwidgetp, x) -/* Test for xwidget_view pseudovector */ +/* Test for xwidget_view pseudovector. */ #define XWIDGET_VIEW_P(x) PSEUDOVECTORP (x, PVEC_XWIDGET_VIEW) -#define XXWIDGET_VIEW(a) (eassert (XWIDGET_VIEW_P(a)), \ - (struct xwidget_view *) XUNTAG(a, Lisp_Vectorlike)) +#define XXWIDGET_VIEW(a) (eassert (XWIDGET_VIEW_P (a)), \ + (struct xwidget_view *) XUNTAG (a, Lisp_Vectorlike)) #define CHECK_XWIDGET_VIEW(x) \ CHECK_TYPE (XWIDGET_VIEW_P (x), Qxwidget_view_p, x) -struct xwidget_type -{ - /* A symbol uniquely identifying the xwidget type, */ - Lisp_Object *type; - - /* Check that SPEC is a valid image specification for the given - image type. Value is non-zero if SPEC is valid. */ - int (* valid_p) (Lisp_Object spec); - - /* Next in list of all supported image types. */ - struct xwidget_type *next; -}; - -static struct xwidget_type *lookup_xwidget_type (Lisp_Object symbol); - -struct xwidget* xwidget_from_id(int id); - -//extern int xwidget_owns_kbd; - -void xwidget_start_redisplay(); -void xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix); - -void xwidget_touch (struct xwidget_view *xw); - -//void assert_valid_xwidget_id(int id,char *str); - -struct xwidget* lookup_xwidget (Lisp_Object spec); #define XG_XWIDGET "emacs_xwidget" #define XG_XWIDGET_VIEW "emacs_xwidget_view" -void xwidget_view_delete_all_in_window( struct window *w ); -void kill_buffer_xwidgets (Lisp_Object buffer); -#endif /* XWIDGET_H_INCLUDED */ +#ifdef HAVE_XWIDGETS +void syms_of_xwidget (void); +bool valid_xwidget_spec_p (Lisp_Object); +void xwidget_view_delete_all_in_window (struct window *); +void x_draw_xwidget_glyph_string (struct glyph_string *); +struct xwidget *lookup_xwidget (Lisp_Object spec); +void xwidget_end_redisplay (struct window *, struct glyph_matrix *); +void kill_buffer_xwidgets (Lisp_Object); +#else +INLINE_HEADER_BEGIN +INLINE void syms_of_xwidget (void) {} +INLINE bool valid_xwidget_spec_p (Lisp_Object obj) { return false; } +INLINE void xwidget_view_delete_all_in_window (struct window *w) {} +INLINE void x_draw_xwidget_glyph_string (struct glyph_string *s) { eassume (0); } +INLINE struct xwidget *lookup_xwidget (Lisp_Object obj) { eassume (0); } +INLINE void xwidget_end_redisplay (struct window *w, struct glyph_matrix *m) {} +INLINE void kill_buffer_xwidgets (Lisp_Object buf) {} +INLINE_HEADER_END +#endif + +#endif /* XWIDGET_H_INCLUDED */