 Right so yeah this is the native GTK UE which limited to the dialogues so first we'll do the usual demo that the OpenGL transitions are still working which they are so what was native in 6.0 was the the file dialogue which has always been native the tooltips became native in 6.0 popovers which are used in impress and they're used in calc as well and then the menu bar menus became fully native menu bar and menu in 6.0 coming on then the 6.1 we are I made all of the message dialogues native as well and then a handful of the simpler dialogues such as insert break there so they all became native dialogues as well now moving on to 6.2 sorry and 6.1 also more complicated warning dialogues are also native as well such as this PDF expert dialogue all right so 6.2 then what we have is 180 or so generic dialogues they're the simple ones that just have one page in the dialogue and then there's about 41 dialogues that contain multiple tabs and then there's about a hundred plus actual tabs and they're all combined together in multiple ways different dialogues will use different tabs and the same tab will reappear in different dialogues so the background tabs the background tab will reappear in about paragraph dialogue character dialogue and so on so in 6.2 which is released I think what is it soon enough anyway pretty much from my perspective all of the major dialogues are converted over to native GTK dialogues so that's the page dialogue in writer character dialogue format page etc etc there's a few ones that are still large dialogues that are not converted that I get to at the end but you'll definitely get the overall feel hopefully of fully native GTK dialogues until you start exploring some of the edge cases and some of the character dialogues in particular so here's an example of what the format character looks like when it's a GTK dialogue so what has changed here especially is that obviously in the GTK one where you have up there it says a liberation Sarif in the GTK entry and underneath it you have a GTK tree view there are two separate widgets that are now working together previously in the VCL land there was a single exploded GTK exploded VCL combo box where the drop-down list and the combo box entry were part of the same widget they're now two separate widgets which means that in practice that when you tab between them you're tapping twice there's two different elements there people seem to be reasonably happy with that they haven't noticed and haven't complained about it versus a lot of other things that have been complained about that we get to in a bit right it's a quick summary of how we got here which isn't that interesting at this point but we converted the file format that the widgets are described in from a legacy file format to GTK builder file format as the first step and that was described in terms of GTK widgets but actually implemented with the VCL widgets we added some extra layout widgets so we could get all that dynamic layout support and we could reuse then the Glade Guru Editor which gives us whatever that large number of individual files described in the second step then is the translation file format again we migrated from that legacy transition file format to the same file format that everybody else's uses for their translations the PO-AMO combination that's another large piece of work which went relatively smoothly considering the size of it that has given us as a side effect the ability to handle plurals in our translations which we hadn't before so that's a kind of a little cherry that we finally got working that we finally implemented for 6.2 as a kind of a payback to translators for the pain of getting this far but it now can get their plurals working properly which is a side effect of what I was doing right so given now that everything is in the GTK builder file format and that the translations are in the expected MO file format you can then in theory at least load up those converted files that are in the GDIs with the native GTK support for doing that and you get the native GTK dialogues out the end and a little bit of a transitional API between the VCL stuff and the GTK stuff and it all works beautifully which all VCL stuff as the fallback for the platforms that aren't using GTK windows and Mac as well as the not interested in GTK things like KD and so on so the fallback is there and salutes case a couple of problems with all that of course is that because we had used the GTK builder file format but written our own parser for that a few areas are kind of fuzzy as to what they mean obviously if you do implementations they went two different ways so for example we're using GTK adjustments just to set the initial values for spin buttons whereas in the case of GTK once you actually map a button to that adjustment if you to map the same adjustments they're locked together so you had to go back over all those spin buttons that were sharing GTK adjustments and just duplicate them again as to when you have a bunch of radio buttons together as to which one is the leader of the group is a little bit of kind of a fuzziness over how that works so we had done a different way than the way GTK does it's up you just go back and redo those that UIs to do it the way GTK expects and the thought to do a custom widget so custom widgets needed to be manipulated a little bit so we can have a bridge between GTK there and we ended up with the same API we have for our existing VCL window you can inherit from a new thing a custom widget controller if you have a custom widget typically previews a couple of small interactive things and you can keep the same you can inherit from a new thing and everything should work the way it worked when you inherited from our old VCL window accessibility was difficult a long story but it works for those custom widgets for the native widget to use the native GTK stuff I don't know if there's anybody here from GTK but if there is these were the three issues that I had a problem with at Fuzzdom not Fuzzdom but at the Brafus conference that have been solved in a fragile way that works for now but may not be long term great first one is a straight forward bug if there is enough if under wayland if there's enough entries in the GTK combo box at some point the GTK combo box will not GT combo boxes menu will not appear when you click on the button the bug URL is there is a couple of bit of complexity over the set of circumstances in which it arises but it will arise once the menu gets long enough and the selected entry is far enough down the menu but it just so happens that if you just manipulate the combo box in the right way you can get it to that to not happen so we can use this little hack at about 30 entries in and it affects slightly the GTK combo box menu placement so it's not as beautiful when you get to over those 30 entries as it would be if the bug didn't exist but at that point it's better to have a menu than a perfect placement. So that one is resolved in that sense though it would be nice to get fixed upstream. The other obvious one is type ahead in a GTK combo box both when it is just a combo box with no menu appeared you want to be able to we want to be able to type into it so we can select the next entry in the list automatically that's straight forward enough you can just listen to the key precedent and then you can run it through our existing quick selection engine the same mechanism we used for the VCL one so if we were happy how the old one works then we have to be equally happy how the new one works. The problem there then is that when the menu is active in the old VCL situation you could type into the menu and you could automatically select the entry there couldn't do that with the GTK one but people wanted to do that but you don't actually have direct access to GTK menu from the GTK combo box we're not supposed to care about that but there is an accessibility API there and GTK combo box get pop up accessibility and once you have that you can cheat and you can get the accessibility get widget from that and that gives you the GTK menu that you're not supposed to have access to but you can get access to it and then you can install all the stuff you want so that works perfectly fine but it's potentially fragile in the future. Yeah notebooks this was the big one yes I got five pages on I got five pages on GTK notebooks and the hardest there's nothing really wrong with the GTK notebook the GTK is notebook there's nothing wrong with it but we have used and in our tab control we have kind of abused it a lot and we have multiple multiple tabs in these things so what works against us in the GTK one is that the default default theme that I use and most of Fedora uses and a lot of people the other way the team has got really large font and padding so each tab takes up a lot of spaces that's that's so it's big on our side we have a load of tabs and dialogues we have 16 tabs in the impressed style dialogue so no matter what there's a there's a lot of tabs there and that so first thing I tried was just the built-in stuff in the GTK notebook first just say that we put scrolling tabs at the top so when the tabs don't fit in the notebook you get these two scrolling things on each side but when you do that you can't see all of your tabs at the same time so you know we used to be able to see them now everybody's unhappy you can't see them okay then in some themes let's say like the default your bunter teams and tabs are quite small you say well there's all the space going to waste at the top so let's keep putting tabs into the top until it no longer fits and at that point if they no longer fit switch to putting them down horizontally down the left hand side again the the GNOME HHI the human interface guide suggests that when you get to over eight tabs you put them down the left side right across the top but again you come up with like that impressed dialogue where you have 16 tabs and they're not going to fit all the way down the left side either so again there's significant push back there all right so let's try the double-decker tabs the same double-decker tabs that you have in the VCL version and see can we do something there we use two notebooks one at top of the other no content here in the top one content here in the bottom one and see how you go with that but you're definitely there then the notebook always have to have one active tab and that active tab is out of place if you have you know one active tab in the bottom supposed to be no active tab in the top and I see then you try to look at ways of maybe getting rid of that active tab you can block signals to the notebook to let it know you can select the active tab and you can then block signals to the notebook remove the active tab so that that notebook can be tricked into not picking a new active tab success you think that's great but then the draw callback of notebook will refuse to draw anything if there's no active tab except of course if you're actually dragging your active tab to another window so you're wondering maybe you know can you can you position the GTK notebook in some way that you know it thinks it's in a drag and drop state and refuses to draw the draws the rest of the tabs not the active tab that doesn't work anyway because that just pressures and all sorts of horrible ways so it was a bad idea in the first place you know so let's see if that active tab you know and maybe just pretend it's there for some sort of reason if you can't get rid of it so there's this active tab at the top right there with a kind of a down arrow on it or something that's indicating that the the next row is active yeah okay yeah so that wasn't very popular either but the good bit is that all the tabs are now visible at the same time all the tabs are back to the top but this extra one is is of no use to anybody yeah so let's try and seek to be themed into oblivion so yeah let's just team it into invisibility in zero by zero size and now we're back to double-decker tabs like you had traditionally with the VCL ones except now rather than being themed to look like the GTK ones they are the GTK ones and you can keystroke between them all when you get to the end of the bottom row it restarts at the next row and it all works fairly seamlessly so yeah that's finally in for six to two so notebooks were a major struggle all right so let's like to I think I've done this a few times before but just in case anybody hasn't seen what the progress is this here is an example of a popover wherever you use calcunos popover appears as you type along and give it a tints yeah I think native they've been around since 6.1 so we see them all now as well the native message dialogues obviously at this point it's actually now this year now that we're there's a native tooltip as well this year if the quality good enough to actually see animations in the presentation I think it is you can see that they're animated checkboxes and things like that let's see if we do form a table yeah we've got an overlay scroll bar here as well now so you get all the the good stuff a side effect of all this as well as that preview widgets like this on high dpi on GTK high dpi cases come automatically high dpi so fuzziness disappears from a lot of these widgets once they get converted over like this yeah I think I've shown the screenshot of the tab dialogues and just key stroking between them shows that they do like the older ones did and at all keystroke accessible okay that's a tabbed one yes so also as well small little bits and pieces should be able to show that we have the icons for spell checking or available in the native GTK combo menu just like the preview silver and small little thing that you now have if you export as pdf for example or anything that has a password control that if you accidentally hit the cap locks you get the built-in GTK cap stock indicator on thing so you're getting the smaller benefits as well as the obvious ones and yeah and one of the most recent things and kind of fits in with this morning's talk is very most recent thing we have here is that now the firefox persona team integration thing will work with the native GTK menu as well so up here in the menu bar the native GTK menu is drawing the top portion of that background team in picture and then the vcl classic stuff from the controls down is drawing the bottom half of it so that integration now finally works as well so that works so that's the walkthrough the list of the walkthrough yeah so what's left to do as i said earlier is if most of the major dialogues are done what's left now is that um that insert table context dialogue and the insert section dialogue and writer are the two dialogues left that are causing a little bit of difficulty the difficulty in the writer one is the preview widget i have a version for the preview widget renders but the size of the preview widget is very odd and you're ruining a kind of a captive version of full version a captive instance of writer to render that preview and it's not interacting well with things but we'll get there in the end and the other one is the insert section dialogue where there's a condition entry and the condition entry itself is the only custom it's the only custom widget have come across so far that have made an effort at at least that has a dragon a custom dragon drop handler so and that's not something that i've implemented yet so i need to implement support for custom dragon drop to do that dialogue that's straight forward enough the insert table of contents is just a buggy at the moment i can get there in the end the a lot of the calc dialogues have a kind of a shrink to specific entry and button feature that's not particularly difficult to do it's just i haven't done it yet which means that a lot of the smaller calc dialogues are are blocked on implementing that and then the last other one is the calcs insert head or footer is using an edit engine in a unique way that that nothing else is using so those are like the four blockers so apart from that thing that's why what isn't converted yet remains as it is once they're out of the way i expect that things will be completed pretty rapidly i think that is yes that is pretty much all i have to tell you okay have anybody got any what does anybody have any questions on that is it great background is it the issue or the is it your here uh visible here someplace yes where down here something is it the only the only the top menu bar here is in your style in a in is it on screen here yeah yeah yes only the in this screen only the menu bar is native ggk the other two rows are the vcl stuff pretending to be ggk and the problem with teeming there is one of the reasons why this teeming never works so yeah yeah eventually getting these all native is doable as well but you have to work kind of from the outside in like we get native toolbars and then be able to get native bits and pieces end up with a native score bar that this score bar here is not a native score bar but i think it is possible to eventually end up with all these as native bits and then these is like like the custom widget thing we put together for those dialogues you'd have this uh writer would be a custom widget with a native toolbar on the right hand side and so on so it's all it's all doable but that is another step for another day once the dialogues are all under control if ever anything else sorry yes yeah i don't know um i think that's not out yet i mean i mean but oh i think anything at the widget level will be mostly okay unless for instance that accessibility one that i mentioned the if that's removed for example that make things a bit more awkward but i think anything at that widget level will be fine and our difficulties will be more likely at the pre-existing stuff we have for our existing kind of fake stuff i think that'll be where it'll be more difficult where for instance we had this big kaira canvas that we draw everything to and then we blit that in the draw how that's going to work in in gdk4 i mean i've asked some people to say that'll keep working but it'll no longer be the preferred way of doing things so i think this work would be okay and i think our prior work from before this uh which is still necessary will be may require rework okay thank you