X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/034be8882cc091cf8ca1ccdf307190ac73adfe54..c127177f8dc31dbe99764852b8dbcc047d3ad826:/src/gtk/listbox.cpp diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index 8c24f8b811..406b583e7c 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -17,6 +17,7 @@ #include "wx/utils.h" #include "wx/intl.h" #include "wx/checklst.h" +#include "wx/settings.h" #if wxUSE_TOOLTIPS #include "wx/tooltip.h" @@ -29,6 +30,13 @@ #include "gdk/gdk.h" #include "gtk/gtk.h" +//----------------------------------------------------------------------------- +// idle system +//----------------------------------------------------------------------------- + +extern void wxapp_install_idle_handler(); +extern bool g_isIdle; + //------------------------------------------------------------------------- // conditional compilation //------------------------------------------------------------------------- @@ -63,6 +71,8 @@ extern bool g_blockEventsOnScroll; static gint gtk_listbox_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxListBox *listbox ) { + if (g_isIdle) wxapp_install_idle_handler(); + if (g_blockEventsOnDrag) return FALSE; if (g_blockEventsOnScroll) return FALSE; @@ -116,6 +126,8 @@ gtk_listbox_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, static gint gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxListBox *listbox ) { + if (g_isIdle) wxapp_install_idle_handler(); + if (g_blockEventsOnDrag) return FALSE; if (!listbox->HasVMT()) return FALSE; @@ -142,6 +154,8 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox ) { + if (g_isIdle) wxapp_install_idle_handler(); + if (!listbox->HasVMT()) return; if (g_blockEventsOnDrag) return; @@ -239,7 +253,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, str.Prepend(CHECKBOX_STRING); } - list_item = gtk_list_item_new_with_label( str ); + list_item = gtk_list_item_new_with_label( str.mbc_str() ); gtk_container_add( GTK_CONTAINER(m_list), list_item ); @@ -274,9 +288,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, PostCreation(); - gtk_widget_realize( GTK_WIDGET(m_list) ); - - SetBackgroundColour( parent->GetBackgroundColour() ); + SetBackgroundColour( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_WINDOW ) ); SetForegroundColour( parent->GetForegroundColour() ); SetFont( parent->GetFont() ); @@ -292,11 +304,11 @@ wxListBox::~wxListBox() void wxListBox::InsertItems(int nItems, const wxString items[], int pos) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); GList *children = m_list->children; int length = g_list_length(children); - wxCHECK_RET( pos <= length, "invalid index in wxListBox::InsertItems" ); + wxCHECK_RET( pos <= length, _T("invalid index in wxListBox::InsertItems") ); // VZ: it seems that GTK 1.0.6 doesn't has a function to insert an item // into a listbox at the given position, this is why we first delete @@ -390,7 +402,7 @@ void wxListBox::InsertItems(int nItems, const wxString items[], int pos) void wxListBox::AppendCommon( const wxString &item ) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); GtkWidget *list_item; @@ -400,7 +412,7 @@ void wxListBox::AppendCommon( const wxString &item ) label.Prepend(CHECKBOX_STRING); } - list_item = gtk_list_item_new_with_label( label ); + list_item = gtk_list_item_new_with_label( label.mbc_str() ); gtk_container_add( GTK_CONTAINER(m_list), list_item ); @@ -411,8 +423,6 @@ void wxListBox::AppendCommon( const wxString &item ) gtk_signal_connect( GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); - if (m_widgetStyle) ApplyWidgetStyle(); - gtk_signal_connect( GTK_OBJECT(list_item), "button_press_event", (GtkSignalFunc)gtk_listbox_button_press_callback, @@ -430,15 +440,23 @@ void wxListBox::AppendCommon( const wxString &item ) ConnectWidget( list_item ); + if (GTK_WIDGET_REALIZED(m_widget)) + { + gtk_widget_realize( list_item ); + gtk_widget_realize( GTK_BIN(list_item)->child ); + + if (m_widgetStyle) ApplyWidgetStyle(); + #if wxUSE_DRAG_AND_DROP #ifndef NEW_GTK_DND_CODE - if (m_dropTarget) m_dropTarget->RegisterWidget( list_item ); + if (m_dropTarget) m_dropTarget->RegisterWidget( list_item ); #endif #endif #if wxUSE_TOOLTIPS - if (m_toolTip) m_toolTip->Apply( this ); + if (m_toolTip) m_toolTip->Apply( this ); #endif + } } void wxListBox::Append( const wxString &item ) @@ -467,7 +485,7 @@ void wxListBox::Append( const wxString &item, wxClientData *clientData ) void wxListBox::SetClientData( int n, void* clientData ) { - wxCHECK_RET( m_widget != NULL, "invalid combobox" ); + wxCHECK_RET( m_widget != NULL, _T("invalid combobox") ); wxNode *node = m_clientDataList.Nth( n ); if (!node) return; @@ -477,7 +495,7 @@ void wxListBox::SetClientData( int n, void* clientData ) void* wxListBox::GetClientData( int n ) { - wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" ); + wxCHECK_MSG( m_widget != NULL, NULL, _T("invalid combobox") ); wxNode *node = m_clientDataList.Nth( n ); if (!node) return NULL; @@ -487,7 +505,7 @@ void* wxListBox::GetClientData( int n ) void wxListBox::SetClientObject( int n, wxClientData* clientData ) { - wxCHECK_RET( m_widget != NULL, "invalid combobox" ); + wxCHECK_RET( m_widget != NULL, _T("invalid combobox") ); wxNode *node = m_clientObjectList.Nth( n ); if (!node) return; @@ -500,7 +518,7 @@ void wxListBox::SetClientObject( int n, wxClientData* clientData ) wxClientData* wxListBox::GetClientObject( int n ) { - wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, "invalid combobox" ); + wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, _T("invalid combobox") ); wxNode *node = m_clientObjectList.Nth( n ); if (!node) return (wxClientData*) NULL; @@ -510,7 +528,7 @@ wxClientData* wxListBox::GetClientObject( int n ) void wxListBox::Clear() { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); gtk_list_clear_items( m_list, 0, Number() ); @@ -528,11 +546,11 @@ void wxListBox::Clear() void wxListBox::Delete( int n ) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); GList *child = g_list_nth( m_list->children, n ); - wxCHECK_RET( child, "wrong listbox index" ); + wxCHECK_RET( child, _T("wrong listbox index") ); GList *list = g_list_append( (GList*) NULL, child->data ); gtk_list_remove_items( m_list, list ); @@ -555,14 +573,14 @@ void wxListBox::Delete( int n ) void wxListBox::Deselect( int n ) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); gtk_list_unselect_item( m_list, n ); } int wxListBox::FindString( const wxString &item ) const { - wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" ); + wxCHECK_MSG( m_list != NULL, -1, _T("invalid listbox") ); GList *child = m_list->children; int count = 0; @@ -587,7 +605,7 @@ int wxListBox::FindString( const wxString &item ) const int wxListBox::GetSelection() const { - wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" ); + wxCHECK_MSG( m_list != NULL, -1, _T("invalid listbox") ); GList *child = m_list->children; int count = 0; @@ -602,7 +620,7 @@ int wxListBox::GetSelection() const int wxListBox::GetSelections( wxArrayInt& aSelections ) const { - wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" ); + wxCHECK_MSG( m_list != NULL, -1, _T("invalid listbox") ); // get the number of selected items first GList *child = m_list->children; @@ -632,7 +650,7 @@ int wxListBox::GetSelections( wxArrayInt& aSelections ) const wxString wxListBox::GetString( int n ) const { - wxCHECK_MSG( m_list != NULL, "", "invalid listbox" ); + wxCHECK_MSG( m_list != NULL, _T(""), _T("invalid listbox") ); GList *child = g_list_nth( m_list->children, n ); if (child) @@ -645,14 +663,14 @@ wxString wxListBox::GetString( int n ) const return str; } - wxFAIL_MSG("wrong listbox index"); + wxFAIL_MSG(_T("wrong listbox index")); - return ""; + return _T(""); } wxString wxListBox::GetStringSelection() const { - wxCHECK_MSG( m_list != NULL, "", "invalid listbox" ); + wxCHECK_MSG( m_list != NULL, _T(""), _T("invalid listbox") ); GList *selection = m_list->selection; if (selection) @@ -665,13 +683,13 @@ wxString wxListBox::GetStringSelection() const return str; } - wxFAIL_MSG("no listbox selection available"); - return ""; + wxFAIL_MSG(_T("no listbox selection available")); + return _T(""); } int wxListBox::Number() { - wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" ); + wxCHECK_MSG( m_list != NULL, -1, _T("invalid listbox") ); GList *child = m_list->children; int count = 0; @@ -681,7 +699,7 @@ int wxListBox::Number() bool wxListBox::Selected( int n ) { - wxCHECK_MSG( m_list != NULL, FALSE, "invalid listbox" ); + wxCHECK_MSG( m_list != NULL, FALSE, _T("invalid listbox") ); GList *target = g_list_nth( m_list->children, n ); if (target) @@ -693,28 +711,28 @@ bool wxListBox::Selected( int n ) child = child->next; } } - wxFAIL_MSG("wrong listbox index"); + wxFAIL_MSG(_T("wrong listbox index")); return FALSE; } void wxListBox::Set( int WXUNUSED(n), const wxString *WXUNUSED(choices) ) { - wxFAIL_MSG("wxListBox::Set not implemented"); + wxFAIL_MSG(_T("wxListBox::Set not implemented")); } void wxListBox::SetFirstItem( int WXUNUSED(n) ) { - wxFAIL_MSG("wxListBox::SetFirstItem not implemented"); + wxFAIL_MSG(_T("wxListBox::SetFirstItem not implemented")); } void wxListBox::SetFirstItem( const wxString &WXUNUSED(item) ) { - wxFAIL_MSG("wxListBox::SetFirstItem not implemented"); + wxFAIL_MSG(_T("wxListBox::SetFirstItem not implemented")); } void wxListBox::SetSelection( int n, bool select ) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); if (select) gtk_list_select_item( m_list, n ); @@ -724,7 +742,7 @@ void wxListBox::SetSelection( int n, bool select ) void wxListBox::SetString( int n, const wxString &string ) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); GList *child = g_list_nth( m_list->children, n ); if (child) @@ -737,17 +755,17 @@ void wxListBox::SetString( int n, const wxString &string ) str += CHECKBOX_STRING; str += string; - gtk_label_set( label, str ); + gtk_label_set( label, str.mbc_str() ); } else { - wxFAIL_MSG("wrong listbox index"); + wxFAIL_MSG(_T("wrong listbox index")); } } void wxListBox::SetStringSelection( const wxString &string, bool select ) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); SetSelection( FindString(string), select ); } @@ -769,12 +787,12 @@ int wxListBox::GetIndex( GtkWidget *item ) const } #if wxUSE_TOOLTIPS -void wxListBox::ApplyToolTip( GtkTooltips *tips, const char *tip ) +void wxListBox::ApplyToolTip( GtkTooltips *tips, const wxChar *tip ) { GList *child = m_list->children; while (child) { - gtk_tooltips_set_tip( tips, GTK_WIDGET( child->data ), tip, (gchar*) NULL ); + gtk_tooltips_set_tip( tips, GTK_WIDGET( child->data ), wxConv_local.cWX2MB(tip), (gchar*) NULL ); child = child->next; } } @@ -783,7 +801,7 @@ void wxListBox::ApplyToolTip( GtkTooltips *tips, const char *tip ) #if wxUSE_DRAG_AND_DROP void wxListBox::SetDropTarget( wxDropTarget *dropTarget ) { - wxCHECK_RET( m_list != NULL, "invalid listbox" ); + wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); #ifndef NEW_GTK_DND_CODE if (m_dropTarget) @@ -857,4 +875,3 @@ void wxListBox::ApplyWidgetStyle() child = child->next; } } -