Small distrib changes,

Use GTK's native insert for wxListBox,
  Compile pacthes for AIX,
  wxClipboard things,
  Ignore wxSIZE_AUTO flags in wxDialog and wxFrame,
  Ignore toolbar size in wxFrame::Get/SetClientSize


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4162 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-10-24 16:45:01 +00:00
parent 185fa6bf6f
commit 11e1c70d8e
30 changed files with 355 additions and 580 deletions

View File

@@ -1,5 +1,5 @@
#
# This file was automatically generated by tmake at 18:37, 1999/10/22
# This file was automatically generated by tmake at 13:52, 1999/10/23
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T!
#
@@ -187,6 +187,7 @@ WX_HEADERS = \
confbase.h \
config.h \
control.h \
ctrlsub.h \
cursor.h \
dataobj.h \
date.h \

View File

@@ -444,6 +444,7 @@ combobox.h W
confbase.h W
config.h W
control.h W
ctrlsub.h W
cursor.h W
dataobj.h W
date.h W B

View File

@@ -17,14 +17,19 @@ Support for GTK 1.0 has been dropped. This version has
been tested with GTK 1.2.3 and GTK 1.2.6 - it is known
not work with some other versions.
wxChoice can now handle only either void client data
(which it will not delete on destruction) or client
data of the wxClientData type (which it will delete),
Rewritten the support for multiple-format Drag'n'Drop and
clipboard under both GTK and MSW. There are probably some
problems here and there left.
wxListBox and wxChoice can now handle only either void
client data (which it will not delete on destruction) or
client data of the wxClientData type (which it will delete),
instead of both at the same time. The same will happen
to wxListBox and wxComboBox some time.
to wxComboBox some time. Also, wxListBox can now sort its
items.
Many build fixes for various platforms have been applied,
try again, poor HP-UX and *BSD users, but don't reckon
try again, poor AIX, HP-UX and *BSD users, but don't reckon
with immediate success. Actually, when using GNU compilers,
your chances are quite good.
@@ -78,7 +83,15 @@ wxSlider, wxWindow, wxScrollBar now emit the correct events
for scrolling (like page up, line up etc) instead of just
"thumb-track" as before.
Corrected bug in Reparent() code.
Corrected Reparent() code.
Corrected key accelerator code for toplevel child windows.
Corrected cursor handling in a number of special cases.
wxGLCanvas now waits until all expose events have been sent
and then emits its own redraw event. Also removed flicker
for wxGLCanvas and in some other places.
A handler to read PCX file (in most variants) has been added.

View File

@@ -76,14 +76,10 @@ public:
// implementation from now on
#if wxUSE_DRAG_AND_DROP
void SetDropTarget( wxDropTarget *dropTarget );
#endif
void DisableEvents();
void EnableEvents();
void AppendWithoutSorting( const wxString &item );
int GetIndex( GtkWidget *item ) const;
void GtkDisableEvents();
void GtkEnableEvents();
void GtkAddItem( const wxString &item, int pos=-1 );
int GtkGetIndex( GtkWidget *item ) const;
GtkWidget *GetConnectWidget();
bool IsOwnGtkWindow( GdkWindow *window );
void ApplyWidgetStyle();
@@ -94,7 +90,7 @@ public:
#endif // wxUSE_TOOLTIPS
GtkList *m_list;
wxList m_clientData;
wxList m_clientList;
#if wxUSE_CHECKLISTBOX
bool m_hasCheckBoxes;

View File

@@ -76,14 +76,10 @@ public:
// implementation from now on
#if wxUSE_DRAG_AND_DROP
void SetDropTarget( wxDropTarget *dropTarget );
#endif
void DisableEvents();
void EnableEvents();
void AppendWithoutSorting( const wxString &item );
int GetIndex( GtkWidget *item ) const;
void GtkDisableEvents();
void GtkEnableEvents();
void GtkAddItem( const wxString &item, int pos=-1 );
int GtkGetIndex( GtkWidget *item ) const;
GtkWidget *GetConnectWidget();
bool IsOwnGtkWindow( GdkWindow *window );
void ApplyWidgetStyle();
@@ -94,7 +90,7 @@ public:
#endif // wxUSE_TOOLTIPS
GtkList *m_list;
wxList m_clientData;
wxList m_clientList;
#if wxUSE_CHECKLISTBOX
bool m_hasCheckBoxes;

View File

@@ -557,7 +557,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
// layout constraints
panel = new wxPanel(m_notebook);
panel->SetAutoLayout( true );
panel->SetAutoLayout( TRUE );
wxLayoutConstraints *c;
c = new wxLayoutConstraints;
@@ -583,7 +583,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
// sizer
panel = new wxPanel(m_notebook);
panel->SetAutoLayout( true );
panel->SetAutoLayout( TRUE );
wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );

View File

@@ -504,7 +504,7 @@ void MyPanel::DoPasteFromClipboard()
{
*m_log << "Clipboard supports requested format.\n";
if (wxTheClipboard->GetData( &data ))
if (wxTheClipboard->GetData( data ))
{
*m_log << "Successfully retrieved data from the clipboard.\n";
*m_multitext << data.GetText() << "\n";

View File

@@ -167,7 +167,7 @@ void yyerror(char *s)
#ifndef yywrap
#define yywrap() 1
#endif
#else if !defined(__alpha___) && !defined(__alpha) && !defined(__ultrix)
#elif !defined(__alpha___) && !defined(__alpha) && !defined(__ultrix)
int yywrap() { return 1; }
#endif
#elif defined(__WX_SETUP_H__)

View File

@@ -4,9 +4,14 @@
Read unzip.h for more info
*/
#if 0
for what compiler ?
#if !defined(__VISAGECPP__)
# pragma warning(disable:4001) /* non standard extension used: single line comment */
#endif
#endif
#include "wx/setup.h"
#if wxUSE_ZLIB && wxUSE_ZIPSTREAM

View File

@@ -54,7 +54,7 @@ bool wxCheckListBox::IsChecked( int index ) const
wxString str = wxString(label->label,*wxConvCurrent);
return (str[1] == wxT('X'));
return (str.GetChar(1) == wxT('X'));
}
wxFAIL_MSG(wxT("wrong checklistbox index"));
@@ -73,7 +73,7 @@ void wxCheckListBox::Check( int index, bool check )
wxString str = wxString(label->label,*wxConvCurrent);
if (check == (str[1] == wxT('X'))) return;
if (check == (str.GetChar(1) == wxT('X'))) return;
if (check)
str.SetChar( 1, wxT('X') );

View File

@@ -409,7 +409,7 @@ size_t wxChoice::AppendHelper(GtkWidget *menu, const wxString& item)
// don't call wxChoice::GetCount() from here because it doesn't work
// if we're called from ctor (and GtkMenuShell is still NULL)
index = m_clientList.GetCount();
index = m_clientList.GetCount() - 1;
}
if (GTK_WIDGET_REALIZED(m_widget))

View File

@@ -95,6 +95,11 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
return;
}
/*
wxDataFormat clip( selection_data->selection );
wxLogDebug( wxT("selection received for targets, clipboard %s"), clip.GetId().c_str() );
*/
// the atoms we received, holding a list of targets (= formats)
GdkAtom *atoms = (GdkAtom *)selection_data->data;
@@ -102,6 +107,10 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
{
wxDataFormat format( atoms[i] );
/*
wxLogDebug( wxT("selection received for targets, format %s"), format.GetId().c_str() );
*/
if (format == clipboard->m_targetRequested)
{
clipboard->m_waiting = FALSE;
@@ -199,6 +208,8 @@ selection_clear_clip( GtkWidget *WXUNUSED(widget), GdkEventSelection *event )
/* the clipboard is no longer in our hands. we can the delete clipboard data. */
if (wxTheClipboard->m_data)
{
wxLogDebug( wxT("wxClipboard will get cleared" ) );
delete wxTheClipboard->m_data;
wxTheClipboard->m_data = (wxDataObject*) NULL;
}
@@ -398,31 +409,22 @@ bool wxClipboard::AddData( wxDataObject *data )
m_data = data;
/* This should happen automatically, but to be on the safe side */
m_ownsClipboard = FALSE;
m_ownsPrimarySelection = FALSE;
/* get formats from wxDataObjects */
wxDataFormat *array = new wxDataFormat[ m_data->GetFormatCount() ];
m_data->GetAllFormats( array );
/* primary selection or clipboard */
GdkAtom clipboard = m_usePrimary ? (GdkAtom)GDK_SELECTION_PRIMARY
: g_clipboardAtom;
for (size_t i = 0; i < m_data->GetFormatCount(); i++)
{
GdkAtom atom = array[i];
wxLogDebug( wxT("Clipboard Supported atom %s"), gdk_atom_name( atom ) );
/* Add handlers if someone requests data. We currently always
offer data to the clipboard and the primary selection. Maybe
we should make that depend on the usePrimary flag */
wxLogDebug( wxT("wxClipboard now supports atom %s"), array[i].GetId().c_str() );
gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
GDK_SELECTION_PRIMARY,
atom,
0 ); /* what is info ? */
gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
g_clipboardAtom,
atom,
clipboard,
array[i],
0 ); /* what is info ? */
}
@@ -439,36 +441,21 @@ bool wxClipboard::AddData( wxDataObject *data )
#endif
/* Tell the world we offer clipboard data */
if (!gtk_selection_owner_set( m_clipboardWidget,
g_clipboardAtom,
GDK_CURRENT_TIME ))
{
#if wxUSE_THREADS
/* re-enable GUI threads */
wxapp_install_thread_wakeup();
#endif
return FALSE;
}
m_ownsClipboard = TRUE;
bool res = (gtk_selection_owner_set( m_clipboardWidget,
clipboard,
GDK_CURRENT_TIME ));
if (!gtk_selection_owner_set( m_clipboardWidget,
GDK_SELECTION_PRIMARY,
GDK_CURRENT_TIME ))
{
#if wxUSE_THREADS
/* re-enable GUI threads */
wxapp_install_thread_wakeup();
#endif
return FALSE;
}
m_ownsPrimarySelection = TRUE;
if (m_usePrimary)
m_ownsPrimarySelection = res;
else
m_ownsClipboard = res;
#if wxUSE_THREADS
/* re-enable GUI threads */
wxapp_install_thread_wakeup();
#endif
return TRUE;
return res;
}
void wxClipboard::Close()
@@ -530,11 +517,36 @@ bool wxClipboard::GetData( wxDataObject& data )
{
wxDataFormat format( array[i] );
wxLogDebug( wxT("wxClipboard::GetData: request format %s"), format.GetId().c_str() );
wxLogDebug( wxT("wxClipboard::GetData: requested format: %s"), format.GetId().c_str() );
/* is data supported by clipboard ? */
if (!IsSupported( format ))
continue;
/* store requested format to be asked for by callbacks */
m_targetRequested = format;
wxCHECK_MSG( m_targetRequested, FALSE, wxT("invalid clipboard format") );
m_formatSupported = FALSE;
/* perform query. this will set m_formatSupported to
TRUE if m_targetRequested is supported.
also, we have to wait for the "answer" from the
clipboard owner which is an asynchronous process.
therefore we set m_waiting = TRUE here and wait
until the callback "targets_selection_received"
sets it to FALSE */
m_waiting = TRUE;
gtk_selection_convert( m_targetsWidget,
m_usePrimary ? (GdkAtom)GDK_SELECTION_PRIMARY
: g_clipboardAtom,
g_targetsAtom,
GDK_CURRENT_TIME );
while (m_waiting) gtk_main_iteration();
if (!m_formatSupported) continue;
/* store pointer to data object to be filled up by callbacks */
m_receivedData = &data;
@@ -576,6 +588,8 @@ bool wxClipboard::GetData( wxDataObject& data )
return TRUE;
}
wxLogDebug( wxT("wxClipboard::GetData: format not found") );
/* return failure */
delete[] array;
return FALSE;

View File

@@ -463,6 +463,7 @@ void wxDialog::DoSetSize( int x, int y, int width, int height, int sizeFlags )
m_height = height;
}
/*
if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
{
if (width == -1) m_width = 80;
@@ -472,6 +473,7 @@ void wxDialog::DoSetSize( int x, int y, int width, int height, int sizeFlags )
{
if (height == -1) m_height = 26;
}
*/
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;

View File

@@ -378,10 +378,10 @@ wxDragResult wxDropTarget::OnData( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y),
wxDragResult def )
{
if (!m_dataObject)
return FALSE;
return wxDragNone;
if (GetMatchingPair() == (GdkAtom) 0)
return FALSE;
return wxDragNone;
return GetData() ? def : wxDragNone;
}
@@ -401,8 +401,7 @@ GdkAtom wxDropTarget::GetMatchingPair()
wxDataFormat format( formatAtom );
#ifdef __WXDEBUG__
char *name = gdk_atom_name( formatAtom );
wxLogDebug("Drop target: drag has format: %s", name ? name : "unnamed");
wxLogDebug("Drop target: drag has format: %s", format.GetId().c_str() );
#endif // Debug
if (m_dataObject->IsSupportedFormat( format ))

View File

@@ -543,6 +543,7 @@ void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags )
m_height = height;
}
/*
if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
{
if (width == -1) m_width = 80;
@@ -552,6 +553,7 @@ void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags )
{
if (height == -1) m_height = 26;
}
*/
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
@@ -613,6 +615,7 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const
#if wxUSE_TOOLBAR
/* tool bar */
/*
if (m_frameToolBar)
{
if (!m_toolBarDetached)
@@ -624,6 +627,7 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const
else
(*height) -= wxPLACE_HOLDER;
}
*/
#endif
/* mini edge */
@@ -639,6 +643,8 @@ void wxFrame::DoSetClientSize( int width, int height )
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
printf( "set size %d %d\n", width, height );
/* menu bar */
if (m_frameMenuBar)
{
@@ -655,6 +661,7 @@ void wxFrame::DoSetClientSize( int width, int height )
#if wxUSE_TOOLBAR
/* tool bar */
/*
if (m_frameToolBar)
{
if (!m_toolBarDetached)
@@ -666,6 +673,7 @@ void wxFrame::DoSetClientSize( int width, int height )
else
height += wxPLACE_HOLDER;
}
*/
#endif
DoSetSize( -1, -1, width + m_miniEdge*2, height + m_miniEdge*2 + m_miniTitle, 0 );
@@ -729,7 +737,8 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
}
#if wxUSE_TOOLBAR
if (m_frameToolBar)
if ((m_frameToolBar) &&
(m_frameToolBar->m_widget->parent == m_mainWidget))
{
int xx = m_miniEdge;
int yy = m_miniEdge + m_miniTitle;
@@ -745,8 +754,8 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
if (m_toolBarDetached) hh = wxPLACE_HOLDER;
m_frameToolBar->m_x = xx;
m_frameToolBar->m_y = yy;
/* m_frameToolBar->m_height = hh; don't change the toolbar's height */
m_frameToolBar->m_width = ww;
/* m_frameToolBar->m_height = hh; don't change the toolbar's reported size
m_frameToolBar->m_width = ww; */
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_frameToolBar->m_widget,
xx, yy, ww, hh );

View File

@@ -144,7 +144,7 @@ gtk_listbox_button_press_callback( GtkWidget *widget,
if (!listbox->m_hasVMT) return FALSE;
int sel = listbox->GetIndex( widget );
int sel = listbox->GtkGetIndex( widget );
#if wxUSE_CHECKLISTBOX
if ((listbox->m_hasCheckBoxes) && (gdk_event->x < 15) && (gdk_event->type != GDK_2BUTTON_PRESS))
@@ -182,7 +182,7 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
if (gdk_event->keyval != ' ') return FALSE;
int sel = listbox->GetIndex( widget );
int sel = listbox->GtkGetIndex( widget );
wxCheckListBox *clb = (wxCheckListBox *)listbox;
@@ -322,53 +322,8 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
for (int i = 0; i < n; i++)
{
// add one by one
DoAppend(choices[i]);
#if 0
wxString str(choices[i]);
#if wxUSE_CHECKLISTBOX
if (m_hasCheckBoxes)
{
str.Prepend(CHECKBOX_STRING);
}
#endif // wxUSE_CHECKLISTBOX
GtkWidget *list_item = gtk_list_item_new_with_label( str.mbc_str() );
gtk_container_add( GTK_CONTAINER(m_list), list_item );
gtk_signal_connect( GTK_OBJECT(list_item), "select",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
if (style & wxLB_MULTIPLE)
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(list_item),
"button_press_event",
(GtkSignalFunc)gtk_listbox_button_press_callback,
(gpointer) this );
gtk_signal_connect_after( GTK_OBJECT(list_item),
"button_release_event",
(GtkSignalFunc)gtk_listbox_button_release_callback,
(gpointer) this );
#if wxUSE_CHECKLISTBOX
if (m_hasCheckBoxes)
{
gtk_signal_connect( GTK_OBJECT(list_item),
"key_press_event",
(GtkSignalFunc)gtk_listbox_key_press_callback,
(gpointer)this );
}
#endif // wxUSE_CHECKLISTBOX
ConnectWidget( list_item );
gtk_widget_show( list_item );
#endif // 0
}
m_parent->DoAddChild( this );
@@ -393,129 +348,73 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
// code elsewhere supposes we have as many items in m_clientData as items
// in the listbox
wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") );
GList *children = m_list->children;
int length = g_list_length(children);
wxCHECK_RET( pos <= length, wxT("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
// all items after this position, then append these items and then
// reappend back the old ones.
// VZ: notice that InsertItems knows nothing about sorting, so calling it
// from outside (and not from our own Append) is likely to break
// everything
size_t nItems = items.GetCount();
size_t n; // loop var
// optimise for this trivial case
if ( pos == length )
{
// no need to do anything complicated
for ( n = 0; n < nItems; n++ )
{
AppendWithoutSorting(items[n]);
m_clientData.Append((wxObject *)NULL);
}
wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
// code elsewhere supposes we have as many items in m_clientList as items
// in the listbox
wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") );
return;
}
GList *children = m_list->children;
int length = g_list_length(children);
// remove the old items
wxArrayString deletedLabels;
#if wxUSE_CHECKLISTBOX
wxArrayInt deletedChecks;
#endif
wxCHECK_RET( pos <= length, wxT("invalid index in wxListBox::InsertItems") );
GList *child = g_list_nth( children, pos );
for ( n = 0; child != NULL; n++, child = child->next )
size_t nItems = items.GetCount();
if (pos == length)
{
// save label
GtkBin *bin = GTK_BIN( child->data );
GtkLabel *label = GTK_LABEL( bin->child );
wxString str(GET_REAL_LABEL(label->label),*wxConvCurrent);
deletedLabels.Add(str);
#if wxUSE_CHECKLISTBOX
// save check state
if ( m_hasCheckBoxes )
for ( size_t n = 0; n < nItems; n++ )
{
deletedChecks.Add(((wxCheckListBox *)this)->IsChecked(pos + n));
GtkAddItem( items[n] );
m_clientList.Append((wxObject *)NULL);
}
#endif // wxUSE_CHECKLISTBOX
}
size_t nDeletedCount = n;
gtk_list_clear_items( m_list, pos, length );
// now append the new items
wxNode *node = m_clientData.Item(pos);
for ( n = 0; n < nItems; n++ )
else
{
AppendWithoutSorting(items[n]);
// make sure we have the correct number of items in this list
m_clientData.Insert(node, (wxObject *)NULL);
}
// and append the old items too
pos += nItems; // now the indices are shifted
for ( n = 0; n < nDeletedCount; n++ )
wxNode *node = m_clientList.Nth( pos );
for ( size_t n = 0; n < nItems; n++ )
{
AppendWithoutSorting(deletedLabels[n]);
GtkAddItem( items[n], pos+n );
// the data is already correct - the indices have been rearranged in
// such manner that we now correspond to the same node as before
#if wxUSE_CHECKLISTBOX
if ( m_hasCheckBoxes )
{
((wxCheckListBox *)this)->Check(pos + n, (bool)deletedChecks[n]);
m_clientList.Insert( node, (wxObject *)NULL );
}
#endif // wxUSE_CHECKLISTBOX
}
wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") );
}
int wxListBox::DoAppend( const wxString& item )
{
int index;
if (m_strings)
{
// need to determine the index
index = m_strings->Add(item);
int index = m_strings->Add( item );
InsertItems(1, &item, index);
}
else
// only if not at the end anyway
if (index != GetCount())
{
// not sorted, just append
AppendWithoutSorting(item);
GtkAddItem( item, index );
m_clientData.Append((wxObject *)NULL);
index = GetCount() - 1;
}
wxNode *node = m_clientList.Nth( index );
m_clientList.Insert( node, (wxObject *)NULL );
return index;
}
}
void wxListBox::AppendWithoutSorting( const wxString &item )
GtkAddItem(item);
m_clientList.Append((wxObject *)NULL);
return GetCount() - 1;
}
void wxListBox::GtkAddItem( const wxString &item, int pos )
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
@@ -531,7 +430,13 @@ void wxListBox::AppendWithoutSorting( const wxString &item )
list_item = gtk_list_item_new_with_label( label.mbc_str() );
gtk_container_add( GTK_CONTAINER(m_list), list_item );
GList *gitem_list = g_list_alloc ();
gitem_list->data = list_item;
if (pos == -1)
gtk_list_append_items( GTK_LIST (m_list), gitem_list );
else
gtk_list_insert_items( GTK_LIST (m_list), gitem_list, pos );
gtk_signal_connect( GTK_OBJECT(list_item), "select",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
@@ -569,21 +474,15 @@ void wxListBox::AppendWithoutSorting( const wxString &item )
gtk_widget_realize( list_item );
gtk_widget_realize( GTK_BIN(list_item)->child );
//if (m_widgetStyle) ApplyWidgetStyle();
if (m_widgetStyle) {
// Apply current widget style to the new list_item
if (m_widgetStyle)
{
gtk_widget_set_style( GTK_WIDGET( list_item ), m_widgetStyle );
GtkBin *bin = GTK_BIN( list_item );
GtkWidget *label = GTK_WIDGET( bin->child );
gtk_widget_set_style( label, m_widgetStyle );
}
#if wxUSE_DRAG_AND_DROP
#ifndef NEW_GTK_DND_CODE
if (m_dropTarget) m_dropTarget->RegisterWidget( list_item );
#endif
#endif
#if wxUSE_TOOLTIPS
if (m_tooltip) m_tooltip->Apply( this );
#endif
@@ -615,7 +514,7 @@ void wxListBox::DoSetItemClientData( int n, void* clientData )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_RET( node, wxT("invalid index in wxListBox::DoSetItemClientData") );
node->SetData( (wxObject*) clientData );
@@ -625,7 +524,7 @@ void* wxListBox::DoGetItemClientData( int n ) const
{
wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_MSG( node, NULL, wxT("invalid index in wxListBox::DoGetItemClientData") );
return node->Data();
@@ -635,7 +534,7 @@ void wxListBox::DoSetItemClientObject( int n, wxClientData* clientData )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_RET( node, wxT("invalid index in wxListBox::DoSetItemClientObject") );
wxClientData *cd = (wxClientData*) node->Data();
@@ -648,7 +547,7 @@ wxClientData* wxListBox::DoGetItemClientObject( int n ) const
{
wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_MSG( node, (wxClientData *)NULL,
wxT("invalid index in wxListBox::DoGetItemClientObject") );
@@ -666,14 +565,14 @@ void wxListBox::Clear()
// destroy the data (due to Robert's idea of using wxList<wxObject>
// and not wxList<wxClientData> we can't just say
// m_clientList.DeleteContents(TRUE) - this would crash!
wxNode *node = m_clientData.First();
wxNode *node = m_clientList.First();
while ( node )
{
delete (wxClientData *)node->Data();
node = node->Next();
}
}
m_clientData.Clear();
m_clientList.Clear();
if ( m_strings )
m_strings->Clear();
@@ -691,7 +590,7 @@ void wxListBox::Delete( int n )
gtk_list_remove_items( m_list, list );
g_list_free( list );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
if ( node )
{
if ( m_clientDataItemsType == ClientData_Object )
@@ -700,7 +599,7 @@ void wxListBox::Delete( int n )
delete cd;
}
m_clientData.DeleteNode( node );
m_clientList.DeleteNode( node );
}
if ( m_strings )
@@ -760,15 +659,8 @@ int wxListBox::GetCount() const
{
wxCHECK_MSG( m_list != NULL, -1, wxT("invalid listbox") );
GList *child = m_list->children;
int count = 0;
while (child)
{
count++;
child = child->next;
}
return count;
GList *children = m_list->children;
return g_list_length(children);
}
int wxListBox::FindString( const wxString &item ) const
@@ -869,14 +761,14 @@ void wxListBox::SetSelection( int n, bool select )
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
DisableEvents();
GtkDisableEvents();
if (select)
gtk_list_select_item( m_list, n );
else
gtk_list_unselect_item( m_list, n );
EnableEvents();
GtkEnableEvents();
}
void wxListBox::DoSetFirstItem( int WXUNUSED(n) )
@@ -888,7 +780,7 @@ void wxListBox::DoSetFirstItem( int WXUNUSED(n) )
// helpers
// ----------------------------------------------------------------------------
int wxListBox::GetIndex( GtkWidget *item ) const
int wxListBox::GtkGetIndex( GtkWidget *item ) const
{
if (item)
{
@@ -916,40 +808,7 @@ void wxListBox::ApplyToolTip( GtkTooltips *tips, const wxChar *tip )
}
#endif // wxUSE_TOOLTIPS
#if wxUSE_DRAG_AND_DROP
void wxListBox::SetDropTarget( wxDropTarget *dropTarget )
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
#ifndef NEW_GTK_DND_CODE
if (m_dropTarget)
{
GList *child = m_list->children;
while (child)
{
m_dropTarget->UnregisterWidget( GTK_WIDGET( child->data ) );
child = child->next;
}
}
#endif
wxWindow::SetDropTarget( dropTarget );
#ifndef NEW_GTK_DND_CODE
if (m_dropTarget)
{
GList *child = m_list->children;
while (child)
{
m_dropTarget->RegisterWidget( GTK_WIDGET( child->data ) );
child = child->next;
}
}
#endif
}
#endif
void wxListBox::DisableEvents()
void wxListBox::GtkDisableEvents()
{
GList *child = m_list->children;
while (child)
@@ -965,7 +824,7 @@ void wxListBox::DisableEvents()
}
}
void wxListBox::EnableEvents()
void wxListBox::GtkEnableEvents()
{
GList *child = m_list->children;
while (child)

View File

@@ -281,7 +281,6 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
{
style = style | wxSIMPLE_BORDER;
style = style | wxCAPTION;
style = style | wxSYSTEM_MENU;
if ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT))
m_miniTitle = 13;

View File

@@ -54,7 +54,7 @@ bool wxCheckListBox::IsChecked( int index ) const
wxString str = wxString(label->label,*wxConvCurrent);
return (str[1] == wxT('X'));
return (str.GetChar(1) == wxT('X'));
}
wxFAIL_MSG(wxT("wrong checklistbox index"));
@@ -73,7 +73,7 @@ void wxCheckListBox::Check( int index, bool check )
wxString str = wxString(label->label,*wxConvCurrent);
if (check == (str[1] == wxT('X'))) return;
if (check == (str.GetChar(1) == wxT('X'))) return;
if (check)
str.SetChar( 1, wxT('X') );

View File

@@ -409,7 +409,7 @@ size_t wxChoice::AppendHelper(GtkWidget *menu, const wxString& item)
// don't call wxChoice::GetCount() from here because it doesn't work
// if we're called from ctor (and GtkMenuShell is still NULL)
index = m_clientList.GetCount();
index = m_clientList.GetCount() - 1;
}
if (GTK_WIDGET_REALIZED(m_widget))

View File

@@ -95,6 +95,11 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
return;
}
/*
wxDataFormat clip( selection_data->selection );
wxLogDebug( wxT("selection received for targets, clipboard %s"), clip.GetId().c_str() );
*/
// the atoms we received, holding a list of targets (= formats)
GdkAtom *atoms = (GdkAtom *)selection_data->data;
@@ -102,6 +107,10 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
{
wxDataFormat format( atoms[i] );
/*
wxLogDebug( wxT("selection received for targets, format %s"), format.GetId().c_str() );
*/
if (format == clipboard->m_targetRequested)
{
clipboard->m_waiting = FALSE;
@@ -199,6 +208,8 @@ selection_clear_clip( GtkWidget *WXUNUSED(widget), GdkEventSelection *event )
/* the clipboard is no longer in our hands. we can the delete clipboard data. */
if (wxTheClipboard->m_data)
{
wxLogDebug( wxT("wxClipboard will get cleared" ) );
delete wxTheClipboard->m_data;
wxTheClipboard->m_data = (wxDataObject*) NULL;
}
@@ -398,31 +409,22 @@ bool wxClipboard::AddData( wxDataObject *data )
m_data = data;
/* This should happen automatically, but to be on the safe side */
m_ownsClipboard = FALSE;
m_ownsPrimarySelection = FALSE;
/* get formats from wxDataObjects */
wxDataFormat *array = new wxDataFormat[ m_data->GetFormatCount() ];
m_data->GetAllFormats( array );
/* primary selection or clipboard */
GdkAtom clipboard = m_usePrimary ? (GdkAtom)GDK_SELECTION_PRIMARY
: g_clipboardAtom;
for (size_t i = 0; i < m_data->GetFormatCount(); i++)
{
GdkAtom atom = array[i];
wxLogDebug( wxT("Clipboard Supported atom %s"), gdk_atom_name( atom ) );
/* Add handlers if someone requests data. We currently always
offer data to the clipboard and the primary selection. Maybe
we should make that depend on the usePrimary flag */
wxLogDebug( wxT("wxClipboard now supports atom %s"), array[i].GetId().c_str() );
gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
GDK_SELECTION_PRIMARY,
atom,
0 ); /* what is info ? */
gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
g_clipboardAtom,
atom,
clipboard,
array[i],
0 ); /* what is info ? */
}
@@ -439,36 +441,21 @@ bool wxClipboard::AddData( wxDataObject *data )
#endif
/* Tell the world we offer clipboard data */
if (!gtk_selection_owner_set( m_clipboardWidget,
g_clipboardAtom,
GDK_CURRENT_TIME ))
{
#if wxUSE_THREADS
/* re-enable GUI threads */
wxapp_install_thread_wakeup();
#endif
return FALSE;
}
m_ownsClipboard = TRUE;
bool res = (gtk_selection_owner_set( m_clipboardWidget,
clipboard,
GDK_CURRENT_TIME ));
if (!gtk_selection_owner_set( m_clipboardWidget,
GDK_SELECTION_PRIMARY,
GDK_CURRENT_TIME ))
{
#if wxUSE_THREADS
/* re-enable GUI threads */
wxapp_install_thread_wakeup();
#endif
return FALSE;
}
m_ownsPrimarySelection = TRUE;
if (m_usePrimary)
m_ownsPrimarySelection = res;
else
m_ownsClipboard = res;
#if wxUSE_THREADS
/* re-enable GUI threads */
wxapp_install_thread_wakeup();
#endif
return TRUE;
return res;
}
void wxClipboard::Close()
@@ -530,11 +517,36 @@ bool wxClipboard::GetData( wxDataObject& data )
{
wxDataFormat format( array[i] );
wxLogDebug( wxT("wxClipboard::GetData: request format %s"), format.GetId().c_str() );
wxLogDebug( wxT("wxClipboard::GetData: requested format: %s"), format.GetId().c_str() );
/* is data supported by clipboard ? */
if (!IsSupported( format ))
continue;
/* store requested format to be asked for by callbacks */
m_targetRequested = format;
wxCHECK_MSG( m_targetRequested, FALSE, wxT("invalid clipboard format") );
m_formatSupported = FALSE;
/* perform query. this will set m_formatSupported to
TRUE if m_targetRequested is supported.
also, we have to wait for the "answer" from the
clipboard owner which is an asynchronous process.
therefore we set m_waiting = TRUE here and wait
until the callback "targets_selection_received"
sets it to FALSE */
m_waiting = TRUE;
gtk_selection_convert( m_targetsWidget,
m_usePrimary ? (GdkAtom)GDK_SELECTION_PRIMARY
: g_clipboardAtom,
g_targetsAtom,
GDK_CURRENT_TIME );
while (m_waiting) gtk_main_iteration();
if (!m_formatSupported) continue;
/* store pointer to data object to be filled up by callbacks */
m_receivedData = &data;
@@ -576,6 +588,8 @@ bool wxClipboard::GetData( wxDataObject& data )
return TRUE;
}
wxLogDebug( wxT("wxClipboard::GetData: format not found") );
/* return failure */
delete[] array;
return FALSE;

View File

@@ -463,6 +463,7 @@ void wxDialog::DoSetSize( int x, int y, int width, int height, int sizeFlags )
m_height = height;
}
/*
if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
{
if (width == -1) m_width = 80;
@@ -472,6 +473,7 @@ void wxDialog::DoSetSize( int x, int y, int width, int height, int sizeFlags )
{
if (height == -1) m_height = 26;
}
*/
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;

View File

@@ -378,10 +378,10 @@ wxDragResult wxDropTarget::OnData( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y),
wxDragResult def )
{
if (!m_dataObject)
return FALSE;
return wxDragNone;
if (GetMatchingPair() == (GdkAtom) 0)
return FALSE;
return wxDragNone;
return GetData() ? def : wxDragNone;
}
@@ -401,8 +401,7 @@ GdkAtom wxDropTarget::GetMatchingPair()
wxDataFormat format( formatAtom );
#ifdef __WXDEBUG__
char *name = gdk_atom_name( formatAtom );
wxLogDebug("Drop target: drag has format: %s", name ? name : "unnamed");
wxLogDebug("Drop target: drag has format: %s", format.GetId().c_str() );
#endif // Debug
if (m_dataObject->IsSupportedFormat( format ))

View File

@@ -543,6 +543,7 @@ void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags )
m_height = height;
}
/*
if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH)
{
if (width == -1) m_width = 80;
@@ -552,6 +553,7 @@ void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags )
{
if (height == -1) m_height = 26;
}
*/
if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
@@ -613,6 +615,7 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const
#if wxUSE_TOOLBAR
/* tool bar */
/*
if (m_frameToolBar)
{
if (!m_toolBarDetached)
@@ -624,6 +627,7 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const
else
(*height) -= wxPLACE_HOLDER;
}
*/
#endif
/* mini edge */
@@ -639,6 +643,8 @@ void wxFrame::DoSetClientSize( int width, int height )
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
printf( "set size %d %d\n", width, height );
/* menu bar */
if (m_frameMenuBar)
{
@@ -655,6 +661,7 @@ void wxFrame::DoSetClientSize( int width, int height )
#if wxUSE_TOOLBAR
/* tool bar */
/*
if (m_frameToolBar)
{
if (!m_toolBarDetached)
@@ -666,6 +673,7 @@ void wxFrame::DoSetClientSize( int width, int height )
else
height += wxPLACE_HOLDER;
}
*/
#endif
DoSetSize( -1, -1, width + m_miniEdge*2, height + m_miniEdge*2 + m_miniTitle, 0 );
@@ -729,7 +737,8 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
}
#if wxUSE_TOOLBAR
if (m_frameToolBar)
if ((m_frameToolBar) &&
(m_frameToolBar->m_widget->parent == m_mainWidget))
{
int xx = m_miniEdge;
int yy = m_miniEdge + m_miniTitle;
@@ -745,8 +754,8 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
if (m_toolBarDetached) hh = wxPLACE_HOLDER;
m_frameToolBar->m_x = xx;
m_frameToolBar->m_y = yy;
/* m_frameToolBar->m_height = hh; don't change the toolbar's height */
m_frameToolBar->m_width = ww;
/* m_frameToolBar->m_height = hh; don't change the toolbar's reported size
m_frameToolBar->m_width = ww; */
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_frameToolBar->m_widget,
xx, yy, ww, hh );

View File

@@ -144,7 +144,7 @@ gtk_listbox_button_press_callback( GtkWidget *widget,
if (!listbox->m_hasVMT) return FALSE;
int sel = listbox->GetIndex( widget );
int sel = listbox->GtkGetIndex( widget );
#if wxUSE_CHECKLISTBOX
if ((listbox->m_hasCheckBoxes) && (gdk_event->x < 15) && (gdk_event->type != GDK_2BUTTON_PRESS))
@@ -182,7 +182,7 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
if (gdk_event->keyval != ' ') return FALSE;
int sel = listbox->GetIndex( widget );
int sel = listbox->GtkGetIndex( widget );
wxCheckListBox *clb = (wxCheckListBox *)listbox;
@@ -322,53 +322,8 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
for (int i = 0; i < n; i++)
{
// add one by one
DoAppend(choices[i]);
#if 0
wxString str(choices[i]);
#if wxUSE_CHECKLISTBOX
if (m_hasCheckBoxes)
{
str.Prepend(CHECKBOX_STRING);
}
#endif // wxUSE_CHECKLISTBOX
GtkWidget *list_item = gtk_list_item_new_with_label( str.mbc_str() );
gtk_container_add( GTK_CONTAINER(m_list), list_item );
gtk_signal_connect( GTK_OBJECT(list_item), "select",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
if (style & wxLB_MULTIPLE)
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(list_item),
"button_press_event",
(GtkSignalFunc)gtk_listbox_button_press_callback,
(gpointer) this );
gtk_signal_connect_after( GTK_OBJECT(list_item),
"button_release_event",
(GtkSignalFunc)gtk_listbox_button_release_callback,
(gpointer) this );
#if wxUSE_CHECKLISTBOX
if (m_hasCheckBoxes)
{
gtk_signal_connect( GTK_OBJECT(list_item),
"key_press_event",
(GtkSignalFunc)gtk_listbox_key_press_callback,
(gpointer)this );
}
#endif // wxUSE_CHECKLISTBOX
ConnectWidget( list_item );
gtk_widget_show( list_item );
#endif // 0
}
m_parent->DoAddChild( this );
@@ -393,129 +348,73 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos)
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
// code elsewhere supposes we have as many items in m_clientData as items
// in the listbox
wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") );
GList *children = m_list->children;
int length = g_list_length(children);
wxCHECK_RET( pos <= length, wxT("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
// all items after this position, then append these items and then
// reappend back the old ones.
// VZ: notice that InsertItems knows nothing about sorting, so calling it
// from outside (and not from our own Append) is likely to break
// everything
size_t nItems = items.GetCount();
size_t n; // loop var
// optimise for this trivial case
if ( pos == length )
{
// no need to do anything complicated
for ( n = 0; n < nItems; n++ )
{
AppendWithoutSorting(items[n]);
m_clientData.Append((wxObject *)NULL);
}
wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
// code elsewhere supposes we have as many items in m_clientList as items
// in the listbox
wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") );
return;
}
GList *children = m_list->children;
int length = g_list_length(children);
// remove the old items
wxArrayString deletedLabels;
#if wxUSE_CHECKLISTBOX
wxArrayInt deletedChecks;
#endif
wxCHECK_RET( pos <= length, wxT("invalid index in wxListBox::InsertItems") );
GList *child = g_list_nth( children, pos );
for ( n = 0; child != NULL; n++, child = child->next )
size_t nItems = items.GetCount();
if (pos == length)
{
// save label
GtkBin *bin = GTK_BIN( child->data );
GtkLabel *label = GTK_LABEL( bin->child );
wxString str(GET_REAL_LABEL(label->label),*wxConvCurrent);
deletedLabels.Add(str);
#if wxUSE_CHECKLISTBOX
// save check state
if ( m_hasCheckBoxes )
for ( size_t n = 0; n < nItems; n++ )
{
deletedChecks.Add(((wxCheckListBox *)this)->IsChecked(pos + n));
GtkAddItem( items[n] );
m_clientList.Append((wxObject *)NULL);
}
#endif // wxUSE_CHECKLISTBOX
}
size_t nDeletedCount = n;
gtk_list_clear_items( m_list, pos, length );
// now append the new items
wxNode *node = m_clientData.Item(pos);
for ( n = 0; n < nItems; n++ )
else
{
AppendWithoutSorting(items[n]);
// make sure we have the correct number of items in this list
m_clientData.Insert(node, (wxObject *)NULL);
}
// and append the old items too
pos += nItems; // now the indices are shifted
for ( n = 0; n < nDeletedCount; n++ )
wxNode *node = m_clientList.Nth( pos );
for ( size_t n = 0; n < nItems; n++ )
{
AppendWithoutSorting(deletedLabels[n]);
GtkAddItem( items[n], pos+n );
// the data is already correct - the indices have been rearranged in
// such manner that we now correspond to the same node as before
#if wxUSE_CHECKLISTBOX
if ( m_hasCheckBoxes )
{
((wxCheckListBox *)this)->Check(pos + n, (bool)deletedChecks[n]);
m_clientList.Insert( node, (wxObject *)NULL );
}
#endif // wxUSE_CHECKLISTBOX
}
wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") );
}
int wxListBox::DoAppend( const wxString& item )
{
int index;
if (m_strings)
{
// need to determine the index
index = m_strings->Add(item);
int index = m_strings->Add( item );
InsertItems(1, &item, index);
}
else
// only if not at the end anyway
if (index != GetCount())
{
// not sorted, just append
AppendWithoutSorting(item);
GtkAddItem( item, index );
m_clientData.Append((wxObject *)NULL);
index = GetCount() - 1;
}
wxNode *node = m_clientList.Nth( index );
m_clientList.Insert( node, (wxObject *)NULL );
return index;
}
}
void wxListBox::AppendWithoutSorting( const wxString &item )
GtkAddItem(item);
m_clientList.Append((wxObject *)NULL);
return GetCount() - 1;
}
void wxListBox::GtkAddItem( const wxString &item, int pos )
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
@@ -531,7 +430,13 @@ void wxListBox::AppendWithoutSorting( const wxString &item )
list_item = gtk_list_item_new_with_label( label.mbc_str() );
gtk_container_add( GTK_CONTAINER(m_list), list_item );
GList *gitem_list = g_list_alloc ();
gitem_list->data = list_item;
if (pos == -1)
gtk_list_append_items( GTK_LIST (m_list), gitem_list );
else
gtk_list_insert_items( GTK_LIST (m_list), gitem_list, pos );
gtk_signal_connect( GTK_OBJECT(list_item), "select",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
@@ -569,21 +474,15 @@ void wxListBox::AppendWithoutSorting( const wxString &item )
gtk_widget_realize( list_item );
gtk_widget_realize( GTK_BIN(list_item)->child );
//if (m_widgetStyle) ApplyWidgetStyle();
if (m_widgetStyle) {
// Apply current widget style to the new list_item
if (m_widgetStyle)
{
gtk_widget_set_style( GTK_WIDGET( list_item ), m_widgetStyle );
GtkBin *bin = GTK_BIN( list_item );
GtkWidget *label = GTK_WIDGET( bin->child );
gtk_widget_set_style( label, m_widgetStyle );
}
#if wxUSE_DRAG_AND_DROP
#ifndef NEW_GTK_DND_CODE
if (m_dropTarget) m_dropTarget->RegisterWidget( list_item );
#endif
#endif
#if wxUSE_TOOLTIPS
if (m_tooltip) m_tooltip->Apply( this );
#endif
@@ -615,7 +514,7 @@ void wxListBox::DoSetItemClientData( int n, void* clientData )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_RET( node, wxT("invalid index in wxListBox::DoSetItemClientData") );
node->SetData( (wxObject*) clientData );
@@ -625,7 +524,7 @@ void* wxListBox::DoGetItemClientData( int n ) const
{
wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_MSG( node, NULL, wxT("invalid index in wxListBox::DoGetItemClientData") );
return node->Data();
@@ -635,7 +534,7 @@ void wxListBox::DoSetItemClientObject( int n, wxClientData* clientData )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_RET( node, wxT("invalid index in wxListBox::DoSetItemClientObject") );
wxClientData *cd = (wxClientData*) node->Data();
@@ -648,7 +547,7 @@ wxClientData* wxListBox::DoGetItemClientObject( int n ) const
{
wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, wxT("invalid listbox control") );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
wxCHECK_MSG( node, (wxClientData *)NULL,
wxT("invalid index in wxListBox::DoGetItemClientObject") );
@@ -666,14 +565,14 @@ void wxListBox::Clear()
// destroy the data (due to Robert's idea of using wxList<wxObject>
// and not wxList<wxClientData> we can't just say
// m_clientList.DeleteContents(TRUE) - this would crash!
wxNode *node = m_clientData.First();
wxNode *node = m_clientList.First();
while ( node )
{
delete (wxClientData *)node->Data();
node = node->Next();
}
}
m_clientData.Clear();
m_clientList.Clear();
if ( m_strings )
m_strings->Clear();
@@ -691,7 +590,7 @@ void wxListBox::Delete( int n )
gtk_list_remove_items( m_list, list );
g_list_free( list );
wxNode *node = m_clientData.Nth( n );
wxNode *node = m_clientList.Nth( n );
if ( node )
{
if ( m_clientDataItemsType == ClientData_Object )
@@ -700,7 +599,7 @@ void wxListBox::Delete( int n )
delete cd;
}
m_clientData.DeleteNode( node );
m_clientList.DeleteNode( node );
}
if ( m_strings )
@@ -760,15 +659,8 @@ int wxListBox::GetCount() const
{
wxCHECK_MSG( m_list != NULL, -1, wxT("invalid listbox") );
GList *child = m_list->children;
int count = 0;
while (child)
{
count++;
child = child->next;
}
return count;
GList *children = m_list->children;
return g_list_length(children);
}
int wxListBox::FindString( const wxString &item ) const
@@ -869,14 +761,14 @@ void wxListBox::SetSelection( int n, bool select )
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
DisableEvents();
GtkDisableEvents();
if (select)
gtk_list_select_item( m_list, n );
else
gtk_list_unselect_item( m_list, n );
EnableEvents();
GtkEnableEvents();
}
void wxListBox::DoSetFirstItem( int WXUNUSED(n) )
@@ -888,7 +780,7 @@ void wxListBox::DoSetFirstItem( int WXUNUSED(n) )
// helpers
// ----------------------------------------------------------------------------
int wxListBox::GetIndex( GtkWidget *item ) const
int wxListBox::GtkGetIndex( GtkWidget *item ) const
{
if (item)
{
@@ -916,40 +808,7 @@ void wxListBox::ApplyToolTip( GtkTooltips *tips, const wxChar *tip )
}
#endif // wxUSE_TOOLTIPS
#if wxUSE_DRAG_AND_DROP
void wxListBox::SetDropTarget( wxDropTarget *dropTarget )
{
wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );
#ifndef NEW_GTK_DND_CODE
if (m_dropTarget)
{
GList *child = m_list->children;
while (child)
{
m_dropTarget->UnregisterWidget( GTK_WIDGET( child->data ) );
child = child->next;
}
}
#endif
wxWindow::SetDropTarget( dropTarget );
#ifndef NEW_GTK_DND_CODE
if (m_dropTarget)
{
GList *child = m_list->children;
while (child)
{
m_dropTarget->RegisterWidget( GTK_WIDGET( child->data ) );
child = child->next;
}
}
#endif
}
#endif
void wxListBox::DisableEvents()
void wxListBox::GtkDisableEvents()
{
GList *child = m_list->children;
while (child)
@@ -965,7 +824,7 @@ void wxListBox::DisableEvents()
}
}
void wxListBox::EnableEvents()
void wxListBox::GtkEnableEvents()
{
GList *child = m_list->children;
while (child)

View File

@@ -281,7 +281,6 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
{
style = style | wxSIMPLE_BORDER;
style = style | wxCAPTION;
style = style | wxSYSTEM_MENU;
if ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT))
m_miniTitle = 13;

View File

@@ -849,7 +849,7 @@ SQLDriverConnect (
break;
}
sprintf (cnstr2drv, "DSN=%s;", dsn);
sprintf ((char*)cnstr2drv, "DSN=%s;", dsn);
cbConnStrIn += STRLEN (cnstr2drv);
STRNCAT (cnstr2drv, szConnStrIn, cbConnStrIn);
szConnStrIn = cnstr2drv;

View File

@@ -198,7 +198,7 @@ SQLDataSources (
* And find the description that goes with this entry
*/
_iodbcdm_getkeyvalbydsn (sect[cur_entry], strlen (sect[cur_entry]),
"Description", szDesc, cbDescMax);
"Description", (char*) szDesc, cbDescMax);
/*
* Next record

View File

@@ -124,7 +124,7 @@ public:
// NB: this won't result in DISCONNECTED event being sent
virtual bool CancelDialing();
unsigned int GetISPNames(class wxArrayString &) const
size_t GetISPNames(class wxArrayString &) const
{ return 0; }
// sometimes the built-in logic for determining the online status may fail,

View File

@@ -906,7 +906,7 @@ void _GSocket_Detected_Write(GSocket *socket)
socket->m_establishing = FALSE;
len = sizeof(error);
getsockopt(socket->m_fd, SOL_SOCKET, SO_ERROR, &error, &len);
getsockopt(socket->m_fd, SOL_SOCKET, SO_ERROR, (void*) &error, &len);
if (error)
{

View File

@@ -104,9 +104,8 @@ class wxFloatBar(wxToolBar):
self.floatframe.SetToolBar(self)
self.oldcolor = self.GetBackgroundColour()
barsize = self.GetSizeTuple()
# self.floatframe.SetSize(wxSize(barsize[0], barsize[1] + self.titleheight))
# self.floatframe.SetClientSize(wxSize(barsize[0], barsize[1]))
self.floatframe.SetClientSize(wxSize(50,200))
self.floatframe.SetSize(wxSize(barsize[0], barsize[1] + self.titleheight))
self.floatframe.SetClientSize(wxSize(barsize[0], barsize[1]))
newpos = self.parentframe.GetPosition()
newpos.y = newpos.y + self.titleheight
self.floatframe.SetPosition(newpos)