#include "wx/arrstr.h"
#endif
-#include "wx/gtk/private.h"
-#include "wx/gtk/private/object.h"
-#include "wx/gtk/treeentry_gtk.h"
-
#if wxUSE_TOOLTIPS
#include "wx/tooltip.h"
#endif
#include <gtk/gtk.h>
+#include "wx/gtk/private.h"
+#include "wx/gtk/private/gtk2-compat.h"
+#include "wx/gtk/private/object.h"
+#include "wx/gtk/treeentry_gtk.h"
+
#include <gdk/gdkkeysyms.h>
+#ifdef __WXGTK3__
+#include <gdk/gdkkeysyms-compat.h>
+#endif
//-----------------------------------------------------------------------------
// data
wxCHECK_MSG(entry2, 0, wxT("Could not get second entry"));
//We compare collate keys here instead of calling g_utf8_collate
- //as it is rather slow (and even the docs reccommend this)
+ //as it is rather slow (and even the docs recommend this)
return strcmp(gtk_tree_entry_get_collate_key(entry1),
gtk_tree_entry_get_collate_key(entry2)) >= 0;
}
// wxListBox
//-----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems)
-
// ----------------------------------------------------------------------------
// construction
// ----------------------------------------------------------------------------
wxListBox::~wxListBox()
{
- m_hasVMT = false;
+ if (m_treeview)
+ {
+ GTKDisconnect(m_treeview);
+ GtkTreeSelection* selection = gtk_tree_view_get_selection(m_treeview);
+ if (selection)
+ GTKDisconnect(selection);
+ }
Clear();
}
wxWindow::Update();
if (m_treeview)
- gdk_window_process_updates(GTK_WIDGET(m_treeview)->window, TRUE);
+ gdk_window_process_updates(gtk_widget_get_window(GTK_WIDGET(m_treeview)), true);
}
// ----------------------------------------------------------------------------
gtk_list_store_clear( m_liststore ); /* well, THAT was easy :) */
GTKEnableEvents();
+
+ UpdateOldSelections();
}
void wxListBox::DoDeleteOneItem(unsigned int n)
void* wxListBox::DoGetItemClientData(unsigned int n) const
{
- wxCHECK_MSG( IsValid(n), NULL,
- wxT("Invalid index passed to GetItemClientData") );
-
wxGtkObject<GtkTreeEntry> entry(GTKGetEntry(n));
wxCHECK_MSG(entry, NULL, wxT("could not get entry"));
void wxListBox::DoSetItemClientData(unsigned int n, void* clientData)
{
- wxCHECK_RET( IsValid(n),
- wxT("Invalid index passed to SetItemClientData") );
-
wxGtkObject<GtkTreeEntry> entry(GTKGetEntry(n));
wxCHECK_RET(entry, wxT("could not get entry"));
void wxListBox::GTKOnActivated(int item)
{
- SendEvent(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, item, IsSelected(item));
+ SendEvent(wxEVT_LISTBOX_DCLICK, item, IsSelected(item));
}
void wxListBox::GTKOnSelectionChanged()
{
const int item = GetSelection();
if ( DoChangeSingleSelection(item) )
- SendEvent(wxEVT_COMMAND_LISTBOX_SELECTED, item, true);
+ SendEvent(wxEVT_LISTBOX, item, true);
}
}
GtkTreeIter iter;
wxCHECK_MSG( GTKGetIteratorFor(n, &iter), false, wxT("Invalid index") );
- return gtk_tree_selection_iter_is_selected(selection, &iter);
+ return gtk_tree_selection_iter_is_selected(selection, &iter) != 0;
}
void wxListBox::DoSetSelection( int n, bool select )
wxCHECK_RET( IsValid(n), wxT("invalid index"));
//RN: I have no idea why this line is needed...
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (m_treeview))
+ if (gtk_widget_has_grab(GTK_WIDGET(m_treeview)))
return;
GtkTreeIter iter;
// need to translate from master window since it is in client coords
gint binx, biny;
gdk_window_get_geometry(gtk_tree_view_get_bin_window(m_treeview),
- &binx, &biny, NULL, NULL, NULL);
+ &binx, &biny, NULL, NULL);
GtkTreePath* path;
if ( !gtk_tree_view_get_path_at_pos
// helpers
// ----------------------------------------------------------------------------
-#if wxUSE_TOOLTIPS
-void wxListBox::GTKApplyToolTip( GtkTooltips *tips, const gchar *tip )
-{
-#if GTK_CHECK_VERSION(2, 12, 0)
- if (!gtk_check_version(2, 12, 0))
- {
- gtk_widget_set_tooltip_text(GTK_WIDGET( m_treeview ), tip);
- }
- else
-#endif
- {
- // RN: Is this needed anymore?
- gtk_tooltips_set_tip( tips, GTK_WIDGET( m_treeview ), tip, NULL );
- }
-}
-#endif // wxUSE_TOOLTIPS
-
GtkWidget *wxListBox::GetConnectWidget()
{
// the correct widget for listbox events (such as mouse clicks for example)
void wxListBox::DoApplyWidgetStyle(GtkRcStyle *style)
{
- if (m_hasBgCol && m_backgroundColour.Ok())
+#ifdef __WXGTK3__
+ // don't know if this is even necessary, or how to do it
+#else
+ if (m_hasBgCol && m_backgroundColour.IsOk())
{
GdkWindow *window = gtk_tree_view_get_bin_window(m_treeview);
if (window)
gdk_window_clear( window );
}
}
+#endif
- gtk_widget_modify_style( GTK_WIDGET(m_treeview), style );
+ GTKApplyStyle(GTK_WIDGET(m_treeview), style);
}
wxSize wxListBox::DoGetBestSize() const
wxVisualAttributes
wxListBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
{
- return GetDefaultAttributesFromGTKWidget(gtk_tree_view_new, true);
+ return GetDefaultAttributesFromGTKWidget(gtk_tree_view_new(), true);
}
#endif // wxUSE_LISTBOX