GNOME Bugzilla – Bug 720550
Refactor GtkApplication
Last modified: 2013-12-16 19:14:01 UTC
See patch.
Created attachment 264314 [details] [review] Refactor GtkApplication gtkapplication.c has turned into a bit of an #ifdef mess over time, and many of the current checks are incorrect. As an example, if you build Gtk for wayland, and exclude the X11 backend, much of the functionality required by wayland (such as exporting menu models) will be disabled. Solve that by introducing a backend mechanism to GtkApplication (named GtkApplicationImpl) similar to the one in GApplication. Add backends for Wayland, X11 and Quartz, with X11 and Wayland sharing a common 'DBus' superclass. GtkApplicationImpl | /--------------+-------------------\ | | GtkApplicationImplDBus GtkApplicationImplQuartz | /-----------+-----------------\ | | GtkApplicationImplX11 GtkApplicationImplWayland GtkApplicationImpl itself is essentially a bunch of vfuncs that serve as hooks for various things that the platform-specific backends may be interested in doing (startup, shutdown, managing windows, inhibit, etc.) With this change, all platform specific code has been removed from gtkapplication.c and gtkapplicationwindow.c (both of which are now free of #ifdefs, except for a UNIX-specific use of GDesktopAppInfo in gtkapplicationwindow.c). Additionally, because of the movement of the property-setting code out of GtkApplicationWindow, the _GTK_APPLICATION_ID properties (and friends) will be set on non-GtkApplicationWindows, such as dialogs.
Review of attachment 264314 [details] [review]: Seems that this is mostly code rearrangement. One question is why we set window properties on realize in the X11 case, but on map in the Wayland case. In particular, since you are calling the hook at the end of map - isn't that too late ?
The way gtk_surface is currently defined/implemented in mutter, it only exists for the lifetime of the xdg_surface. We can change this around in mutter, but I'd prefer to keep it as-is.
Attachment 264314 [details] pushed as 7fd81cf - Refactor GtkApplication Thanks for the quick review.