]> git.saurik.com Git - wxWidgets.git/commitdiff
Small distrib changes,
authorRobert Roebling <robert@roebling.de>
Sun, 24 Oct 1999 16:45:01 +0000 (16:45 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 24 Oct 1999 16:45:01 +0000 (16:45 +0000)
  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

30 files changed:
Makefile.in
distrib/msw/tmake/filelist.txt
docs/gtk/changes.txt
include/wx/gtk/listbox.h
include/wx/gtk1/listbox.h
samples/controls/controls.cpp
samples/text/text.cpp
src/common/parser.y
src/common/unzip.c
src/gtk/checklst.cpp
src/gtk/choice.cpp
src/gtk/clipbrd.cpp
src/gtk/dialog.cpp
src/gtk/dnd.cpp
src/gtk/frame.cpp
src/gtk/listbox.cpp
src/gtk/minifram.cpp
src/gtk1/checklst.cpp
src/gtk1/choice.cpp
src/gtk1/clipbrd.cpp
src/gtk1/dialog.cpp
src/gtk1/dnd.cpp
src/gtk1/frame.cpp
src/gtk1/listbox.cpp
src/gtk1/minifram.cpp
src/iodbc/connect.c
src/iodbc/info.c
src/unix/dialup.cpp
src/unix/gsocket.c
utils/wxPython/lib/floatbar.py

index 3a0bc3c7bf0d2f98c35bdf21264701cecba1b728..bda488d282bbe210a89c5f07b2628bcf3458ef69 100644 (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 \
index 522a7118a6a8c6ef5346adc6d0667ee6f69aada2..aa6741eacd5e74aec37144e1796448a8e155786a 100644 (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
index d82d9eba548cbec9399bf2cabf1b3a96d31c4aec..994e93fc20259abc2ec3e44d13f4950ba610c16c 100644 (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.
 
index 10b0107526e0372d481a7e7fe0912856855cdfef..8038c9c0abc6a154539704c6041547f92448808e 100644 (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;
index 10b0107526e0372d481a7e7fe0912856855cdfef..8038c9c0abc6a154539704c6041547f92448808e 100644 (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;
index 2336b8c823bec8a441538b6858e64ebef7bd518b..033f8af167507c0cbddd93e7a16d28c98f337e97 100644 (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 );
 
index bac4d8c3e96d4122ac6445967fa4aba2b2153b76..4d26e23e961bc83345ec2b56a547d6b32f2f9114 100644 (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";
index ceed318c739e593ca2d91855d1dbe501d9209844..a4ff9ccc50c5389f014917b7ef3e6a4fac7b95ba 100644 (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__)
index 54ced0c33b4b20dd1e3adc318d540eb8b7686b58..ea45682d966f2eabe5ce5b08c93b9adf3e9e98f8 100644 (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
index de5d9618595cb22fc6c2b4ab90b0bb3e98b06875..8d1d92f1f33e9614f1a2f42a4236f3a47731075c 100644 (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') );
index e1868bbd1c1f70d37fccd8ce0d6e1eec0a6067b2..b772e750a81ade70652d3fdf650423f1fc4325e8 100644 (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))
index 186f15bcf4b0840c3b0b6c23aeccf06924ca9019..1800ae26852148a26ad9e7d8b28b5026a0d2c5bb 100644 (file)
@@ -94,6 +94,11 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
         clipboard->m_waiting = FALSE;
         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;
@@ -101,7 +106,11 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
     for (unsigned int i=0; i<selection_data->length/sizeof(GdkAtom); i++)
     {
         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,32 +409,23 @@ 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 */
-           
-        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, 
-                              0 );  /* what is info ? */
+        wxLogDebug( wxT("wxClipboard now supports atom %s"), array[i].GetId().c_str() );
+
+        gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
+                                 clipboard,
+                                  array[i], 
+                                  0 );  /* what is info ? */
     }
 
     delete[] array;
@@ -434,41 +436,26 @@ bool wxClipboard::AddData( wxDataObject *data )
                         (gpointer) NULL );
 
 #if wxUSE_THREADS
-        /* disable GUI threads */
-        wxapp_uninstall_thread_wakeup();
+    /* disable GUI threads */
+    wxapp_uninstall_thread_wakeup();
 #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;
index 7cf4f752b5802972d2807c6d7b2ed7425bf13cb8..e51c6cb3db7d0c63c23b6fc8cf73f078ae6e49b8 100644 (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;
index 6ab59511ca48ae2371c2452ccb480619f6526115..fbd0ec5b86f7cee4c9b943c7449ef3455c7cc298 100644 (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 ))
index ab29ed1cb3a88cd0aea3830e1645897e048ba520..7cbd3ec7d2017da9a94599ea1369acbb8b075457 100644 (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 );
index 82b5bb21c0f4a16fff4acc8b0cc41e5661895680..ae049dada82b7515e71eb127d0c798a9d635275c 100644 (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
+    // VZ: notice that InsertItems knows nothing about sorting, so calling it
+    //     from outside (and not from our own Append) is likely to break
+    //     everything
+
+    // code elsewhere supposes we have as many items in m_clientList as items
     // in the listbox
-    wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
+    wxASSERT_MSG( m_clientList.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 )
+    if (pos == length)
     {
-        // no need to do anything complicated
-        for ( n = 0; n < nItems; n++ )
+        for ( size_t n = 0; n < nItems; n++ )
         {
-            AppendWithoutSorting(items[n]);
+            GtkAddItem( items[n] );
 
-            m_clientData.Append((wxObject *)NULL);
+            m_clientList.Append((wxObject *)NULL);
         }
-
-        wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
-                      wxT("bug in client data management") );
-
-        return;
     }
-
-    // remove the old items
-    wxArrayString deletedLabels;
-#if wxUSE_CHECKLISTBOX
-    wxArrayInt deletedChecks;
-#endif
-
-    GList *child = g_list_nth( children, pos );
-    for ( n = 0; child != NULL; n++, child = child->next )
+    else
     {
-        // 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 )
+        wxNode *node = m_clientList.Nth( pos );
+        for ( size_t n = 0; n < nItems; n++ )
         {
-            deletedChecks.Add(((wxCheckListBox *)this)->IsChecked(pos + n));
-        }
-#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++ )
-    {
-        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++ )
-    {
-        AppendWithoutSorting(deletedLabels[n]);
-
-        // the data is already correct - the indices have been rearranged in
-        // such manner that we now correspond to the same node as before
+            GtkAddItem( items[n], pos+n );
 
-#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(),
-                  wxT("bug in client data management") );
+    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 )
+    if (m_strings)
     {
         // need to determine the index
-        index = m_strings->Add(item);
-
-        InsertItems(1, &item, index);
+        int index = m_strings->Add( item );
+       
+       // only if not at the end anyway
+       if (index != GetCount())
+       {
+          GtkAddItem( item, index );
+          
+          wxNode *node = m_clientList.Nth( index );
+           m_clientList.Insert( node, (wxObject *)NULL );
+          
+          return index;
+       }
     }
-    else
-    {
-        // not sorted, just append
-        AppendWithoutSorting(item);
+    
+    GtkAddItem(item);
 
-        m_clientData.Append((wxObject *)NULL);
+    m_clientList.Append((wxObject *)NULL);
 
-        index = GetCount() - 1;
-    }
-
-    return index;
+    return GetCount() - 1;
 }
 
-void wxListBox::AppendWithoutSorting( const wxString &item )
+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
+        // 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)
index 9fa95cf91801c92effd3f79ef8f852924cf92a7b..26a08dea2349c388801c9c52fedb969c66ca34ea 100644 (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;
index de5d9618595cb22fc6c2b4ab90b0bb3e98b06875..8d1d92f1f33e9614f1a2f42a4236f3a47731075c 100644 (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') );
index e1868bbd1c1f70d37fccd8ce0d6e1eec0a6067b2..b772e750a81ade70652d3fdf650423f1fc4325e8 100644 (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))
index 186f15bcf4b0840c3b0b6c23aeccf06924ca9019..1800ae26852148a26ad9e7d8b28b5026a0d2c5bb 100644 (file)
@@ -94,6 +94,11 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
         clipboard->m_waiting = FALSE;
         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;
@@ -101,7 +106,11 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
     for (unsigned int i=0; i<selection_data->length/sizeof(GdkAtom); i++)
     {
         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,32 +409,23 @@ 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 */
-           
-        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, 
-                              0 );  /* what is info ? */
+        wxLogDebug( wxT("wxClipboard now supports atom %s"), array[i].GetId().c_str() );
+
+        gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
+                                 clipboard,
+                                  array[i], 
+                                  0 );  /* what is info ? */
     }
 
     delete[] array;
@@ -434,41 +436,26 @@ bool wxClipboard::AddData( wxDataObject *data )
                         (gpointer) NULL );
 
 #if wxUSE_THREADS
-        /* disable GUI threads */
-        wxapp_uninstall_thread_wakeup();
+    /* disable GUI threads */
+    wxapp_uninstall_thread_wakeup();
 #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;
index 7cf4f752b5802972d2807c6d7b2ed7425bf13cb8..e51c6cb3db7d0c63c23b6fc8cf73f078ae6e49b8 100644 (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;
index 6ab59511ca48ae2371c2452ccb480619f6526115..fbd0ec5b86f7cee4c9b943c7449ef3455c7cc298 100644 (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 ))
index ab29ed1cb3a88cd0aea3830e1645897e048ba520..7cbd3ec7d2017da9a94599ea1369acbb8b075457 100644 (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 );
index 82b5bb21c0f4a16fff4acc8b0cc41e5661895680..ae049dada82b7515e71eb127d0c798a9d635275c 100644 (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
+    // VZ: notice that InsertItems knows nothing about sorting, so calling it
+    //     from outside (and not from our own Append) is likely to break
+    //     everything
+
+    // code elsewhere supposes we have as many items in m_clientList as items
     // in the listbox
-    wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
+    wxASSERT_MSG( m_clientList.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 )
+    if (pos == length)
     {
-        // no need to do anything complicated
-        for ( n = 0; n < nItems; n++ )
+        for ( size_t n = 0; n < nItems; n++ )
         {
-            AppendWithoutSorting(items[n]);
+            GtkAddItem( items[n] );
 
-            m_clientData.Append((wxObject *)NULL);
+            m_clientList.Append((wxObject *)NULL);
         }
-
-        wxASSERT_MSG( m_clientData.GetCount() == (size_t)GetCount(),
-                      wxT("bug in client data management") );
-
-        return;
     }
-
-    // remove the old items
-    wxArrayString deletedLabels;
-#if wxUSE_CHECKLISTBOX
-    wxArrayInt deletedChecks;
-#endif
-
-    GList *child = g_list_nth( children, pos );
-    for ( n = 0; child != NULL; n++, child = child->next )
+    else
     {
-        // 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 )
+        wxNode *node = m_clientList.Nth( pos );
+        for ( size_t n = 0; n < nItems; n++ )
         {
-            deletedChecks.Add(((wxCheckListBox *)this)->IsChecked(pos + n));
-        }
-#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++ )
-    {
-        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++ )
-    {
-        AppendWithoutSorting(deletedLabels[n]);
-
-        // the data is already correct - the indices have been rearranged in
-        // such manner that we now correspond to the same node as before
+            GtkAddItem( items[n], pos+n );
 
-#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(),
-                  wxT("bug in client data management") );
+    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 )
+    if (m_strings)
     {
         // need to determine the index
-        index = m_strings->Add(item);
-
-        InsertItems(1, &item, index);
+        int index = m_strings->Add( item );
+       
+       // only if not at the end anyway
+       if (index != GetCount())
+       {
+          GtkAddItem( item, index );
+          
+          wxNode *node = m_clientList.Nth( index );
+           m_clientList.Insert( node, (wxObject *)NULL );
+          
+          return index;
+       }
     }
-    else
-    {
-        // not sorted, just append
-        AppendWithoutSorting(item);
+    
+    GtkAddItem(item);
 
-        m_clientData.Append((wxObject *)NULL);
+    m_clientList.Append((wxObject *)NULL);
 
-        index = GetCount() - 1;
-    }
-
-    return index;
+    return GetCount() - 1;
 }
 
-void wxListBox::AppendWithoutSorting( const wxString &item )
+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
+        // 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)
index 9fa95cf91801c92effd3f79ef8f852924cf92a7b..26a08dea2349c388801c9c52fedb969c66ca34ea 100644 (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;
index b444f77c5e20f3808ec3d230fb4bc952afb780f6..bd803f7c0e12c7363637dabaf70811ddabe2569f 100644 (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;
index 0c8fda5ec3f3e8cccfdd206150e85f70c5dbfbb8..f64c08189893f972f7b9e53ea46afc8c7294e602 100644 (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
index d97ea360414bf4002022f300e93453d666b5aca1..6dc56717be94ec644991ce7199546d36fb623c84 100644 (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,
index 1d0c60ec76bf672fd396bb2e3e8c1f7a7a385380..587395297c9c53a4b55369b52d7d952d86642b7a 100644 (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)
     {
index ce846b4a2280c2642ae3c0f0e89b48fd0da7f8e6..fefca18e5985fcb7fc4a99fbde025bc71c4dc17a 100644 (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)