On Thu, 19 Nov 2020, John Ralls wrote:
On Nov 19, 2020, at 1:41 PM, Allin Cottrell <cottr...@wfu.edu> wrote:
On Tue, 17 Nov 2020, John Ralls wrote:
On Nov 17, 2020, at 12:53 PM, Allin Cottrell <cottr...@wfu.edu> wrote:
I just tested full-screening and red button closing GnuCash built yesterday
with Gtk+-3.24.23 on macOS 11 and run with MallocScribble=1 to make sure that a
use-after-free would crash. It closed cleanly, no crash. You might diff
GtkNSWindow.c between Gtk2 and Gtk3 to see if there's something helpful there.
GtkNSWindow.c ? I'm not seeing a file of that name (or close) in the GTK 2
codebase.
Sorry, gdk/quartz/GdkQuartzWindow.c.
Thanks, I see now: it's GdkQuartzWindow.c in Gtk2 and GdkQuartzNSWindow.c in
Gtk3. Looks like there are several updates for recent macOS in the latter, and
backporting such changes to Gtk2 might be useful for retrogrades such as myself.
One question. There's a trope that appears in several places in the Gtk2
version:
GdkWindow *window = [[self contentView] gdkWindow];
GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
while in the Gtk3 version, in the corresponding places, we find:
GdkWindow *window = [[self contentView] gdkWindow];
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
Is this difference cosmetic, or is the intervening cast from *gdkWindow to
*GdkWindowObject really required in the Gtk2 case?
It's required in Gtk2 because there GdkWindow is a typedef of struct
_GdkDrawable, which contains only an instance of its parent class--in the case
of GdkWindow that would be a GdkWindowObject. Without it the compiler would
look at struct _GdkDrawable for a member impl and fail to find it; with the
cast it looks in struct _GtkWindowObject instead where it does find it.
That indirection was removed from Gtk3 so no more cast. There are lots of other
changes in Gtk3, particularly in the last couple of years as the architecture
changed to ease migration to Gtk4. Quartz hasn't kept up with all of it but
you'll still need to spend significant time learning the internals and
differences to successfully backport.
Thanks for the clear explanation, John.
Allin Cottrell
_______________________________________________
gtk-osx-users-list mailing list
gtk-osx-users-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-osx-users-list