Use wxGtkTreePath for wxListBox and wxCheckListBox in wxGTK too

Avoid manual calls to gtk_tree_path_free() and use the RAII wrapper instead.

This makes the code shorter and safer.

No real changes.
This commit is contained in:
Vadim Zeitlin
2016-02-06 18:52:56 +01:00
parent 6768695d14
commit 72af0d4ca1
2 changed files with 16 additions and 29 deletions

View File

@@ -16,6 +16,7 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "wx/gtk/private.h" #include "wx/gtk/private.h"
#include "wx/gtk/private/treeview.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// "toggled" // "toggled"
@@ -27,13 +28,12 @@ static void gtk_checklist_toggled(GtkCellRendererToggle * WXUNUSED(renderer),
{ {
wxCHECK_RET( listbox->m_treeview != NULL, wxT("invalid listbox") ); wxCHECK_RET( listbox->m_treeview != NULL, wxT("invalid listbox") );
GtkTreePath* path = gtk_tree_path_new_from_string(stringpath); wxGtkTreePath path(stringpath);
wxCommandEvent new_event( wxEVT_CHECKLISTBOX, wxCommandEvent new_event( wxEVT_CHECKLISTBOX,
listbox->GetId() ); listbox->GetId() );
new_event.SetEventObject( listbox ); new_event.SetEventObject( listbox );
new_event.SetInt( gtk_tree_path_get_indices(path)[0] ); new_event.SetInt( gtk_tree_path_get_indices(path)[0] );
new_event.SetString( listbox->GetString( new_event.GetInt() )); new_event.SetString( listbox->GetString( new_event.GetInt() ));
gtk_tree_path_free(path);
listbox->Check( new_event.GetInt(), !listbox->IsChecked(new_event.GetInt())); listbox->Check( new_event.GetInt(), !listbox->IsChecked(new_event.GetInt()));
listbox->HandleWindowEvent( new_event ); listbox->HandleWindowEvent( new_event );
} }

View File

@@ -33,6 +33,7 @@
#include "wx/gtk/private/gtk2-compat.h" #include "wx/gtk/private/gtk2-compat.h"
#include "wx/gtk/private/object.h" #include "wx/gtk/private/object.h"
#include "wx/gtk/private/treeentry_gtk.h" #include "wx/gtk/private/treeentry_gtk.h"
#include "wx/gtk/private/treeview.h"
#include <gdk/gdkkeysyms.h> #include <gdk/gdkkeysyms.h>
#ifdef __WXGTK3__ #ifdef __WXGTK3__
@@ -525,18 +526,14 @@ bool wxListBox::GTKGetIteratorFor(unsigned pos, GtkTreeIter *iter) const
int wxListBox::GTKGetIndexFor(GtkTreeIter& iter) const int wxListBox::GTKGetIndexFor(GtkTreeIter& iter) const
{ {
GtkTreePath *path = wxGtkTreePath path(
gtk_tree_model_get_path(GTK_TREE_MODEL(m_liststore), &iter); gtk_tree_model_get_path(GTK_TREE_MODEL(m_liststore), &iter));
gint* pIntPath = gtk_tree_path_get_indices(path); gint* pIntPath = gtk_tree_path_get_indices(path);
wxCHECK_MSG( pIntPath, wxNOT_FOUND, wxT("failed to get iterator path") ); wxCHECK_MSG( pIntPath, wxNOT_FOUND, wxT("failed to get iterator path") );
int idx = pIntPath[0]; return pIntPath[0];
gtk_tree_path_free( path );
return idx;
} }
// get GtkTreeEntry from position (note: you need to g_unref it if valid) // get GtkTreeEntry from position (note: you need to g_unref it if valid)
@@ -586,9 +583,8 @@ void wxListBox::SetString(unsigned int n, const wxString& label)
// signal row changed // signal row changed
GtkTreeModel* tree_model = GTK_TREE_MODEL(m_liststore); GtkTreeModel* tree_model = GTK_TREE_MODEL(m_liststore);
GtkTreePath* path = gtk_tree_model_get_path(tree_model, &iter); wxGtkTreePath path(gtk_tree_model_get_path(tree_model, &iter));
gtk_tree_model_row_changed(tree_model, path, &iter); gtk_tree_model_row_changed(tree_model, path, &iter);
gtk_tree_path_free(path);
} }
wxString wxListBox::GetString(unsigned int n) const wxString wxListBox::GetString(unsigned int n) const
@@ -728,13 +724,11 @@ void wxListBox::DoSetSelection( int n, bool select )
else else
gtk_tree_selection_unselect_iter(selection, &iter); gtk_tree_selection_unselect_iter(selection, &iter);
GtkTreePath* path = gtk_tree_model_get_path( wxGtkTreePath path(
GTK_TREE_MODEL(m_liststore), &iter); gtk_tree_model_get_path(GTK_TREE_MODEL(m_liststore), &iter));
gtk_tree_view_scroll_to_cell(m_treeview, path, NULL, FALSE, 0.0f, 0.0f); gtk_tree_view_scroll_to_cell(m_treeview, path, NULL, FALSE, 0.0f, 0.0f);
gtk_tree_path_free(path);
GTKEnableEvents(); GTKEnableEvents();
} }
@@ -751,14 +745,12 @@ void wxListBox::DoScrollToCell(int n, float alignY, float alignX)
if ( !GTKGetIteratorFor(n, &iter) ) if ( !GTKGetIteratorFor(n, &iter) )
return; return;
GtkTreePath* path = gtk_tree_model_get_path( wxGtkTreePath path(
GTK_TREE_MODEL(m_liststore), &iter); gtk_tree_model_get_path(GTK_TREE_MODEL(m_liststore), &iter));
// Scroll to the desired cell (0.0 == topleft alignment) // Scroll to the desired cell (0.0 == topleft alignment)
gtk_tree_view_scroll_to_cell(m_treeview, path, NULL, gtk_tree_view_scroll_to_cell(m_treeview, path, NULL,
TRUE, alignY, alignX); TRUE, alignY, alignX);
gtk_tree_path_free(path);
} }
void wxListBox::DoSetFirstItem(int n) void wxListBox::DoSetFirstItem(int n)
@@ -775,15 +767,13 @@ int wxListBox::GetTopItem() const
{ {
int idx = wxNOT_FOUND; int idx = wxNOT_FOUND;
GtkTreePath *start; wxGtkTreePath start;
if ( gtk_tree_view_get_visible_range(m_treeview, &start, NULL) ) if ( gtk_tree_view_get_visible_range(m_treeview, start.ByRef(), NULL) )
{ {
gint *ptr = gtk_tree_path_get_indices(start); gint *ptr = gtk_tree_path_get_indices(start);
if ( ptr ) if ( ptr )
idx = *ptr; idx = *ptr;
gtk_tree_path_free(start);
} }
return idx; return idx;
@@ -805,13 +795,13 @@ int wxListBox::DoListHitTest(const wxPoint& point) const
gdk_window_get_geometry(gtk_tree_view_get_bin_window(m_treeview), gdk_window_get_geometry(gtk_tree_view_get_bin_window(m_treeview),
&binx, &biny, NULL, NULL); &binx, &biny, NULL, NULL);
GtkTreePath* path; wxGtkTreePath path;
if ( !gtk_tree_view_get_path_at_pos if ( !gtk_tree_view_get_path_at_pos
( (
m_treeview, m_treeview,
point.x - binx, point.x - binx,
point.y - biny, point.y - biny,
&path, path.ByRef(),
NULL, // [out] column (always 0 here) NULL, // [out] column (always 0 here)
NULL, // [out] x-coord relative to the cell (not interested) NULL, // [out] x-coord relative to the cell (not interested)
NULL // [out] y-coord relative to the cell NULL // [out] y-coord relative to the cell
@@ -820,10 +810,7 @@ int wxListBox::DoListHitTest(const wxPoint& point) const
return wxNOT_FOUND; return wxNOT_FOUND;
} }
int index = gtk_tree_path_get_indices(path)[0]; return gtk_tree_path_get_indices(path)[0];
gtk_tree_path_free(path);
return index;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------