Fix assert in webview sample when viewing pages without a title.
Trying to append a menu item with empty label resulted in an assert (at least
under wxGTK but probably elsewhere too), and in any case wasn't very useful,
so use "(untitled)" instead in this case.
We were getting crashes due to using methods of already half-destroyed object
when wxWebView window was destroyed in wxGTK, with the following abbreviated
stack:
#0 wxgtk_webview_webkit_load_status (widget=0x12eb380, webKitCtrl=0x13ee040) at src/gtk/webview_webkit.cpp:38
...
#8 0x00007ffff05ca281 in dispatchDidFailLoad (error=..., this=0x7fffe32db900) at ../Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:1054
#9 WebKit::FrameLoaderClient::dispatchDidFailLoad (this=0x7fffe32db900, error=...) at ../Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:1049
#10 0x00007ffff0b0de54 in WebCore::FrameLoader::checkLoadCompleteForThisFrame (this=0x7fffe3221b70) at ../Source/WebCore/loader/FrameLoader.cpp:2128
#11 0x00007ffff0b0cfde in WebCore::FrameLoader::checkLoadComplete (this=<optimized out>) at ../Source/WebCore/loader/FrameLoader.cpp:2370
#12 0x00007ffff0b0a3b2 in WebCore::FrameLoader::receivedMainResourceError (this=0x7fffe3221b70, error=..., isComplete=true) at ../Source/WebCore/loader/FrameLoader.cpp:2640
#13 0x00007ffff0b423b7 in cancel (error=..., this=0x7fffe3279680) at ../Source/WebCore/loader/ResourceLoader.cpp:399
#14 WebCore::ResourceLoader::cancel (this=0x7fffe3279680, error=...) at ../Source/WebCore/loader/ResourceLoader.cpp:353
#15 0x00007ffff0b420c0 in WebCore::ResourceLoader::cancel (this=<optimized out>) at ../Source/WebCore/loader/ResourceLoader.cpp:350
#16 0x00007ffff0afda9e in WebCore::DocumentLoader::stopLoading (this=0x7fffa081d800) at ../Source/WebCore/loader/DocumentLoader.cpp:258
#17 0x00007ffff0b09561 in stopAllLoaders (clearProvisionalItemPolicy=WebCore::ShouldClearProvisionalItem, this=0x7fffe3221b70) at ../Source/WebCore/loader/FrameLoader.cpp:1523
#18 WebCore::FrameLoader::stopAllLoaders (this=0x7fffe3221b70, clearProvisionalItemPolicy=WebCore::ShouldClearProvisionalItem) at ../Source/WebCore/loader/FrameLoader.cpp:1501
#19 0x00007ffff0b0d17a in WebCore::FrameLoader::stopForUserCancel (this=0x7fffe3221b70, deferCheckLoadComplete=false) at ../Source/WebCore/loader/FrameLoader.cpp:1541
#20 0x00007ffff05f3a36 in webkit_web_view_dispose (object=0x12eb380) at ../Source/WebKit/gtk/webkit/webkitwebview.cpp:1327
#21 0x00007ffff27ff7a0 in g_object_run_dispose (object=0x12eb380) at /tmp/buildd/glib2.0-2.32.3/./gobject/gobject.c:1061
#22 0x00007ffff4476c1e in gtk_scrolled_window_forall (container=0x7fff9c007d10, include_internals=0, callback=0x7ffff452cd20 <IA__gtk_widget_destroy>, callback_data=0x0)
at /tmp/buildd/gtk+2.0-2.24.10/gtk/gtkscrolledwindow.c:1085
#23 0x00007ffff439872f in gtk_container_destroy (object=0x7fff9c007d10) at /tmp/buildd/gtk+2.0-2.24.10/gtk/gtkcontainer.c:1073
...
#28 0x00007ffff443cd60 in gtk_object_dispose (gobject=0x7fff9c007d10) at /tmp/buildd/gtk+2.0-2.24.10/gtk/gtkobject.c:421
#29 0x00007ffff27ff7a0 in g_object_run_dispose (object=0x7fff9c007d10) at /tmp/buildd/glib2.0-2.32.3/./gobject/gobject.c:1061
#30 0x00007ffff6cb65ac in wxWindow::~wxWindow (this=0x13ee040, __in_chrg=<optimized out>) at src/gtk/window.cpp:2367
#31 0x00007ffff6d71241 in wxControlBase::~wxControlBase (this=0x13ee040, __in_chrg=<optimized out>) at src/common/ctrlcmn.cpp:49
#32 0x00000000005cf761 in wxControl::~wxControl (this=0x13ee040, __in_chrg=<optimized out>) at include/wx/gtk/control.h:27
#33 0x00007ffff7bd1eae in wxWebView::~wxWebView (this=0x13ee040, __in_chrg=<optimized out>) at include/wx/webview.h:96
#34 0x00007ffff7bd3443 in wxWebViewWebKit::~wxWebViewWebKit (this=0x13ee040, __in_chrg=<optimized out>) at include/wx/gtk/webview_webkit.h:26
#35 0x00007ffff7bd34ae in wxWebViewWebKit::~wxWebViewWebKit (this=0x13ee040, __in_chrg=<optimized out>) at include/wx/gtk/webview_webkit.h:26
Fix this by setting m_isBeingDeleted flag for wxWebViewWebKit early and
checking it in the callback.
Don't change client size of TLW when centering it in wxGTK.
Setting the frame client size and then calling Centre() on it resulted in the
frame coming up with a wrong client size in wxGTK because the call to Centre()
resulted in calling wxTopLevelWindow::DoSetSize() which unconditionally reset
m_deferShowAllowed to true, undoing setting it to false in DoSetClientSize().
Only reset m_deferShowAllowed if the size was really changed but not if the
window was only moved, as happens when centering it.
Václav Slavík [Fri, 20 Jul 2012 20:23:45 +0000 (20:23 +0000)]
Call Realize() later in XRC toolbar handler (patch #13888).
This is a workaround for a deeper compatibility problem in Cocoa
implementation (see the bug for detailed discussion), but for now, this
simple workaround is much better than not doing nothing.
Use both URL-specific and plain text formats in wxGTK wxURLDataObject.
Just as in wxMSW, it makes sense to put URLs on clipboard (or drag them) in
both URL-specific and plain text formats to facilitate pasting (or dropping)
them into other applications.
So make wxURLDataObject in wxGTK a composite data object containing both its
old data object and wxTextDataObject.
Use proper format in wxGTK clipboard selection handler.
For some incomprehensible reason, GDK_SELECTION_TYPE_STRING was hard coded for
all non-text formats even though it was clearly never the right format to use.
Use the correct value specified by the format instead.
Use text/uri-list instead of x-moz-url in wxGTK wxURLDataObject.
The standard exchange format for URLs is text/uri-list and not the deprecated
and Firefox-specific x-moz-url, support for which was moreover implemented
incorrectly anyhow.
Also add an example of copying URLs to the dnd sample.
See https://developer.mozilla.org/En/DragDrop/Recommended_Drag_Types for more
information.
Don't use delayed destruction for sockets in other threads.
The delayed destruction mechanism is not MT-safe, so using it for wxSocket
objects destroyed from threads other than main resulted in crashes. Luckily,
it is not necessary to use it for such sockets anyhow as they don't risk
receiving any events -- which are only dispatched in the main thread -- and so
can be destroyed immediately.
So do destroy them directly instead of just scheduling for later destruction
when wxSocket::Destroy() is called.
Rename wxFileSystemWatcherBase::DoAdd() to AddAny() and make it public.
Make this method public to fix compilation after the recent changes as
traverser classes can't call it otherwise (no idea why did it compile with
g++). And give it a better name just in case people decide to call it even
though it's not documented and described as private in comment (but perhaps we
could make it really public later).
Fix bogus asserts in Unix wxFileSystemWatcher for removed files.
Store the recently removed file descriptors and don't assert if we get an
event for one of them, this can happen and is normal unlike unexpected events
for completely unknown descriptors for which we still keep an assert.
Mention that the change log should be uploaded too (it would be perhaps more
useful to have a change log for just this release but for now upload the
entire file) and that the llatest available version must be update on the web
site.
Ensure that names of saved XPMs are valid C identifiers.
The name of the XPM should be based on the file name but can't always be
exactly equal to it as it's possible (and relatively common, e.g.
"foo-24.xpm") to have characters forbidden in identifiers to appear in the
file names. Ensure that we use a valid C identifier here.
Activate OLE ActiveX controls before requesting their window.
Change the order of IOkeInPlaceActiveObject::GetWindow() and
DoVerb(OLEIVERB_INPLACEACTIVATE) calls and do the latter first now as
otherwise GetWindow() returned NULL for standard ActiveX controls created by
MFC.
Paul Cornett [Wed, 11 Jul 2012 06:36:38 +0000 (06:36 +0000)]
Avoid creating and immediately destroying a wxGraphicsContext for most uses of wxGCDC.
This also causes the dummy "measuring context" to be properly initialized with a default font
Use the same console event loop in wxBase and wxCore in wxMSW.
Refactor the console event loop code into separate files to untangle it from
the GUI version and ensure that it doesn't depend on the GUI at all. It can
now be defined in the base library and simply reused by the core one.
This also makes the console event loop usable for other ports under Windows,
e.g. wxGTK.
Use "_x64" instead of "amd64" for x64 MSW makefile builds.
Still accept "amd64" as a valid TARGET_CPU value but also accept, and
encourage people to use, "x64".
Add a new section about the build system changes to the change log and added a
mini-TOC to it to make navigating it a bit easier and show what changes are
there at a glance.
Fix uninitialized variable warning in wxMSW wxFileSystemWatcher code.
This warning was harmless as the variable was in fact always initialized if
the code where it was used was reached but g++ 4.6.1 is not smart enough to
see it, just as MSVC for which we already had a workaround. So initialize it
explicitly just to suppress the warning.
Avoid warnings about uninitialized variables in TGA loading code.
Initialize the variables containing the colour components: even though they
should normally be always filled by Palette_GetRGB() call below, this
presumably might not happen for a corrupted image with invalid palette table
entries and g++ correctly complains about it.
Avoid unused variable warning in wxPropertyGrid code in non-wxGTK.
Put the variable only used in wxGTK inside "#ifdef __WXGTK__".
This fixes the warning but the real fix would be to get rid of this variable
completely and just fix whatever problem in wxWindow::Navigate() this was
supposed to work around.