Hi Georges, may you add the attached patch to the current Debian package. It fixes the bug reported by Karsten as well as a second minor bug in the Perl code generator.
Yes, the fix isn't in a release version yet. The fix is in the stable branch of wxGlade. You can download the stable version of wxGlade always from Bitbucket (https://bitbucket.org/agriggio/wxglade/downloads#branch-downloads) and execute it directly. Regards, Carsten Karsten Hilbert schrieb am 02.05.2016: > Hi Carsten, > > > this bug is already fixed in the stable branch of wxGlade 0.7.2 with > > changeset 62797578d6d2 "Fix PyDeadObject errors and crashes during > > cut and paste". > > Great ! You mean in an unreleased version thereof ? Because: > > wxglade: > Installiert: 0.7.2-1 > Installationskandidat: 0.7.2-1 > Versionstabelle: > *** 0.7.2-1 990 > 990 ftp://ftp.de.debian.org/debian stretch/main i386 > Packages 500 ftp://ftp.de.debian.org/debian unstable/main i386 > Packages 100 /var/lib/dpkg/status > > > You have three different possibibilties to report wxGlade bugs: > > - send bug reports to the mailing list, > > - file a ticket on Sourceforge > > or > > - send email to my private email address. > > I should've done as I used to do -- email you directly. > > Anyway, no harm done. > > Karsten
diff --git a/NEWS.txt b/NEWS.txt
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -25,6 +25,9 @@ Bugs:
- Fix generated code for wxDatePickerCtrl
- Add workaround for missing wxDefaultDateTime in wxPerl
- Fix missing icons in release packages
+ - Fix PyDeadObject errors and crashes during cut and paste
+ - System colour constants named incorrectly in Perl (sf bug #184,
+ Thanks to Sue D. Nymme)
Deprecation
- In place modifications for generated source files will be removed in one
diff --git a/README.SF.md b/README.SF.md
--- a/README.SF.md
+++ b/README.SF.md
@@ -26,8 +26,8 @@ Files
MD5 checksums
-------------
b13cdf9eff9857f6f07f1bd6bf50348a wxGlade-0.7.2-setup.exe
- 81d3270ba1c764d482b0fed00c6f9c59 wxGlade-0.7.2.tar.gz
- 69885a306f694222655fe63d3443191b wxGlade-0.7.2.zip
+ 16395cd62adba4b53da371fe59707a33 wxGlade-0.7.2.tar.gz
+ 61ca7513da4913045854c1b0a62a04a3 wxGlade-0.7.2.zip
e57843ad4d0cb6bf1fc2aab7c46aaa73 wxGlade-SAE-0.7.2-setup.exe
diff --git a/edit_sizers/edit_sizers.py b/edit_sizers/edit_sizers.py
--- a/edit_sizers/edit_sizers.py
+++ b/edit_sizers/edit_sizers.py
@@ -372,9 +372,12 @@ class SizerSlot(object):
self.menu.AppendSeparator()
misc.append_item(self.menu, PREVIEW_ID, _('Preview'))
- wx.EVT_MENU(self.widget, REMOVE_ID, self.remove)
- wx.EVT_MENU(self.widget, PASTE_ID, self.clipboard_paste)
- wx.EVT_MENU(self.widget, PREVIEW_ID, self.preview_parent)
+ def bind(method):
+ return lambda e: wx.CallAfter(method)
+
+ wx.EVT_MENU(self.widget, REMOVE_ID, bind(self.remove))
+ wx.EVT_MENU(self.widget, PASTE_ID, bind(self.clipboard_paste))
+ wx.EVT_MENU(self.widget, PREVIEW_ID, bind(self.preview_parent))
def remove(self, *args):
if not self.sizer.is_virtual():
@@ -409,9 +412,12 @@ class SizerSlot(object):
@see: L{clipboard.paste()}
"""
+ if self.widget:
+ self.widget.Hide()
if clipboard.paste(self.parent, self.sizer, self.pos):
common.app_tree.app.saved = False
- self.widget.Hide()
+ else:
+ self.widget.Show()
def on_select_and_paste(self, *args):
"""\
@@ -422,11 +428,11 @@ class SizerSlot(object):
self.widget.SetFocus()
self.clipboard_paste()
- def delete(self, delete_widget=True):
+ def delete(self):
if misc.currently_under_mouse is self.widget:
misc.currently_under_mouse = None
- if delete_widget and self.widget:
+ if self.widget:
self.widget.Hide()
# unbind events to prevent new created (and queued) events
@@ -1182,7 +1188,7 @@ class SizerBase(Sizer):
try:
old_child = self.children[pos]
if isinstance(old_child.item, SizerSlot):
- old_child.item.delete(False)
+ old_child.item.delete()
self.children[pos] = SizerItem(item, pos, option, flag, border,
size)
except IndexError: # this shouldn't happen!
diff --git a/tests/casefiles/bug184.cpp b/tests/casefiles/bug184.cpp
new file mode 100755
--- /dev/null
+++ b/tests/casefiles/bug184.cpp
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+//
+// generated by wxGlade f5bfb036bf72 on Fri Apr 22 21:37:27 2016
+//
+// Example for compiling a single file project under Linux using g++:
+// g++ MyApp.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp
+//
+// Example for compiling a multi file project under Linux using g++:
+// g++ main.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp Dialog1.cpp Frame1.cpp
+//
+
+#include "bug184.h"
+
+// begin wxGlade: ::extracode
+// end wxGlade
+
+
+
+Bug184_Frame::Bug184_Frame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style):
+ wxFrame(parent, id, title, pos, size, style)
+{
+ // begin wxGlade: Bug184_Frame::Bug184_Frame
+ label_1 = new wxStaticText(this, wxID_ANY, _("Just a label"));
+
+ set_properties();
+ do_layout();
+ // end wxGlade
+}
+
+
+void Bug184_Frame::set_properties()
+{
+ // begin wxGlade: Bug184_Frame::set_properties
+ SetTitle(_("frame_1"));
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BACKGROUND));
+ // end wxGlade
+}
+
+
+void Bug184_Frame::do_layout()
+{
+ // begin wxGlade: Bug184_Frame::do_layout
+ wxBoxSizer* sizer_1 = new wxBoxSizer(wxVERTICAL);
+ sizer_1->Add(label_1, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 5);
+ SetSizer(sizer_1);
+ sizer_1->Fit(this);
+ Layout();
+ // end wxGlade
+}
+
+
+class MyApp: public wxApp {
+public:
+ bool OnInit();
+protected:
+ wxLocale m_locale; // locale we'll be using
+};
+
+IMPLEMENT_APP(MyApp)
+
+bool MyApp::OnInit()
+{
+ m_locale.Init();
+#ifdef APP_LOCALE_DIR
+ m_locale.AddCatalogLookupPathPrefix(wxT(APP_LOCALE_DIR));
+#endif
+ m_locale.AddCatalog(wxT(APP_CATALOG));
+
+ wxInitAllImageHandlers();
+ Bug184_Frame* Frame184 = new Bug184_Frame(NULL, wxID_ANY, wxEmptyString);
+ SetTopWindow(Frame184);
+ Frame184->Show();
+ return true;
+}
diff --git a/tests/casefiles/bug184.h b/tests/casefiles/bug184.h
new file mode 100755
--- /dev/null
+++ b/tests/casefiles/bug184.h
@@ -0,0 +1,51 @@
+// -*- C++ -*-
+//
+// generated by wxGlade f5bfb036bf72 on Fri Apr 22 21:37:27 2016
+//
+// Example for compiling a single file project under Linux using g++:
+// g++ MyApp.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp
+//
+// Example for compiling a multi file project under Linux using g++:
+// g++ main.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp Dialog1.cpp Frame1.cpp
+//
+
+#ifndef BUG184_H
+#define BUG184_H
+
+#include <wx/wx.h>
+#include <wx/image.h>
+#include <wx/intl.h>
+
+#ifndef APP_CATALOG
+#define APP_CATALOG "app" // replace with the appropriate catalog name
+#endif
+
+
+// begin wxGlade: ::dependencies
+// end wxGlade
+
+// begin wxGlade: ::extracode
+// end wxGlade
+
+
+class Bug184_Frame: public wxFrame {
+public:
+ // begin wxGlade: Bug184_Frame::ids
+ // end wxGlade
+
+ Bug184_Frame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=wxDEFAULT_FRAME_STYLE);
+
+private:
+ // begin wxGlade: Bug184_Frame::methods
+ void set_properties();
+ void do_layout();
+ // end wxGlade
+
+protected:
+ // begin wxGlade: Bug184_Frame::attributes
+ wxStaticText* label_1;
+ // end wxGlade
+}; // wxGlade: end class
+
+
+#endif // BUG184_H
diff --git a/tests/casefiles/bug184.lisp b/tests/casefiles/bug184.lisp
new file mode 100755
--- /dev/null
+++ b/tests/casefiles/bug184.lisp
@@ -0,0 +1,79 @@
+#!/usr/bin/env lisp
+;;;
+;;; generated by wxGlade edb3dab3dd59+ on Sat Apr 23 17:23:16 2016
+;;;
+
+(asdf:operate 'asdf:load-op 'wxcl)
+(use-package "FFI")
+(ffi:default-foreign-language :stdc)
+
+
+;;; begin wxGlade: dependencies
+(use-package :wxCL)
+(use-package :wxColour)
+(use-package :wxEvent)
+(use-package :wxEvtHandler)
+(use-package :wxFrame)
+(use-package :wxSizer)
+(use-package :wxStaticText)
+(use-package :wxWindow)
+(use-package :wx_main)
+(use-package :wx_wrapper)
+;;; end wxGlade
+
+;;; begin wxGlade: extracode
+;;; end wxGlade
+
+
+(defclass Bug184_Frame()
+ ((top-window :initform nil :accessor slot-top-window)
+ (label-1 :initform nil :accessor slot-label-1)
+ (sizer-1 :initform nil :accessor slot-sizer-1)))
+
+(defun make-Bug184_Frame ()
+ (let ((obj (make-instance 'Bug184_Frame)))
+ (init obj)
+ (set-properties obj)
+ (do-layout obj)
+ obj))
+
+(defmethod init ((obj Bug184_Frame))
+"Method creates the objects contained in the class."
+ ;;; begin wxGlade: Bug184_Frame.__init__
+ (setf (slot-label-1 obj) (wxStaticText_Create (slot-top-window obj) wxID_ANY (_"Just a label") -1 -1 -1 -1 0))
+ ;;; end wxGlade
+ )
+
+(defmethod set-properties ((obj Bug184_Frame))
+ ;;; begin wxGlade: Bug184_Frame.__set_properties
+ (wxFrame_SetTitle (slot-top-window obj) (_"frame_1"))
+ (wxWindow_SetBackgroundColour (slot-top-window obj) (wxSystemSettings_GetColour wxSYS_COLOUR_BACKGROUND))
+ ;;; end wxGlade
+ )
+
+(defmethod do-layout ((obj Bug184_Frame))
+ ;;; begin wxGlade: Bug184_Frame.__do_layout
+ (setf (slot-sizer-1 obj) (wxBoxSizer_Create wxVERTICAL))
+ (wxSizer_AddWindow (slot-sizer-1 obj) (slot-label-1 obj) 1 (logior wxALIGN_CENTER wxALL wxEXPAND) 5 nil)
+ (wxWindow_SetSizer (slot-top-window obj) (slot-sizer-1 obj))
+ (wxSizer_Fit (slot-sizer-1 obj) (slot-top-window obj))
+ (wxFrame_layout (slot-Frame184 self))
+ ;;; end wxGlade
+ )
+
+;;; end of class Bug184_Frame
+
+
+(defun init-func (fun data evt)
+ (let ((Frame184 (make-Bug184_Frame)))
+ (ELJApp_SetTopWindow (slot-top-window Frame184))
+ (wxWindow_Show (slot-top-window Frame184))))
+;;; end of class MyApp
+
+ (setf (textdomain) "app") ;; replace with the appropriate catalog name
+ (defun _ (msgid) (gettext msgid "app"))
+
+
+(unwind-protect
+ (Eljapp_initializeC (wxclosure_Create #'init-func nil) 0 nil)
+ (ffi:close-foreign-library "../miscellaneous/wxc-msw2.6.2.dll"))
diff --git a/tests/casefiles/bug184.pl b/tests/casefiles/bug184.pl
new file mode 100755
--- /dev/null
+++ b/tests/casefiles/bug184.pl
@@ -0,0 +1,96 @@
+#!/usr/bin/perl -w --
+#
+# generated by wxGlade f5bfb036bf72 on Fri Apr 22 21:35:44 2016
+#
+# To get wxPerl visit http://www.wxperl.it
+#
+
+use Wx 0.15 qw[:allclasses];
+use strict;
+
+# begin wxGlade: dependencies
+# end wxGlade
+
+# begin wxGlade: extracode
+# end wxGlade
+
+package Bug184_Frame;
+
+use Wx qw[:everything];
+use base qw(Wx::Frame);
+use strict;
+
+use Wx::Locale gettext => '_T';
+sub new {
+ my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_;
+ $parent = undef unless defined $parent;
+ $id = -1 unless defined $id;
+ $title = "" unless defined $title;
+ $pos = wxDefaultPosition unless defined $pos;
+ $size = wxDefaultSize unless defined $size;
+ $name = "" unless defined $name;
+
+ # begin wxGlade: Bug184_Frame::new
+ $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );
+ $self->{label_1} = Wx::StaticText->new($self, wxID_ANY, _T("Just a label"));
+
+ $self->__set_properties();
+ $self->__do_layout();
+
+ # end wxGlade
+ return $self;
+
+}
+
+
+sub __set_properties {
+ my $self = shift;
+ # begin wxGlade: Bug184_Frame::__set_properties
+ $self->SetTitle(_T("frame_1"));
+ $self->SetBackgroundColour(Wx::SystemSettings::GetColour(wxSYS_COLOUR_BACKGROUND));
+ # end wxGlade
+}
+
+sub __do_layout {
+ my $self = shift;
+ # begin wxGlade: Bug184_Frame::__do_layout
+ $self->{sizer_1} = Wx::BoxSizer->new(wxVERTICAL);
+ $self->{sizer_1}->Add($self->{label_1}, 1, wxALIGN_CENTER|wxALL|wxEXPAND, 5);
+ $self->SetSizer($self->{sizer_1});
+ $self->{sizer_1}->Fit($self);
+ $self->Layout();
+ # end wxGlade
+}
+
+# end of class Bug184_Frame
+
+1;
+
+package MyApp;
+
+use base qw(Wx::App);
+use strict;
+
+sub OnInit {
+ my( $self ) = shift;
+
+ Wx::InitAllImageHandlers();
+
+ my $Frame184 = Bug184_Frame->new();
+
+ $self->SetTopWindow($Frame184);
+ $Frame184->Show(1);
+
+ return 1;
+}
+# end of class MyApp
+
+package main;
+
+unless(caller){
+ my $local = Wx::Locale->new("English", "en", "en"); # replace with ??
+ $local->AddCatalog("app"); # replace with the appropriate catalog name
+
+ my $app = MyApp->new();
+ $app->MainLoop();
+}
diff --git a/tests/casefiles/bug184.py b/tests/casefiles/bug184.py
new file mode 100755
--- /dev/null
+++ b/tests/casefiles/bug184.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+#
+# generated by wxGlade f5bfb036bf72 on Fri Apr 22 21:37:33 2016
+#
+
+import wx
+
+# begin wxGlade: dependencies
+import gettext
+# end wxGlade
+
+# begin wxGlade: extracode
+# end wxGlade
+
+
+class Bug184_Frame(wx.Frame):
+ def __init__(self, *args, **kwds):
+ # begin wxGlade: Bug184_Frame.__init__
+ wx.Frame.__init__(self, *args, **kwds)
+ self.label_1 = wx.StaticText(self, wx.ID_ANY, _("Just a label"))
+
+ self.__set_properties()
+ self.__do_layout()
+ # end wxGlade
+
+ def __set_properties(self):
+ # begin wxGlade: Bug184_Frame.__set_properties
+ self.SetTitle(_("frame_1"))
+ self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_BACKGROUND))
+ # end wxGlade
+
+ def __do_layout(self):
+ # begin wxGlade: Bug184_Frame.__do_layout
+ sizer_1 = wx.BoxSizer(wx.VERTICAL)
+ sizer_1.Add(self.label_1, 1, wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, 5)
+ self.SetSizer(sizer_1)
+ sizer_1.Fit(self)
+ self.Layout()
+ # end wxGlade
+
+# end of class Bug184_Frame
+class MyApp(wx.App):
+ def OnInit(self):
+ Frame184 = Bug184_Frame(None, wx.ID_ANY, "")
+ self.SetTopWindow(Frame184)
+ Frame184.Show()
+ return True
+
+# end of class MyApp
+
+if __name__ == "__main__":
+ gettext.install("app") # replace with the appropriate catalog name
+
+ app = MyApp(0)
+ app.MainLoop()
\ No newline at end of file
diff --git a/tests/casefiles/bug184.wxg b/tests/casefiles/bug184.wxg
new file mode 100644
--- /dev/null
+++ b/tests/casefiles/bug184.wxg
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!-- generated by wxGlade edb3dab3dd59+ on Sat Apr 23 17:23:26 2016 -->
+
+<application class="MyApp" encoding="UTF-8" for_version="2.8" header_extension=".h" indent_amount="4" indent_symbol="space" is_template="0" language="perl" name="app" option="0" overwrite="1" path="/home/carsten/Projekte.cvs/wxglade/tests/casefiles/bug184.pl" source_extension=".cpp" top_window="Frame184" use_gettext="1" use_new_namespace="1">
+ <object class="Bug184_Frame" name="Frame184" base="EditFrame">
+ <title>frame_1</title>
+ <background>wxSYS_COLOUR_BACKGROUND</background>
+ <object class="wxBoxSizer" name="sizer_1" base="EditBoxSizer">
+ <orient>wxVERTICAL</orient>
+ <object class="sizeritem">
+ <flag>wxALL|wxEXPAND|wxALIGN_CENTER</flag>
+ <border>5</border>
+ <option>1</option>
+ <object class="wxStaticText" name="label_1" base="EditStaticText">
+ <attribute>1</attribute>
+ <label>Just a label</label>
+ </object>
+ </object>
+ </object>
+ </object>
+</application>
diff --git a/tests/casefiles/bug184.xrc b/tests/casefiles/bug184.xrc
new file mode 100644
--- /dev/null
+++ b/tests/casefiles/bug184.xrc
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- generated by wxGlade f5bfb036bf72 on Fri Apr 22 21:37:31 2016 -->
+
+<resource version="2.3.0.1">
+ <object class="wxFrame" name="Frame184" subclass="Bug184_Frame">
+ <title>frame_1</title>
+ <object class="wxBoxSizer">
+ <orient>wxVERTICAL</orient>
+ <object class="sizeritem">
+ <option>1</option>
+ <flag>wxALIGN_CENTER|wxALL|wxEXPAND</flag>
+ <border>5</border>
+ <object class="wxStaticText" name="label_1">
+ <label>Just a label</label>
+ </object>
+ </object>
+ </object>
+ </object>
+</resource>
diff --git a/tests/test_bugs.py b/tests/test_bugs.py
--- a/tests/test_bugs.py
+++ b/tests/test_bugs.py
@@ -75,3 +75,12 @@ class TestCodeGen(WXGladeBaseTest):
self._compare(result_app, generated_app, app_filename)
self._compare(result_frame_cpp, generated_frame_cpp , 'Bug179_Frame.c++')
self._compare(result_frame_h, generated_frame_h, 'Bug179_Frame.hpp')
+
+ def test_bug184(self):
+ """\
+ Test bug #184 - Perl code generation: System colour constants named
+ incorrectly.
+
+ That's the test case for SF bug #184.
+ """
+ self._test_all('bug184')
\ No newline at end of file
diff --git a/wcodegen/__init__.py b/wcodegen/__init__.py
--- a/wcodegen/__init__.py
+++ b/wcodegen/__init__.py
@@ -295,6 +295,7 @@ class PerlMixin(BaseLanguageMixin):
name.startswith('wxSPLASH_') or \
name.startswith('wxST_') or \
name.startswith('wxSys_') or \
+ name.startswith('wxSYS_COLOUR_') or \
name.startswith('wxSW_') or \
name.startswith('wxSASH_') or \
name.startswith('wxTB_') or \
diff --git a/wxglade b/wxglade
--- a/wxglade
+++ b/wxglade
@@ -44,7 +44,6 @@ for INTERPRETER in $INTERPRETER_LIST; do
break
done
-
if [ ! "$PYTHON_BIN" ]; then
echo "ERROR: No interpreter for Python 2 found!"
echo " Please install Python 2 to run wxGlade!"
@@ -71,7 +70,7 @@ for DIR in \
"${CURR_DIR}/../lib/python${PY_VERSION}/dist-packages/wxglade" \
; do
BINARY="${DIR}/wxglade.py"
- if [ -x "${BINARY}" ]; then
+ if [ -e "${BINARY}" ]; then
WXG_BINARY="$BINARY"
break
fi
pgp_rHvyx1axD.pgp
Description: Digitale Signatur von OpenPGP

