diff options
| author | Ricardo Wurmus | 2016-10-25 23:00:35 -0700 |
|---|---|---|
| committer | Paul Eggert | 2016-10-25 23:07:13 -0700 |
| commit | 7ee870e87c6332c0d2430faf71349f939b59e162 (patch) | |
| tree | faa1694d80ea1e719f480da5f741e03f9d4fe814 /src | |
| parent | 623deaf406a85d8262bc1735009b3ee0535cc688 (diff) | |
| download | emacs-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.c | 64 | ||||
| -rw-r--r-- | src/xwidget.h | 3 |
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 | ||
| 803 | DEFUN ("xwidget-set-adjustment", | ||
| 804 | Fxwidget_set_adjustment, Sxwidget_set_adjustment, 4, 4, 0, | ||
| 805 | doc: /* Set native scrolling for XWIDGET. | ||
| 806 | AXIS can be `vertical' or `horizontal'. | ||
| 807 | If RELATIVE is t, scroll relative, otherwise absolutely. | ||
| 808 | VALUE 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 | ||
| 828 | DEFUN ("xwidget-size-request", | 774 | DEFUN ("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 | }; |