mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-01 09:51:22 -08:00
Adjust the newly-added Xwidgets code so that it uses a more-typical Emacs style. This should not affect behavior, except that in a few places it adds runtime checks that Lisp arguments are of the proper type, and in one place it uses more-precise arithmetic. * src/buffer.c, src/dispnew.c, src/emacs.c, src/emacsgtkfixed.c: * src/emacs.c, src/print.c, src/window.c, src/xdisp.c, src/xterm.c: Include xwidget.h unconditionally. * src/buffer.c (Fkill_buffer): * src/dispnew.c (update_window): * src/emacs.c (main): * src/print.c (print_object): * src/window.c (Fdelete_window_internal): * src/xdisp.c (handle_single_display_spec, push_it, pop_it) (get_next_element, set_iterator_to_next, next_element_from_xwidget) (dump_glyph, calc_pixel_width_or_height, BUILD_GLYPH_STRINGS_XW) (BUILD_GLYPH_STRINGS, x_produce_glyphs, get_window_cursor_type): * src/xterm.c (x_draw_glyph_string, x_draw_bar_cursor): Call xwidget functions and macros without worrying about HAVE_XWIDGETS when the code is a no-op on non-xwidget platforms. * src/dispextern.h (XWIDGET_GLYPH, struct glyph_string.xwidget) (IT_XWIDGET, GET_FROM_XWIDGET, struct it.u.xwidget) (struct it.xwidget): * src/lisp.h (PVEC_XWIDGET, PVEC_XWIDGET_VIEW): Always define. * src/emacsgtkfixed.h: Omit unnecessary comment. * src/keyboard.c: Fix spacing. * src/xdisp.c (BUILD_XWIDGET_GLYPH_STRING, produce_xwidget_glyph): Define to be a no-op if not HAVE_XWIDGETS. * src/xwidget.c: Include xwidget.h first (after config.h) to make sure that it can stand by itself. (Fmake_xwidget, Fxwidget_webkit_execute_script): Fix typo in doc string. (Fmake_xwidget): Check type of args. (Fmake_xwidget, offscreen_damage_event) (webkit_document_load_finished_cb, webkit_download_cb) (webkit_new_window_policy_decision_requested_cb) (webkit_navigation_policy_decision_requested_cb) (xwidget_osr_draw_cb, xwidget_osr_event_forward) (xwidget_osr_event_set_embedder, xwidget_init_view): Omit unnecessary casts. * src/xwidget.c (Fmake_xwidget, xwidget_hidden) (xwidget_show_view, xwidget_hide_view) (x_draw_xwidget_glyph_string, xwidget_start_redisplay, xwidget_touch) (xwidget_touched): * src/xwidget.h (struct xwidget.kill_without_query) (struct xwidget_view.redisplayed, struct xwidget_view.hidden): Use bool for boolean. * src/xwidget.c (store_xwidget_event_string, Fxwidget_size_request): Simplify by using list functions. (WEBKIT_FN_INIT): Omit unnecessary test for nil. (Fxwidget_resize): Check type of integer args before doing any work. Check that they are nonnegative. (Fxwidget_set_adjustment): Check type of integer arg. Avoid redundant call to gtk_scrolled_window_get_vadjustment. Simplify. Use double, not float. (Fxwidget_info, Fxwidget_view_info): Simplify by using CALLN. (valid_xwidget_spec_p): Simplify. (xwidget_spec_value): Omit unused arg FOUND. All callers changed. * src/xwidget.h: Include lisp.h first, so that includers do not need to worry about doing that before including this file. Make this .h file safe to include even on non-HAVE_XWIDGETS configurations, to simplify the includers. (x_draw_xwidget_glyph_string, syms_of_xwidget, valid_xwidget_spec_p) (xwidget_end_redisplay, lookup_xwidget) (xwidget_view_delete_all_in_window, kill_buffer_xwidgets): Now a no-op if !HAVE_XWIDGETS, to simplify callers. (struct glyph_matrix, struct glyph_string, struct xwidget) (struct xwidget_view, struct window): New forward or incomplete decls, so that includers need not assume the corresponding .h files are already included, or that HAVE_XWIDGETS is defined. (struct xwidget_type, xwidget_from_id): Remove; unused.
133 lines
3.7 KiB
C
133 lines
3.7 KiB
C
/* Support for embedding graphical components in a buffer.
|
|
|
|
Copyright (C) 2011-2016 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 <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef XWIDGET_H_INCLUDED
|
|
#define XWIDGET_H_INCLUDED
|
|
|
|
#include "lisp.h"
|
|
|
|
struct glyph_matrix;
|
|
struct glyph_string;
|
|
struct xwidget;
|
|
struct xwidget_view;
|
|
struct window;
|
|
|
|
#ifdef HAVE_XWIDGETS
|
|
# include <gtk/gtk.h>
|
|
|
|
struct xwidget
|
|
{
|
|
struct vectorlike_header header;
|
|
|
|
/* 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;
|
|
|
|
/* 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 xwidget_view
|
|
{
|
|
struct vectorlike_header header;
|
|
Lisp_Object model;
|
|
Lisp_Object w;
|
|
|
|
/* Here ends the lisp part. "redisplayed" is the marker field. */
|
|
|
|
/* If touched by redisplay. */
|
|
bool redisplayed;
|
|
|
|
/* 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. */
|
|
#define XWIDGETP(x) PSEUDOVECTORP (x, PVEC_XWIDGET)
|
|
#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. */
|
|
#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 CHECK_XWIDGET_VIEW(x) \
|
|
CHECK_TYPE (XWIDGET_VIEW_P (x), Qxwidget_view_p, x)
|
|
|
|
#define XG_XWIDGET "emacs_xwidget"
|
|
#define XG_XWIDGET_VIEW "emacs_xwidget_view"
|
|
|
|
#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 */
|