From aeeb6a44d137741e69f714566780dc5ba2699f81 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Fri, 18 Dec 1998 15:49:10 +0000 Subject: [PATCH] wxClipboard now serves the primary selection as well wxPython fixes warning mesages git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1239 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/clipbrd.h | 6 ++-- include/wx/gtk/menu.h | 2 +- include/wx/gtk1/clipbrd.h | 6 ++-- include/wx/gtk1/menu.h | 2 +- src/gtk/clipbrd.cpp | 58 ++++++++++++++++++++++++++++++++---- src/gtk/palette.cpp | 14 +++++++-- src/gtk1/clipbrd.cpp | 58 ++++++++++++++++++++++++++++++++---- src/gtk1/palette.cpp | 14 +++++++-- utils/wxPython/src/Setup | 41 +++++++++++++++++++++++++ utils/wxPython/src/gdi.i | 25 +++++++++------- utils/wxPython/src/windows.i | 8 ++++- 11 files changed, 196 insertions(+), 38 deletions(-) create mode 100644 utils/wxPython/src/Setup diff --git a/include/wx/gtk/clipbrd.h b/include/wx/gtk/clipbrd.h index 5f7a92eead..f34bcb9f8d 100644 --- a/include/wx/gtk/clipbrd.h +++ b/include/wx/gtk/clipbrd.h @@ -73,10 +73,10 @@ public: bool m_open; + bool m_ownsClipboard; + bool m_ownsPrimarySelection; + wxList m_dataObjects; - char *m_sentString, - *m_receivedString; - void *m_receivedTargets; GtkWidget *m_clipboardWidget; bool m_formatSupported; diff --git a/include/wx/gtk/menu.h b/include/wx/gtk/menu.h index 71a9fde5b3..a4656258ed 100644 --- a/include/wx/gtk/menu.h +++ b/include/wx/gtk/menu.h @@ -49,7 +49,7 @@ public: int FindMenuItem( const wxString &menuString, const wxString &itemString ) const; wxMenuItem* FindMenuItemById( int id ) const; - inline wxMenuItem* FindMenuItemForId( int id ) const + inline wxMenuItem* FindItemForId( int id ) const { return FindMenuItemById( id ); } void Check( int id, bool check ); diff --git a/include/wx/gtk1/clipbrd.h b/include/wx/gtk1/clipbrd.h index 5f7a92eead..f34bcb9f8d 100644 --- a/include/wx/gtk1/clipbrd.h +++ b/include/wx/gtk1/clipbrd.h @@ -73,10 +73,10 @@ public: bool m_open; + bool m_ownsClipboard; + bool m_ownsPrimarySelection; + wxList m_dataObjects; - char *m_sentString, - *m_receivedString; - void *m_receivedTargets; GtkWidget *m_clipboardWidget; bool m_formatSupported; diff --git a/include/wx/gtk1/menu.h b/include/wx/gtk1/menu.h index 71a9fde5b3..a4656258ed 100644 --- a/include/wx/gtk1/menu.h +++ b/include/wx/gtk1/menu.h @@ -49,7 +49,7 @@ public: int FindMenuItem( const wxString &menuString, const wxString &itemString ) const; wxMenuItem* FindMenuItemById( int id ) const; - inline wxMenuItem* FindMenuItemForId( int id ) const + inline wxMenuItem* FindItemForId( int id ) const { return FindMenuItemById( id ); } void Check( int id, bool check ); diff --git a/src/gtk/clipbrd.cpp b/src/gtk/clipbrd.cpp index f0110301a8..f220a49abd 100644 --- a/src/gtk/clipbrd.cpp +++ b/src/gtk/clipbrd.cpp @@ -152,14 +152,32 @@ selection_received( GtkWidget *WXUNUSED(widget), //----------------------------------------------------------------------------- static gint -selection_clear( GtkWidget *WXUNUSED(widget), GdkEventSelection *WXUNUSED(event) ) +selection_clear_clip( GtkWidget *WXUNUSED(widget), GdkEventSelection *event ) { if (!wxTheClipboard) return TRUE; - // the clipboard is no longer in our hands. we have to delete the - // clipboard data. + if (event->selection == GDK_SELECTION_PRIMARY) + { + wxTheClipboard->m_ownsPrimarySelection = FALSE; + } + else + if (event->selection == g_clipboardAtom) + { + wxTheClipboard->m_ownsClipboard = FALSE; + } + else + { + return FALSE; + } - wxTheClipboard->m_dataObjects.Clear(); + if ((!wxTheClipboard->m_ownsPrimarySelection) && + (!wxTheClipboard->m_ownsClipboard)) + { + // the clipboard is no longer in our hands. we can the + // clipboard data. + + wxTheClipboard->m_dataObjects.Clear(); + } return TRUE; } @@ -247,6 +265,9 @@ wxClipboard::wxClipboard() { m_open = FALSE; + m_ownsClipboard = FALSE; + m_ownsPrimarySelection = FALSE; + m_dataObjects.DeleteContents( TRUE ); m_receivedData = (wxDataObject*) NULL; @@ -256,7 +277,7 @@ wxClipboard::wxClipboard() gtk_signal_connect( GTK_OBJECT(m_clipboardWidget), "selection_clear_event", - GTK_SIGNAL_FUNC( selection_clear ), + GTK_SIGNAL_FUNC( selection_clear_clip ), (gpointer) NULL ); if (!g_clipboardAtom) g_clipboardAtom = gdk_atom_intern( "CLIPBOARD", FALSE ); @@ -281,11 +302,16 @@ void wxClipboard::Clear() /* As we have data we also own the clipboard. Once we no longer own it, clear_selection is called which will set m_data to zero */ - if (gdk_selection_owner_get( g_clipboardAtom) == m_clipboardWidget->window) + if (gdk_selection_owner_get( g_clipboardAtom ) == m_clipboardWidget->window) { gtk_selection_owner_set( (GtkWidget*) NULL, g_clipboardAtom, GDK_CURRENT_TIME ); } + if (gdk_selection_owner_get( GDK_SELECTION_PRIMARY ) == m_clipboardWidget->window) + { + gtk_selection_owner_set( (GtkWidget*) NULL, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME ); + } + m_dataObjects.Clear(); } @@ -339,7 +365,12 @@ bool wxClipboard::SetData( wxDataObject *data ) { data->m_formatAtom = GetTargetAtom( data->GetFormat() ); } + + // This should happen automatically + m_ownsClipboard = FALSE; + m_ownsPrimarySelection = FALSE; + // Add handlers if someone requests data gtk_selection_add_handler( m_clipboardWidget, @@ -348,6 +379,12 @@ bool wxClipboard::SetData( wxDataObject *data ) selection_handler, NULL ); + gtk_selection_add_handler( m_clipboardWidget, + GDK_SELECTION_PRIMARY, + data->m_formatAtom, + selection_handler, + NULL ); + // Tell the world we offer clipboard data if (!gtk_selection_owner_set( m_clipboardWidget, @@ -356,6 +393,15 @@ bool wxClipboard::SetData( wxDataObject *data ) { return FALSE; } + m_ownsClipboard = TRUE; + + if (!gtk_selection_owner_set( m_clipboardWidget, + GDK_SELECTION_PRIMARY, + GDK_CURRENT_TIME )) + { + return FALSE; + } + m_ownsPrimarySelection = TRUE; return TRUE; } diff --git a/src/gtk/palette.cpp b/src/gtk/palette.cpp index 07d99dc13c..c94a33616d 100644 --- a/src/gtk/palette.cpp +++ b/src/gtk/palette.cpp @@ -86,21 +86,29 @@ bool wxPalette::Ok(void) const return (m_refData); }; -bool wxPalette::Create( int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue) +bool wxPalette::Create( int WXUNUSED(n), + const unsigned char *WXUNUSED(red), + const unsigned char *WXUNUSED(green), + const unsigned char *WXUNUSED(blue) ) { wxFAIL_MSG("not implemented"); return FALSE; }; -int wxPalette::GetPixel( const unsigned char red, const unsigned char green, const unsigned char blue ) const +int wxPalette::GetPixel( const unsigned char WXUNUSED(red), + const unsigned char WXUNUSED(green), + const unsigned char WXUNUSED(blue) ) const { wxFAIL_MSG("not implemented"); return 0; }; -bool wxPalette::GetRGB( int pixel, unsigned char *red, unsigned char *green, unsigned char *blue ) const +bool wxPalette::GetRGB( int WXUNUSED(pixel), + unsigned char *WXUNUSED(red), + unsigned char *WXUNUSED(green), + unsigned char *WXUNUSED(blue) ) const { wxFAIL_MSG("not implemented"); diff --git a/src/gtk1/clipbrd.cpp b/src/gtk1/clipbrd.cpp index f0110301a8..f220a49abd 100644 --- a/src/gtk1/clipbrd.cpp +++ b/src/gtk1/clipbrd.cpp @@ -152,14 +152,32 @@ selection_received( GtkWidget *WXUNUSED(widget), //----------------------------------------------------------------------------- static gint -selection_clear( GtkWidget *WXUNUSED(widget), GdkEventSelection *WXUNUSED(event) ) +selection_clear_clip( GtkWidget *WXUNUSED(widget), GdkEventSelection *event ) { if (!wxTheClipboard) return TRUE; - // the clipboard is no longer in our hands. we have to delete the - // clipboard data. + if (event->selection == GDK_SELECTION_PRIMARY) + { + wxTheClipboard->m_ownsPrimarySelection = FALSE; + } + else + if (event->selection == g_clipboardAtom) + { + wxTheClipboard->m_ownsClipboard = FALSE; + } + else + { + return FALSE; + } - wxTheClipboard->m_dataObjects.Clear(); + if ((!wxTheClipboard->m_ownsPrimarySelection) && + (!wxTheClipboard->m_ownsClipboard)) + { + // the clipboard is no longer in our hands. we can the + // clipboard data. + + wxTheClipboard->m_dataObjects.Clear(); + } return TRUE; } @@ -247,6 +265,9 @@ wxClipboard::wxClipboard() { m_open = FALSE; + m_ownsClipboard = FALSE; + m_ownsPrimarySelection = FALSE; + m_dataObjects.DeleteContents( TRUE ); m_receivedData = (wxDataObject*) NULL; @@ -256,7 +277,7 @@ wxClipboard::wxClipboard() gtk_signal_connect( GTK_OBJECT(m_clipboardWidget), "selection_clear_event", - GTK_SIGNAL_FUNC( selection_clear ), + GTK_SIGNAL_FUNC( selection_clear_clip ), (gpointer) NULL ); if (!g_clipboardAtom) g_clipboardAtom = gdk_atom_intern( "CLIPBOARD", FALSE ); @@ -281,11 +302,16 @@ void wxClipboard::Clear() /* As we have data we also own the clipboard. Once we no longer own it, clear_selection is called which will set m_data to zero */ - if (gdk_selection_owner_get( g_clipboardAtom) == m_clipboardWidget->window) + if (gdk_selection_owner_get( g_clipboardAtom ) == m_clipboardWidget->window) { gtk_selection_owner_set( (GtkWidget*) NULL, g_clipboardAtom, GDK_CURRENT_TIME ); } + if (gdk_selection_owner_get( GDK_SELECTION_PRIMARY ) == m_clipboardWidget->window) + { + gtk_selection_owner_set( (GtkWidget*) NULL, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME ); + } + m_dataObjects.Clear(); } @@ -339,7 +365,12 @@ bool wxClipboard::SetData( wxDataObject *data ) { data->m_formatAtom = GetTargetAtom( data->GetFormat() ); } + + // This should happen automatically + m_ownsClipboard = FALSE; + m_ownsPrimarySelection = FALSE; + // Add handlers if someone requests data gtk_selection_add_handler( m_clipboardWidget, @@ -348,6 +379,12 @@ bool wxClipboard::SetData( wxDataObject *data ) selection_handler, NULL ); + gtk_selection_add_handler( m_clipboardWidget, + GDK_SELECTION_PRIMARY, + data->m_formatAtom, + selection_handler, + NULL ); + // Tell the world we offer clipboard data if (!gtk_selection_owner_set( m_clipboardWidget, @@ -356,6 +393,15 @@ bool wxClipboard::SetData( wxDataObject *data ) { return FALSE; } + m_ownsClipboard = TRUE; + + if (!gtk_selection_owner_set( m_clipboardWidget, + GDK_SELECTION_PRIMARY, + GDK_CURRENT_TIME )) + { + return FALSE; + } + m_ownsPrimarySelection = TRUE; return TRUE; } diff --git a/src/gtk1/palette.cpp b/src/gtk1/palette.cpp index 07d99dc13c..c94a33616d 100644 --- a/src/gtk1/palette.cpp +++ b/src/gtk1/palette.cpp @@ -86,21 +86,29 @@ bool wxPalette::Ok(void) const return (m_refData); }; -bool wxPalette::Create( int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue) +bool wxPalette::Create( int WXUNUSED(n), + const unsigned char *WXUNUSED(red), + const unsigned char *WXUNUSED(green), + const unsigned char *WXUNUSED(blue) ) { wxFAIL_MSG("not implemented"); return FALSE; }; -int wxPalette::GetPixel( const unsigned char red, const unsigned char green, const unsigned char blue ) const +int wxPalette::GetPixel( const unsigned char WXUNUSED(red), + const unsigned char WXUNUSED(green), + const unsigned char WXUNUSED(blue) ) const { wxFAIL_MSG("not implemented"); return 0; }; -bool wxPalette::GetRGB( int pixel, unsigned char *red, unsigned char *green, unsigned char *blue ) const +bool wxPalette::GetRGB( int WXUNUSED(pixel), + unsigned char *WXUNUSED(red), + unsigned char *WXUNUSED(green), + unsigned char *WXUNUSED(blue) ) const { wxFAIL_MSG("not implemented"); diff --git a/utils/wxPython/src/Setup b/utils/wxPython/src/Setup new file mode 100644 index 0000000000..c6c17419b3 --- /dev/null +++ b/utils/wxPython/src/Setup @@ -0,0 +1,41 @@ +# This file gives the details of what is needed to build this extension +# module so the Makefile can be created. + +### +### This file should be created by configure. Currently it is tweaked by hand. +### + +*shared* + +CCC=g++ +WXWIN=~/wxWindows +GENCODEDIR=gtk +srcdir=$(GENCODEDIR) +WX_CONFIG_CFLAGS=`wx-config --cflags` +WX_CONFIG_LIBS=`wx-config --libs` + +# Depending on how your Python was built, you may have to set this +# value to use the C++ driver to link with instead of the default +# C driver. For example: +MY_LDSHARED=$(CCC) -shared $(WX_CONFIG_LIBS) + +# Same as above, but for statically linking Python and wxPython together, +# in other words, if you comment out the *shared* above. If this is the +# case then you should ensure that the main() function is Python's, not +# wxWindows'. You can rebuild $(WXWIN)/src/gtk/app.cpp with NOMAIN defined +# to force this... +MY_LINKCC=$(CCC) + + +## Pick one of these, or set your own. This is where the +## wxPython module should be installed. It should be a +## subdirectory named wxPython. +TARGETDIR=.. +#TARGETDIR=$(BINLIBDEST)/site-packages/wxPython + + +wxc wx.cpp helpers.cpp windows.cpp events.cpp misc.cpp gdi.cpp \ + mdi.cpp controls.cpp controls2.cpp windows2.cpp cmndlgs.cpp \ + frames.cpp stattool.cpp utils.cpp \ + -I. $(WX_CONFIG_CFLAGS) -DSWIG_GLOBAL + diff --git a/utils/wxPython/src/gdi.i b/utils/wxPython/src/gdi.i index 9509803bc2..ee3afcb660 100644 --- a/utils/wxPython/src/gdi.i +++ b/utils/wxPython/src/gdi.i @@ -152,14 +152,12 @@ public: int GetStyle(); bool GetUnderlined(); int GetWeight(); -#ifdef __WXMSW__ void SetFaceName(const wxString& faceName); void SetFamily(int family); void SetPointSize(int pointSize); void SetStyle(int style); void SetUnderlined(bool underlined); void SetWeight(int weight); -#endif }; //---------------------------------------------------------------------- @@ -210,24 +208,23 @@ public: int GetCap(); wxColour& GetColour(); -#ifdef __WXMSW__ - // **** This one needs to return a list of ints (wxDash) - int GetDashes(wxDash **dashes); - wxBitmap* GetStipple(); -#endif int GetJoin(); int GetStyle(); int GetWidth(); bool Ok(); void SetCap(int cap_style); void SetColour(wxColour& colour); -#ifdef __WXMSW__ - void SetDashes(int LCOUNT, wxDash* LIST); - void SetStipple(wxBitmap& stipple); -#endif void SetJoin(int join_style); void SetStyle(int style); void SetWidth(int width); + +#ifdef __WXMSW__ + // **** This one needs to return a list of ints (wxDash) + int GetDashes(wxDash **dashes); + wxBitmap* GetStipple(); + void SetDashes(int LCOUNT, wxDash* LIST); + void SetStipple(wxBitmap& stipple); +#endif }; //---------------------------------------------------------------------- @@ -505,7 +502,13 @@ public: ///////////////////////////////////////////////////////////////////////////// // // $Log$ +// Revision 1.11 1998/12/18 15:49:05 RR +// wxClipboard now serves the primary selection as well +// wxPython fixes +// warning mesages +// // Revision 1.10 1998/12/17 18:05:50 RD +// // wxPython 0.5.2 // Minor fixes and SWIG code generation for RR's changes. MSW and GTK // versions are much closer now! diff --git a/utils/wxPython/src/windows.i b/utils/wxPython/src/windows.i index 1d5140a1ff..e9d4ba8014 100644 --- a/utils/wxPython/src/windows.i +++ b/utils/wxPython/src/windows.i @@ -310,8 +310,8 @@ public: void Enable(int id, bool enable); bool Enabled(int id); int FindMenuItem(const wxString& menuString, const wxString& itemString); -#ifdef __WXMSW__ wxMenuItem * FindItemForId(int id); +#ifdef __WXMSW__ void EnableTop(int pos, bool enable); wxString GetHelpString(int id); wxString GetLabel(int id); @@ -351,7 +351,13 @@ public: ///////////////////////////////////////////////////////////////////////////// // // $Log$ +// Revision 1.11 1998/12/18 15:49:10 RR +// wxClipboard now serves the primary selection as well +// wxPython fixes +// warning mesages +// // Revision 1.10 1998/12/17 17:52:20 RD +// // wxPython 0.5.2 // Minor fixes and SWIG code generation for RR's changes. MSW and GTK // versions are much closer now!