From c362ad14685f358ea261c7753685f238ffd0ce3b Mon Sep 17 00:00:00 2001 From: zii-dmg Date: Wed, 26 Jan 2022 23:08:42 +0300 Subject: [PATCH] FileChooserNative: allow null parent, free memory (#322) * FileChooserNative: allow null parent, free memory Also make consistent whitespaces, new lines. * Re-run checks --- Source/Libs/GtkSharp/FileChooserNative.cs | 169 +++++++++++----------- 1 file changed, 81 insertions(+), 88 deletions(-) diff --git a/Source/Libs/GtkSharp/FileChooserNative.cs b/Source/Libs/GtkSharp/FileChooserNative.cs index f5caf045f..e3b17bf29 100644 --- a/Source/Libs/GtkSharp/FileChooserNative.cs +++ b/Source/Libs/GtkSharp/FileChooserNative.cs @@ -1,49 +1,49 @@ -// Gtk.FileChooserNative.cs - Gtk FileChooserNative class customizations -// -// Author: Mikkel Kruse Johnsen -// -// Copyright (c) 2016 XMedicus ApS -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of version 2 of the Lesser GNU General -// Public License as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this program; if not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - +// Gtk.FileChooserNative.cs - Gtk FileChooserNative class customizations +// +// Author: Mikkel Kruse Johnsen +// +// Copyright (c) 2016 XMedicus ApS +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of version 2 of the Lesser GNU General +// Public License as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this program; if not, write to the +// Free Software Foundation, Inc., 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + namespace Gtk { - using GLib; - using System; - using System.Runtime.InteropServices; - - public partial class FileChooserNative : Gtk.NativeDialog, Gtk.IFileChooser { - private FileChooserAdapter fileChooser; - - public FileChooserNative (IntPtr raw) : base(raw) - { - fileChooser = new FileChooserAdapter(raw); - } - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - delegate IntPtr d_gtk_file_chooser_native_new(IntPtr title, IntPtr parent, int action, IntPtr accept_label, IntPtr cancel_label); - static d_gtk_file_chooser_native_new gtk_file_chooser_native_new = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_new")); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - delegate string d_gtk_file_chooser_native_get_accept_label(IntPtr self); - static d_gtk_file_chooser_native_get_accept_label gtk_file_chooser_native_get_accept_label = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_get_accept_label")); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - delegate string d_gtk_file_chooser_native_set_accept_label(IntPtr self, string accept_label); - static d_gtk_file_chooser_native_set_accept_label gtk_file_chooser_native_set_accept_label = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_set_accept_label")); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - delegate string d_gtk_file_chooser_native_get_cancel_label(IntPtr self); - static d_gtk_file_chooser_native_get_cancel_label gtk_file_chooser_native_get_cancel_label = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_get_cancel_label")); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - delegate string d_gtk_file_chooser_native_set_cancel_label(IntPtr self, string cancel_label); + using GLib; + using System; + using System.Runtime.InteropServices; + + public partial class FileChooserNative : Gtk.NativeDialog, Gtk.IFileChooser { + private FileChooserAdapter fileChooser; + + public FileChooserNative (IntPtr raw) : base(raw) + { + fileChooser = new FileChooserAdapter(raw); + } + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + delegate IntPtr d_gtk_file_chooser_native_new(IntPtr title, IntPtr parent, int action, IntPtr accept_label, IntPtr cancel_label); + static d_gtk_file_chooser_native_new gtk_file_chooser_native_new = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_new")); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + delegate string d_gtk_file_chooser_native_get_accept_label(IntPtr self); + static d_gtk_file_chooser_native_get_accept_label gtk_file_chooser_native_get_accept_label = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_get_accept_label")); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + delegate string d_gtk_file_chooser_native_set_accept_label(IntPtr self, string accept_label); + static d_gtk_file_chooser_native_set_accept_label gtk_file_chooser_native_set_accept_label = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_set_accept_label")); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + delegate string d_gtk_file_chooser_native_get_cancel_label(IntPtr self); + static d_gtk_file_chooser_native_get_cancel_label gtk_file_chooser_native_get_cancel_label = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_get_cancel_label")); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + delegate string d_gtk_file_chooser_native_set_cancel_label(IntPtr self, string cancel_label); static d_gtk_file_chooser_native_set_cancel_label gtk_file_chooser_native_set_cancel_label = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_file_chooser_native_set_cancel_label")); public string CurrentFolder => fileChooser.CurrentFolder; @@ -90,27 +90,27 @@ namespace Gtk { public bool DoOverwriteConfirmation { get => fileChooser.DoOverwriteConfirmation; set => fileChooser.DoOverwriteConfirmation = value; } public bool CreateFolders { get => fileChooser.CreateFolders; set => fileChooser.CreateFolders = value; } - public FileChooserNative (string title, Gtk.Window parent, Gtk.FileChooserAction action, string accept_label, string cancel_label) : base(FileChooserNativeCreate(title, parent, action, accept_label, cancel_label)) - { - /* - if (GetType () != typeof (FileChooserNative)) { - var vals = new List (); - var names = new List (); - names.Add ("title"); - vals.Add (new GLib.Value (title)); - names.Add ("parent"); - vals.Add (new GLib.Value (parent)); - names.Add ("action"); - vals.Add (new GLib.Value (action)); - names.Add ("accept_label"); - vals.Add (new GLib.Value (accept_label)); - names.Add ("cancel_label"); - vals.Add (new GLib.Value (cancel_label)); - CreateNativeObject (names.ToArray (), vals.ToArray ()); - return; - } + public FileChooserNative (string title, Gtk.Window parent, Gtk.FileChooserAction action, string accept_label, string cancel_label) : base(FileChooserNativeCreate(title, parent, action, accept_label, cancel_label)) + { + /* + if (GetType () != typeof (FileChooserNative)) { + var vals = new List (); + var names = new List (); + names.Add ("title"); + vals.Add (new GLib.Value (title)); + names.Add ("parent"); + vals.Add (new GLib.Value (parent)); + names.Add ("action"); + vals.Add (new GLib.Value (action)); + names.Add ("accept_label"); + vals.Add (new GLib.Value (accept_label)); + names.Add ("cancel_label"); + vals.Add (new GLib.Value (cancel_label)); + CreateNativeObject (names.ToArray (), vals.ToArray ()); + return; + } */ - fileChooser = new FileChooserAdapter(Handle); + fileChooser = new FileChooserAdapter(Handle); } public event EventHandler FileActivated @@ -178,26 +178,20 @@ namespace Gtk { } } - static IntPtr FileChooserNativeCreate (string title, Gtk.Window parent, Gtk.FileChooserAction action, string accept_label, string cancel_label) - { - IntPtr native_title = GLib.Marshaller.StringToPtrGStrdup (title); - IntPtr native_accept_label = IntPtr.Zero; - if (accept_label != null) - native_accept_label = GLib.Marshaller.StringToPtrGStrdup (accept_label); - IntPtr native_cancel_label = IntPtr.Zero; - if (cancel_label != null) - native_cancel_label = GLib.Marshaller.StringToPtrGStrdup (cancel_label); - - IntPtr raw = gtk_file_chooser_native_new(native_title, parent.Handle, (int) action, native_accept_label, native_cancel_label); - - /*GLib.Marshaller.Free (native_title); - if (accept_label != null) - GLib.Marshaller.Free (native_accept_label); - if (cancel_label != null) - GLib.Marshaller.Free (native_cancel_label);*/ - - return raw; - } + static IntPtr FileChooserNativeCreate (string title, Gtk.Window parent, Gtk.FileChooserAction action, string accept_label, string cancel_label) + { + IntPtr native_title = GLib.Marshaller.StringToPtrGStrdup(title); + IntPtr native_accept_label = GLib.Marshaller.StringToPtrGStrdup(accept_label); + IntPtr native_cancel_label = GLib.Marshaller.StringToPtrGStrdup(cancel_label); + + IntPtr raw = gtk_file_chooser_native_new(native_title, parent != null ? parent.Handle : IntPtr.Zero, (int) action, native_accept_label, native_cancel_label); + + GLib.Marshaller.Free(native_title); + GLib.Marshaller.Free(native_accept_label); + GLib.Marshaller.Free(native_cancel_label); + + return raw; + } public void AddChoice(string id, string label, string options, string option_labels) { @@ -318,6 +312,5 @@ namespace Gtk { { fileChooser.UnselectUri(uri); } - } -} - + } +}