X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/05d790f834be56ea4f4a1d2896e9d56f2ef1d4f4..deb0c40261cfc5e4ac3f84782da48eaad40cc5d2:/src/gtk/listbox.cpp diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index a4b21a34ac..d453bf384a 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -119,11 +119,11 @@ gtk_listitem_changed_callback(GtkTreeSelection * WXUNUSED(selection), { if (g_blockEventsOnDrag) return; - if (listbox->HasFlag(wxLB_MULTIPLE) || listbox->HasFlag(wxLB_EXTENDED)) + if (listbox->HasFlag(wxLB_MULTIPLE | wxLB_EXTENDED)) { listbox->CalcAndSendEvent(); } - else + else // single selection { wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() ); event.SetEventObject( listbox ); @@ -169,7 +169,7 @@ gtk_listitem_changed_callback(GtkTreeSelection * WXUNUSED(selection), //----------------------------------------------------------------------------- extern "C" { -static gint +static gboolean gtk_listbox_key_press_callback( GtkWidget *WXUNUSED(widget), GdkEventKey *gdk_event, wxListBox *listbox ) @@ -178,10 +178,19 @@ gtk_listbox_key_press_callback( GtkWidget *WXUNUSED(widget), (gdk_event->keyval == GDK_ISO_Enter) || (gdk_event->keyval == GDK_KP_Enter)) { - int index = listbox->GetSelection(); - if (index != wxNOT_FOUND) + int index = -1; + if (!listbox->HasMultipleSelection()) + index = listbox->GetSelection(); + else { + wxArrayInt sels; + if (listbox->GetSelections( sels ) < 1) + return FALSE; + index = sels[0]; + } + if (index != wxNOT_FOUND) + { wxCommandEvent event(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, listbox->GetId() ); event.SetEventObject( listbox ); @@ -353,6 +362,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, } m_widget = gtk_scrolled_window_new( (GtkAdjustment*) NULL, (GtkAdjustment*) NULL ); + g_object_ref(m_widget); if (style & wxLB_ALWAYS_SB) { gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(m_widget), @@ -412,17 +422,13 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, gtk_tree_view_set_enable_search(m_treeview, FALSE); GtkSelectionMode mode; - if (style & wxLB_MULTIPLE) + // GTK_SELECTION_EXTENDED is a deprecated synonym for GTK_SELECTION_MULTIPLE + if ( style & (wxLB_MULTIPLE | wxLB_EXTENDED) ) { mode = GTK_SELECTION_MULTIPLE; } - else if (style & wxLB_EXTENDED) + else // no multi-selection flags specified { - mode = GTK_SELECTION_EXTENDED; - } - else - { - // if style was 0 set single mode m_windowStyle |= wxLB_SINGLE; mode = GTK_SELECTION_SINGLE; } @@ -499,6 +505,15 @@ void wxListBox::GtkEnableEvents() UpdateOldSelections(); } + +void wxListBox::Update() +{ + wxWindow::Update(); + + if (m_treeview) + gdk_window_process_updates(GTK_WIDGET(m_treeview)->window, TRUE); +} + // ---------------------------------------------------------------------------- // adding items // ---------------------------------------------------------------------------- @@ -542,6 +557,8 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, AssignNewItemClientData(GtkGetIndexFor(itercur), clientData, i, type); } + UpdateOldSelections(); + return pos + numItems - 1; }