[Gtk-sharp-list] Newbie questions with code

Aaron Oxford aaron at hardwarehookups.com.au
Fri Mar 16 09:50:38 EDT 2007

Hi all,

I realise I've been a bit slack with providing evidence of my 
problems. This is a two parter with code for each, covering all the 
topics I've discussed so far. First up is just something simple that 
seems broken in the Dialog class, or maybe the ScrolledWindow.

             Gtk.Dialog dlg = new Dialog(caption, GtkWindow.getWin(), 
             dlg.AddButton(Gtk.Stock.Yes, Gtk.ResponseType.Yes);
             dlg.AddButton(Gtk.Stock.No, Gtk.ResponseType.No);
             dlg.DefaultResponse = Gtk.ResponseType.None;
             ScrolledWindow sw = new ScrolledWindow();
             Label l = new Label(" a very very very very .... long string ");
             l.Wrap = true;
             dlg.SetDefaultSize(320, 160);

             int resp = dlg.Run();

If you call this with a long string in message, the label simply 
clips at the border of the dialog. Without the ScrolledWindow, you 
end up with an OK looking dialog. If the message is REALLY long 
though, the window goes off the top and bottom of the screen, so you 
can't close it (except if you know about Alt-F4). I thought the 
ScrolledWindow would fix this. Am I doing something wrong? Forcing 
scrollbars with the policy shows bars I can't move.

Second, and more importantly, the TreeView again. I need to control 
where the cursor goes, so the user doesn't become confused as to what 
they are viewing in the main pane. It would be cool to be able to 
highlight a given row as well as having a selection. Is this possible?

In any case I've found a way to crash my program by trying the code 
below. Note I'm in a RowActivated handler, and this code only crashes 
*some* of the time. As I write this and test the code it's gone from 
working, to crashing, to not working (not crashing) and now seems to 
be consistently not working.

         void machineList_RowActivated(object o, RowActivatedArgs args)
             TreePath argsPath = editListPath;
             if (args != null) argsPath = args.Path;

             // If the file has been edited, we need to ask the user 
if they want to discard their changes
             // by loading a different file.
             if (fileChanged)
                 if (argsPath != editListPath)
                     if (!App.window.showQuestion("Are you sure you 
want to...", "File Changed"))
                         //   *** CRASH RIGHT HERE ***
machineListWidget.Columns[0], false);

I'm starting to get really nervous, because this sort of thing:

System.AccessViolationException: Attempted to read or write protected 
memory. This is often an indication that other memory is corrupt.
    at Gtk.TreeView.gtk_tree_view_set_cursor(IntPtr raw, IntPtr path, 
IntPtr focus_column, Boolean start_editing)
    at Gtk.TreeView.SetCursor(TreePath path, TreeViewColumn 
focus_column, Boolean start_editing)
    at Wavelet_Tracker.MachineManager.machineList_RowActivated(Object 
o, RowActivatedArgs args)

Has popped up before as I mentioned, and is popping up at random all 
the time now. This could be really bad news for the stability of my 
app, which was just finally starting to mature in that respect. Any 
help with this in particular would be very much appreciated.

Aaron Oxford   -   aaron+hardwarehookups .com .au
Director, Innovative Computer Solutions (Aust) Pty. Ltd.
49 Maitland Rd, Mayfield, NSW 2304 Australia
Developer, SourceForge project VioLet Composer

More information about the Gtk-sharp-list mailing list