pike.git / src / post_modules / GTK2 / source / gtktreeview.pre

version» Context lines:

pike.git/src/post_modules/GTK2/source/gtktreeview.pre:56:   void create(GTK2.TreeModel|mapping(string:mixed)|void model_or_props)   //! Create a new W(TreeView), with or without a default model.   {    pgtk2_verify_not_inited();    pgtk2_verify_setup();    if (args) {    if (TYPEOF(Pike_sp[-args]) == PIKE_T_OBJECT) {    struct object *o1;    GtkTreeModel *gtm;    GtkWidget *gt; -  get_all_args("create",args,"%o",&o1); +  get_all_args(NULL,args,"%o",&o1);    gtm=GTK_TREE_MODEL(get_gobject(o1));    if (gtm) {    gt=gtk_tree_view_new_with_model(gtm);    } else {    gt=gtk_tree_view_new();    }    THIS->obj=G_OBJECT(gt);    } else {    INIT_WITH_PROPS(GTK_TYPE_TREE_VIEW);    }
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:90:   int get_show_expanders();   //! Returns whether or not expanders are drawn      void set_show_expanders(int show);   //! Sets whether to draw and enable expanders and indent child rows.   endrequire;      +GTK2.TreeModel get_model();   //! Returns the model this TreeView is based on.    - void set_model(GTK2.TreeModel model); + +GTK2.TreeView set_model(GTK2.TreeModel model)   //! Sets the model. If this TreeView already has a model set, it will remove   //! it before setting the new model. -  + { +  pgtk2_verify_inited(); +  if (args) { +  struct object *o1; +  get_all_args(NULL,args,"%o",&o1); +  gtk_tree_view_set_model(GTK_TREE_VIEW(THIS->obj), +  GTK_TREE_MODEL(get_gobject(o1))); +  } else { +  gtk_tree_view_set_model(GTK_TREE_VIEW(THIS->obj),NULL); +  } +  RETURN_THIS(); + }      +GTK2.TreeSelection get_selection();   //! Gets the W(TreeSelection) associated with this TreeView.      +GTK2.Adjustment get_hadjustment();   //! Gets the W(Adjustment) currently being used for the horizontal aspect.      void set_hadjustment(GTK2.Adjustment hadj);   //! Sets the W(Adjustment) for the current horizontal aspect.   
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:200:   //! the expander arrow drawn next to it.      void scroll_to_point(int x, int y);   //! Scrolls the tree view such that the top-left corner of the visible area   //! is x,y, where x and y are specified in tree window coordinates. The view   //! must be realized before this function is called. If it isn't, you   //! probably want to be using scroll_to_cell().   //! <p>   //! If either x or y are -1, then that direction isn't scrolled.    - void scroll_to_cell(GTK2.TreePath path, GTK2.TreeViewColumn column, + void scroll_to_cell(GTK2.TreePath path, ?GTK2.TreeViewColumn column,    ?float row_align, ?float col_align)   //! Moves the alignments of the view to the position specified by column and   //! path. If column is 0, then no horizontal scrolling occurs. Likewise, if   //! path is 0, no vertical scrolling occurs. At a minimum, one of column or   //! path needs to be non-zero. row_align determines where the row is placed,   //! and col_align determines where column is placed. Both are expected to be   //! between 0.0 and 1.0. 0.0 means left/top alignment, 1.0 means right/bottom   //! alignment, 0.5 means center.   //! <p>   //! If row_align exists, then col_align must exist, otherwise neither will be
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:222:   //! scroll the cell onto the screen. This means that the cell will be scrolled   //! to the edge closest to its current position. If the cell is currently   //! visible on the screen, nothing is done.   //! <p>   //! This function only works if the model is set, and path is a valid row on   //! the model. If the model changes before the view is realized, the centered   //! path will be modifed to reflect this change.   {    pgtk2_verify_inited();    { -  struct object *o1,*o2; +  struct object *o1,*o2=0;    FLOAT_TYPE row_align=0,col_align=0; -  get_all_args("scroll_to_cell",args,"%o%o.%f%f",&o1,&o2, +  get_all_args(NULL,args,"%o.%O%f%f",&o1,&o2,    &row_align,&col_align);    gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program), -  GTK_TREE_VIEW_COLUMN(get_gobject(o2)), +  o2 ? GTK_TREE_VIEW_COLUMN(get_gobject(o2)) : 0,    1,row_align,col_align);    }    RETURN_THIS();   }      void set_cursor(GTK2.TreePath path, ?GTK2.TreeViewColumn focus_column,    ?int start_editing)   //! Sets the current keyboard focus to be at path, and selects it. This is   //! useful when you want to focus the user's attention on a particular row.   //! If focus_column is present, then focus is given to the column specified by
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:250:   //! true, then editing should be started in the specified cell. This function   //! is often followed by grab_focus() in order to give keyboard focus to the   //! widget. Please note that editing can only happen when the widget is   //! realized.   {    struct object *o1,*o2=NULL;    INT_TYPE ed=0;       pgtk2_verify_inited();    -  get_all_args("set_cursor",args,"%o.%o%i",&o1,&o2,&ed); +  get_all_args(NULL,args,"%o.%o%i",&o1,&o2,&ed);    gtk_tree_view_set_cursor(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program),    GTK_TREE_VIEW_COLUMN(get_gobject(o2)),ed);    RETURN_THIS();   }      require gtk22;   void set_cursor_on_cell(GTK2.TreePath path, ?GTK2.TreeViewColumn focus_column,    ?int start_editing, ?GTK2.CellRenderer focus_cell)   //! Sets the current keyboard focus to be at path, and selects it. This is
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:275:   //! specified by focus_cell. Additionally, if focus_column is specified, and   //! start_editing is true, then editing should be started in the specified   //! cell. This function is often followed by grab_focus() in order to give   //! keyboard focus to the widget. Please note that editing can only happen   //! when the widget is realized.   {    pgtk2_verify_inited();    {    struct object *o1,*o2=NULL,*o3=NULL;    INT_TYPE ed=0; -  get_all_args("set_cursor_on_cell",args,"%o.%o%i%o",&o1,&o2,&ed,&o3); +  get_all_args(NULL,args,"%o.%o%i%o",&o1,&o2,&ed,&o3);    gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program),    GTK_TREE_VIEW_COLUMN(get_gobject(o2)),    GTK_CELL_RENDERER(get_gobject(o3)),ed);    }    RETURN_THIS();   }   endrequire;      mapping(string:object) get_cursor()
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:310:    f_aggregate_mapping(4);    }   }      void row_activated(GTK2.TreePath path, GTK2.TreeViewColumn column)   //! Activates the cell determined by path and column.   {    pgtk2_verify_inited();    {    struct object *o1,*o2; -  get_all_args("row_activated",args,"%o%o",&o1,&o2); +  get_all_args(NULL,args,"%o%o",&o1,&o2);    gtk_tree_view_row_activated(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program),    GTK_TREE_VIEW_COLUMN(get_gobject(o2)));    }    RETURN_THIS();   }      void expand_all();   //! Recursively expands all nodes.   
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:332:   //! Recursively collapses all visible, expanded nodes.      require gtk22;   void expand_to_path(GTK2.TreePath path)   //! Expands the row at path. This will also expand all parent rows of path as   //! necessary.   {    pgtk2_verify_inited();    {    struct object *o1; -  get_all_args("expand_to_path",args,"%o",&o1); +  get_all_args(NULL,args,"%o",&o1);    gtk_tree_view_expand_to_path(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program));    }    RETURN_THIS();   }   endrequire;      int expand_row(GTK2.TreePath path, int open_all)   //! Opens the row so its children are visible.   {    pgtk2_verify_inited();    {    struct object *o1;    INT_TYPE op; -  get_all_args("expand_row",args,"%o%i",&o1,&op); +  get_all_args(NULL,args,"%o%i",&o1,&op);    gtk_tree_view_expand_row(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program),op);    }    RETURN_THIS();   }      int collapse_row(GTK2.TreePath path)   //! Collapses a row (hides its child rows, if they exist).   {    pgtk2_verify_inited();    {    struct object *o1; -  get_all_args("collapse_row",args,"%o",&o1); +  get_all_args(NULL,args,"%o",&o1);    gtk_tree_view_collapse_row(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program));    }    RETURN_THIS();   }      int row_expanded(GTK2.TreePath path)   //! Returns true if the node pointed to by path is expanded.   {    pgtk2_verify_inited();    {    struct object *o1;    int res; -  get_all_args("row_expanded",args,"%o",&o1); +  get_all_args(NULL,args,"%o",&o1);    res=gtk_tree_view_row_expanded(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program));    pgtk2_pop_n_elems(args);    PGTK_PUSH_INT(res);    }   }      void set_reorderable(int reorderable);   //! This function is a convenience function to allow you to reorder models.   //! If reorderable is true, then the user can reorder the model by dragging
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:411:   //! background (i.e. the background_area passed to GTK2.CellRenderer->render()).   //! This function is only meaningful if the widget is realized.   {    pgtk2_verify_inited();    {    INT_TYPE x,y;    GtkTreePath *path;    GtkTreeViewColumn *col;    gint cell_x,cell_y;    int res; -  get_all_args("get_path_at_pos",args,"%i%i",&x,&y); +  get_all_args(NULL,args,"%i%i",&x,&y);    pgtk2_pop_n_elems(args);    res=gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(THIS->obj),    x,y,&path,&col,&cell_x,&cell_y);    ref_push_string(_STR("path"));    if (res)    push_pgdk2object(path,pgtk2_tree_path_program,1);    else    push_int(0);    ref_push_string(_STR("column"));    if (res)
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:448:   //! width fields will be o. The sum of all cell rects does not cover the   //! entire tree; there are extra pixels in between rows, for example. The   //! returned rectangle is equivalent to the cell_area passed to   //! GTK2.CellRenderer->render(). This function is only valid if the view is   //! realized.   {    pgtk2_verify_inited();    {    struct object *o1,*o2=NULL;    GdkRectangle *rect; -  get_all_args("get_cell_area",args,"%o.%o",&o1,&o2); +  get_all_args(NULL,args,"%o.%o",&o1,&o2);    rect=(GdkRectangle *)g_malloc(sizeof(GdkRectangle));    if (rect==NULL)    SIMPLE_OUT_OF_MEMORY_ERROR("get_cell_area",sizeof(GdkRectangle));    gtk_tree_view_get_cell_area(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program),    GTK_TREE_VIEW_COLUMN(get_gobject(o2)),    rect);    pgtk2_pop_n_elems(args);    push_gdkobject(rect,rectangle,1);    }
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:473:   //! Similar to get_cell_area(). The returned rectangle is equivalent to the   //! background_area passed to GTK2.CellRenderer->render(). These background   //! area tiles to cover the entire tree window (except for the area used for   //! header buttons). Contrast with get_cell_area(), which returns only the   //! cell itself, excluding surrounding borders and the tree expander area.   {    pgtk2_verify_inited();    {    struct object *o1,*o2=NULL;    GdkRectangle *rect; -  get_all_args("get_background_area",args,"%o.%o",&o1,&o2); +  get_all_args(NULL,args,"%o.%o",&o1,&o2);    rect=(GdkRectangle *)g_malloc(sizeof(GdkRectangle));    if (rect==NULL)    SIMPLE_OUT_OF_MEMORY_ERROR("get_background_area",sizeof(GdkRectangle));    gtk_tree_view_get_background_area(GTK_TREE_VIEW(THIS->obj),    (GtkTreePath *)get_pg2object(o1,pgtk2_tree_path_program),    GTK_TREE_VIEW_COLUMN(get_gobject(o2)),    rect);    pgtk2_pop_n_elems(args);    push_gdkobject(rect,rectangle,1);    }
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:540:      not gtk212;   mapping widget_to_tree_coords(int wx, int wy)   //! converts widget coordinates to coordinates for the tree window (the full   //! scrollable area of the tree).   {    pgtk2_verify_inited();    {    gint tx,ty;    INT_TYPE wx,wy; -  get_all_args("widget_to_tree_coords",args,"%i%i",&wx,&wy); +  get_all_args(NULL,args,"%i%i",&wx,&wy);    pgtk2_pop_n_elems(args);    gtk_tree_view_widget_to_tree_coords(GTK_TREE_VIEW(THIS->obj),wx,wy,&tx,&ty);    ref_push_string(_STR("x")); push_int(tx);    ref_push_string(_STR("y")); push_int(ty);    f_aggregate_mapping(4);    }   }      mapping tree_to_widget_coords(int tx, int ty)   //! Converts tree coordinates (coordinates in full scrollable area of the tree)   //! to widget coordinates.   {    pgtk2_verify_inited();    {    gint wx,wy;    INT_TYPE tx,ty; -  get_all_args("tree_to_widget_coords",args,"%i%i",&tx,&ty); +  get_all_args(NULL,args,"%i%i",&tx,&ty);    pgtk2_pop_n_elems(args);    gtk_tree_view_tree_to_widget_coords(GTK_TREE_VIEW(THIS->obj),tx,ty,&wx,&wy);    ref_push_string(_STR("x")); push_int(wx);    ref_push_string(_STR("y")); push_int(wy);    f_aggregate_mapping(4);    }   }   endnot;      require gtk212;   mapping convert_bin_window_to_tree_coords(int bx, int by) -  + //! Convert bin_window coordinates to tree coordinates.   {    pgtk2_verify_inited();    {    gint tx,ty;    INT_TYPE bx,by; -  get_all_args("convert_bin_window_to_tree_coords",args,"%i%i",&bx,&by); +  get_all_args(NULL,args,"%i%i",&bx,&by);    pgtk2_pop_n_elems(args);    gtk_tree_view_convert_bin_window_to_tree_coords(GTK_TREE_VIEW(THIS->obj),    bx,by,&tx,&ty);    ref_push_string(_STR("x")); push_int(tx);    ref_push_string(_STR("y")); push_int(ty);    f_aggregate_mapping(4);    }   }      mapping convert_bin_window_to_widget_coords(int bx, int by) -  + //! Convert bin_window coordinates to widget coordinates.   {    pgtk2_verify_inited();    {    gint wx,wy;    INT_TYPE bx,by; -  get_all_args("convert_bin_window_to_widget_coords",args,"%i%i",&bx,&by); +  get_all_args(NULL,args,"%i%i",&bx,&by);    pgtk2_pop_n_elems(args);    gtk_tree_view_convert_bin_window_to_widget_coords(GTK_TREE_VIEW(THIS->obj),    bx,by,&wx,&wy);    ref_push_string(_STR("x")); push_int(wx);    ref_push_string(_STR("y")); push_int(wy);    f_aggregate_mapping(4);    }   }      mapping convert_tree_to_bin_window_coords(int tx, int ty) -  + //! Converts tree coordinates (coordinates in full scrollable area of the tree) to + //! bin_window coordinates.   {    pgtk2_verify_inited();    {    gint bx,by;    INT_TYPE tx,ty; -  get_all_args("convert_tree_to_bin_window_coords",args,"%i%i",&tx,&ty); +  get_all_args(NULL,args,"%i%i",&tx,&ty);    pgtk2_pop_n_elems(args);    gtk_tree_view_convert_tree_to_bin_window_coords(GTK_TREE_VIEW(THIS->obj),    tx,ty,&bx,&by);    ref_push_string(_STR("x")); push_int(bx);    ref_push_string(_STR("y")); push_int(by);    f_aggregate_mapping(4);    }   }      mapping convert_tree_to_widget_coords(int tx, int ty) -  + //! Convert tree coordinates to widget coordinates.   {    pgtk2_verify_inited();    {    gint wx,wy;    INT_TYPE tx,ty; -  get_all_args("convert_tree_to_widget_coords",args,"%i%i",&tx,&ty); +  get_all_args(NULL,args,"%i%i",&tx,&ty);    pgtk2_pop_n_elems(args);    gtk_tree_view_convert_tree_to_widget_coords(GTK_TREE_VIEW(THIS->obj),    tx,ty,&wx,&wy);    ref_push_string(_STR("x")); push_int(wx);    ref_push_string(_STR("y")); push_int(wy);    f_aggregate_mapping(4);    }   }      mapping convert_widget_to_bin_window_coords(int wx, int wy) -  + //! Convert widget coordinates to bin_window coordinates.   {    pgtk2_verify_inited();    {    gint bx,by;    INT_TYPE wx,wy; -  get_all_args("convert_widget_to_bin_window_coords",args,"%i%i",&wx,&wy); +  get_all_args(NULL,args,"%i%i",&wx,&wy);    pgtk2_pop_n_elems(args);    gtk_tree_view_convert_widget_to_bin_window_coords(GTK_TREE_VIEW(THIS->obj),    wx,wy,&bx,&by);    ref_push_string(_STR("x")); push_int(bx);    ref_push_string(_STR("y")); push_int(by);    f_aggregate_mapping(4);    }   }      mapping convert_widget_to_tree_coords(int wx, int wy) -  + //! Convert widget coordinates to tree coordinates.   {    pgtk2_verify_inited();    {    gint tx,ty;    INT_TYPE wx,wy; -  get_all_args("convert_widget_to_tree_coords",args,"%i%i",&wx,&wy); +  get_all_args(NULL,args,"%i%i",&wx,&wy);    pgtk2_pop_n_elems(args);    gtk_tree_view_convert_widget_to_tree_coords(GTK_TREE_VIEW(THIS->obj),    wx,wy,&tx,&ty);    ref_push_string(_STR("x")); push_int(tx);    ref_push_string(_STR("y")); push_int(ty);    f_aggregate_mapping(4);    }   }      endrequire;    - /* - // Not implemented yet - void enable_model_drag_dest(array(GTK2.TargetEntry) targets, int n_targets, -  int actions); - //! Turns the view into a drop destination for automatic DND. + %{ + /* Borrow code from gtkwidget.pre */ + int _decode_targets(struct array *targ, GtkTargetEntry *drag_targets);    -  + /* Simplify the code by allowing the same form of cast */ + #define GTK_TREE_PATH(object) ((GtkTreePath *)object) + %} +    void enable_model_drag_source(int start_button_mask, -  array(GTK2.TargetEntry) targets, int n_targets, int actions); +  array(array) targets, int actions)   //! Turns the view into a drag source for automatic DND. -  + //! See also: @[drag_source_set] + { +  pgtk2_verify_inited(); +  { +  INT_TYPE btn, act; +  struct array *targ; +  GtkTargetEntry drag_targets[10];    -  +  get_all_args(NULL, args, "%d%a%d", &btn, &targ, &act); +  if (targ->size > 10 || _decode_targets(targ, drag_targets)) +  SIMPLE_ARG_TYPE_ERROR("enable_model_drag_source", 2, "array(array(string|int))"); +  gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(THIS->obj), btn, +  drag_targets, targ->size, act); +  } +  RETURN_THIS(); + } +  + void enable_model_drag_dest(array(array) targets, int actions) + //! Turns the view into a drop destination for automatic DND. + //! See also: @[drag_dest_set], @[drag_source_set] + { +  pgtk2_verify_inited(); +  { +  INT_TYPE flags, act; +  struct array *targ; +  GtkTargetEntry drag_targets[10]; +  +  get_all_args(NULL, args, "%a%d", &targ, &act); +  if (targ->size > 10 || _decode_targets(targ, drag_targets)) +  SIMPLE_ARG_TYPE_ERROR("enable_model_drag_dest", 2, "array(array(string|int))"); +  gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(THIS->obj), +  drag_targets, targ->size, act); +  } +  RETURN_THIS(); + } +    void unset_rows_drag_source();   //! Undoes the effect of enable_model_drag_source().      void unset_rows_drag_dest(); - //! Unodes the effect of enable_model_drag_dest(). + //! Undoes the effect of enable_model_drag_dest().      void set_drag_dest_row(GTK2.TreePath path, int pos); - //! Sets the row that is highlighted for feedback. + //! Sets the row that is highlighted for feedback. pos is one of the four + //! constants GTK2.TREE_VIEW_DROP_[INTO_OR_]{BEFORE,AFTER}.    - mapping get_drag_dest_row(); + mapping(string:mixed) get_drag_dest_row()   //! Gets information about the row that is highlighted for feedback. -  + //! Returns ([ "path": GTK2.TreePath, "pos": int ]); + //! pos will be one of GTK2.TREE_VIEW_DROP_[INTO_OR_]{BEFORE,AFTER}. + { +  pgtk2_verify_inited(); +  pgtk2_pop_n_elems(args); +  { +  GtkTreePath *path; +  GtkTreeViewDropPosition pos; +  gtk_tree_view_get_drag_dest_row(GTK_TREE_VIEW(THIS->obj),&path,&pos); +  ref_push_string(_STR("path"));push_pgdk2object((GtkTreePath *)path,pgtk2_tree_path_program,1); +  ref_push_string(_STR("pos")); push_int(pos); +  f_aggregate_mapping(4); +  } + }    - mapping get_dest_row_at_pos(int drag_x, int drag_y); - //! Determines the destination row for a given position; + mapping(string:mixed) get_dest_row_at_pos(int drag_x, int drag_y) + //! Determines the destination row for a given position. + //! Returns ([ "path": GTK2.TreePath, "pos": int ]) if there is such + //! a row, or 0 if not. + //! pos will be one of GTK2.TREE_VIEW_DROP_[INTO_OR_]{BEFORE,AFTER}. + { +  pgtk2_verify_inited(); +  { +  GtkTreePath *path; +  INT_TYPE drag_x, drag_y; +  GtkTreeViewDropPosition pos; +  get_all_args(NULL, args, "%d%d", &drag_x, &drag_y); +  if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(THIS->obj), +  drag_x, drag_y, &path, &pos)) +  { +  ref_push_string(_STR("path"));push_pgdk2object((GtkTreePath *)path,pgtk2_tree_path_program,1); +  ref_push_string(_STR("pos")); push_int(pos); +  f_aggregate_mapping(4); +  } else { +  push_int(0); +  } +  } + }      +GDK2.Pixmap create_row_drag_icon(GTK2.TreePath path);   //! Creates a GDK2.Pixmap representation of the row at path. This image is   //! used for a drag icon. - */ +       void set_enable_search(int enable_search);   //! If enable_search is set, then the user can type in text to search through   //! the tree interactively (this is sometimes called "typeahead find").   //! <p>   //! Note that even if this is false, the user can still initiate a search   //! using the "start-interactive-search" key binding.      int get_enable_search();   //! Returns whether or not the tree allows to start interactive searching by
pike.git/src/post_modules/GTK2/source/gtktreeview.pre:756:   //! selected row follow the pointer. Currently, this works only for the   //! selection modes GTK2.SELECTION_SINGLE and GTK2.SELECTION_BROWSE.      int get_hover_expand();   //! Returns whether hover expansion mode is turned on.      void set_hover_expand(int expand);   //! Enables or disables the hover expansion mode. Hover expansion makes rows   //! expand or collapse if the pointer moves over them.    - void set_row_separator_func(function f, mixed user_data ) + void set_row_separator_func(function(GTK2.TreeModel, GTK2.TreeIter, mixed : int) f, mixed user_data )   //! Sets the row separator function, which is used to determine whether a   //! row should be drawn as a separator. If the row separator function is 0   //! no separators are drawn. This is the default value.   {    pgtk2_verify_inited();    {    struct svalue *sv1,*sv2;    struct signal_data *sd;    -  get_all_args("set_row_separator_func",args,"%*%*",&sv1,&sv2); +  get_all_args(NULL,args,"%*%*",&sv1,&sv2);    sd=(struct signal_data *)g_malloc(sizeof(struct signal_data));    if (sd==NULL)    SIMPLE_OUT_OF_MEMORY_ERROR("set_row_separator_func",sizeof(struct signal_data)   );    assign_svalue_no_free(&sd->cb,sv1);    assign_svalue_no_free(&sd->args,sv2);    gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(THIS->obj),    (GtkTreeViewRowSeparatorFunc)pgtk2_tree_view_row_separator_func,    sd,(GtkDestroyNotify)pgtk2_free_signal_data);    }