WineHQ

World Wine News

All the news that fits, we print.

07/29/2005
by Brian Vincent
Issue: 285

XML source
More Issues...

This is the 285th issue of the Wine Weekly News publication. Its main goal is to synthesize. It also serves to inform you of what's going on around Wine. Wine is an open source implementation of the Windows API on top of X and Unix. Think of it as a Windows compatibility layer. Wine does not require Microsoft Windows, as it is a completely alternative implementation consisting of 100% Microsoft-free code, but it can optionally use native system DLLs if they are available. You can find more info at www.winehq.org


This week, 243 posts consumed 861 K. There were 76 different contributors. 45 (59%) posted more than once. 28 (36%) posted last week too.

The top 5 posters of the week were:

  1. 22 posts in 75K by Dmitry Timoshkov
  2. 19 posts in 46K by Alexandre Julliard
  3. 14 posts in 49K by Oliver Stieber
  4. 12 posts in 37K by Tom Wickline
  5. 11 posts in 33K by Felix Nawothnig

News: Jeremy White Interview 07/23/2005 Archive
News

Linux Magazine has a good interview with CodeWeavers' Jeremy White. There's a lot of interesting stuff in there, such as Longhorn, CXTest, and DRM issues. From the interview:

LM: So, first of all, give us a little background on the Installer Challenge.

Yeah, and basically the challenge is that we're trying to take Wine to that next level, we have for the last several years, really focused on a fairly small footprint of applications, making those work well and being glad and hoping that other things would work as well, collateral damage, as I like to call it.

Now what we're doing is taking the next step, and that is taking the first step towards taking Wine to the promised land, where we want it to be, which is where it runs everything and the first step is before you can try an application, you've got to be able to install it.

What we're doing right now, is we've spent a great deal of energy over the last year, sort of a lot of unsexy, dirty, nasty, grinding work that has the very sexy, exciting work that has the result that we believe many applications will install, and we believe that those that won't install will be very easy to get install.

We're very hopeful that with this, if we can get some community participation and community help that we can go from right now, where you have a 50-50 chance having an app install, maybe a bit less than that, to you're pretty sure that your app will install.


MSHTML Update 07/28/2005 Archive
Status Updates

Work continues on MSHTML for Wine. For those of you just joining us, Jacek Caban has been working for several months on implementing this DLL. Basically it's the web browser behind Internet Explorer. Jacek has put together a pretty good description of everything on the wiki under MozillaIntegration . Jacek posted a large patch this week that got it closer to being a reality and explained how it was implemented:

I've sent a patch that makes MSHTML use Gecko to render HTML. Unfortunately, it uses Windows Gecko, not Linux one. Alexandre wrote me that it's impossible to get perfect support for XEmbed container, so, although my implementation was enough for Gecko, it can't go to CVS and I should use Windows one. So, as of now, support for the Linux version went into trash and I've sent this patch. Well, I don't give up with Linux version, I have another idea, but that's not for the nearest future. One plus is that the Windows version is much simpler...

Now it's time to write about this patch. For now it can use Gecko installed with Mozilla Suite or Mozilla ActiveX Control - it could use any Gecko-based product, but we have to be able to search for it (every Gecko-based product has its own registry settings for the Gecko path). I'm planning to add Firefox support, but it doesn't work yet and I have to find why. If you think there should be support for any other application, please let me know. As our shdocvw still uses the Mozilla ActiveX Control, I think it should be preferred (it's the first one on the search list and it's smallest). In future, when we implement shdocvw on top on MSHTML and get rid of the Mozilla ActiveX Control dependency, I think it will be better to have a package like wine-gecko with an installer, downloaded automatically when needed (well, not automatically in MS sense, user will be informed about it ;-) ). We need a very limited version of Gecko, so it will be just a small package.

What does this patch change? You may see IE working on Gecko engine! Not much of its functionality is implemented yet, but an HTML document is displayed. Soon there will be more! To see how it works for your program, probably you will have to set shdocvw to native (and usually urlmon, maybe wininet) and mshtml as builtin.

So, instead of a native Linux component using XEmbed we've got a Windows Gecko rendering engine. Hopefully an easy way to package this will be created to make it Just Work on Linux. The end result from a user perspective will hopefully be the same. Then again.. who knows.. maybe Jacek's other idea will work out.


Force Feedback 07/28/2005 Archive
DirectX

Daniel Remenak started working on an area no one else has tackled yet - force feedback joysticks. His third patch had a nice description of how everything works:

Changelog:

    Detect force-feedback-capable linux event device joysticks and return DIDC_FORCEFEEDBACK when queried for capabilities.

This patch is exactly like try 2 except that this one actually works.

Changes from try 1:

  1. Configure check has been changed from a custom compile check to an AC_CHECK_MEMBERS. I presume this is what Alexandre meant by "please use the existing macros for checking structure fields;" if not, please clarify.
  2. An additional runtime check has been added to catch the case that it is compiled on a kernel with full FF support but run on one without it. In this case, the number of simultaneous effects query will fail, and the joystick will not be reported as FF. The #ifdef is still necessary to catch the opposite case.
  3. Primary FF detection code has been moved from GetCapabilities to Acquire. Since the tests are getting more complex it's best to only run them once, and store the results for use elsewhere.

To recap, this patch basically adds three things:

  1. Configure checks for the availability of a new enough linux/input.h to support force feedback. This pretty much means any kernel 2.6 or kernel 2.4.x with the ff patchset found at http://sourceforge.net/projects/libff/. Some of the structures were changed without changing the version define, so this check is necessary; although these structures are not yet used they will be in later patches, and it's best not to report that the joystick is FF unless it can actually handle FF effects.
  2. The linuxinput dinput joystick driver tries to open the device in read/write mode, and falls back to read-only (with no ff support) if it fails.
  3. The device is queried for the EV_FF capability bit and ffbits is filled with the specific supported effect types. If that all goes well, DIDC_FORCEFEEDBACK is added to the device flags.

Autoheader and Autoconf will of course need to be run after this patch is applied.

When version #1 of the patch came out, Alexandre had a question regarding the configure checks Daniel had created, Why do you need to check the structure since you are not using it? Shouldn't you simply do a #ifdef on the ioctl code or whatever else that you use and may not be defined?

Daniel replied that it was to work around a kernel problem:

Executive summary: In order for effects to be played, the correct ff_effect structure will need to be present; if you can't play the effects it's better not to detect the joystick as FF, because it's really not.

The structure is not used *yet*, but will be. There was an older version of force feedback code before (in some of the stock 2.4 kernels) which had some of the same features (such as the EV_FF bit), but has incompatible structures, and afaik there were never any force feedback drivers written for it. The newer interface has working iForce (logitech, guillemot, et al) and MS sidewinder drivers written for it, so that's the one I was targetting. You can see them side by side if you have linux/input.h from an unpatched late 2.4 kernel and a 2.6 kernel.

Alexandre thought that was a good start, Well, if the structure is required for the compile that's OK; but note that you still need to check for the proper features at run-time, just because the structure was present at compile time doesn't mean the kernel supports it, since you can build on 2.6 and then run on 2.4. Also please use the existing macros for checking structure fields.

The macro comment in Daniel's patch description above references Alexandre's comment. Regarding MS Sidewinder support, Anssi Hannula had some input regarding the development:

Well, if you mean the Sidewinder Force Feedback 2, that driver seems to be only a stub. I am currently working on a new PID FF driver (which will cover that Sidewinder).

Also I'm planning some kernel internal FF interface updates and probably introducing FF interface to /dev/input/jsX also.

Daniel realized he had been mistaken, Yes, I saw your (perhaps old) patch for adding FF support to joydev while I was doing some research before starting this project. I was under the impression that the current Sidewinder PID driver was working, though...a bit of poking at the code tells me I was pretty wrong :) I use a Wingman Force personally, so I hadn't done much looking at the PID side of things.


Benchmarks 07/26/2005 Archive
Testing

Tom Wickline posted some benchmarks on the wiki:

I put the Benchmark results that I posted to wine-devel back in April on the Wiki. https://wiki.winehq.org/BenchMark

A long discussion then ensued about the format of the results. What you'll see if you go to the page now is the result of a bunch of changes to make it more readable. If you look at the results, you'll notice when it comes to IO Wine is generally faster than XP. That's offset by XP's faster graphics.


Cross-Compiling Wine 07/26/2005 Archive
Ports Build Process

Isn't it great when you ask a question on a mailing list and someone replies with an answer a few minutes later? Isn't it especially great when it's a slightly bizarre question that you don't expect anyone to have a detailed answer for? John Connor wanted to know about cross-compiling Wine for ARM, Has anyone tried to cross-compile Wine for the ARM platform or is there any documentation on how to do this?

Steven Edwards supplied a quick rundown of the steps:

I have but its been a day or two. You need two trees and to first build the Wine tools for your host platform and something like the following

    cd /usr/src/wine-tools
    ./configure
    make tools

then in another tree

    cd /usr/src/wine
    ./configure --build=armv4 --with-wine-tools=/usr/src/wine-tools

Note there is no support for arm in Wineserver, kernel32 or ntdll so winelib won't run yet. Most everything else should compile as Winelib works on i386, PPC and SPARC. You might be able to get by, by stubbing the set_thread_context stuff out for simple apps.

We sort of touched on this subject last winter in WWN #263 . The steps Steven covered were roughly the same as what Hans Leidekker described, namely building the tools and using the --with-wine-tools option. Ports to other architectures come up once in while, but it's a difficult undertaking. It will be interesting to see if an ARM port can get off the ground.


Theming Work 07/27/2005 Archive
Controls

Frank Richter has been working a lot on theming. The initial patches have been going in over the past few weeks. He ran into an issue this week regarding how to go about working on controls:

somewhat recently I sent some code to wine-patches to add button theming; if you have glanced at it, despite utilizing subclassing, code was duplicated from the button code in user.

In particular, the themed button does its own state management. The reason is that upon state changes, the user32 button control does some repaints internally, ie calling the paint function directly - those can't obviously be hooked by subclassing alone. In early versions I had the themed button painted over after state-changing messages, but that causes visible flickering (since the button is first painted in "classic" style and the themed style is painted above that).

The basic problem - painting that is hard to hook into - will probably also arise on other controls.

There are some ideas and approaches to deal with the problem that came up (and the results from discussion with Kevin):

  • Ignore. Have ugly flickering.
  • Change the classic controls to use InvalidateRect() instead when internal painting functions are called, so painting messages can be hooked. That would deviate from native behaviour, though (and also occasionally less efficient when the control just paints some change).
  • Use some magic message the control sends to itself to do some painting which is then hooked. Makes things more complex, could cause compatibility issues with apps that may not handle this message and is incompatible with native.
  • Code duplication - e.g. in the case of buttons, do state management in the themed class as well.
  • Static libraries - implement the standard controls in a static library and allow for hooks to override painting (in C++ you'd use virtual methods). Both user32 and comctl32 would link against that lib, and the latter would provide alternative painting functions. Binarily equivalent to code duplication, but not that bad in the source code. For me it looks like a good compromise, though, Kevin noted that "Historically static libs have not gone over very well".

I don't like the current code duplication for theming that much, but I'm a bit unsure what else could be done. Perhaps you have some comments or suggestions, and hopefully there will be some consensus of what approach would be best for Wine.

Rob Shearman suggested another approach, You could make the code to using RedrawWindow(... RDW_UPDATENOW), assuming that the paint functions it is calling are for the whole control, not a component of the control.

Frank wasn't sure if that would be sufficient, Occasionally it does... afaics mostly stuff like just drawing the focus rect or checkboxes only draw the mark when the state changes... but perhaps one could get away with repainting the whole control in this case, though I fear that this would cause flickering again.

Rob thought a small area around it could work, In that case, you will have to retrieve the rectangle of the changed area and pass that rectangle to RedrawWindow.

Frank didn't think Windows worked that way, though that doesn't necessarily mean the approach wouldn't work, Though, that would mean that paint messages are emitted to the window? IIRC last time I checked (with Spy++), there were no paint messages when e.g. the state of a checkbox changed. So using RedrawWindow() may mean a different behaviour than on native.


All Kernel Cousin issues and summaries are copyright their original authors, and distributed under the terms of the
GNU General Public License, version 2.0.