aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoakim Verona2011-06-25 22:53:39 +0200
committerJoakim Verona2011-06-25 22:53:39 +0200
commit9fa0e291e866fb7945e18cd2ad8514090c13d510 (patch)
tree7535f7de7040c4200c669bd15c0bf153aa27c597 /src
parent6716c046071a641da713adf2e1e3d2f583643a9d (diff)
downloademacs-9fa0e291e866fb7945e18cd2ad8514090c13d510.tar.gz
emacs-9fa0e291e866fb7945e18cd2ad8514090c13d510.zip
cleanups + small step towards better lisp interface. use syms rather than ints for xwidget types
Diffstat (limited to 'src')
-rw-r--r--src/xdisp.c6
-rw-r--r--src/xwidget.c94
-rw-r--r--src/xwidget.h8
3 files changed, 51 insertions, 57 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 5fa75e60bf4..c48610b37f2 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -20994,8 +20994,7 @@ fill_image_glyph_string (struct glyph_string *s)
20994} 20994}
20995 20995
20996static void 20996static void
20997fill_xwidget_glyph_string (s) 20997fill_xwidget_glyph_string (struct glyph_string *s)
20998 struct glyph_string *s;
20999{ 20998{
21000 xassert (s->first_glyph->type == XWIDGET_GLYPH); 20999 xassert (s->first_glyph->type == XWIDGET_GLYPH);
21001 printf("fill_xwidget_glyph_string: width:%d \n",s->first_glyph->pixel_width); 21000 printf("fill_xwidget_glyph_string: width:%d \n",s->first_glyph->pixel_width);
@@ -22124,8 +22123,7 @@ produce_image_glyph (struct it *it)
22124} 22123}
22125 22124
22126static void 22125static void
22127produce_xwidget_glyph (it) 22126produce_xwidget_glyph (struct it *it)
22128 struct it *it;
22129{ 22127{
22130 // struct image *img; 22128 // struct image *img;
22131 struct face *face; 22129 struct face *face;
diff --git a/src/xwidget.c b/src/xwidget.c
index f2d06ae1792..8e8bd4ca4b4 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -94,10 +94,12 @@ Lisp_Object Qxwidget_info;
94Lisp_Object Qxwidget_resize_internal; 94Lisp_Object Qxwidget_resize_internal;
95Lisp_Object Qxwidget_send_keyboard_event; 95Lisp_Object Qxwidget_send_keyboard_event;
96 96
97extern Lisp_Object QCdata, QCtype; 97Lisp_Object Qbutton, Qtoggle, Qslider, Qsocket, Qcairo, QCplist;
98extern Lisp_Object QCwidth, QCheight;
99 98
100 99
100extern Lisp_Object QCtype;
101extern Lisp_Object QCwidth, QCheight;
102
101#define XG_XWIDGET "emacs_xwidget" 103#define XG_XWIDGET "emacs_xwidget"
102struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); 104struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w);
103 105
@@ -191,6 +193,13 @@ void xwidget_plug_added(GtkSocket *socket,
191 printf("xwidget_plug_added\n"); 193 printf("xwidget_plug_added\n");
192} 194}
193 195
196gboolean xwidget_plug_removed(GtkSocket *socket,
197 gpointer user_data)
198{
199 printf("xwidget_plug_removed\n");
200 return TRUE; /* dont run the default handler because that kills the socket and we want to reuse it*/
201}
202
194 203
195int xwidget_view_index=0; 204int xwidget_view_index=0;
196 205
@@ -209,36 +218,32 @@ xwidget_init_view (
209 xv->model = xww; 218 xv->model = xww;
210 219
211 //widget creation 220 //widget creation
212 switch (xww->type) 221 if(EQ(xww->type, Qbutton))
213 { 222 {
214 case 1:
215 xv->widget = gtk_button_new_with_label (xww->title); 223 xv->widget = gtk_button_new_with_label (xww->title);
216 g_signal_connect (G_OBJECT (xv->widget), "clicked", 224 g_signal_connect (G_OBJECT (xv->widget), "clicked",
217 G_CALLBACK (buttonclick_handler), xww); //the model rather than the view 225 G_CALLBACK (buttonclick_handler), xww); //the model rather than the view
218 break; 226 } else if (EQ(xww->type, Qtoggle)) {
219 case 2:
220 xv->widget = gtk_toggle_button_new_with_label (xww->title); 227 xv->widget = gtk_toggle_button_new_with_label (xww->title);
221 break; 228 } else if (EQ(xww->type, Qsocket)) {
222 case 3:
223 xv->widget = gtk_socket_new (); 229 xv->widget = gtk_socket_new ();
224 //gtk_widget_set_app_paintable (xw->widget, TRUE); //workaround for composited sockets 230 //gtk_widget_set_app_paintable (xw->widget, TRUE); //workaround for composited sockets
225 231
226 //gdk_color_parse("blue",&color); //the blue color never seems to show up. something else draws a grey bg 232 //gdk_color_parse("blue",&color); //the blue color never seems to show up. something else draws a grey bg
227 //gtk_widget_modify_bg(xv->widget, GTK_STATE_NORMAL, &color); 233 //gtk_widget_modify_bg(xv->widget, GTK_STATE_NORMAL, &color);
228 g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); 234 g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added");
229 break; 235 g_signal_connect_after(xv->widget, "plug-removed", G_CALLBACK(xwidget_plug_removed), "plug removed");
230 case 4: 236 } else if (EQ(xww->type, Qsocket)) {
231 xv->widget = 237 xv->widget =
232 gtk_hscale_new (GTK_ADJUSTMENT 238 gtk_hscale_new (GTK_ADJUSTMENT
233 (gtk_adjustment_new (0, 0, 100, 1, 1, 0))); 239 (gtk_adjustment_new (0, 0, 100, 1, 1, 0)));
234 gtk_scale_set_draw_value (GTK_SCALE (xv->widget), FALSE); //i think its emacs role to show text and stuff, so disable the widgets own text 240 gtk_scale_set_draw_value (GTK_SCALE (xv->widget), FALSE); //i think its emacs role to show text and stuff, so disable the widgets own text
235 break; 241 } else if (EQ(xww->type, Qcairo)) {
236 case 5:
237 //Cairo view 242 //Cairo view
238 //uhm cairo is differentish in gtk 3. 243 //uhm cairo is differentish in gtk 3.
239 //gdk_cairo_create (gtk_widget_get_window (f->gwfixed)); 244 //gdk_cairo_create (gtk_widget_get_window (f->gwfixed));
240 break; 245 } else return NULL;
241 } 246
242 //widget realization 247 //widget realization
243 //make container widget 1st, and put the actual widget inside the container 248 //make container widget 1st, and put the actual widget inside the container
244 //later, drawing should crop container window if necessary to handle case where xwidget 249 //later, drawing should crop container window if necessary to handle case where xwidget
@@ -277,9 +282,7 @@ xwidget_init_view (
277 // g_signal_connect_after(xw->widget, "damage-event", G_CALLBACK(xwidget_composite_draw), "damaged"); 282 // g_signal_connect_after(xw->widget, "damage-event", G_CALLBACK(xwidget_composite_draw), "damaged");
278 283
279 //widgettype specific initialization only possible after realization 284 //widgettype specific initialization only possible after realization
280 switch (xww->type) 285 if (EQ(xww->type, Qsocket)) {
281 {
282 case 3:
283 printf ("xwid:%d socket id:%x %d\n", 286 printf ("xwid:%d socket id:%x %d\n",
284 xww->id, 287 xww->id,
285 gtk_socket_get_id (GTK_SOCKET (xv->widget)), 288 gtk_socket_get_id (GTK_SOCKET (xv->widget)),
@@ -287,8 +290,7 @@ xwidget_init_view (
287 send_xembed_ready_event (xww->id, 290 send_xembed_ready_event (xww->id,
288 gtk_socket_get_id (GTK_SOCKET (xv->widget))); 291 gtk_socket_get_id (GTK_SOCKET (xv->widget)));
289 //gtk_widget_realize(xw->widget); 292 //gtk_widget_realize(xw->widget);
290 break; 293 }
291 }
292 return xv; 294 return xv;
293} 295}
294 296
@@ -423,6 +425,7 @@ DEFUN ("xwidget-embed-steal-window", Fxwidget_embed_steal_window, Sxwidget_embed
423} 425}
424 426
425 427
428
426DEFUN ("xwidget-resize-internal", Fxwidget_resize_internal, Sxwidget_resize_internal, 3, 3, 0, doc: 429DEFUN ("xwidget-resize-internal", Fxwidget_resize_internal, Sxwidget_resize_internal, 3, 3, 0, doc:
427 ) 430 )
428 (Lisp_Object xwidget_id, Lisp_Object new_width, Lisp_Object new_height) 431 (Lisp_Object xwidget_id, Lisp_Object new_width, Lisp_Object new_height)
@@ -601,40 +604,24 @@ syms_of_xwidget (void)
601{ 604{
602 int i; 605 int i;
603 606
604 Qxwidget_set_keyboard_grab = intern ("xwidget-set-keyboard-grab");
605 staticpro (&Qxwidget_set_keyboard_grab);
606 defsubr (&Sxwidget_set_keyboard_grab); 607 defsubr (&Sxwidget_set_keyboard_grab);
607
608 Qxwidget_send_keyboard_event = intern ("xwidget-send-keyboard-event");
609 staticpro (&Qxwidget_send_keyboard_event);
610 defsubr (&Sxwidget_send_keyboard_event); 608 defsubr (&Sxwidget_send_keyboard_event);
611
612 Qxwidget_embed_steal_window = intern ("xwidget-embed-steal-window");
613 staticpro (&Qxwidget_embed_steal_window);
614 defsubr (&Sxwidget_embed_steal_window); 609 defsubr (&Sxwidget_embed_steal_window);
615
616 Qxwidget_info = intern ("xwidget-info");
617 staticpro (&Qxwidget_info);
618 defsubr (&Sxwidget_info); 610 defsubr (&Sxwidget_info);
619
620 Qxwidget_resize_internal = intern ("xwidget-resize-internal");
621 staticpro (&Qxwidget_resize_internal);
622 defsubr (&Sxwidget_resize_internal); 611 defsubr (&Sxwidget_resize_internal);
623
624
625 Qxwidget_embed_steal_window = intern ("xwidget-embed-steal-window");
626 staticpro (&Qxwidget_embed_steal_window);
627 defsubr (&Sxwidget_embed_steal_window); 612 defsubr (&Sxwidget_embed_steal_window);
628 613
614 DEFSYM (Qxwidget ,"xwidget");
615 DEFSYM (Qxwidget_id ,":xwidget-id");
616 DEFSYM (Qtitle ,":title");
629 617
630 Qxwidget = intern ("xwidget"); 618 DEFSYM (Qbutton, "button");
631 staticpro (&Qxwidget); 619 DEFSYM (Qtoggle, "toggle");
632 620 DEFSYM (Qslider, "slider");
633 Qxwidget_id = intern (":xwidget-id"); 621 DEFSYM (Qsocket, "socket");
634 staticpro (&Qxwidget_id); 622 DEFSYM (Qcairo, "cairo");
635 623
636 Qtitle = intern (":title"); 624 DEFSYM (QCplist, ":plist");
637 staticpro (&Qtitle);
638 625
639 Fprovide (intern ("xwidget-internal"), Qnil); 626 Fprovide (intern ("xwidget-internal"), Qnil);
640 627
@@ -683,7 +670,7 @@ valid_xwidget_p (Lisp_Object object)
683 670
684 671
685 672
686 673/* find a value associated with key in spec */
687Lisp_Object 674Lisp_Object
688xwidget_spec_value ( 675xwidget_spec_value (
689 Lisp_Object spec, Lisp_Object key, 676 Lisp_Object spec, Lisp_Object key,
@@ -738,7 +725,9 @@ struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *
738int 725int
739lookup_xwidget (Lisp_Object spec) 726lookup_xwidget (Lisp_Object spec)
740{ 727{
741 /*when a xwidget lisp spec is found initialize the C struct*/ 728 /*when a xwidget lisp spec is found initialize the C struct that is used in the C code.
729
730 */
742 int found = 0, found1 = 0, found2 = 0; 731 int found = 0, found1 = 0, found2 = 0;
743 Lisp_Object value; 732 Lisp_Object value;
744 int id; 733 int id;
@@ -750,7 +739,7 @@ lookup_xwidget (Lisp_Object spec)
750 xw = &xwidgets[id]; 739 xw = &xwidgets[id];
751 xw->id=id; 740 xw->id=id;
752 value = xwidget_spec_value (spec, QCtype, &found); 741 value = xwidget_spec_value (spec, QCtype, &found);
753 xw->type = INTEGERP (value) ? XFASTINT (value) : 1; //default to button 742 xw->type = SYMBOLP (value) ? value : Qbutton; //default to button
754 value = xwidget_spec_value (spec, Qtitle, &found2); 743 value = xwidget_spec_value (spec, Qtitle, &found2);
755 xw->title = STRINGP (value) ? (char *) SDATA (value) : "?"; //funky cast FIXME 744 xw->title = STRINGP (value) ? (char *) SDATA (value) : "?"; //funky cast FIXME
756 745
@@ -759,7 +748,8 @@ lookup_xwidget (Lisp_Object spec)
759 value = xwidget_spec_value (spec, QCwidth, NULL); 748 value = xwidget_spec_value (spec, QCwidth, NULL);
760 xw->width = INTEGERP (value) ? XFASTINT (value) : 50; //ok 749 xw->width = INTEGERP (value) ? XFASTINT (value) : 50; //ok
761 750
762 751 value = xwidget_spec_value (spec, QCplist, Qnil);
752 xw->plist = value;
763 printf ("xwidget_id:%d type:%d found:%d %d %d title:%s (%d,%d)\n", id, 753 printf ("xwidget_id:%d type:%d found:%d %d %d title:%s (%d,%d)\n", id,
764 xw->type, found, found1, found2, xw->title, xw->height, xw->width); 754 xw->type, found, found1, found2, xw->title, xw->height, xw->width);
765 755
@@ -769,6 +759,10 @@ lookup_xwidget (Lisp_Object spec)
769 return id; 759 return id;
770} 760}
771 761
762
763
764
765
772////////////////////////////////// 766//////////////////////////////////
773int region_modified = 0; 767int region_modified = 0;
774 768
diff --git a/src/xwidget.h b/src/xwidget.h
index c66568eaac0..9e3d4669056 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -14,9 +14,11 @@ int valid_xwidget_p (Lisp_Object object) ;
14each xwidget instance/model is described by this struct. 14each xwidget instance/model is described by this struct.
15 */ 15 */
16struct xwidget{ 16struct xwidget{
17 int id; 17 Lisp_Object plist;//auxilliary data
18 int type; 18 Lisp_Object type;//the widget type
19 char* title; 19
20 int id; // id is stored inside the struct which is conveniont in some cases
21 char* title;//a title that is used for button labels for instance
20 22
21 23
22 int height; 24 int height;