aboutsummaryrefslogtreecommitdiffstats
path: root/src/xwidget.c
diff options
context:
space:
mode:
authorJoakim Verona2012-07-18 10:56:08 +0200
committerJoakim Verona2012-07-18 10:56:08 +0200
commit82da003bbce9d1b93480ba20713432f7c27bf7de (patch)
tree95577969ab2c9ab7774889b5f898e32f129fb8a4 /src/xwidget.c
parent7f914423eafcd40a7c2f394949d7bb5eeb5cdfff (diff)
downloademacs-82da003bbce9d1b93480ba20713432f7c27bf7de.tar.gz
emacs-82da003bbce9d1b93480ba20713432f7c27bf7de.zip
some experimental support for gobject introspection
Diffstat (limited to 'src/xwidget.c')
-rw-r--r--src/xwidget.c68
1 files changed, 66 insertions, 2 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index f59f2f32d1e..a9e3477d103 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -102,6 +102,9 @@
102#include <webkit/webkitdownload.h> 102#include <webkit/webkitdownload.h>
103#endif 103#endif
104 104
105//for GIR
106#include <girepository.h>
107
105#include "xwidget.h" 108#include "xwidget.h"
106 109
107//TODO should of course not be a hardcoded array but I can't be bothered atm 110//TODO should of course not be a hardcoded array but I can't be bothered atm
@@ -137,7 +140,7 @@ Lisp_Object Qxwidget_info;
137Lisp_Object Qxwidget_resize; 140Lisp_Object Qxwidget_resize;
138Lisp_Object Qxwidget_send_keyboard_event; 141Lisp_Object Qxwidget_send_keyboard_event;
139 142
140Lisp_Object Qbutton, Qtoggle, Qslider, Qsocket, Qsocket_osr, Qcairo, 143Lisp_Object Qbutton, Qtoggle, Qslider, Qsocket, Qsocket_osr, Qcairo, Qxwgir,
141 Qwebkit_osr, QCplist; 144 Qwebkit_osr, QCplist;
142 145
143 146
@@ -601,6 +604,46 @@ xwidget_osr_button_callback (GtkWidget *widget,
601 return TRUE; //dont propagate this event furter 604 return TRUE; //dont propagate this event furter
602} 605}
603 606
607
608GtkWidget* xwgir_create(char* class){
609 //create a gtk widget, given its name
610 //find the constructor
611 //call it
612 //also figure out how to pass args
613 /* gboolean g_function_info_invoke (GIFunctionInfo *info, */
614 /* const GIArgument *in_args, */
615 /* int n_in_args, */
616 /* const GIArgument *out_args, */
617 /* int n_out_args, */
618 /* GIArgument *return_value, */
619 /* GError **error); */
620 char* namespace = "Gtk";
621 char* namespace_version = "3.0";
622 GError *error = NULL;
623 GIRepository *repository;
624 GIArgument return_value;
625 /* GtkWidget* rv; */
626 repository = g_irepository_get_default();
627 g_irepository_require(repository, namespace, namespace_version, 0, &error);
628 if (error) {
629 g_error("ERROR: %s\n", error->message);
630 return NULL;
631 }
632
633 GIObjectInfo* obj_info = g_irepository_find_by_name(repository, namespace, class);
634 GIFunctionInfo* f_info = g_object_info_find_method (obj_info, "new");
635 g_function_info_invoke(f_info,
636 0, NULL,
637 0, NULL,
638 &return_value,
639 NULL);
640 return return_value.v_pointer;
641
642}
643
644
645
646
604int xwidget_view_index=0; 647int xwidget_view_index=0;
605 648
606/* initializes and does initial placement of an xwidget view on screen */ 649/* initializes and does initial placement of an xwidget view on screen */
@@ -635,6 +678,9 @@ xwidget_init_view (struct xwidget *xww,
635 } else if (EQ(xww->type, Qtoggle)) { 678 } else if (EQ(xww->type, Qtoggle)) {
636 xv->widget = gtk_toggle_button_new_with_label (XSTRING(xww->title)->data); 679 xv->widget = gtk_toggle_button_new_with_label (XSTRING(xww->title)->data);
637 //xv->widget = gtk_entry_new ();//temp hack to experiment with key propagation TODO entry widget is useful for testing 680 //xv->widget = gtk_entry_new ();//temp hack to experiment with key propagation TODO entry widget is useful for testing
681 } else if (EQ(xww->type, Qxwgir)) {
682 //this is just a test for xwgir
683 xv->widget = xwgir_create ("Button");
638 } else if (EQ(xww->type, Qsocket)) { 684 } else if (EQ(xww->type, Qsocket)) {
639 xv->widget = gtk_socket_new (); 685 xv->widget = gtk_socket_new ();
640 g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); 686 g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added");
@@ -721,7 +767,21 @@ xwidget_init_view (struct xwidget *xww,
721#endif 767#endif
722 768
723 769
724 } else return NULL; 770 } else {
771 //here we have run out of hard coded symbols, we will now attempt to create
772 //a widget dynamically
773 //TODO
774 // - support OSR
775 // - support constructor args
776 // - support signals
777 // - check that the argument widget type actually exists
778 printf("xwgir symbol %s:\n",SDATA(SYMBOL_NAME(xww->type)));
779 //xv->widget = xwgir_create ("Button");
780 xv->widget = xwgir_create(SDATA(SYMBOL_NAME(xww->type)));
781
782 }
783
784 //else return NULL;
725 785
726 //widget realization 786 //widget realization
727 //make container widget 1st, and put the actual widget inside the container 787 //make container widget 1st, and put the actual widget inside the container
@@ -1245,6 +1305,8 @@ syms_of_xwidget (void)
1245 DEFSYM (Qsocket_osr, "socket-osr"); 1305 DEFSYM (Qsocket_osr, "socket-osr");
1246 DEFSYM (Qcairo, "cairo"); 1306 DEFSYM (Qcairo, "cairo");
1247 1307
1308 DEFSYM (Qxwgir, "xwgir");
1309
1248 DEFSYM (QCplist, ":plist"); 1310 DEFSYM (QCplist, ":plist");
1249 1311
1250 DEFVAR_LISP ("xwidget-alist", Vxwidget_alist, doc: /*xwidgets list*/); 1312 DEFVAR_LISP ("xwidget-alist", Vxwidget_alist, doc: /*xwidgets list*/);
@@ -1471,4 +1533,6 @@ xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix)
1471 } 1533 }
1472 } 1534 }
1473} 1535}
1536
1537
1474#endif 1538#endif