Hi everyone, I&#39;m having an issue parsing .desktop files, I&#39;m not exactly sure how to open the file so that I can write back to it. At the moment I can read the file fine, getting any data I want out of it, but I can&#39;t make changes. When I try to save, I get an exception. I&#39;ve included the relevant code snippets, and the exception it throws. Thanks for any help guys.<br>
<br>[CODE]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ditem = OpenDesktopFile (desktop_file);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (auto_start_chk.Active) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Console.Error.WriteLine (&quot;ENABLED&quot;);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ditem.SetBoolean (&quot;X-GNOME-Autostart-enabled&quot;,true);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ditem.Save(desktop_file,true);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Console.Error.WriteLine (&quot;DISABLED&quot;);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ditem.SetBoolean (&quot;X-GNOME-Autostart-enabled&quot;,false);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ditem.Save(desktop_file,true);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private DesktopItem OpenDesktopFile (string desktopFile)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DesktopItem item;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IntPtr desktopFileP;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; desktopFileP = gnome_desktop_item_new_from_file (<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; desktopFile, 0, IntPtr.Zero);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (desktopFileP == IntPtr.Zero)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new FileNotFoundException (desktopFile);<br>
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; item = new DesktopItem (desktopFileP);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // We may need to call this depending on how DesktopItem works.<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; gnome_desktop_item_unref (desktopFileP);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return item;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [DllImport (&quot;libgnome-desktop-2.so.2&quot;)]<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private static extern IntPtr gnome_desktop_item_new_from_file (string file, int flags, IntPtr error);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [DllImport (&quot;libgnome-desktop-2.so.2&quot;)]<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private static extern void gnome_desktop_item_unref (IntPtr item);<br><br clear="all">[/CODE]<br><br>[EXCEPTION]<br><br>Exception in Gtk# callback delegate<br>&nbsp; Note: Applications can use GLib.ExceptionManager.UnhandledException to handle the exception.<br>
GLib.GException: Operation not supported<br>&nbsp; at Gnome.DesktopItem.Save (System.String under, Boolean force) [0x00000] <br>&nbsp; at Do.UI.SettingsWindow.OnAutoStartChkClicked (System.Object sender, System.EventArgs e) [0x001d4] in /home/alex/Do/Do/src/Do.UI/SettingsWindow.cs:188 <br>
&nbsp; at GLib.Signal.voidObjectCallback (IntPtr handle, IntPtr data) [0x00000] <br>&nbsp;&nbsp; at GLib.ExceptionManager.RaiseUnhandledException(System.Exception e, Boolean is_terminal)<br>&nbsp;&nbsp; at GLib.Signal.voidObjectCallback(IntPtr handle, IntPtr data)<br>
&nbsp;&nbsp; at GLib.Signal.voidObjectCallback(IntPtr , IntPtr )<br>&nbsp;&nbsp; at Gtk.Application.gtk_main()<a href="/"></a><br>&nbsp;&nbsp; at Gtk.Application.gtk_main()<br>&nbsp;&nbsp; at Gtk.Application.Run()<br>&nbsp;&nbsp; at Do.Do.Main(System.String[] args) in /home/alex/Do/Do/src/Do.cs:line 78<br>
<br>[/EXCEPTION]<br><br>I&#39;ve tried not dereferencing the pointer, the same exception is thrown. I&#39;ve also tried opening the Desktop item like<br>item = new DesktopItem (desktopFile,DesktopItemLoadFlags.OnlyIfExists);<br>
It throws the exception here: <a href="http://www.paste2.org/p/26450">http://www.paste2.org/p/26450</a>. <br>Thanks for any help people, I really appreciate it.<br>-- <br>--Alex Launi