aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRicardo Wurmus2016-10-25 23:00:35 -0700
committerPaul Eggert2016-10-25 23:07:13 -0700
commit7ee870e87c6332c0d2430faf71349f939b59e162 (patch)
treefaa1694d80ea1e719f480da5f741e03f9d4fe814 /src
parent623deaf406a85d8262bc1735009b3ee0535cc688 (diff)
downloademacs-7ee870e87c6332c0d2430faf71349f939b59e162.tar.gz
emacs-7ee870e87c6332c0d2430faf71349f939b59e162.zip
Remove scrolled window container around WebKit widget
The WebKit widget can scroll on its own and does not need to wrapped with a scrolled window container. * src/xwidget.h: Remove struct member widgetscrolledwindow_osr. * src/xwidget.c: Remove widgetscrolledwindow_osr. (xwidget-set-adjustment): Remove. (xwidget-resize): Resize Webkit widget last. * lisp/xwidget.el (xwidget-set-adjustment): Remove. (xwidget-webkit-scroll-up, xwidget-webkit-scroll-down, xwidget-webkit-scroll-forward, xwidget-webkit-scroll-backward): Implement scrolling via JavaScript.
Diffstat (limited to 'src')
-rw-r--r--src/xwidget.c64
-rw-r--r--src/xwidget.h3
2 files changed, 4 insertions, 63 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index 4f53b9301c4..8552810636e 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -103,25 +103,9 @@ Returns the newly constructed xwidget, or nil if construction fails. */)
103 gtk_window_resize (GTK_WINDOW (xw->widgetwindow_osr), xw->width, 103 gtk_window_resize (GTK_WINDOW (xw->widgetwindow_osr), xw->width,
104 xw->height); 104 xw->height);
105 105
106 /* WebKit OSR is the only scrolled component at the moment. */
107 xw->widgetscrolledwindow_osr = NULL;
108
109 if (EQ (xw->type, Qwebkit)) 106 if (EQ (xw->type, Qwebkit))
110 { 107 {
111 xw->widgetscrolledwindow_osr = gtk_scrolled_window_new (NULL, NULL);
112 gtk_scrolled_window_set_min_content_height
113 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr),
114 xw->height);
115 gtk_scrolled_window_set_min_content_width
116 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr),
117 xw->width);
118 gtk_scrolled_window_set_policy
119 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr),
120 GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
121
122 xw->widget_osr = webkit_web_view_new (); 108 xw->widget_osr = webkit_web_view_new ();
123 gtk_container_add (GTK_CONTAINER (xw->widgetscrolledwindow_osr),
124 GTK_WIDGET (WEBKIT_WEB_VIEW (xw->widget_osr)));
125 } 109 }
126 110
127 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, 111 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width,
@@ -130,7 +114,7 @@ Returns the newly constructed xwidget, or nil if construction fails. */)
130 if (EQ (xw->type, Qwebkit)) 114 if (EQ (xw->type, Qwebkit))
131 { 115 {
132 gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), 116 gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr),
133 xw->widgetscrolledwindow_osr); 117 GTK_WIDGET (WEBKIT_WEB_VIEW (xw->widget_osr)));
134 } 118 }
135 else 119 else
136 { 120 {
@@ -140,7 +124,6 @@ Returns the newly constructed xwidget, or nil if construction fails. */)
140 124
141 gtk_widget_show (xw->widget_osr); 125 gtk_widget_show (xw->widget_osr);
142 gtk_widget_show (xw->widgetwindow_osr); 126 gtk_widget_show (xw->widgetwindow_osr);
143 gtk_widget_show (xw->widgetscrolledwindow_osr);
144 127
145 /* Store some xwidget data in the gtk widgets for convenient 128 /* Store some xwidget data in the gtk widgets for convenient
146 retrieval in the event handlers. */ 129 retrieval in the event handlers. */
@@ -482,10 +465,7 @@ xwidget_osr_draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data)
482 cairo_rectangle (cr, 0, 0, xv->clip_right, xv->clip_bottom); 465 cairo_rectangle (cr, 0, 0, xv->clip_right, xv->clip_bottom);
483 cairo_clip (cr); 466 cairo_clip (cr);
484 467
485 if (xw->widgetscrolledwindow_osr != NULL) 468 gtk_widget_draw (xw->widget_osr, cr);
486 gtk_widget_draw (xw->widgetscrolledwindow_osr, cr);
487 else
488 gtk_widget_draw (xw->widget_osr, cr);
489 return FALSE; 469 return FALSE;
490} 470}
491 471
@@ -767,21 +747,11 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0,
767 /* If there is an offscreen widget resize it first. */ 747 /* If there is an offscreen widget resize it first. */
768 if (xw->widget_osr) 748 if (xw->widget_osr)
769 { 749 {
770 /* Use minimum size. */
771 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr),
772 xw->width, xw->height);
773
774 gtk_window_resize (GTK_WINDOW (xw->widgetwindow_osr), xw->width, 750 gtk_window_resize (GTK_WINDOW (xw->widgetwindow_osr), xw->width,
775 xw->height); 751 xw->height);
776 gtk_scrolled_window_set_min_content_height
777 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr),
778 xw->height);
779 gtk_scrolled_window_set_min_content_width
780 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr),
781 xw->width);
782
783 gtk_container_resize_children (GTK_CONTAINER (xw->widgetwindow_osr)); 752 gtk_container_resize_children (GTK_CONTAINER (xw->widgetwindow_osr));
784 753 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width,
754 xw->height);
785 } 755 }
786 756
787 for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) 757 for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail))
@@ -800,30 +770,6 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0,
800 770
801 771
802 772
803DEFUN ("xwidget-set-adjustment",
804 Fxwidget_set_adjustment, Sxwidget_set_adjustment, 4, 4, 0,
805 doc: /* Set native scrolling for XWIDGET.
806AXIS can be `vertical' or `horizontal'.
807If RELATIVE is t, scroll relative, otherwise absolutely.
808VALUE is the amount to scroll, either relatively or absolutely. */)
809 (Lisp_Object xwidget, Lisp_Object axis, Lisp_Object relative,
810 Lisp_Object value)
811{
812 CHECK_XWIDGET (xwidget);
813 CHECK_NUMBER (value);
814 struct xwidget *xw = XXWIDGET (xwidget);
815 GtkAdjustment *adjustment
816 = ((EQ (Qhorizontal, axis)
817 ? gtk_scrolled_window_get_hadjustment
818 : gtk_scrolled_window_get_vadjustment)
819 (GTK_SCROLLED_WINDOW (xw->widgetscrolledwindow_osr)));
820 double final_value = XINT (value);
821 if (EQ (Qt, relative))
822 final_value += gtk_adjustment_get_value (adjustment);
823 gtk_adjustment_set_value (adjustment, final_value);
824 return Qnil;
825}
826
827 773
828DEFUN ("xwidget-size-request", 774DEFUN ("xwidget-size-request",
829 Fxwidget_size_request, Sxwidget_size_request, 775 Fxwidget_size_request, Sxwidget_size_request,
@@ -1039,8 +985,6 @@ syms_of_xwidget (void)
1039 defsubr (&Sxwidget_buffer); 985 defsubr (&Sxwidget_buffer);
1040 defsubr (&Sset_xwidget_plist); 986 defsubr (&Sset_xwidget_plist);
1041 987
1042 defsubr (&Sxwidget_set_adjustment);
1043
1044 DEFSYM (Qxwidget, "xwidget"); 988 DEFSYM (Qxwidget, "xwidget");
1045 989
1046 DEFSYM (QCxwidget, ":xwidget"); 990 DEFSYM (QCxwidget, ":xwidget");
diff --git a/src/xwidget.h b/src/xwidget.h
index 8fc382188f4..4447abbe38b 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -56,9 +56,6 @@ struct xwidget
56 GtkWidget *widget_osr; 56 GtkWidget *widget_osr;
57 GtkWidget *widgetwindow_osr; 57 GtkWidget *widgetwindow_osr;
58 58
59 /* Used if the widget (webkit) is to be wrapped in a scrolled window. */
60 GtkWidget *widgetscrolledwindow_osr;
61
62 /* Kill silently if Emacs is exited. */ 59 /* Kill silently if Emacs is exited. */
63 bool_bf kill_without_query : 1; 60 bool_bf kill_without_query : 1;
64}; 61};