Don't free a string that is managed by wxGtkString, that's the whole _point_ of wxGtkString.

While we're at it, lets use it some more.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41597 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett 2006-10-03 16:01:18 +00:00
parent baa9ebc473
commit e808cf8a0a
7 changed files with 34 additions and 69 deletions

View File

@ -23,7 +23,7 @@
#include "wx/mstream.h"
#include "wx/uri.h"
#include <gdk/gdk.h>
#include "wx/gtk/private.h"
//-------------------------------------------------------------------------
// global data
@ -110,10 +110,8 @@ wxDataFormatId wxDataFormat::GetType() const
wxString wxDataFormat::GetId() const
{
gchar* atom_name = gdk_atom_name( m_format );
wxString ret = wxString::FromAscii( atom_name );
g_free(atom_name);
return ret;
wxGtkString atom_name(gdk_atom_name(m_format));
return wxString::FromAscii(atom_name);
}
void wxDataFormat::SetId( NativeFormat format )

View File

@ -29,18 +29,10 @@
#include "wx/filedlg.h"
#endif
#include <gtk/gtk.h>
#include "wx/gtk/private.h"
#include <unistd.h> // chdir
//-----------------------------------------------------------------------------
// idle system
//-----------------------------------------------------------------------------
extern void wxapp_install_idle_handler();
//-----------------------------------------------------------------------------
// "clicked" for OK-button
//-----------------------------------------------------------------------------
@ -48,13 +40,12 @@ extern void wxapp_install_idle_handler();
extern "C" {
static void gtk_dirdialog_ok_callback(GtkWidget *widget, wxDirDialog *dialog)
{
gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
// change to the directory where the user went if asked
if (dialog->HasFlag(wxDD_CHANGE_DIR))
{
wxGtkString filename(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)));
chdir(filename);
g_free(filename);
}
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
event.SetEventObject(dialog);
@ -213,14 +204,11 @@ wxString wxDirDialog::GetPath() const
{
if (!gtk_check_version(2,4,0))
{
gchar *str = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(m_widget) );
wxString ret = wxConvFileName->cMB2WX(str);
if (str) g_free(str);
return ret;
wxGtkString str(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget)));
return wxConvFileName->cMB2WX(str);
}
else
return wxGenericDirDialog::GetPath();
return wxGenericDirDialog::GetPath();
}
#endif // wxUSE_DIRDLG

View File

@ -42,7 +42,7 @@ extern "C" {
static void gtk_filedialog_ok_callback(GtkWidget *widget, wxFileDialog *dialog)
{
int style = dialog->GetWindowStyle();
gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
wxGtkString filename(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)));
// gtk version numbers must be identical with the one in ctor (that calls set_do_overwrite_confirmation)
#if GTK_CHECK_VERSION(2,7,3)
@ -69,13 +69,10 @@ static void gtk_filedialog_ok_callback(GtkWidget *widget, wxFileDialog *dialog)
if (style & wxFD_CHANGE_DIR)
{
// Use chdir to not care about filename encodings
gchar* folder = g_path_get_dirname(filename);
wxGtkString folder(g_path_get_dirname(filename));
chdir(folder);
g_free(folder);
}
g_free(filename);
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
event.SetEventObject(dialog);
dialog->GetEventHandler()->ProcessEvent(event);
@ -114,9 +111,7 @@ static void gtk_filedialog_update_preview_callback(GtkFileChooser *chooser,
#if GTK_CHECK_VERSION(2,4,0)
GtkWidget *preview = GTK_WIDGET(user_data);
gchar *str = gtk_file_chooser_get_preview_filename(chooser);
wxGtkString filename(str);
if (str) g_free(str);
wxGtkString filename(gtk_file_chooser_get_preview_filename(chooser));
if ( !filename )
return;
@ -310,14 +305,11 @@ wxString wxFileDialog::GetPath() const
{
if (!gtk_check_version(2,4,0))
{
gchar *str = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget));
wxString ret = wxConvFileName->cMB2WX(str);
if (str) g_free(str);
return ret;
wxGtkString str(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget)));
return wxConvFileName->cMB2WX(str);
}
else
return wxGenericFileDialog::GetPath();
return wxGenericFileDialog::GetPath();
}
void wxFileDialog::GetFilenames(wxArrayString& files) const
@ -401,14 +393,11 @@ wxString wxFileDialog::GetDirectory() const
{
if (!gtk_check_version(2,4,0))
{
gchar *str = gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER(m_widget) );
wxString ret = wxConvFileName->cMB2WX(str);
if (str) g_free(str);
return ret;
wxGtkString str(gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(m_widget)));
return wxConvFileName->cMB2WX(str);
}
else
return wxGenericFileDialog::GetDirectory();
return wxGenericFileDialog::GetDirectory();
}
void wxFileDialog::SetFilename(const wxString& name)

View File

@ -22,9 +22,7 @@
#include "wx/filepicker.h"
#include "wx/tooltip.h"
#include <gtk/gtk.h>
#include "wx/gtk/private.h"
// ============================================================================
// implementation
@ -162,7 +160,7 @@ static void gtk_dirbutton_currentfolderchanged_callback(GtkFileChooserButton *wi
// NB: it's important to use gtk_file_chooser_get_filename instead of
// gtk_file_chooser_get_current_folder (see GTK docs) !
gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
wxGtkString filename(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)));
p->UpdatePath(filename);
// since GtkFileChooserButton when used to pick directories also uses a combobox,
@ -172,7 +170,6 @@ static void gtk_dirbutton_currentfolderchanged_callback(GtkFileChooserButton *wi
// style was given.
if (p->HasFlag(wxDIRP_CHANGE_DIR))
chdir(filename);
g_free(filename);
// ...and fire an event
wxFileDirPickerEvent event(wxEVT_COMMAND_DIRPICKER_CHANGED, p, p->GetId(), p->GetPath());

View File

@ -60,11 +60,9 @@ void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dial
GtkFontSelectionDialog *fontdlg = GTK_FONT_SELECTION_DIALOG(dialog->m_widget);
gchar *fontname = gtk_font_selection_dialog_get_font_name(fontdlg);
wxGtkString fontname(gtk_font_selection_dialog_get_font_name(fontdlg));
dialog->SetChosenFont( fontname);
g_free( fontname );
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
event.SetEventObject( dialog );
dialog->GetEventHandler()->ProcessEvent( event );

View File

@ -392,12 +392,11 @@ static gboolean gtk_listbox_searchequal_callback(GtkTreeModel* model,
WXLISTBOX_DATACOLUMN_ARG(listbox),
&entry, -1);
wxCHECK_MSG(entry, 0, wxT("Could not get entry"));
gchar* keycollatekey = g_utf8_collate_key(key, -1);
wxGtkString keycollatekey(g_utf8_collate_key(key, -1));
int ret = strcasecmp(keycollatekey,
gtk_tree_entry_get_collate_key(entry));
g_free(keycollatekey);
g_object_unref (entry);
return ret != 0;

View File

@ -69,10 +69,9 @@ static void wxGtkTextApplyTagsFromAttr(GtkTextBuffer *text_buffer,
if (attr.HasFont())
{
char *font_string;
PangoFontDescription *font_description = attr.GetFont().GetNativeFontInfo()->description;
font_string = pango_font_description_to_string(font_description);
g_snprintf(buf, sizeof(buf), "WXFONT %s", font_string);
wxGtkString font_string(pango_font_description_to_string(font_description));
g_snprintf(buf, sizeof(buf), "WXFONT %s", font_string.c_str());
tag = gtk_text_tag_table_lookup( gtk_text_buffer_get_tag_table( text_buffer ),
buf );
if (!tag)
@ -80,7 +79,6 @@ static void wxGtkTextApplyTagsFromAttr(GtkTextBuffer *text_buffer,
"font-desc", font_description,
NULL );
gtk_text_buffer_apply_tag (text_buffer, tag, start, end);
g_free (font_string);
if (attr.GetFont().GetUnderlined())
{
@ -787,13 +785,11 @@ wxString wxTextCtrl::GetValue() const
gtk_text_buffer_get_start_iter( m_buffer, &start );
GtkTextIter end;
gtk_text_buffer_get_end_iter( m_buffer, &end );
gchar *text = gtk_text_buffer_get_text( m_buffer, &start, &end, TRUE );
wxGtkString text(gtk_text_buffer_get_text(m_buffer, &start, &end, true));
const wxWxCharBuffer buf = wxGTK_CONV_BACK(text);
if ( buf )
tmp = buf;
g_free( text );
}
else
{
@ -942,22 +938,22 @@ void wxTextCtrl::AppendText( const wxString &text )
wxString wxTextCtrl::GetLineText( long lineNo ) const
{
wxString result;
if ( IsMultiLine() )
{
GtkTextIter line;
gtk_text_buffer_get_iter_at_line(m_buffer,&line,lineNo);
GtkTextIter end = line;
gtk_text_iter_forward_to_line_end(&end);
gchar *text = gtk_text_buffer_get_text(m_buffer,&line,&end,TRUE);
wxString result(wxGTK_CONV_BACK(text));
g_free(text);
return result;
wxGtkString text(gtk_text_buffer_get_text(m_buffer, &line, &end, true));
result = wxGTK_CONV_BACK(text);
}
else
{
if (lineNo == 0) return GetValue();
return wxEmptyString;
if (lineNo == 0)
result = GetValue();
}
return result;
}
void wxTextCtrl::OnDropFiles( wxDropFilesEvent &WXUNUSED(event) )