aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2015-01-20 00:50:50 +0100
committerJoakim Verona2015-01-20 00:50:50 +0100
commit395a90fee92a836f55df0b879f8ee3d862d648ac (patch)
treeef88a9dec059bbbbda26ec4592a7d896ee4c22dd
parent54efd2ab176dd6cc33bb1e86a9c37908c26d0a46 (diff)
parent35471ba2e31f038cf503c380e912f4559f1a92de (diff)
downloademacs-395a90fee92a836f55df0b879f8ee3d862d648ac.tar.gz
emacs-395a90fee92a836f55df0b879f8ee3d862d648ac.zip
Merge branch 'xwscroll' into xwidget
-rw-r--r--src/xwidget.c91
-rw-r--r--src/xwidget.h2
2 files changed, 83 insertions, 10 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index 00913ca634c..708053cbe65 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -76,6 +76,7 @@
76#ifdef HAVE_GTK3 76#ifdef HAVE_GTK3
77//for gtk3; sockets and plugs 77//for gtk3; sockets and plugs
78#include <gtk/gtkx.h> 78#include <gtk/gtkx.h>
79#include <gtk/gtkscrolledwindow.h>
79#include "emacsgtkfixed.h" 80#include "emacsgtkfixed.h"
80#endif 81#endif
81 82
@@ -146,6 +147,9 @@ gboolean webkit_osr_navigation_policy_decision_requested_callback(WebKitWebView
146 gpointer user_data); 147 gpointer user_data);
147 148
148GtkWidget* xwgir_create(char* class, char* namespace); 149GtkWidget* xwgir_create(char* class, char* namespace);
150
151
152
149static void 153static void
150send_xembed_ready_event (struct xwidget* xw, int xembedid); 154send_xembed_ready_event (struct xwidget* xw, int xembedid);
151DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 8, 0, 155DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 8, 0,
@@ -194,6 +198,8 @@ TYPE is a symbol which can take one of the following values:
194 xw->plist = Qnil; 198 xw->plist = Qnil;
195 199
196 200
201
202
197#ifdef HAVE_WEBKIT_OSR 203#ifdef HAVE_WEBKIT_OSR
198 /* DIY mvc. widget is rendered offscreen, 204 /* DIY mvc. widget is rendered offscreen,
199 later bitmap copied to the views. 205 later bitmap copied to the views.
@@ -204,9 +210,17 @@ TYPE is a symbol which can take one of the following values:
204 block_input(); 210 block_input();
205 xw->widgetwindow_osr = gtk_offscreen_window_new (); 211 xw->widgetwindow_osr = gtk_offscreen_window_new ();
206 gtk_window_resize(GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); 212 gtk_window_resize(GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height);
213 xw->widgetscrolledwindow_osr = NULL; //webkit osr is the only scrolled component atm
207 214
208 if (EQ(xw->type, Qwebkit_osr)) 215 if (EQ(xw->type, Qwebkit_osr)){
209 xw->widget_osr = webkit_web_view_new(); 216 xw->widgetscrolledwindow_osr = gtk_scrolled_window_new(NULL, NULL);
217 gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->height);
218 gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->width);
219 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
220
221 xw->widget_osr=webkit_web_view_new();
222 gtk_container_add(GTK_CONTAINER(xw->widgetscrolledwindow_osr ), GTK_WIDGET( WEBKIT_WEB_VIEW(xw->widget_osr)));
223 }
210 if(EQ(xw->type, Qsocket_osr)) 224 if(EQ(xw->type, Qsocket_osr))
211 xw->widget_osr = gtk_socket_new(); 225 xw->widget_osr = gtk_socket_new();
212 if(!NILP (Fget(xw->type, QCxwgir_class))) 226 if(!NILP (Fget(xw->type, QCxwgir_class)))
@@ -214,10 +228,16 @@ TYPE is a symbol which can take one of the following values:
214 SDATA(Fcar(Fget(xw->type, QCxwgir_class)))); 228 SDATA(Fcar(Fget(xw->type, QCxwgir_class))));
215 229
216 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); 230 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height);
217 gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widget_osr); 231
232 if (EQ(xw->type, Qwebkit_osr)){
233 gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widgetscrolledwindow_osr);
234 }else{
235 gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widget_osr);
236 }
218 237
219 gtk_widget_show (xw->widget_osr); 238 gtk_widget_show (xw->widget_osr);
220 gtk_widget_show (xw->widgetwindow_osr); 239 gtk_widget_show (xw->widgetwindow_osr);
240 gtk_widget_show (xw->widgetscrolledwindow_osr);
221 241
222 /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */ 242 /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */
223 g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); 243 g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw));
@@ -541,8 +561,11 @@ xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)
541 cairo_rectangle(cr, 0,0, xv->clip_right, xv->clip_bottom);//xw->width, xw->height); 561 cairo_rectangle(cr, 0,0, xv->clip_right, xv->clip_bottom);//xw->width, xw->height);
542 cairo_clip(cr); 562 cairo_clip(cr);
543 563
544 gtk_widget_draw (xw->widget_osr, cr); 564 //
545 565 if(xw->widgetscrolledwindow_osr != NULL)
566 gtk_widget_draw (xw->widgetscrolledwindow_osr, cr);
567 else
568 gtk_widget_draw (xw->widget_osr, cr);
546 return FALSE; 569 return FALSE;
547} 570}
548 571
@@ -564,7 +587,18 @@ xwidget_osr_event_forward (GtkWidget *widget,
564 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr); 587 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr);
565 //eventcopy->any.window = gtk_widget_get_window(GTK_WIDGET (xw->widgetwindow_osr)); 588 //eventcopy->any.window = gtk_widget_get_window(GTK_WIDGET (xw->widgetwindow_osr));
566 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xwgir_create_debug); 589 //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xwgir_create_debug);
567 eventcopy->any.window = gtk_widget_get_window(xw->widget_osr);//gtk_widget_get_window(xwgir_create_debug); 590
591
592
593 eventcopy->any.window = gtk_widget_get_window(xw->widget_osr);// works
594 //eventcopy->any.window = gtk_widget_get_window(xw->widgetwindow_osr);//nothing happens
595 //eventcopy->any.window = gtk_widget_get_window(gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr)));
596 //eventcopy->any.window = gtk_widget_get_window(xw->widgetscrolledwindow_osr); //nothing happens
597 //eventcopy->any.send_event = TRUE;
598 //gtk_scrolled_window_scroll_child (xw->widgetscrolledwindow_osr, GTK_SCROLL_STEP_DOWN, FALSE); // private
599
600
601
568 //eventcopy->any.window = gtk_button_get_event_window(GTK_BUTTON(xw->widget_osr));//gtk_widget_get_window(xwgir_create_debug); 602 //eventcopy->any.window = gtk_button_get_event_window(GTK_BUTTON(xw->widget_osr));//gtk_widget_get_window(xwgir_create_debug);
569 //eventcopy->button.x=200; eventcopy->button.y=200; 603 //eventcopy->button.x=200; eventcopy->button.y=200;
570 //event->button.button = GDK_BUTTON_PRIMARY; //debug 604 //event->button.button = GDK_BUTTON_PRIMARY; //debug
@@ -1149,7 +1183,7 @@ DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_g
1149} 1183}
1150 1184
1151//TODO missnamed 1185//TODO missnamed
1152DEFUN("xwidget-disable-plugin-for-mime", Fxwidget_disable_plugin_for_mime , Sxwidget_disable_plugin_for_mime, 1186DEFUN ("xwidget-disable-plugin-for-mime", Fxwidget_disable_plugin_for_mime , Sxwidget_disable_plugin_for_mime,
1153 1,1,0, doc: /* */) 1187 1,1,0, doc: /* */)
1154 (Lisp_Object mime) 1188 (Lisp_Object mime)
1155{ 1189{
@@ -1219,8 +1253,6 @@ DEFUN ("xwidget-webkit-dom-dump", Fxwidget_webkit_dom_dump, Sxwidget_webkit_dom
1219 1253
1220 1254
1221 1255
1222
1223
1224DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc: 1256DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
1225 /* Resize XWIDGET. 1257 /* Resize XWIDGET.
1226 NEW_WIDTH NEW_HEIGHT defines the new size.) 1258 NEW_WIDTH NEW_HEIGHT defines the new size.)
@@ -1252,6 +1284,10 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
1252 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); //minimum size 1284 gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); //minimum size
1253 //gtk_window_resize( GTK_WINDOW(xw->widget_osr), xw->width, xw->height); 1285 //gtk_window_resize( GTK_WINDOW(xw->widget_osr), xw->width, xw->height);
1254 gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); 1286 gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height);
1287 gtk_window_resize( GTK_WINDOW(xw->widgetscrolledwindow_osr), xw->width, xw->height);
1288 gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->height);
1289 gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->width);
1290
1255 //gtk_container_resize_children ( GTK_WINDOW(xw->widgetwindow_osr)); 1291 //gtk_container_resize_children ( GTK_WINDOW(xw->widgetwindow_osr));
1256 gtk_container_resize_children (GTK_CONTAINER(xw->widgetwindow_osr)); 1292 gtk_container_resize_children (GTK_CONTAINER(xw->widgetwindow_osr));
1257 1293
@@ -1271,8 +1307,38 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
1271 return Qnil; 1307 return Qnil;
1272} 1308}
1273 1309
1310
1311
1312DEFUN ("xwidget-set-adjustment", Fxwidget_set_adjustment, Sxwidget_set_adjustment, 4, 4, 0, doc:
1313 /* set scrolling */)
1314 (Lisp_Object xwidget, Lisp_Object axis, Lisp_Object relative, Lisp_Object value)
1315{
1316 CHECK_XWIDGET (xwidget);
1317 struct xwidget* xw = XXWIDGET(xwidget);
1318 GtkAdjustment* adjustment;
1319 float final_value=0.0;
1320
1321 if(EQ(Qvertical, axis)){
1322 adjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr));
1323 }
1324 if(EQ(Qhorizontal, axis)){
1325 adjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr));
1326 }
1327
1328 if(EQ(Qt, relative)){
1329 final_value=gtk_adjustment_get_value(adjustment)+XFASTINT(value);
1330 }else{
1331 final_value=0.0+XFASTINT(value);
1332 }
1333
1334 gtk_adjustment_set_value(adjustment, final_value);
1335
1336 return Qnil;
1337}
1338
1339
1274DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc: 1340DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc:
1275- /* Desired size of the XWIDGET. 1341 /* Desired size of the XWIDGET.
1276 1342
1277 This can be used to read the xwidget desired size, and resizes the Emacs allocated area accordingly. 1343 This can be used to read the xwidget desired size, and resizes the Emacs allocated area accordingly.
1278 1344
@@ -1566,6 +1632,8 @@ syms_of_xwidget (void)
1566 defsubr (&Sxwidget_buffer); 1632 defsubr (&Sxwidget_buffer);
1567 defsubr (&Sset_xwidget_plist); 1633 defsubr (&Sset_xwidget_plist);
1568 1634
1635 defsubr (&Sxwidget_set_adjustment);
1636
1569 DEFSYM (Qxwidget, "xwidget"); 1637 DEFSYM (Qxwidget, "xwidget");
1570 1638
1571 DEFSYM (QCxwidget, ":xwidget"); 1639 DEFSYM (QCxwidget, ":xwidget");
@@ -1581,6 +1649,9 @@ syms_of_xwidget (void)
1581 DEFSYM (Qsocket_osr, "socket-osr"); 1649 DEFSYM (Qsocket_osr, "socket-osr");
1582 DEFSYM (Qcairo, "cairo"); 1650 DEFSYM (Qcairo, "cairo");
1583 1651
1652 DEFSYM (Qvertical, "vertical");
1653 DEFSYM (Qhorizontal, "horizontal");
1654
1584 DEFSYM (QCplist, ":plist"); 1655 DEFSYM (QCplist, ":plist");
1585 1656
1586 DEFVAR_LISP ("xwidget-list", Vxwidget_list, doc: /*xwidgets list*/); 1657 DEFVAR_LISP ("xwidget-list", Vxwidget_list, doc: /*xwidgets list*/);
diff --git a/src/xwidget.h b/src/xwidget.h
index 0db7653941b..cbaddf6cec7 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -34,6 +34,8 @@ struct xwidget{
34 //for offscreen widgets, unused if not osr 34 //for offscreen widgets, unused if not osr
35 GtkWidget* widget_osr; 35 GtkWidget* widget_osr;
36 GtkWidget* widgetwindow_osr; 36 GtkWidget* widgetwindow_osr;
37 //this is used if the widget (webkit) is to be wrapped in a scrolled window,
38 GtkWidget* widgetscrolledwindow_osr;
37 /* Non-nil means kill silently if Emacs is exited. */ 39 /* Non-nil means kill silently if Emacs is exited. */
38 unsigned int kill_without_query : 1; 40 unsigned int kill_without_query : 1;
39 41