• Po Lu's avatar
    Use an X window to display xwidgets on X11 · 61d049aa
    Po Lu authored
    Since Emacs draws using X11 primitives, Emacs drawing operations can
    erase the GtkDrawingArea used to draw the offscreen widget, which
    leads to unpleasant flickering effects, all of which can be prevented
    by creating a native X window and drawing to that instead.
    
    * src/xterm.c (x_window_to_frame): Return xwidget window if
    appropriate.
    (handle_one_xevent): Handle xwidget expose events.
    
    * src/xwidget.c (x_window_to_xvw_map): New variable.
    (xwidget_view_from_window): New function.
    
    (xwidget_show_view, xwidget_hide_view)
    (offscreen_damage_event): Move to drawing xwidgets with X windows.
    
    (xv_do_draw)
    (xwidget_expose): New function.
    
    (xwidget_osr_draw_cb, xwidget_osr_event_forward)
    (xwidget_osr_event_set_embedder): Removed.
    
    (xwidget_init_view): Replace use of GtkDrawingArea with that of an X
    window.
    
    (x_draw_xwidget_glyph_string): Prevent xwidget views from constantly
    generating expose events, and use an X window instead of a
    GtkDrawingArea.
    
    (syms_of_xwidget): Initialize x_window_to_xwv_map.
    
    src/xwidget.h (struct xwidget_view): Replace GTK widgets with
    X-related fields.
    
    (xwidget_view_from_window, xwidget_expose): New functions.
    61d049aa
xterm.c 406 KB