Commit Graph

330 Commits

Author SHA1 Message Date
Vadim Zeitlin
329f60d7f3 Factor out wxTopLevelWindowGTK::GTKDoAfterShow()
Just extract the code generating wxEVT_SHOW for TLWs in wxGTK in its own
function before modifying it to avoid having to do it in two places.

No real changes, this is a pure refactoring.
2021-04-12 17:27:34 +02:00
Paul Cornett
55b7198e92 Remove some run-time dependencies on X11 backend with GTK3
As with Wayland, the X11 backend may not be available at run-time,
so types defined in it can't be used
2021-02-02 10:15:35 -08:00
Paul Cornett
3bad6ecf0b Make sure window is shown before trying to show it full screen, see #18942 2020-10-13 09:24:08 -07:00
Paul Cornett
bd835ee452 Fix a sizing/layout problem with GTK3
Relying on "check-resize" to detect when a "size-allocate" is in progess is
insufficient, resulting in the possibility of a window ending up with the wrong
size or position after inital layout. Using our existing "size-allocate"
handlers should be enough to detect the cases we care about.
See #18865
2020-08-01 21:23:34 -07:00
Vadim Zeitlin
325648136c Fix system colours in wxGTK wxSysColourChangedEvent handlers
Using wxSystemSettings::GetColour() in wxSysColourChangedEvent handler
in wxGTK could return the old colour value, before the change, because
the callback for notify::gtk-theme-name signal defined in wxTLW, which
generates wxSysColourChangedEvent, could be invoked before the callback
for the same signal in wxSystemSettings, which invalidated its cache.

Fix this by registering the former using g_signal_connect_after() and
thus ensuring that wxSystemSettings callback runs before it, and the
cache is cleared before wxSysColourChangedEvent handlers can use it.

Closes #18818.
2020-07-13 14:23:42 +02:00
Paul Cornett
687267b9db Fix the default background color reported for toplevel windows with GTK3
See #18811
2020-07-06 23:13:33 -07:00
Paul Cornett
2c62ac41c1 Set WM_CLASS class name as app display name
Gnome seems to use it as a fallback display name with X11. By default, it will
be the capitalized program name, which is what GTK would set it to anyway.
2020-05-23 11:14:00 -07:00
Paul Cornett
82b3efb88e Set title bar decorations under Wayland
By default GTK just gives you a close button
2020-04-18 16:26:22 -07:00
Paul Cornett
0a56399f3c Fix TLW decorations when GTK3 is using Client Side Decorations
We need to avoid setting Window Manager decorations or using deferred show
See #17971
2020-01-30 01:05:45 -08:00
Vadim Zeitlin
8b90073c83 Send kill focus events to modal dialogs earlier in wxGTK
Ensure that the dialog is still alive when it gets the kill focus event
for its child which had focus just before the dialog was closed (or any
other events generated by this child when it detects that it's losing
focus, such as wxEVT_SPINCTRL) by resetting focus when the dialog is
being hidden and not when it's being destroyed.

This makes the events order more consistent with wxMSW but also, most
importantly, safer, as wxEVT_KILL_FOCUS handlers could previously easily
reference the fields of an already half-destroyed wxDialog-derived
object by the time they were run during wxTopLevelWindowGTK destructor
execution.

Closes #18145.
2019-12-29 01:40:28 +01:00
Paul Cornett
db16c7af93 Avoid deferred show if frame is iconized 2019-08-25 21:10:52 -07:00
Vadim Zeitlin
70f40e2f6a Fix position returned for iconized windows in wxGTK
Don't lose window position when the window is iconized, as this prevents
it from being correctly saved by wxPersitentTLW, for example, resulting
in failures in the corresponding unit test.

Unfortunately there doesn't seem to be any simple way to just ignore the
bogus (0, 0) configure events that we get from GTK when the window is
iconized, as explained in the comment, so we're reduced to remembering
the last position and restoring it when we realize that the window got
minimized and not moved, after all. This is obviously not ideal, as
there is still a lapse of time when (0, 0) is returned, but there just
doesn't seem to be anything better to do.
2019-07-16 02:26:11 +02:00
Vadim Zeitlin
8cdd20667f Initialize wxTopLevelWindow::DecorSize in wxGTK
Add default ctor for this struct as it was too easy to forget to
initialize it otherwise, ending up with bogus values in it, as it
happened with wxTLWGeometry::m_decorSize, which resulted in a failure in
wxPersistTLW unit test and, probably, real code too.
2019-07-16 02:26:11 +02:00
Vadim Zeitlin
c0b0562533 Avoid many -Wparentheses warnings from gtk/gtk.h with gcc8
Add wx/gtk/private/wrapgtk.h wrapping gtk/gtk.h in pragmas disabling
these warnings and include it everywhere instead of directly including
gtk/gtk.h.

Also include wx/gtk/private/gtk2-compat.h from this wrapper header as it
was included by 90% of the files including gtk/gtk.h itself and it seems
to be better and simpler to just always include it.
2018-05-21 12:34:04 +02:00
Paul Cornett
cec5d067e5 Avoid deferred show when TLW decoration size is already known
See https://github.com/wxWidgets/wxWidgets/pull/789
2018-04-28 16:00:03 -07:00
Paul Cornett
91919f4514 Fix saving/restoring TLW position on HiDPI X11 display with GTK+3
X11 frame extents need to be converted to GTK+ "logical" units
2018-04-25 09:19:18 -07:00
Paul Cornett
572fe37898 Avoid calling default "key-press-event" handler
We have already done everything it does, and doing it again seems to
cause an infinite loop with WebKitGTK. See #17932
2018-01-06 11:07:11 -08:00
Paul Cornett
9249e823d9 Avoid gtk_window_set_opacity() with GTK+4 2017-12-19 21:48:34 -08:00
Paul Cornett
1235c7bb74 Avoid gtk_widget_is_composited() with GTK+4 2017-12-19 21:43:16 -08:00
Paul Cornett
3c2f575f8e Avoid old X11 fullscreen code with GTK+4 2017-12-17 21:51:49 -08:00
Vadim Zeitlin
d6af0236c5 Simplify GTK+ 2 version checks with a helper function
Use wx_is_at_least_gtk2(minor) instead of gtk_check_version(2, minor)
because it is more clear and also works as expected (i.e. returns true)
when using GTK+ 3 instead of creating difficult to notice bugs in the
code by failing the version check in this case.

See #18004.
2017-11-23 13:15:31 +01:00
Paul Cornett
7a7f715160 Fix "chaining up" to parent class in key-press-event handler
Getting the parent class was done incorrectly in 819638a7, causing
the chain-up to go to the current class rather than the parent.
2017-11-10 22:54:58 -08:00
Paul Cornett
ed8a541463 Use wxFALLTHROUGH 2017-10-17 09:21:45 -07:00
Vadim Zeitlin
a11e09fb11 Skip setting geometry hints for non resizeable windows in wxGTK
Avoid calling gtk_window_set_geometry_hints() when the window can't be
resized anyhow, this doesn't seem to be necessary and results in
warnings like the following when using Gnome:

gnome-session[xxx]: Window manager warning: Window 0xxxx (Minimal wx)
sets an MWM hint indicating it isn't resizable, but sets min size 198 x
154 and max size 268435454 x 268435454; this doesn't make much sense.

Closes https://github.com/wxWidgets/wxWidgets/pull/529
2017-08-09 20:57:12 +02:00
Paul Cornett
a533fb141d Fix unresponsive frame after using wxHtmlHelpFrame from a dialog. See #17837 2017-07-24 08:56:59 -07:00
Paul Cornett
d87a766214 Avoid showing hidden window during deferred show handling
See https://github.com/wxWidgets/wxWidgets/pull/512
2017-06-27 09:28:05 -07:00
Paul Cornett
61c8a7ca60 Use "notify::gtk-theme-name" from GtkSettings to generate wxSysColourChangedEvent
"style-updated" occurs frequently for other reasons, such as switching focus between TLWs
2016-12-13 09:07:01 -08:00
Paul Cornett
5fb89cb86e Support setting initial position for TLW with GTK3 2016-11-14 10:39:58 -08:00
Paul Cornett
9c3900e40d Cleaner fix for using deleted widget in idle callback
Use a slightly higher idle priority so callback runs before TLW is deleted,
and ref the widget just to make sure it doesn't disappear. Avoids accessing
de-allocated memory.
2016-11-05 17:27:57 -07:00
Paul Cornett
101c43d0aa Partial workaround for stale styling information with GTK3
We can trigger size events when we know the style cache has been updated.
See #16088
2016-11-01 23:18:26 -07:00
Paul Cornett
1ba59a410f Remove run-time dependencies on GTK3 backends for Wayland, Mir, Broadway
This allows running with a GTK+ library that was built with different backends
than the one wxWidgets was built with. Since GTK3 provides no way to determine
the backends available at run-time, avoid referencing symbols in the backends
by checking the type name of the GdkDisplay, on the assumption that they are
unlikely to ever be changed. The X11 backend is still required at run-time if
it was available at build-time, although this dependency could also be removed.
2016-08-31 09:39:25 -07:00
Vadim Zeitlin
9dc7a89ccd Check if widget is still valid in wxGTK size reset callback
The transient top-level window might have been already deleted by the time the
idle callback is executed, so check that the widget still exists before using
it.

This fixes multiple GTK+ errors on startup of an application showing any kind
of temporary windows (e.g. a splash screen) since the changes of the commit
bc4df78421.
2016-07-28 00:04:30 +02:00
Paul Cornett
4793e5b0a4 Avoid unresizable windows on HiDPI displays when using SetSizeHints()
see #17456
2016-03-21 09:46:46 -07:00
Andreas Falkenhahn
0777bf6b92 Fix wrong TLW size with horizontal decorations in wxGTK
Compare min/max width with m_width, not m_height, in GTKUpdateDecorSize() for
the logic to work as expected.

Closes #17455.
2016-03-20 15:50:13 +01:00
Igor Korot
abd4d80ebe Use gtk_widget_set_opacity() with new enough wxGTK3
This function replaces gtk_window_set_opacity() and could presumably work
better for the GTK+ versions supporting it.

Also avoid deprecation warnings, if they're ever enabled later, for
gtk_window_set_opacity() which we still have to use for older GTK+.

Closes #17106.
2016-02-24 03:12:48 +01:00
Paul Cornett
1908c41f36 Fix linking with gdk_mir_* functions
gdkmir.h header is missing extern "C" wrapper as of GTK+ 3.18.7
2016-02-10 23:22:58 -08:00
Paul Cornett
2bb8367cba Suppress deprecation warnings for resize grip
We need the code for older GTK3 versions
2016-02-10 09:35:15 -08:00
Paul Cornett
bc4df78421 Allow SetClientSize() to set correct size even when size of window decorations is not known
This should allow correct sizing of first TLW (when using SetClientSize())
with backends using client-side decorations such as Wayland.
2016-02-06 16:07:28 -08:00
Paul Cornett
91ea487281 Adapt window decorations cache for client-side decorations
Fixes size calculations for TLWs created after the first one,
with Wayland, Mir and Broadway. See #17336
2016-02-05 10:26:06 -08:00
Paul Cornett
cc48c42e17 remove no-longer-needed OnInternalIdle() override 2015-12-06 20:24:59 -08:00
Paul Cornett
84a77c0c32 remove unused global variable 2015-12-06 20:20:27 -08:00
Paul Cornett
d4d209dd39 Fix generation of wxEVT_ACTIVATE_APP
Avoid spurious events when showing most native dialogs
See #17260
2015-12-06 20:10:32 -08:00
Paul Cornett
a15e776dcd avoid gtk_widget_get_root_window(), deprecated in GTK+ 3.12 2015-10-10 11:50:27 -07:00
Tobias Taschner
5f75b7506f Remove Hildon framework support.
The Hildon framework was used for Nokia 770 and other Maemo devices.
This platform discontinued and hasn't seen a new release since 2011.
2015-08-26 22:49:53 +02:00
Dimitri Schoolwerth
0e6af4ac39 No code changes, fix some typos.
Change several occurrences of "it's" where "its" is meant, as well as a few other minor typos.



git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78497 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2015-02-15 17:11:44 +00:00
Paul Cornett
8f134c9a28 guard functions with wxCHECK_* macros rather than wxASSERT_*
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78281 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-12-17 17:44:06 +00:00
Paul Cornett
11cbe6ef70 Allow setting icon before m_widget is valid.
There is no need to require a valid m_widget,
the "realize" handler will take care of things later.
Closes #16731


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78270 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-12-13 17:40:29 +00:00
Paul Cornett
173cfe28a1 fix build when GDK_WINDOWING_X11 is not defined
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78163 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-11-19 18:59:43 +00:00
Vadim Zeitlin
a6b14c2ed1 Don't crash when switching to full screen in non X11-based wxGTK.
Only use internal X11 display if we're running in a such environment.

See #16688.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78160 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-11-19 13:29:23 +00:00
Vadim Zeitlin
015206314b Don't use frame extents when not using X11 in wxGTK.
See #16688.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78159 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-11-19 13:29:18 +00:00