Date: Fri, 10 Jun 2005 10:27:23 +0200 From: Stefano Zacchiroli To: LablGTK Mailing List Subject: lablgtk2 patch for binding GtkSourceView Message-ID: <20050610082723.GA32571 at cs.unibo.it> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="EeQfGwPcQSOJBaQU" Content-Disposition: inline --EeQfGwPcQSOJBaQU Content-Type: text/plain; charset=us-ascii Content-Disposition: inline I've an almost complete binding of GtkSourceView to OCaml. To implement it I needed a few changes in lablgtk2: - GtkSourceView inherits from GtkTextView, but the latter was not designed to be extended (e.g. no buffer_skel class); thus I added it - same for GtkSourceBuffer and GtkTextBuffer - I dropped obj from the Gtk.text_buffer type in order to be able to extend the variant type for inheritance The patch (against the latest CVS snapshot) is attached. Could you please consider applying it to lablgtk2 CVS? Otherwise I wont be able to release "lablgtksourceview" ... TIA, Cheers. -- Stefano Zacchiroli -*- Computer Science PhD student @ Uny Bologna, Italy zack@{cs.unibo.it,debian.org,bononia.it} -%- http://www.bononia.it/zack/ If there's any real truth it's that the entire multidimensional infinity of the Universe is almost certainly being run by a bunch of maniacs. -!- --EeQfGwPcQSOJBaQU Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="lablgtk2.patch" --- orig/lablgtk2-2.4.0+2005.02.18/src/gnomeCanvas.ml 2004-09-18 07:27:54.000000000 +0200 +++ lablgtk2-2.4.0+2005.02.18/src/gnomeCanvas.ml 2005-06-09 17:23:33.000000000 +0200 @@ -216,7 +216,7 @@ external cut_clipboard : [> rich_text] Gobject.obj -> unit = "ml_gnome_canvas_rich_text_cut_clipboard" external copy_clipboard : [> rich_text] Gobject.obj -> unit = "ml_gnome_canvas_rich_text_copy_clipboard" external paste_clipboard : [> rich_text] Gobject.obj -> unit = "ml_gnome_canvas_rich_text_paste_clipboard" -external get_buffer : [> rich_text] Gobject.obj -> Gtk.text_buffer = "ml_gnome_canvas_rich_text_get_buffer" +external get_buffer : [> rich_text] Gobject.obj -> Gtk.text_buffer Gtk.obj = "ml_gnome_canvas_rich_text_get_buffer" end (* Conversion functions for properties *) diff -ur orig/lablgtk2-2.4.0+2005.02.18/src/gText.ml lablgtk2-2.4.0+2005.02.18/src/gText.ml --- orig/lablgtk2-2.4.0+2005.02.18/src/gText.ml 2004-09-15 14:48:58.000000000 +0200 +++ lablgtk2-2.4.0+2005.02.18/src/gText.ml 2005-06-09 19:02:03.000000000 +0200 @@ -357,10 +357,11 @@ | `LINECHAR of int * int | `LINEBYTE of int * int | `START | `END | `ITER of iter | mark ] -class buffer obj = object(self) +class buffer_skel obj = +let obj = (obj :> text_buffer obj) in +object (self) method get_oid = Gobject.get_oid obj method as_buffer = obj - method connect = new buffer_signals obj method line_count = Buffer.get_line_count obj method char_count = Buffer.get_char_count obj method tag_table = Buffer.get_tag_table obj @@ -511,6 +512,11 @@ Buffer.remove_selection_clipboard obj (GData.as_clipboard clip) end +class buffer obj = object (self) + inherit buffer_skel obj + method connect = new buffer_signals obj +end + let buffer ?tag_table ?text () = let tag_table = match tag_table with None -> None | Some x -> Some x#as_tag_table in @@ -523,12 +529,11 @@ inherit text_view_sigs end -class view obj = object (self) - inherit [Gtk.text_view] widget_impl obj +class view_skel obj = object (self) + inherit [[>Gtk.text_view]] widget_impl obj inherit text_view_props method event = new GObj.event_ops obj - method connect = new view_signals obj - method as_view = obj + method as_view = (obj :> text_view obj) method set_buffer (b:buffer) = View.set_buffer obj (b#as_buffer) method buffer = new buffer (View.get_buffer obj) method scroll_to_mark @@ -585,6 +590,10 @@ View.move_child obj child#as_widget x y end +class view obj = object (self) + inherit view_skel obj + method connect = new view_signals obj +end let view ?buffer = View.make_params [] ~cont:( diff -ur orig/lablgtk2-2.4.0+2005.02.18/src/gText.mli lablgtk2-2.4.0+2005.02.18/src/gText.mli --- orig/lablgtk2-2.4.0+2005.02.18/src/gText.mli 2004-09-17 12:18:19.000000000 +0200 +++ lablgtk2-2.4.0+2005.02.18/src/gText.mli 2005-06-09 18:50:42.000000000 +0200 @@ -181,7 +181,7 @@ method backward_word_start : iter method backward_word_starts : int -> iter method begins_tag : tag option -> bool - method buffer : text_buffer + method buffer : text_buffer obj method bytes_in_line : int method can_insert : default:bool -> bool method char : Glib.unichar @@ -305,18 +305,16 @@ | `LINECHAR of int * int | `LINEBYTE of int * int | `START | `END | `ITER of iter | mark ] -(** Stores attributed text for display in a {!GText.view} - @gtkdoc gtk GtkTextBuffer *) -class buffer : text_buffer -> +class buffer_skel: 'a obj -> object - method as_buffer : text_buffer + constraint 'a = [> text_buffer] + method as_buffer : text_buffer obj method add_selection_clipboard : GData.clipboard -> unit method apply_tag : tag -> start:iter -> stop:iter -> unit method apply_tag_by_name : string -> start:iter -> stop:iter -> unit method begin_user_action : unit -> unit method bounds : iter * iter method char_count : int - method connect : buffer_signals method copy_clipboard : GData.clipboard -> unit method create_child_anchor : iter -> child_anchor method create_mark : @@ -380,6 +378,15 @@ method tag_table : text_tag_table end +(** Stores attributed text for display in a {!GText.view} + @gtkdoc gtk GtkTextBuffer *) +class buffer : 'a obj -> +object + inherit buffer_skel + constraint 'a = [> text_buffer] + method connect : buffer_signals +end + (** @gtkdoc gtk GtkTextBuffer *) val buffer : ?tag_table:tag_table -> ?text:string -> unit -> buffer @@ -411,12 +418,11 @@ method toggle_overwrite : callback:(unit -> unit) -> GtkSignal.id end -(** Widget that displays a {!GText.buffer} - @gtkdoc gtk GtkTextView *) -class view : text_view obj -> +class view_skel : 'a obj -> object inherit GObj.widget - val obj : text_view obj + constraint 'a = [> text_view] + val obj : 'a obj method as_view : text_view obj method add_child_at_anchor : GObj.widget -> child_anchor -> unit method add_child_in_window : @@ -427,7 +433,6 @@ method buffer : buffer method buffer_to_window_coords : tag:Tags.text_window_type -> x:int -> y:int -> int * int - method connect : view_signals method cursor_visible : bool method editable : bool method event : GObj.event_ops @@ -482,6 +487,15 @@ method wrap_mode : Tags.wrap_mode end +(** Widget that displays a {!GText.buffer} + @gtkdoc gtk GtkTextView *) +class view : 'a obj -> +object + inherit view_skel + constraint 'a = [> text_view] + method connect : view_signals +end + (** @gtkdoc gtk GtkTextView *) val view : ?buffer:buffer -> diff -ur orig/lablgtk2-2.4.0+2005.02.18/src/gtk.ml lablgtk2-2.4.0+2005.02.18/src/gtk.ml --- orig/lablgtk2-2.4.0+2005.02.18/src/gtk.ml 2004-12-05 14:18:34.000000000 +0100 +++ lablgtk2-2.4.0+2005.02.18/src/gtk.ml 2005-06-09 17:13:15.000000000 +0200 @@ -199,7 +199,7 @@ type separator = [widget|`separator] type text_view = [container|`textview] -type text_buffer = [`textbuffer] obj +type text_buffer = [`textbuffer] type text_tag_table = [`texttagtable] obj type text_tag = [`texttag] obj type text_mark = [`textmark] obj diff -ur orig/lablgtk2-2.4.0+2005.02.18/src/gtkText.ml lablgtk2-2.4.0+2005.02.18/src/gtkText.ml --- orig/lablgtk2-2.4.0+2005.02.18/src/gtkText.ml 2004-09-15 14:48:58.000000000 +0200 +++ lablgtk2-2.4.0+2005.02.18/src/gtkText.ml 2005-06-09 17:24:20.000000000 +0200 @@ -21,126 +21,126 @@ module Buffer = struct open Gpointer include TextBuffer - external get_line_count : text_buffer -> int + external get_line_count : text_buffer obj -> int = "ml_gtk_text_buffer_get_line_count" - external get_char_count : text_buffer -> int + external get_char_count : text_buffer obj -> int = "ml_gtk_text_buffer_get_char_count" - external get_tag_table : text_buffer -> text_tag_table + external get_tag_table : text_buffer obj -> text_tag_table = "ml_gtk_text_buffer_get_tag_table" - external insert : text_buffer -> text_iter -> string stable -> unit + external insert : text_buffer obj -> text_iter -> string stable -> unit = "ml_gtk_text_buffer_insert" let insert a b c = insert a b (stable_copy c) - external insert_at_cursor : text_buffer -> string stable -> unit + external insert_at_cursor : text_buffer obj -> string stable -> unit = "ml_gtk_text_buffer_insert_at_cursor" let insert_at_cursor a b = insert_at_cursor a (stable_copy b) external insert_interactive : - text_buffer -> text_iter -> string stable -> bool -> bool + text_buffer obj -> text_iter -> string stable -> bool -> bool = "ml_gtk_text_buffer_insert_interactive" let insert_interactive a b c = insert_interactive a b (stable_copy c) external insert_interactive_at_cursor : - text_buffer -> string stable -> bool -> bool + text_buffer obj -> string stable -> bool -> bool = "ml_gtk_text_buffer_insert_interactive_at_cursor" let insert_interactive_at_cursor a b = insert_interactive_at_cursor a (stable_copy b) - external insert_range : text_buffer -> text_iter -> text_iter + external insert_range : text_buffer obj -> text_iter -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_insert_range" - external insert_range_interactive : text_buffer -> text_iter -> text_iter + external insert_range_interactive : text_buffer obj -> text_iter -> text_iter -> text_iter -> bool -> bool = "ml_gtk_text_buffer_insert_range_interactive" - external delete : text_buffer -> text_iter -> text_iter -> unit + external delete : text_buffer obj -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_delete" - external delete_interactive : text_buffer -> text_iter -> text_iter + external delete_interactive : text_buffer obj -> text_iter -> text_iter -> bool -> bool = "ml_gtk_text_buffer_delete_interactive" - external set_text : text_buffer -> string stable -> unit + external set_text : text_buffer obj -> string stable -> unit = "ml_gtk_text_buffer_set_text" let set_text b s = set_text b (stable_copy s) - external get_text : text_buffer -> text_iter -> text_iter -> + external get_text : text_buffer obj -> text_iter -> text_iter -> bool -> string = "ml_gtk_text_buffer_get_text" - external get_slice : text_buffer -> text_iter -> text_iter -> + external get_slice : text_buffer obj -> text_iter -> text_iter -> bool -> string = "ml_gtk_text_buffer_get_slice" - external insert_pixbuf : text_buffer -> text_iter -> GdkPixbuf.pixbuf + external insert_pixbuf : text_buffer obj -> text_iter -> GdkPixbuf.pixbuf -> unit = "ml_gtk_text_buffer_insert_pixbuf" - external create_mark : text_buffer -> string option -> text_iter + external create_mark : text_buffer obj -> string option -> text_iter -> bool -> text_mark = "ml_gtk_text_buffer_create_mark" - external move_mark : text_buffer -> text_mark -> text_iter + external move_mark : text_buffer obj -> text_mark -> text_iter -> unit = "ml_gtk_text_buffer_move_mark" - external move_mark_by_name : text_buffer -> string -> text_iter + external move_mark_by_name : text_buffer obj -> string -> text_iter -> unit = "ml_gtk_text_buffer_move_mark_by_name" - external delete_mark : text_buffer -> text_mark + external delete_mark : text_buffer obj -> text_mark -> unit = "ml_gtk_text_buffer_delete_mark" - external delete_mark_by_name : text_buffer -> string + external delete_mark_by_name : text_buffer obj -> string -> unit = "ml_gtk_text_buffer_delete_mark_by_name" - external get_mark : text_buffer -> string -> text_mark option + external get_mark : text_buffer obj -> string -> text_mark option = "ml_gtk_text_buffer_get_mark" - external get_insert : text_buffer -> text_mark + external get_insert : text_buffer obj -> text_mark = "ml_gtk_text_buffer_get_insert" - external get_selection_bound : text_buffer -> text_mark + external get_selection_bound : text_buffer obj -> text_mark = "ml_gtk_text_buffer_get_selection_bound" - external place_cursor : text_buffer -> text_iter -> unit + external place_cursor : text_buffer obj -> text_iter -> unit = "ml_gtk_text_buffer_place_cursor" - external select_range : text_buffer -> text_iter -> text_iter -> unit + external select_range : text_buffer obj -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_select_range" - external apply_tag : text_buffer -> text_tag -> text_iter -> text_iter + external apply_tag : text_buffer obj -> text_tag -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_apply_tag" - external remove_tag : text_buffer -> text_tag -> text_iter -> text_iter + external remove_tag : text_buffer obj -> text_tag -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_remove_tag" - external apply_tag_by_name : text_buffer -> string -> text_iter -> text_iter + external apply_tag_by_name : text_buffer obj -> string -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_apply_tag_by_name" - external remove_tag_by_name : text_buffer -> string -> text_iter -> text_iter + external remove_tag_by_name : text_buffer obj -> string -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_remove_tag_by_name" - external remove_all_tags : text_buffer -> text_iter -> text_iter + external remove_all_tags : text_buffer obj -> text_iter -> text_iter -> unit = "ml_gtk_text_buffer_remove_all_tags" - external create_tag_0 : text_buffer -> string option + external create_tag_0 : text_buffer obj -> string option -> text_tag = "ml_gtk_text_buffer_create_tag_0" - external create_tag_2 : text_buffer -> string option + external create_tag_2 : text_buffer obj -> string option -> string -> string -> text_tag = "ml_gtk_text_buffer_create_tag_2" - external get_iter_at_line_offset : text_buffer -> int -> int -> text_iter + external get_iter_at_line_offset : text_buffer obj -> int -> int -> text_iter = "ml_gtk_text_buffer_get_iter_at_line_offset" - external get_iter_at_offset : text_buffer -> int -> text_iter + external get_iter_at_offset : text_buffer obj -> int -> text_iter = "ml_gtk_text_buffer_get_iter_at_offset" - external get_iter_at_line : text_buffer -> int -> text_iter + external get_iter_at_line : text_buffer obj -> int -> text_iter = "ml_gtk_text_buffer_get_iter_at_line" - external get_iter_at_line_index : text_buffer -> int -> int -> text_iter + external get_iter_at_line_index : text_buffer obj -> int -> int -> text_iter = "ml_gtk_text_buffer_get_iter_at_line_index" - external get_iter_at_mark : text_buffer -> text_mark -> text_iter + external get_iter_at_mark : text_buffer obj -> text_mark -> text_iter = "ml_gtk_text_buffer_get_iter_at_mark" - external get_start_iter : text_buffer + external get_start_iter : text_buffer obj -> text_iter = "ml_gtk_text_buffer_get_start_iter" - external get_end_iter : text_buffer + external get_end_iter : text_buffer obj -> text_iter = "ml_gtk_text_buffer_get_end_iter" - external get_bounds : text_buffer -> text_iter * text_iter + external get_bounds : text_buffer obj -> text_iter * text_iter = "ml_gtk_text_buffer_get_bounds" - external get_modified : text_buffer -> bool + external get_modified : text_buffer obj -> bool = "ml_gtk_text_buffer_get_modified" - external set_modified : text_buffer -> bool -> unit + external set_modified : text_buffer obj -> bool -> unit = "ml_gtk_text_buffer_set_modified" - external delete_selection : text_buffer -> bool -> bool -> bool + external delete_selection : text_buffer obj -> bool -> bool -> bool = "ml_gtk_text_buffer_delete_selection" - external get_selection_bounds : text_buffer -> text_iter * text_iter + external get_selection_bounds : text_buffer obj -> text_iter * text_iter = "ml_gtk_text_buffer_get_selection_bounds" - external begin_user_action : text_buffer -> unit + external begin_user_action : text_buffer obj -> unit = "ml_gtk_text_buffer_begin_user_action" - external end_user_action : text_buffer -> unit + external end_user_action : text_buffer obj -> unit = "ml_gtk_text_buffer_end_user_action" - external create_child_anchor : text_buffer + external create_child_anchor : text_buffer obj -> text_iter -> text_child_anchor = "ml_gtk_text_buffer_create_child_anchor" external insert_child_anchor : - text_buffer -> text_iter -> text_child_anchor -> unit + text_buffer obj -> text_iter -> text_child_anchor -> unit = "ml_gtk_text_buffer_insert_child_anchor" external paste_clipboard : - text_buffer -> clipboard -> text_iter option -> bool -> unit + text_buffer obj -> clipboard -> text_iter option -> bool -> unit = "ml_gtk_text_buffer_paste_clipboard" external copy_clipboard : - text_buffer -> clipboard -> unit + text_buffer obj -> clipboard -> unit = "ml_gtk_text_buffer_copy_clipboard" external cut_clipboard : - text_buffer -> clipboard -> bool -> unit + text_buffer obj -> clipboard -> bool -> unit = "ml_gtk_text_buffer_cut_clipboard" external add_selection_clipboard : - text_buffer -> clipboard -> unit + text_buffer obj -> clipboard -> unit = "ml_gtk_text_buffer_add_selection_clipboard" external remove_selection_clipboard : - text_buffer -> clipboard -> unit + text_buffer obj -> clipboard -> unit = "ml_gtk_text_buffer_remove_selection_clipboard" end @@ -148,9 +148,9 @@ module View = struct include TextView - external create_with_buffer : text_buffer -> text_view obj = "ml_gtk_text_view_new_with_buffer" - external set_buffer : [>`textview] obj -> text_buffer -> unit = "ml_gtk_text_view_set_buffer" - external get_buffer : [>`textview] obj -> text_buffer = "ml_gtk_text_view_get_buffer" + external create_with_buffer : text_buffer obj -> text_view obj = "ml_gtk_text_view_new_with_buffer" + external set_buffer : [>`textview] obj -> text_buffer obj -> unit = "ml_gtk_text_view_set_buffer" + external get_buffer : [>`textview] obj -> text_buffer obj = "ml_gtk_text_view_get_buffer" external scroll_to_mark : [>`textview] obj -> text_mark -> float -> bool -> float -> float -> unit = "ml_gtk_text_view_scroll_to_mark_bc" "ml_gtk_text_view_scroll_to_mark" external scroll_to_iter : [>`textview] obj -> text_iter -> float -> bool -> float -> float -> bool = @@ -208,7 +208,7 @@ module Iter = struct external copy : text_iter -> text_iter = "ml_gtk_text_iter_copy" - external get_buffer : text_iter -> text_buffer = "ml_gtk_text_iter_get_buffer" + external get_buffer : text_iter -> text_buffer obj = "ml_gtk_text_iter_get_buffer" external get_offset : text_iter -> int = "ml_gtk_text_iter_get_offset" external get_line : text_iter -> int = "ml_gtk_text_iter_get_line" external get_line_offset : text_iter -> int = "ml_gtk_text_iter_get_line_offset" diff -ur orig/lablgtk2-2.4.0+2005.02.18/src/gtkText.props lablgtk2-2.4.0+2005.02.18/src/gtkText.props --- orig/lablgtk2-2.4.0+2005.02.18/src/gtkText.props 2003-08-15 13:08:43.000000000 +0200 +++ lablgtk2-2.4.0+2005.02.18/src/gtkText.props 2005-06-09 18:49:50.000000000 +0200 @@ -42,7 +42,7 @@ signal toggle_overwrite } -class TextBuffer : GObject { +class TextBuffer type "text_buffer obj": GObject { "tag-table" GtkTextTagTable : Read / Write / Construct Only signal apply_tag : GtkTextTag GtkTextIter GtkTextIter signal begin_user_action / Wrap @@ -68,7 +68,7 @@ method get_visible : "bool" method get_deleted : "bool" method get_name : "string option" - method get_buffer : "text_buffer option" + method get_buffer : "text_buffer obj option" method get_left_gravity : "bool" } --EeQfGwPcQSOJBaQU--