The Bar of the Tasks

The week started by doing some boring investigation on how Windows manages the addressbar. If you didn’t guess already, analysing the behaviour of COM(ATL) classes is anything but simple. Interface inheritance is good for encapsulation, but bad for about anything else, including debugging. I did manage to figure out that it has two functions related to filling the addressbar combobox: one of them resets the contents and fills them from scratch, and the other only adds/changes/removes items related to the navigation.

While I was doing this, Huw (Frontier on IRC), sent me some really really amazing news: he had been working on ATL Aggregation support, and he managed to get the taskbar to work with his changes!

With these news, I decided to refocus my efforts. Instead of continuing to add more things and test almost exclusively in Windows, I decided that it was time to see how the progress was looking like, from the ReactOS point of view. It wasn’t as bad as it could have been, but some things were disappointingly broken. Amongst those, the menus weren’t behaving as expected.

I remembered that Jim had been fixing some menu issues in trunk, so I took the chance to do a trunk sync. After spending some long hours figuring out what had gone wrong with the sync, I found the problem and fixed it. With the latest updates in place, I reinstalled ros in the VM, and nicely enough, the menus worked a lot better. :D

Not all was flawless though. There are still some known issues, and many of them are caused by bugs in Win32K, a module of ReactOS that most people dread to even think about, and only the bravest dare touch…

Since I had Huw’s ATL patch around, I decided to apply it, and see how the taskbar looked like, and at the time, Giannis was around IRC, and he reminded me that the taskbar wasn’t able to minimize programs, not even in Widnows.

I spent the next hours fixing some problems in the logic of explorer-new, in the way how it enumerates windows and handles Shell Events. After the taskbar was working correctly in Windows, I went back to ReactOS, and started looking at the issues that still remained.

I traced the issues to the Win32K module, to 3 pieces of code that send Shell notifications. It took a few attempts, but I managed to fix the conditions that triggered those notifications to be sent, and now the taskbar is on par with Windows. With explorer-new running in Windows, that is, as our explorer does not yet support grouping.

With the taskbar out of the way, I decided to give the people on IRC a sneak-peek of the shell-experiments branch, by uploading a build of the code for them to test and play with.

I continued analysing some of the issues that appear in ReactOS, in things that work correctly in Windows, mostly trying to figure out why the start menu isn’t closing when you click anywhere but the taskbar.

I managed to trace the start menu issue again to the Win32K module, which does not seem to properly send WM_ACTIVATEAPP messages to the windows of the process that lost the activation focus. Win32K is really complex though, so although I traced the symptom, I couldn’t truly identify the cause, so I couldn’t fix it. I guess I will need help from other people more experienced with this module to get this fixed, so I will dedicate my efforts to issues I’m more capable of fixing.