Merge wxQt personal GSoC 2014 branch (history) #14

Closed
wants to merge 6,129 commits into
from

Projects

None yet

8 participants

@reingart
Member

to close 2014 wxQT Google Summer of Code project work cleanly (mostly for historic purposes, as it was already merged to master trunk manually by @vadz, see bellow):

  • Move the work done in my personal account (just in case, as the code is is not exactly what was merged in trunk)
  • Preserve correct commit history (authors and dates), at least in this branch
  • Link my repository (as there are important issues, wiki pages, screenshots and pull requests)

Note that my work (and prior GSOC and from other authors too) was already merged in master trunk r77455

For more info see wx-dev discussions in:

About commit credits: I should have a SVN account (MAR, RD created it on 9/29/13) but I don't know if it still active nor if I'm in the authors file, in order to preserve authorship and not getting more troubles.

Also, I'ld like to assure everything is ok and settled before start commiting to SVN directly (Qt folders).

@reingart

This method should be prefixed with Qt, please see http://wiki.wxwidgets.org/WxQt#Naming_conventions

@reingart

Why you didn't used wxQtEventSignalHandler helper instead of wxQtSignalHandler?
It already handles most events and has the minimal internal logic for all windows.
To be uniform with the rest of controls, it should be:

class wxQtToolButton : public wxQtEventSignalHandler< QToolButton, wxToolBarTool >

Or is there anything special with the toolbar buttons?

Owner

wxQtSignalHandler is used for simple menu actions, shortcuts, groups and similar (the ones derived from QObject)
If it derives from QWidget, it should use wxQtEventSignalHandler that handles basic events properly.
Currently that helpers don't have too much logic, but in the future, having all the controls in a consistent hierachy could help to implement better uniform mechanisms (i.e., handling destruction), see my comment bellow.
Please see 4384f4a : deleteLater() should be safer to avoid crashing due events

@reingart

Here you should be creating a wxQtToolBar (using the wxQtEventSignalHandler helper), not the QWidget directly, so the basic events (sizing, painting, mouse / keyboard, etc.) get sent to wx event loop.
I'm not sure if this is be mandatory for toolbars, but it would be wise to be consistent and uniform with other controls / windows in wxQT.

@reingart

Dos this work? wxToolBar shouldn't be derived for QObject in this case?
Again, I prefer putting signals logic inside a wxQtToolBar helper (like in the rest of wxQT controls)

Owner

See previous comments, I'm think the root cause for crashes is calling delete directly.
Using deleteLater() is working for other containers (for example, wxPanel, wxNotebook, etc.)
I'm not sure about the last case (context menu destroying the toolbar), if this is not a feature in wxWidgets, maybe it could be vetoed / disabled in Qt.

@reingart

Maybe it could be:

tool->m_qtToolButton->setChekeable( toogle );
Owner

So, whats the difference between DoSetToggle and DoToggleTool?
According to the comments in wxMSW, DoSetToogle does change the type of button (toggleable or not), so I think setCheckable could help here.
Maybe @VADZ could give some hint about this.

vadz replied Jul 28, 2014

DoSetToggle() is not implemented in any of the major ports, so just forget about it, the tools type can't be changed after creating them. DoToggleTool() is the useful method, which actually toggles (a togglable) tool.

@reingart

Public wx classes shouldn't be derived from QObject, you can see the discussion in wx-dev: https://groups.google.com/d/msg/wx-dev/UpkJMnT3V2o/P2NT3FsQTokJ
See bellow comments for more info

@reingart

If possible, wxQT helpers should not be exposed in headers, they should remain internal in the cpp source or be moved to the private folder.

@reingart

Please use deleteLater(), it should be safer to avoid crashing due pending events, see 4384f4a , 1606680 and issue #34
Anyway, if this class derives from wxWindow and GetHandle is working, this should be handled automatically by wxWindow::~wxWindow? (or I'm missing something?)
m_qtToolBar should be set to NULL to avoid problems with the base class dtors?

reingart and others added some commits Jul 28, 2014
@reingart reingart Added basic Cairo paint DC for wxQT (tentative)
This is a very minimal approach (drawing to a cairo image surface and not a qt surface), but will help to avoid crashing (for example, in drawing sample, even if qt surface is not available).
9c623a2
@reingart reingart Implement missing font info constructor in wxQT
(This is also needed by the drawing sample)
793f4d4
@reingart reingart Implement missing font family, weight & style getters 99dd22d
@reingart reingart Fix font weight and underline setters 14420d3
@reingart reingart Fix font face name getter (using actual info from Qt)
It was returning an empty string (if no facename was given at the font ctor), and that caused a segmentation fault in cairo_show_text
3420976
@reingart reingart Fix wxQtDCImpl::GetHandle() to return QPainter
This is needed by the grahpic context
12526d7
@reingart reingart Fix cairo image buffer paint DC in wxQT
* do not destroy the image as it holds the pixel data buffer
* hence, do not create a new image as it isn't necessary

This solution is similar to cairo qt surface internals, that stores image and image_equiv -the cairo image surface-.
fdb6f1c
@reingart reingart Implemented wxBitmap::GetRawData in wxQT (similar to wxGTK) fb82bad
@reingart reingart Removed GetHandle (virtual) call from wxWindow dtor in wxQT 6ab2ff3
@reingart reingart Postpone the shortcut handler destruction to avoid seg. faults ad9afb5
@reingart reingart Fix missing __WXQT__ guard in include, thanks @seandepagnier b17f9e5
@reingart reingart Fix uninitialized value causing 'Painter not active', thanks @seandep… f3efa9c
@reingart reingart Add sanity checks for Qt event/signal handlers
 * Use the window pointer to detect if the class is dead or alive to avoid crashing caused by deleteLater() being processed in the event loop
 * Print debug messages if the handler (wxWindow) is NULL (deleted), just for safety and debugging as that code should not be reached if Qt signals are blocked or Qt events are filtered / removed (comming in future commits)
 * Set the window pointer immediatelly in wxQt helper template constructor to avoid problems if wxWindow base class was not fully initialized and a Qt event/signal is received

GetHandler will return NULL if the wxWindow object was deleted, so it should be verified in the signal handlers in each derived class (events are automatically verified by the helper)
9f3e771
@reingart reingart Avoid crash if a control is deleted and a signal is received
For example, this could happen if the wxNotebook was deleted and there were pending singals (i.e., emmited due the removal of the current page).
This should not happen, signals will be blocked in the destructor in following commits, but this is in place just in case to avoid segmentation fauls (debug message will be print by the wxQT helper)
154cde4
@reingart reingart Block Qt signals if widget is being deleted
This avoid most of the problems caused by receiving a signal if the wxWindow is deleted (for example, notebook changing the default page, see previous commits).
I've tried two other methods without success:
 * m_qtWindow::disconnect() should do the disconnection of all signals but returns false
 * QApplication::instance()->removePostedEvents(m_qtWindow); seems to have no effect (also, installEventFilter could be used)
4386ed4
@reingart reingart Derive list control from wxListCtrlBase in wxQT
This fixes missing methods compilation errors: EnableBellOnNoMatch, EnableAlternateRowColours, AppendColumn and OnGetItemAttr
9ff1bb9
@reingart reingart Use the correct widget QTreeWidget and helper for list control f3602f7
@reingart reingart Implement column insertion basics in wxQT list ctrl 1fcf669
@reingart reingart Implement basic item insertion in list ctrl 5a4e873
@reingart reingart Implement set item in list ctrl
(and item count and insert item return value)
3977ede
@reingart reingart Add colour support for list ctrl items 33b650a
@reingart reingart Implement selection event and get item in list ctrl 8ae6716
@seandepagnier seandepagnier Fix crash caused when exiting.
The lost focus event was triggered to the central widget.
Since this widget does not map to a qt widget, there is
no wxWindow derived destructor for it, so the handler
must be set to NULL from the frame.
0f7f6f7
@reingart reingart Merge pull request #45 from seandepagnier/test
Fix crash caused when exiting (related to main window central widget focus signal)
281f61a
@reingart reingart Simplificate QWidget* assignment (new PostCreation method)
Also reducing the redundant m_qtWindow code, this could help to unify application of background style and default colors (for painting, that was not being enforced and could cause issues). Window style code is commented in the original, maybe it belongs to wxFrame.
PostCreation method name was taken from wxGTK, that has similar features.
f8f2238
@reingart reingart Fix default widget fore/background colour 300a3f7
@reingart reingart Implement missing wxQT helpers for QLabel
This now is needed to correctly paint the background, allows the static text / bitmap to handle events and signals, and maybe a better destruction process.
151ff33
@reingart reingart Fix default wxTextCtrl color background due PostCreation 65310a0
@seandepagnier seandepagnier clipboard support f3b2bcd
@reingart reingart Improve erasing issues (let Qt handle them) 0a4aa2f
@reingart reingart Implement simple listctrl methods in wxQT cfa10fc
@reingart reingart Refactory the list ctrl signal handler b97d019
@seandepagnier seandepagnier improve top level window initialization db1d94a
@reingart reingart Implemented column getter and setter in listctrl 1b53344
@reingart reingart Fix row colours (fg/bg) in wxQT list ctrl 7243f61
@reingart reingart Fix font in listctrl row 1a96423
@reingart reingart Refactor get Qt list ctrl item to its own method e1ed5ce
@reingart reingart Implemented item text setter and getter 49f248c
@reingart reingart Refactor qt list item handling (check if not null) d20c942
@reingart reingart Implement item data in wxQT list control 5352dcd
@reingart reingart Implemented items and column deletion in wxQT list ctrl d2099d2
@reingart reingart Implemented item state getter and setter in wxQT list ctrl 91c9c78
@reingart reingart Implement get next list item (adapted from generic) in wxQT 0c3a503
@reingart reingart Implement item & subitem rect/pos in wxQT list ctrl 5afb9fc
@reingart reingart Implemented several minor auxiliar list ctrl methods
 * get selected item count
 * count per page (aproximate)
 * visible rect (aproximate)
 * item position
 * ensure visible (using scroll)
 * edit label (some glitches, maybe it should use editItem)
 * scroll dx / dy (aproximate)
 * hit test (only item and nowhere)
c13651f
@reingart reingart Implemented list item find (by string and data) in wxQT ea5df64
@reingart reingart Fix crash reverting some changes by @seandepagnier
 * Remove explicit deletion (that is done by the base destructor)
 * Remove unneeded dependency of QToolBar on QObject (no signal required)
4d3cc0e
@reingart reingart Fix toolbar painting issues adding the wxQT helper d1440fb
@reingart reingart Enable on mouse enter event on toolbar button (also remove warning) 2516aee
@reingart reingart Fix toolbar parent search logic (adapted from @seandepagnier) 0febaa7
@reingart
Owner

This commit fixes the toolbar sample:

wxqt_toolbar_sample_ok

@reingart
Owner

Now the help sample runs on Qt:

wxqt_help_sample_running

Thanks @seandepagnier again!

vadz replied Jul 31, 2014

Great work, thanks to both of you! But I can't help wondering that the text rendering in wxHTML is broken :-( Any idea where could this be coming from?

Owner

Fixed the text rendering in 50d10e2, this is how it looks now:

wxqt_help_sample_html_ok

@reingart
Owner

OpenGL cube sample under wxQT:

wxqt_opengl_sample_cube

OpenGL isosurf sample under wxQT:

wxqt_opengl_sample_isosurf

Thanks @seandepagnier again!

vadz replied Jul 31, 2014

Looks like DrawDice() in cube.cpp doesn't work as intended (at least I think where the problem is, all the rest is pure OpenGL which really should work the same in wxQt as in any other port) and SetBrush(*wxBLACK_BRUSH) isn't taken into account...

Owner

About the drawing issues in GLCanvas, running the cube sample outputs:

reingart@s5ultra:~/src/wxWidgets/bldqt5/samples/opengl/cube$ ./cube
reingart@s5ultra:~/src/wxWidgets/bldqt5/samples/opengl/cube$ ./cube
../src/qt/app.cpp(37): Missing implementation of "Unicode argc, argv"
14:07:15: Debug: wxWindow::Create  m_qtWindow=0x13f4dd0
14:07:15: Debug: wxWindow::Create GLCanvas m_qtWindow=0x13fad70
14:07:15: Debug: wxWindow::Create  m_qtWindow=0x1dda8b0
appmenu-qt: registerWindow 196 "&Cube" 
../src/qt/statusbar.cpp(46): Missing implementation of "wxStatusBar::Create parameters"
14:07:15: Debug: wxWindow::Create  m_qtWindow=0x16c9140
14:07:15: Debug: wxWindow::Refresh 
14:07:15: Debug: wxWindow::Refresh 
14:07:15: Debug: wxQtDCImpl::QtPreparePainter not active!
QPainter::setFont: Painter not active
QPainter::setBackground: Painter not active
14:07:15: Debug: wxQtDCImpl::QtPreparePainter not active!
QPainter::setFont: Painter not active
QPainter::setBackground: Painter not active
14:07:15: Debug: wxWindow::QtHandlePaintEvent  wxPaintDC region 0 0 400 22
14:07:15: Debug: wxQtDCImpl::DoSetDeviceClippingRegion rect 0 0 400 22
14:07:15: Debug: wxWindow::QtHandlePaintEvent  clearing DC to rgb(242, 241, 240)
14:07:15: Debug: wxQtDCImpl::QtPreparePainter not active!
QPainter::setFont: Painter not active
QPainter::setBackground: Painter not active
14:07:18: Debug: wxWindow::~wxWindow  m_qtWindow=0x1dda8b0
14:07:18: Debug: wxWindow::~wxWindow  m_qtWindow=0x16c9140
14:07:18: Debug: wxWindow::~wxWindow GLCanvas m_qtWindow=0x13fad70
14:07:18: Debug: wxWindow::~wxWindow frame m_qtWindow=0x13f4dd0

"Painter not active" is suspicious and shouldn't be there, basically it means we try to paint in a device that is not currently enabled by Qt to do so (and in Qt, you cannot paint from outside a PaintEvent).
This seems to be related to Refesh call, as inside the event it seems to work ok.
BTW, ouside the painting event, wxQT uses QPicture to record the painting instruction and then replaying them inside an event (using wxClientDC). That should work in most cases.

Sometimes this has to do with not using the current QWidget for painting, for example, in QScrollArea you should begin painting in the viewport(), not in the widget directly.
There are other very wierd cases (and very unusual) when painter suddenly desactivates, but I don't now if that is a problem of Qt itself.
The Qt doc doesn't says nothing special, and "opengl-overpainting" example seems to painting directly over the QGLWidget (QPainter painter(this);), but it says you have to call setAutoFillBackground(false); to disable qt erasing the background automatically.
You can take a look at wxWindow::QtHandlePaintEvent for more clues about how wxQT tries to follow the erasing and painting procedures of wxWidgets. You can enable an if there to get more verbose debugging messages.

I don't have any experience with OpenGL, so I cannot being of much more help here.

Just in case, for comparision, this is how it looks in wxGTK3:
wxgtk3_opengl_cube_sample

Owner

Very strange, wxQtHandleDestroyedSignal is not a member of wxQtEventSignalHandler

@vadz

Curious: what is the title of the toolbar? In wx API name is really just some string associated with the widget, it's not supposed to be user-visible at all. Is it used like this here?

Owner

The "title" in qt seems to be used in the window's context menu according qt docs.

@vadz

s/it/its/

@vadz

This is called WXK_NONE.

seandepagnier and others added some commits Aug 1, 2014
@seandepagnier seandepagnier disable qt auto buffer swapping 5a0804b
@seandepagnier seandepagnier Merge branch 'SOC2014_QT' of https://github.com/reingart/wxWidgets in…
…to test
c9ba29e
@reingart reingart Merge pull request #47 from seandepagnier/test
A few small changes
5e3ef55
@reingart reingart More Dialogs (file, dir, color, font), adapted from work by @seandepa…
…gnier

Merged manually from commits done by Sean, adapted to conform current wxQT conventions (GetHandle)
bed605f
@seandepagnier seandepagnier allow handler to work from constructors of classes like filedialog
we should do this for all the classes
76940df
@reingart reingart Merge pull request #48 from seandepagnier/test
allow handler to work from constructors of classes like filedialog
404f5d7
@seandepagnier seandepagnier Correct dialog logic and dirdialog setup 0e56269
@seandepagnier seandepagnier add FD monitoring support b9365e2
@reingart reingart Merge pull request #49 from seandepagnier/test
FD monitoring working
1567d64
@reingart reingart Move internal utilities to private & credits update
--HG--
rename : include/wx/qt/converter.h => include/wx/qt/private/converter.h
rename : include/wx/qt/utils.h => include/wx/qt/private/utils.h
ceb7f67
@seandepagnier seandepagnier logic corrections to prevent certain dialogs from crashing b3892e3
@seandepagnier seandepagnier implement copy from icon 9c95115
@reingart reingart Implemented system settings get metric for wxQT 90d6fb1
@reingart reingart Removed *m_qtDialog no longer used (crashing date picker) 4e1fd1e
@seandepagnier seandepagnier implement missing routines from wxBitmap
Why do we need to reference count our QPixmaps when Qt is already?
986ebcb
@reingart reingart Avoid unused variables compiler warning in wxQT 6c92a0b
vadz and others added some commits Aug 6, 2014
@vadz vadz Don't document wxFileType::GetIcon() as unimplemented under OS X.
It is implemented and supposed to work.

See #4562.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77016 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
afbec1b
@a-wi a-wi Remove unnecessary assertion in wxPGProperty::GetChoiceSelection
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77017 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
e58975a
@vadz vadz Allow requesting core OpenGL profile and explicit OpenGL version.
Add WX_GL_CORE_PROFILE and WX_GL_{MAJOR,MINOR}_VERSION attributes which can be
used to use modern OpenGL with wxGLCanvas.

Closes #16402.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77018 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
3c7ba39
@reingart reingart Use internal wx functions for mbstowcs & wcstrombs in wxQT (Android)
Android ones seems to be buggy and not completely implemented (TODO: investigate Qt or Java string conversion functions)
fa255be
@reingart reingart Add missing decl's for wscdup, wcslen, et al in wxQT (Android) 5968a3e
@reingart reingart Add missing guard for console app trait loop in wxQT 749fd83
@vadz vadz Add wxGCD() helper function.
It is needed in wxMSW code and it looks like it could be useful to the library
users, so make it public.

See #16254.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77019 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
e871a21
@vadz vadz Fix drawing on wxDC when using right-to-left layout in wxMSW.
Avoid integer overflow when setting wxDC scale. This affected (i.e. broke)
drawing in RTL but probably not only that.

Closes #16254.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77020 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
b5358ce
@vadz vadz Remove the files remaining from project-specific MSVS solutions.
These files are not used any more since r77008, there is only wx_setup.props
now.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77021 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
7e6515e
@reingart reingart Provisional guard of wxLocale::GetInfo in wxQT (android)
Android's lconv seems dummy (TODO: should investigate Java api)
b49784a
@vadz vadz Add wxRendererNative::DrawGauge() method.
Add the method with the native implementations for MSW and OS X and a generic
version fallback.

Closes #16406.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77023 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
86cf756
@vadz vadz wxOSX compilation fix after the last commit.
Add the missing wx/time.h header required for using wxGetLocalTimeMillis().

Also add WXUNUSED() around the unused parameters of DrawGauge().

See #16406.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77024 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
07e57eb
@reingart reingart Guard fixed default configuration for Android with wxQT 4004acc
@reingart reingart Merge master trunk into GSOC 2014 QT branch 3bba20e
@a-wi a-wi Remove temporary fix for drawing check box in the wxPG edit mode with…
… RTL layout

Since the issue is fixed (r77020) this hack is no longer necessary (see #16254).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77025 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
6871f5f
@reingart reingart Fix checkbox deletion problem in wxQT
WXValidateStyle was failing (assertion) so the constructor wasn't calling QtCreateControl properly to initialize internal m_qtWindow pointer. Then the checkbox Qt widget wasn't cleanly deleted.
Also, removed the guard in the exec test that was causing a crash due the deletion problem, now all tests run without crashing.
e2b28cf
Paul Cornett fix running on GTK < 2.10 when built with later, broken in r72935
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77026 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
099ca52
@vadz
vadz commented on e2b28cf Aug 9, 2014

Sorry, I still don't understand what's going on here. If this change was enough to fix the crash, doesn't it mean that we delete some uninitialized QWidget* somewhere? I.e. isn't the real problem in wxQtCheckBox which is unsafe to delete if it hadn't been fully created?

Owner

No, the wxCheckBox control was not correctly initialized, so the QWidget was not being deleted by the base destructor (wxWindowQt:~wxWindow line 179).
wxQtCheckBox is a thin helper that is auto-initialized in its constructor.
The real problem is unsafe to delete any wxControl that isn't fully created (not added to parent, no size/pos, no styles, etc., and pointer not assigned to base class so it cannot be deleted by the base destructor).
This was a special case (indeed invalid to test it), in most normal situations, Create should not fail.

vadz replied Aug 9, 2014

This may well not be a normal case, but it will still occur and waste time of whoever is going to debug it. Destroying a not initialized object really should not crash, if destroying QWidget crashes before it's added to the parent, we should keep track of whether this was done or not and not do it (better leak than a crash) or do it in some other way (better if possible) in this case.

Owner

This is not the case of "destroying a not initialized object", this case is destroying a incorrect initialized object due an unhandled assertion. In a normal scenario, you'll get a nice warning or a SIGTRAP in the exact place the of the offending code.
wxFAIL_MSG raisen by WXValidateStyle should give the developer enough warning and will not crash (except if assertions are not honored normally like in unit tests).
No other control suffer this (QtCreate is called always), and even check box will work now correctly.
TLW are not affected either.
This was just WXValidateStyle( &style ); in the wrong place, nothing more serious than that, unit tests shows that so far.
No other port is keeping track of badly created controls or any other workaround AFAICS.
There is some space to improvement about m_qtWindow base pointer handling, but this was already discussed in #43 and until special cases could be contemplated (and no more boilerplate is added), there is no definitive better solution than current one.

vadz replied Aug 9, 2014

I understand all this, but I still don't know why couldn't we kill this latent crash once and for all.

A possible scenario I had in mind was someone copying an existing control (anything but wxCheckBox) to wrap some other Qt widget, getting some style wrong by accident and then having exactly the same problem in the test suite. I don't believe it's particularly unlikely and if preventing it from happening is as simple as I think (i.e. avoid calling delete() when this would result in a crash), I think it's worth doing it.

Owner

The problem is reverse: we are not calling delete if the control is not properly initialized by the derived class (the last thing done in PostCreation is assign the derived m_qtCheckbox to m_qtWindow base pointer so the wxWindow destructor is aware of it and can do the deletion).
That was causing the crash because the wxCheckbox was deleted and the QCheckBox wasn't (the opposite scenario you're describing)

So, the problem that worries you has already a safety check in place, we avoid call destruction if this result in a crash (m_qtWindow will be null in that case, so it will not destroyed by ~wxWindow, assuming the derived class has to do a special destruction procedure).

If anyone copies a current control, and puts a wxMSG_FAIL or similar assertion in the WRONG PLACE in the contructor, unit tests could crash, yes, but user program should not crash.
Also it will fail it the user doesn't call wxControl::Create or QtCreateControl, but that is already in place so that user should be doing something nasty writing his own construction / destruction procedures, and it will be quickly noticeable as sizing, positioning and painting will not work properly.

This is something similar to the wxGTK way, where it uses m_widget as the base pointer and m_widgetCheckbox in the derived class.
I bet that if in wxGTK you put the assertion between m_widgetCheckbox = gtk_check_button_new_with_label(""); and m_widget = m_widgetCheckbox;, unit tests will crash too as it is a pretty parallel case.

Just doing checks and assert in the correct place (before creating the qt control) will be safe as in other ports, maybe this could be documented or commented in each ctor.

BTW, WXValidateStyle( &style ); could be moved to the start of constructor like in wxGTK to avoid any confusion.

vadz and others added some commits Aug 9, 2014
@vadz vadz Fix wxDC::DrawRectangle() when using RTL in wxMSW.
Extend the correct edge of the rectangle (always the physical right, not the
logical right) to fix off by one errors in RTL mode, affecting notably wxGrid.

See #16250.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77028 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
992671d
@vadz vadz Remove dynamic loading of GDI functions from wxMSW wxDC code.
All of these functions (AlphaBlend(), SetLayout(), SetWorldTransform(), ...)
are available in XP which is the minimally required version.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77029 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2bebe21
@vadz vadz Fix markup on the preprocessor symbols documentation page.
Due to an apparent bug in Doxygen 1.8.2 (the version currently used for the
online documentation generation), using "@c __FOO__" not only renders __FOO__
in fixed width font, but also makes it bold (due to bad interaction with
Markdown support?), so use <tt>__FOO__</tt> instead to work around this.

And in one case, escape underscores explicitly (in __VISUALC7__) as they were
still interpreted, even inside <tt>.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77030 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
780b9d1
@csomor csomor using common implementation avoiding out-of-order redraws
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77031 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
50d5394
@csomor csomor fixing background style
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77032 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
ae2f2a1
@reingart reingart Fix string conversion from Qt to use UTF8 51fd4ba
@csomor csomor removing code for pre 10.6 systems
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
f71ea69
@csomor csomor removing code for pre 10.6 systems
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77034 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1d21bd0
@csomor csomor removing code for pre 10.6 systems
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77035 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
b79595d
@csomor csomor removing code for pre 10.6 systems
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77036 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
0094b93
@vadz vadz Remove manual mirroring in RTL case from wxGrid code.
This is not necessary as wxDC already inherits RTL from the window itself and,
in fact, breaks the display when using RTL.

Closes #16250.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77038 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
c1a2d55
@vadz vadz Link wxMSW with msimg32.lib now that AlphaBlend() is used statically.
Implicitly link msimg32.lib in when using MSVC and add it to MinGW (and
Borland) makefiles.

This should have been part of r77029.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77039 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
afdb989
@csomor csomor remove outdated file
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77040 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
9fa8977
@csomor csomor file not needed anymore
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77041 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
3139f75
@csomor csomor updated files without glgrab
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77042 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
c761631
@reingart reingart Fix event loop compilation issues wxQT Android
 * Proper guard GetEventLoopSourcesManager
 * Implement wxAppTraits::GetEventLoopSourcesManager (not only wxGUIAppTraits) if console event loop is disabled
 * Remove unused apptbase.h in wxQT (it is using the unix version)
 * Minor fix to headings in android setup.h (BTW, is that file used at all?)
7bb3cdf
@csomor csomor updated files without glgrab
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77043 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
808bf59
@csomor csomor updated files without glgrab
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77044 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
bcb75de
@csomor csomor get rid of execute.h
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77045 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
ffb860c
@csomor csomor get rid of execute.h
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77046 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
f1d2aa8
@csomor csomor no filepath subgroups in xcode projects
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77047 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
7c13d6b
@vadz vadz Use NMTVDISPINFO instead of TV_DISPINFO in wxMSW code.
The latest w32api 4.0.3, used by MinGW project, still didn't manage to apply a
one line fix to define TV_DISPINFO correctly, so tweak our sources to avoid
using it.

See #15537.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77050 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
3a0c01c
@vadz vadz Correct instructions for building wx applications with MSVC.
Use the correct $WXWIN/include/msvc path instead of the non-existing
$WXWIN/msvc.

Also mention that $WXWIN should actually be $(WXWIN) for MSVC.

Closes #16410.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77051 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
ffcfcb5
@csomor csomor preparing for multi-lib builds
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77052 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
166bda1
@reingart reingart Remove duplicate methods in wxRichTextImage interface (for wxPython) a2ca2e8
@reingart reingart Add missing ok method to wxQT accel table (for wxPython) a963314
@reingart reingart Add missing has alpha method to wxQT bitmap (for wxPython) f6c7100
@reingart reingart Add missing get pixel stub to wxQT colour (for wxPython) 23831f9
@reingart reingart Add missing cursor constructors to wxQT (for wxPython) b025018
@reingart reingart Add missing setter/getters to wxQT data format (for wxPython) c0b06e1
@reingart reingart Add generic drag image to wxQT (for wxPython) 8ab21a4
@reingart reingart Add missing virtual stub to wxQT listctrl (for wxPython) c86df2c
@reingart reingart Add mask to bitmap conversion for wxQT (wxPython) 01c0e76
@reingart reingart Add missing IsTDI method to MDI in wxQT (wxPython) 1e8abd6
@reingart reingart Avoid ambiguity with wxControl::GetDefaultBorder in wxQT radiobox (wx…
…Python)
bf0369d
@reingart reingart Unprotect CreateTool in wxQT toolbar (wxPython) c462927
@reingart reingart Add window getter/setter for wxQT tooltip (wxPython) 21450eb
@reingart reingart Fixed ctor and missing methods of task bar icon for wxQT (wxPython) 4223a42
@csomor csomor one call is enough
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77053 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
53fc25b
@reingart reingart Fix interface for grid renderers best height/width 000b3e5
@csomor csomor multi-lib configs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77054 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
10740f2
@vslavik vslavik Fix lossy conversion warning in wxString::reverse_iterator::operator-.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
19e8a43
@vadz vadz Return correct string from wxEVT_TEXT wxComboBox events.
wxCommandEvent::GetString() could return empty string for the
programmatically-generated wxEVT_TEXT events from a wxComboBox.

Fix this by extending the on-demand string retrieval in wxCommandEvent to
wxComboBox as well (it was done only for wxTextCtrl).

Also add a unit test checking that the string has the expected value in the
events sent by all wxTextEntry-derived controls.

Closes #3901.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77057 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
edad961
@csomor csomor preproc changed for multi-lib
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77058 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2c8ef91
@csomor csomor multi-lib template
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77059 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
5bd081a
@csomor csomor multi-lib cocoa project
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77060 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
7181e98
@csomor csomor new separate config file for base
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77061 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
da934c9
@csomor csomor naming closer to Makefile
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77062 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
0b76c26
@csomor csomor naming closer to Makefile
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77063 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
f6ce35d
@csomor csomor updated AppleScript for multilib builds
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77064 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
fe28a8a
@csomor csomor updated multi-lib project file with naming close to Makefile convention
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77065 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
22f1f3e
@reingart reingart Remove wxQT textdlg (use generic)
Note that textdlg.cpp was missing from the build (it only defines a couple of default text messages, needed for example by wxPython to avoid undefined symbol)
a47d981
@reingart reingart Revert generic text dialog due wxQT merge changes
 * This solves the issues of the previos commit about the extern defaults wxGetTextFromUserPromptStr / wxGetTextFromUserPromptStr
 * Removed the now superflous textdlg.cpp that was used to define that defaults
6aeaa35
@reingart reingart Implement missing default button size for wxQT (wxPython) 142cdab
@reingart reingart Fix text extent metrics with spaces in wxQT 50d10e2
@reingart reingart Fix status bar removal SIGSEGV in wxQT 6a3445c
@reingart reingart Fix status bar initial field count in wxQT 91141d0
@reingart reingart Fix SIGSEGV if app was not initialized in wxQT 7c5125a
@JulianSmart JulianSmart Fix deletion of cells in defragment
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77066 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
40c8413
@reingart reingart Initial documentation for wxQT 539d969
@vadz vadz Restore dynamic linking of GDI functions for non-MSVC.
This partially reverts the changes of r77029 and r77039: now functions such as
Set/GetLayout(), AlphaBlend() and GradientFill() are still called (almost)
directly when using MSVC but pass by dynamic loading with the other compilers,
which don't have #pragma comment(lib) and, in MinGW case, also lack some of
these functions in their libraries even if we do link with them.

Closes #16411.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77068 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
21da20d
@vadz vadz Add support for paragraph spacing attribute to wxTextCtrl in wxMSW.
Use PFM_SPACEAFTER/PFM_SPACEBEFORE to implement support for them.

Closes #16417.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77070 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
a4f707b
@vadz vadz Allow using ESC as accelerator in wxMSW again.
This ended up being broken due to an interplay between different unrelated
changes (at least r15120 and r41134) which were both correct, but didn't work
well together and resulted in not only preventing IsDialogMessage() from
handling ESC, but also our own accelerator tables.

Fix this by doing the check for IsDialogMessage() brokenness in
MSWProcessMessage() itself, just before calling it, instead of doing it in
MSWShouldPreProcessMessage() which is (and must be) called before
MSWTranslateMessage() which checks for accelerators using ESC.

Closes #3813.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77071 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
a728a9a
@reingart reingart Complete build docs for Ubuntu/Android wxQT 06a7976
@reingart reingart Merge master trunk into GSoC2014 QT branch f0db771
@reingart reingart Add MiniFrame TLW for wxQT
Also enables support for frameless and no task bar styles.
Note that tool window style seems to have no effect on Ubuntu (tested with the Qt official examples)
7e39368
@reingart reingart Fix special (unreal) window handling in wxQT
See wxTabFrame (AUI book), that is a special case as it doesn't have a related QWidget counterpart
767026c
@reingart
Owner

This fixes the AUI Demo sample:

wxqt_aui_sample_app

vadz replied Aug 17, 2014

Great to see wxAUI working, but it would be nice to know more about these "unreal" windows: do just wxControls have the associated QtWidgets then but not plain wxWindows? Or how does it work? Would be nice to have something about this in docs/qt/internal.txt (or .md).

Owner

"Unreal" windows has nothing to do with wxQT per se, it is just a wxWindow subclass that didn't call Create on his constructor (hence, it is not a visible actual widget).
This seems to be a "feature" to allow some kind of internal grouping and sizing used in AUI: https://github.com/reingart/wxWidgets/blob/SOC2014_QT/src/aui/auibook.cpp#L1473

In wxQT, wxWindow and wxControl has the same behavior than in wxGTK, they construct a minimal widget (QWidget) by default, similar to a empty wxPanel.

I didn't found another internal.txt doc (for to use as a base), but I'll start to revise the wiki and see what I could do.

@tierra
Member
tierra commented Aug 29, 2014

About commit credits: I should have a SVN account (MAR, RD created it on 9/29/13) but I don't know if it still active nor if I'm in the authors file, in order to preserve authorship and not getting more troubles.

Odd that RD doesn't have you listed in:
http://svn.wxwidgets.org/users.cgi

I did just add you to the git-svn author mapping though, so you're set there.

@reingart
Member

@tierra : I did a svn commit and everything seems ok. I think I'm not listed in the users page as I never used the user before, until today.

@reingart
Owner

Screenshot (Cairo Drawing sample):

wxqt_drawing_sample_cairo

There are some minor issues about background color (smiley) as it is using transparency instead cairo_qt_surface.

@reingart
Member

Widgets sample screenshot:

wxqt_widgets_sample_running

Still some issues with book control, but most core controls should be working "native".

@reingart
Member

More screenshots:

Image sample:

wxqt_image_sample

(it seems to be some issue in wxQtDCImpl::DoDrawBitmap with pixmap copying when painting)

Fonts sample:

wxqt_font_sample

(noted some issue with initial font in textbox, this could be fixed in a pending commit from @seandepagnier)

Animation demo:
wxqt_animation_demo_sample

Layout:

wxqt_layout_sample

(correct sizing due statusbar height is pending from a commit of @seandepagnier )

Property Grid sample:

wxqt_propgrid_sample

Wizard sample:

wxqt_wizard_sample

WrapSizer sample:
wxqt_wrapsizer_sample

@reingart reingart changed the title from Merge personal Google Summer of Code 2014 wxQt for historic purposes to Merge personal GSOC 2014 wxQt branch for historic purposes Aug 29, 2014
@reingart reingart changed the title from Merge personal GSOC 2014 wxQt branch for historic purposes to Merge personal GSoC 2014 wxQt branch for historic purposes Aug 29, 2014
@reingart reingart changed the title from Merge personal GSoC 2014 wxQt branch for historic purposes to Merge personal GSoC 2014 wxQt branch history Aug 29, 2014
@reingart reingart changed the title from Merge personal GSoC 2014 wxQt branch history to Merge personal GSoC 2014 wxQt branch (history) Aug 29, 2014
@reingart reingart changed the title from Merge personal GSoC 2014 wxQt branch (history) to Merge wxQt personal GSoC 2014 branch (history) Aug 29, 2014
@tierra
Member
tierra commented Sep 12, 2014

This can be closed now that this is merged to SVN trunk, right?

@vadz
Contributor
vadz commented Sep 12, 2014

Yes, thanks.

@vadz vadz closed this Sep 12, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment