]> git.saurik.com Git - wxWidgets.git/commitdiff
use (new) wxAcceleratorEntry::Create() instead of recently deprecated wxGetAccelFromS...
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 4 Sep 2006 23:56:56 +0000 (23:56 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 4 Sep 2006 23:56:56 +0000 (23:56 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41013 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
include/wx/accel.h
include/wx/utils.h
src/common/menucmn.cpp
src/generic/accel.cpp
src/gtk/dnd.cpp
src/gtk/menu.cpp
src/gtk1/menu.cpp
src/mac/carbon/menu.cpp
src/mac/carbon/menuitem.cpp
src/mac/classic/menu.cpp
src/mac/classic/menuitem.cpp
src/msw/menu.cpp
src/os2/menu.cpp

index 02135de643e80a2acbeca845849ffa042face1c5..80f35ede715d989f4d23c80babd412462ff01cdd 100644 (file)
@@ -62,6 +62,10 @@ public:
         , m_item(entry.m_item)
         { }
 
+    // create accelerator corresponding to the specified string, return NULL if
+    // string couldn't be parsed or a pointer to be deleted by the caller
+    static wxAcceleratorEntry *Create(const wxString& str);
+
     wxAcceleratorEntry& operator=(const wxAcceleratorEntry& entry)
     {
         Set(entry.m_flags, entry.m_keyCode, entry.m_command, entry.m_item);
@@ -117,10 +121,14 @@ public:
 
     // returns true if the given string correctly initialized this object
     // (i.e. if IsOk() returns true after this call)
-    bool FromString(const wxString &str);
+    bool FromString(const wxStringstr);
 
 
 private:
+    // common part of Create() and FromString()
+    static bool ParseAccel(const wxString& str, int *flags, int *keycode);
+
+
     int m_flags;    // combination of wxACCEL_XXX constants
     int m_keyCode;  // ASCII or virtual keycode
     int m_command;  // Command id to generate
index 75426eca324364bc0bed4bc3bb59c37c169c399c..499f2bad0f04219af330c552eee5ac0314f60abd 100644 (file)
@@ -558,20 +558,23 @@ enum
 WXDLLEXPORT wxString
 wxStripMenuCodes(const wxString& str, int flags = wxStrip_All);
 
-// obsolete and deprecated version, do not use
 #if WXWIN_COMPATIBILITY_2_6
+// obsolete and deprecated version, do not use, use the above overload instead
 wxDEPRECATED(
     WXDLLEXPORT wxChar* wxStripMenuCodes(const wxChar *in, wxChar *out = NULL)
 );
-#endif
 
 #if wxUSE_ACCEL
 class WXDLLEXPORT wxAcceleratorEntry;
+
+// use wxAcceleratorEntry::Create() or FromString() methods instead
 wxDEPRECATED(
     WXDLLEXPORT wxAcceleratorEntry *wxGetAccelFromString(const wxString& label)
 );
 #endif // wxUSE_ACCEL
 
+#endif // WXWIN_COMPATIBILITY_2_6
+
 // ----------------------------------------------------------------------------
 // Window search
 // ----------------------------------------------------------------------------
index 09251fcb4db5e5d10622eabb94d1a9c9f0dbf663..896c9e1e031017033532fd7217a2d46487a34fc4 100644 (file)
@@ -170,15 +170,13 @@ static int
     return prefixCode + num - first;
 }
 
-bool wxAcceleratorEntry::FromString(const wxString& text)
+/* static */
+bool
+wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut)
 {
     // the parser won't like leading/trailing spaces
     wxString label = text.Strip(wxString::both);
 
-    // set to invalid state:
-    m_flags = 0;
-    m_keyCode = 0;
-
     // check for accelerators: they are given after '\t'
     int posTab = label.Find(wxT('\t'));
     if ( posTab == wxNOT_FOUND )
@@ -278,11 +276,30 @@ bool wxAcceleratorEntry::FromString(const wxString& text)
 
     wxASSERT_MSG( keyCode, _T("logic error: should have key code here") );
 
-    m_flags = accelFlags;
-    m_keyCode = keyCode;
+    if ( flagsOut )
+        *flagsOut = accelFlags;
+    if ( keyOut )
+        *keyOut = keyCode;
+
     return true;
 }
 
+/* static */
+wxAcceleratorEntry *wxAcceleratorEntry::Create(const wxString& str)
+{
+    int flags,
+        keyCode;
+    if ( !ParseAccel(str, &flags, &keyCode) )
+        return NULL;
+
+    return new wxAcceleratorEntry(flags, keyCode);
+}
+
+bool wxAcceleratorEntry::FromString(const wxString& str)
+{
+    return ParseAccel(str, &m_flags, &m_keyCode);
+}
+
 wxString wxAcceleratorEntry::ToString() const
 {
     wxString text;
@@ -327,15 +344,10 @@ wxString wxAcceleratorEntry::ToString() const
 
 wxAcceleratorEntry *wxGetAccelFromString(const wxString& label)
 {
-    wxAcceleratorEntry *ret = new wxAcceleratorEntry();
-    if (ret->FromString(label))
-        return ret;
-
-    wxDELETE(ret);
-    return NULL;
+    return wxAcceleratorEntry::Create(label);
 }
 
-#endif      // wxUSE_ACCEL
+#endif // wxUSE_ACCEL
 
 
 // ----------------------------------------------------------------------------
@@ -374,7 +386,7 @@ wxMenuItemBase::~wxMenuItemBase()
 
 wxAcceleratorEntry *wxMenuItemBase::GetAccel() const
 {
-    return wxGetAccelFromString(GetText());
+    return wxAcceleratorEntry::Create(GetText());
 }
 
 void wxMenuItemBase::SetAccel(wxAcceleratorEntry *accel)
index f31532caa65fba5fb36568e77de762bb97911f50..b6ae238a7581503ac67fdf99aff06055a238dcf9 100644 (file)
@@ -138,8 +138,8 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry)
         const wxAcceleratorEntry *entryCur = node->GetData();
 
         // given entry contains only the information of the accelerator key
-        // because it was set that way in wxGetAccelFromString()
-        // so do not perform full ( *entryCur == entry ) comparison
+        // because it was set that way during creation so do not use the
+        // comparison operator which also checks the command field
         if ((entryCur->GetKeyCode() == entry.GetKeyCode()) &&
             (entryCur->GetFlags() == entry.GetFlags()))
         {
index aadec6a638c546ff0a457e5883c62fd409bf2509..7565e877badfd21c90e690e25e26813639933a6e 100644 (file)
@@ -910,6 +910,14 @@ wxDragResult wxDropSource::DoDragDrop(int flags)
 
     UnregisterWindow();
 
+    // this shouldn't be needed but somehow, sometimes, without this the cursor
+    // stays grabbed even when the DND operation ends and the application
+    // becomes unresponsive and has to be killed resulting in loss of all
+    // unsaved data, so while this fix is ugly it's still better than
+    // alternative
+    if ( gdk_pointer_is_grabbed() )
+        gdk_pointer_ungrab(GDK_CURRENT_TIME);
+
     return m_retValue;
 }
 
index 993c2881bddf02f8d7163e1753210af4ac5ce3ff..caec716a87891c38e7f542e228096b54959df9b1 100644 (file)
@@ -920,7 +920,6 @@ void wxMenuItem::DoSetText( const wxString& str )
 {
     m_text.Empty();
     m_text = GTKProcessMenuItemLabel(str, &m_hotKey);
-    // wxPrintf( wxT("DoSetText(): str %s m_text %s hotkey %s\n"), str.c_str(), m_text.c_str(), m_hotKey.c_str() );
 }
 
 #if wxUSE_ACCEL
@@ -930,14 +929,15 @@ wxAcceleratorEntry *wxMenuItem::GetAccel() const
     if ( !GetHotKey() )
     {
         // nothing
-        return (wxAcceleratorEntry *)NULL;
+        return NULL;
     }
 
-    // as wxGetAccelFromString() looks for TAB, insert a dummy one here
+    // accelerator parsing code looks for them after a TAB, so insert a dummy
+    // one here
     wxString label;
     label << wxT('\t') << GetHotKey();
 
-    return wxGetAccelFromString(label);
+    return wxAcceleratorEntry::Create(label);
 }
 
 #endif // wxUSE_ACCEL
@@ -1536,7 +1536,7 @@ static wxString GetGtkHotKey( const wxMenuItem& item )
                 hotkey += wxString::Format(wxT("Special%d"), code - WXK_SPECIAL1 + 1);
                 break;
           */
-                // if there are any other keys wxGetAccelFromString() may
+                // if there are any other keys wxAcceleratorEntry::Create() may
                 // return, we should process them here
 
             default:
index ab623d957bac6e7dba57bb86f25bdc2ea1d93f63..10fee257c64899a109fb7768d8005927c5129b33 100644 (file)
@@ -865,8 +865,6 @@ void wxMenuItem::DoSetText( const wxString& str )
        pc++;
        m_hotKey = pc;
     }
-
-    // wxPrintf( wxT("DoSetText(): str %s m_text %s hotkey %s\n"), str.c_str(), m_text.c_str(), m_hotKey.c_str() );
 }
 
 #if wxUSE_ACCEL
@@ -879,11 +877,12 @@ wxAcceleratorEntry *wxMenuItem::GetAccel() const
         return (wxAcceleratorEntry *)NULL;
     }
 
-    // as wxGetAccelFromString() looks for TAB, insert a dummy one here
+    // accelerator parsing code looks for them after a TAB, so insert a dummy
+    // one here
     wxString label;
     label << wxT('\t') << GetHotKey();
 
-    return wxGetAccelFromString(label);
+    return wxAcceleratorEntry::Create(label);
 }
 
 #endif // wxUSE_ACCEL
@@ -1423,7 +1422,7 @@ static wxString GetGtkHotKey( const wxMenuItem& item )
                 hotkey += wxString::Format(wxT("Special%d"), code - WXK_SPECIAL1 + 1);
                 break;
           */
-                // if there are any other keys wxGetAccelFromString() may
+                // if there are any other keys wxAcceleratorEntry::Create() may
                 // return, we should process them here
 
             default:
index 1b7571af3d40bb24ff1a4508b43a30d7686ffacf..391e97b560e7730b0cb0b5ff478bf2c4e1abfe88 100644 (file)
@@ -698,7 +698,8 @@ void wxMenuBar::MacInstallMenuBar()
                     }
                     else
                     {
-                        wxAcceleratorEntry* entry = wxGetAccelFromString( item->GetText() ) ;
+                        wxAcceleratorEntry*
+                            entry = wxAcceleratorEntry::Create( item->GetText() ) ;
 
                         if ( item->GetId() == wxApp::s_macAboutMenuItemId )
                         {
@@ -733,7 +734,8 @@ void wxMenuBar::MacInstallMenuBar()
         wxMenuItem *aboutMenuItem = FindItem(wxApp::s_macAboutMenuItemId , &aboutMenu) ;
         if ( aboutMenuItem )
         {
-            wxAcceleratorEntry* entry = wxGetAccelFromString( aboutMenuItem->GetText() ) ;
+            wxAcceleratorEntry*
+                entry = wxAcceleratorEntry::Create( aboutMenuItem->GetText() ) ;
             UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , wxStripMenuCodes ( aboutMenuItem->GetText() ) , wxFont::GetDefaultEncoding() );
             UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 , true );
             SetMenuItemCommandID( GetMenuHandle( kwxMacAppleMenuId ) , 1 , kHICommandAbout ) ;
index de6298870b2fba8485fed1ef5b2e068d06d048f0..7d6dc48db145f7b975843372a59c170418ac2c0e 100644 (file)
@@ -121,7 +121,7 @@ void wxMenuItem::UpdateItemStatus()
             ::SetItemMark( mhandle , index , 0 ) ; // no mark
 
         UMASetMenuItemText( mhandle , index , wxStripMenuCodes(m_text) , wxFont::GetDefaultEncoding() ) ;
-        wxAcceleratorEntry *entry = wxGetAccelFromString( m_text ) ;
+        wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( m_text ) ;
         UMASetMenuItemShortcut( mhandle , index , entry ) ;
         delete entry ;
     }
@@ -145,7 +145,7 @@ void wxMenuItem::UpdateItemText()
     }
 
     UMASetMenuItemText( mhandle , index , wxStripMenuCodes(text) , wxFont::GetDefaultEncoding() ) ;
-    wxAcceleratorEntry *entry = wxGetAccelFromString( text ) ;
+    wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( text ) ;
     UMASetMenuItemShortcut( mhandle , index , entry ) ;
     delete entry ;
 }
index a075a91e7cff226aa3b796c141fe59d2c767a2f2..cb384236e069f9d1df44456fef948e7e22e104af 100644 (file)
@@ -574,7 +574,7 @@ void wxMenuBar::MacInstallMenuBar()
                     }
                     else
                     {
-                        wxAcceleratorEntry* entry = wxGetAccelFromString( item->GetText() ) ;
+                        wxAcceleratorEntry* entry = wxAcceleratorEntry::Create( item->GetText() ) ;
 
                         if ( item->GetId() == wxApp::s_macAboutMenuItemId )
                         {
index f541a795a2ff98eed050a52916620398d8871720..51a8a3ca5ab844a2695a6e235eb1bfd222e4aa03 100644 (file)
@@ -135,7 +135,7 @@ void wxMenuItem::UpdateItemStatus()
             ::SetItemMark( mhandle , index , 0 ) ; // no mark
 
            UMASetMenuItemText( mhandle , index , m_text , wxFont::GetDefaultEncoding() ) ;
-           wxAcceleratorEntry *entry = wxGetAccelFromString( m_text ) ;
+           wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( m_text ) ;
         UMASetMenuItemShortcut( mhandle , index , entry ) ;
         delete entry ;
     }
@@ -159,7 +159,7 @@ void wxMenuItem::UpdateItemText()
     }
 
     UMASetMenuItemText( mhandle , index , text , wxFont::GetDefaultEncoding() ) ;
-    wxAcceleratorEntry *entry = wxGetAccelFromString( text ) ;
+    wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( text ) ;
     UMASetMenuItemShortcut( mhandle , index , entry ) ;
     delete entry ;
 }
index 156e4e403563cc7b4f5df454fafbd7cac27de518..03c844447cef3c5b371f21f1c9f74f324be238ff 100644 (file)
@@ -315,7 +315,7 @@ void wxMenu::UpdateAccel(wxMenuItem *item)
         }
 
         // find the (new) accel for this item
-        wxAcceleratorEntry *accel = wxGetAccelFromString(item->GetText());
+        wxAcceleratorEntry *accel = wxAcceleratorEntry::Create(item->GetText());
         if ( accel )
             accel->m_command = item->GetId();
 
index 3f8db0640b83172ee1b5fd336267d19f2a2dbff3..ae8c5db5fcf6b0c68ad8748887d3d3c5e85ca380 100644 (file)
@@ -201,7 +201,7 @@ void wxMenu::UpdateAccel(
         //
         // Find the (new) accel for this item
         //
-        wxAcceleratorEntry*         pAccel = wxGetAccelFromString(pItem->GetText());
+        wxAcceleratorEntry*         pAccel = wxAcceleratorEntry::Create(pItem->GetText());
 
         if (pAccel)
             pAccel->m_command = pItem->GetId();