* [Qemu-devel] Norton Ghost crashes with page fault for me too.
@ 2005-06-13 17:49 Jeff Wiegley
2005-06-14 2:37 ` jeebs
2005-06-14 13:54 ` Elefterios Stamatogiannakis
0 siblings, 2 replies; 26+ messages in thread
From: Jeff Wiegley @ 2005-06-13 17:49 UTC (permalink / raw)
To: qemu-devel
I noticed that one other person a long time back had
this same problem.
http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html
Basically, when I boot from an original boot/rescue disk created by
Norton Ghost 2003 I also get:
Microsoft (R) Mouse Driver Version 8.20
Copyright (C) Microsoft Corp. 1983-1992
Copyright (C) IBM Corp. 1992-1993
Mouse Driver Installed
Loading...
Page Fault cr2=0fffbbb0 at eip-214; flags=3283
eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1
edi=00001031
ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0 ss=a7 error=0004
A:\GHOST>
Which is exactly the same as the original author.
I was wondering if anybody fixed it and if so how?
--
Jeff Wiegley, PhD http://www.csun.edu/~jeffw
Computer Science Assistant Professor EA1407 Engineering Addition
California State University Northridge email jeffw@csun.edu
18111 Nordhoff Street office phone 818.677.3887
Northridge CA 91330-8281 CS Dept. phone 818.677.3398
USA (ignore:cea2d3a38843531c7def1deff59114de)
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-13 17:49 [Qemu-devel] Norton Ghost crashes with page fault for me too Jeff Wiegley
@ 2005-06-14 2:37 ` jeebs
2005-06-14 13:43 ` Ishwar Rattan
2005-06-14 16:30 ` [Qemu-devel] " Henrik Nordstrom
2005-06-14 13:54 ` Elefterios Stamatogiannakis
1 sibling, 2 replies; 26+ messages in thread
From: jeebs @ 2005-06-14 2:37 UTC (permalink / raw)
To: qemu-devel
As near as I can tell, they haven't done a thing, and weren't the slightest
bit interested in the bug report.
They don't even seem to keep track of reported bugs. If a developer happens
to see a bug report about something he worked on, he might check into it.
But otherwise it gets forgotten in a day or two.
I'd think that the bug tracker at Savanah would be very useful for a
project, but apparently it doesn't get used. I don't think any of the
devlopers or Fabrice have even suggested it get used to track bugs.
Savanah has a number of useful tools.... bug tracking, file download areas
(for executables, etc.), task manager. Even a patch manager, so people can
submit patches easily. Lots of things to help developers and users alike.
But none of that gets used. Everything gets done though a mailing list,
where it's easy to forget about stuff. (Or in my case, not even get the
message, due to spam filtering.)
FreeDOS mouse, various cd changing bugs, and qemu-img raw with 2g+ images
are three other significant items that have never been fixed. Plus there
are times when qemu effects the host's mouse, even after qemu shuts down.
(Might be a Windows / SDL problem. Dunno.)
One minor one (but relatively easy to work on) is spaces in filenames. Qemu
can't do it in the monitor. Can make it impossible to change floppies or
cd's, some times.
I'm not even sure if anybody has investigated the problems.
If a developer has a problem, then they can check into it themselves, of
course.
All us users can do is make a report and sit back and wait to see if
anything happens. Sometimes it can be a long wait.
----- Original Message -----
From: "Jeff Wiegley" <jeffw@csun.edu>
To: <qemu-devel@nongnu.org>
Sent: Monday, June 13, 2005 12:49 PM
Subject: [Qemu-devel] Norton Ghost crashes with page fault for me too.
>I noticed that one other person a long time back had
> this same problem.
>
> http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html
>
> Basically, when I boot from an original boot/rescue disk created by
> Norton Ghost 2003 I also get:
>
> Microsoft (R) Mouse Driver Version 8.20
> Copyright (C) Microsoft Corp. 1983-1992
> Copyright (C) IBM Corp. 1992-1993
> Mouse Driver Installed
> Loading...
> Page Fault cr2=0fffbbb0 at eip-214; flags=3283
> eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1
> edi=00001031
> ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0 ss=a7 error=0004
> A:\GHOST>
>
> Which is exactly the same as the original author.
>
> I was wondering if anybody fixed it and if so how?
>
> --
> Jeff Wiegley, PhD http://www.csun.edu/~jeffw
> Computer Science Assistant Professor EA1407 Engineering Addition
> California State University Northridge email jeffw@csun.edu
> 18111 Nordhoff Street office phone 818.677.3887
> Northridge CA 91330-8281 CS Dept. phone 818.677.3398
> USA (ignore:cea2d3a38843531c7def1deff59114de)
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 2:37 ` jeebs
@ 2005-06-14 13:43 ` Ishwar Rattan
2005-06-14 16:39 ` Henrik Nordstrom
2005-06-14 16:30 ` [Qemu-devel] " Henrik Nordstrom
1 sibling, 1 reply; 26+ messages in thread
From: Ishwar Rattan @ 2005-06-14 13:43 UTC (permalink / raw)
To: qemu-devel
A points to note:
It is free software, doesn't work for you, do not use it.
-ishwar
On Mon, 13 Jun 2005 jeebs@yango.us wrote:
> As near as I can tell, they haven't done a thing, and weren't the slightest
> bit interested in the bug report.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-13 17:49 [Qemu-devel] Norton Ghost crashes with page fault for me too Jeff Wiegley
2005-06-14 2:37 ` jeebs
@ 2005-06-14 13:54 ` Elefterios Stamatogiannakis
2005-06-14 15:45 ` Andreas Bollhalder
1 sibling, 1 reply; 26+ messages in thread
From: Elefterios Stamatogiannakis @ 2005-06-14 13:54 UTC (permalink / raw)
To: qemu-devel
If you are using
Windows: Try qvm86 + qemu (there was an old build of these two in freeoszoo)
Linux: Try kqemu + qemu
There are some problems that the combination of qemu + kqemu or qvm86
solve.
lefteris.
Jeff Wiegley wrote:
> I noticed that one other person a long time back had
> this same problem.
>
> http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html
>
> Basically, when I boot from an original boot/rescue disk created by
> Norton Ghost 2003 I also get:
>
> Microsoft (R) Mouse Driver Version 8.20
> Copyright (C) Microsoft Corp. 1983-1992
> Copyright (C) IBM Corp. 1992-1993
> Mouse Driver Installed
> Loading...
> Page Fault cr2=0fffbbb0 at eip-214; flags=3283
> eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1
> edi=00001031
> ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0 ss=a7 error=0004
> A:\GHOST>
>
> Which is exactly the same as the original author.
>
> I was wondering if anybody fixed it and if so how?
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* RE: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 13:54 ` Elefterios Stamatogiannakis
@ 2005-06-14 15:45 ` Andreas Bollhalder
0 siblings, 0 replies; 26+ messages in thread
From: Andreas Bollhalder @ 2005-06-14 15:45 UTC (permalink / raw)
To: qemu-devel
I suspect that kernel acceleration (qvm86/kqemu) doesn't work with DOS
(16bit) on a QEMU supported OS (32/64bit).
Andreas
> -----Original Message-----
> From: qemu-devel-bounces+bolle=geodb.org@nongnu.org
> [mailto:qemu-devel-bounces+bolle=geodb.org@nongnu.org] On
> Behalf Of Elefterios Stamatogiannakis
> Sent: Tuesday, June 14, 2005 3:55 PM
> To: qemu-devel@nongnu.org
> Subject: Re: [Qemu-devel] Norton Ghost crashes with page
> fault for me too.
>
>
> If you are using
> Windows: Try qvm86 + qemu (there was an old build of these
> two in freeoszoo)
> Linux: Try kqemu + qemu
>
> There are some problems that the combination of qemu +
> kqemu or qvm86
> solve.
>
> lefteris.
>
> Jeff Wiegley wrote:
> > I noticed that one other person a long time back had
> > this same problem.
> >
> > http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html
> >
> > Basically, when I boot from an original boot/rescue disk created
by
> > Norton Ghost 2003 I also get:
> >
> > Microsoft (R) Mouse Driver Version 8.20
> > Copyright (C) Microsoft Corp. 1983-1992
> > Copyright (C) IBM Corp. 1992-1993
> > Mouse Driver Installed
> > Loading...
> > Page Fault cr2=0fffbbb0 at eip-214; flags=3283
> > eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1
> > edi=00001031
> > ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0
> ss=a7 error=0004
> > A:\GHOST>
> >
> > Which is exactly the same as the original author.
> >
> > I was wondering if anybody fixed it and if so how?
> >
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 2:37 ` jeebs
2005-06-14 13:43 ` Ishwar Rattan
@ 2005-06-14 16:30 ` Henrik Nordstrom
2005-06-14 17:11 ` jeebs
1 sibling, 1 reply; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-14 16:30 UTC (permalink / raw)
To: qemu-devel
On Mon, 13 Jun 2005 jeebs@yango.us wrote:
> If a developer has a problem, then they can check into it themselves, of
> course.
Yes.
> All us users can do is make a report and sit back and wait to see if
> anything happens. Sometimes it can be a long wait.
Or you could go the open-source approach and hire a developer (there is
plenty on the market if one cares to look) to fix the problems you may
have. Certainly several (but perhaps not all) of the quirks you mentioned
doesn't even require any qemu specifik knowledge.
Only relying on the existing qemu developers pride may work in some cases,
but it should be taken for what it is, not a warranty that things do get
fixed in the line you want or when.
Regards
Henrik
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 13:43 ` Ishwar Rattan
@ 2005-06-14 16:39 ` Henrik Nordstrom
2005-06-14 17:14 ` jeebs
0 siblings, 1 reply; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-14 16:39 UTC (permalink / raw)
To: qemu-devel
On Tue, 14 Jun 2005, Ishwar Rattan wrote:
> A points to note:
>
> It is free software, doesn't work for you, do not use it.
I would put it in slightly different words:
It's free software (as in free speech, not gratis), if it doesn't work for
you fix it or have it fixed for you by whatever means you find suitable.
If you do not want to have it fixed find an alternative which suits you
better.
Regards
Henrik
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 16:30 ` [Qemu-devel] " Henrik Nordstrom
@ 2005-06-14 17:11 ` jeebs
2005-06-15 13:20 ` Henrik Nordstrom
0 siblings, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-14 17:11 UTC (permalink / raw)
To: qemu-devel
"Henrik Nordstrom"
>> All us users can do is make a report and sit back and wait to see if
>> anything happens. Sometimes it can be a long wait.
>
> Or you could go the open-source approach and hire a developer (there is
That's more than a little extreme.
Frankly, it'd be a heck of a lot cheaper to buy and use vmware.... Oh
wait... I *do* use vmware.
I'm not silly enough to actually depend on qemu. Qemu is an opensource
project that I hope I will be able to use someday. Until that time, I'm
helping the development as best I can.
> plenty on the market if one cares to look) to fix the problems you may
> have. Certainly several (but perhaps not all) of the quirks you mentioned
> doesn't even require any qemu specifik knowledge.
They would require at least some knowledge. Some of them more than a little
amount.
> Only relying on the existing qemu developers pride may work in some cases,
> but it should be taken for what it is, not a warranty that things do get
> fixed in the line you want or when.
No, I know there's no warranty.
But it gets more than a little darn frustrating when you are enthused about
the project, you try to help the devlopers and project by deliberately doing
the testing to find bugs and problems, you report the bugs and problems.....
And nothing happens.
Not an acknowledgement. Not a fix. Nothing.
Not that week. Not that month. Not the next month. Basically, the effort
you deliberately put into finding bugs and reporting the bugs has
disappeared.
I don't expect bugs to get fixed in 36 hours. No, of course not. Or even
in a week or so. But it would be nice if the bug reports didn't just
disappear into the void.
As I said in my other message, Savanah has facilities for helping users and
developers alike.
Ways to report bugs (so they don't get lost) (Really... Do you know what
bugs still exist in qemu??? No. Nobody does. Because they get forgotten
about in a few days. Or the interested parties may miss the messages due to
spam filtering.)
Ways for bugs to be confirmed.
Ways for developers to submit patches (so they don't get lost in spam
filtering.)
And so on.
Qem is outgrowing the 'mailing list' approach.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 16:39 ` Henrik Nordstrom
@ 2005-06-14 17:14 ` jeebs
2005-06-14 17:40 ` Henrik Nordstrom
2005-06-14 20:27 ` Jim C. Brown
0 siblings, 2 replies; 26+ messages in thread
From: jeebs @ 2005-06-14 17:14 UTC (permalink / raw)
To: qemu-devel
From: "Henrik Nordstrom" <hno@marasystems.com>
>> A points to note:
>>
>> It is free software, doesn't work for you, do not use it.
>
> I would put it in slightly different words:
>
> It's free software (as in free speech, not gratis), if it doesn't work for
> you fix it or have it fixed for you by whatever means you find suitable.
> If you do not want to have it fixed find an alternative which suits you
> better.
Not all of us are developers.
The best that many can do is test qemu and report problems when they are
found.
Some of us do a bit more, by deliberately testing qemu with lots of
software, looking for bugs. And reporting bugs when they are found.
But that's no excuse for bug reports to just vanish into the void. Without
an awknowledgement or somebody writting it down as a bug in qemu that needs
to get fixed eventually.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 17:14 ` jeebs
@ 2005-06-14 17:40 ` Henrik Nordstrom
2005-06-14 18:51 ` jeebs
2005-06-14 20:27 ` Jim C. Brown
1 sibling, 1 reply; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-14 17:40 UTC (permalink / raw)
To: qemu-devel
On Tue, 14 Jun 2005 jeebs@yango.us wrote:
>> It's free software (as in free speech, not gratis), if it doesn't work for
>> you fix it or have it fixed for you by whatever means you find suitable.
>> If you do not want to have it fixed find an alternative which suits you
>> better.
>
> Not all of us are developers.
And is why I said .. "or have it fixed for you by whatever means you find
suitable.". With a little imagination you will realize there is many
options
a) Politely tell the current developers about the bug and hope they
eventually fix it.
b) Try to fix it yourself.
c) Convince someone more knowledgeable in programming than you to fix
the problem for you.
d) Hire a qemu developer to have the problem fixed for you.
d) Hire a independent developer to have the problem fixed for you.
e) Wine about the problem to make sure it won't get fixed for you, or if
you are lucky pisses someone off to the point that they acually fixes the
problem just to get you silent.
and many more..
> The best that many can do is test qemu and report problems when they are
> found.
Then you have to accept that the developers do the best they can in their
interest for the benefit of all.
> But that's no excuse for bug reports to just vanish into the void. Without
> an awknowledgement or somebody writting it down as a bug in qemu that needs
> to get fixed eventually.
There rarely is a void these days. If you send a bug report to a public
mailinglist then it
a) Gets archived
b) Other people later having the same problem quite likely finds it in
the archives and refers to it when reporting the same issue again if it
still isn't fixed.
So even if there is no official bugtracking tool (which depending on the
developer situation can be good or bad) the report isn't really lost.
If you send bug reports in private directly to one developer then there
may be a void if that developer decides the bug is not interesting for him
to work on at that time.
Regards
Henrik
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 17:40 ` Henrik Nordstrom
@ 2005-06-14 18:51 ` jeebs
2005-06-15 4:08 ` Herbert Poetzl
0 siblings, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-14 18:51 UTC (permalink / raw)
To: qemu-devel
From: "Henrik Nordstrom"
>> The best that many can do is test qemu and report problems when they are
>> found.
>
> Then you have to accept that the developers do the best they can in their
> interest for the benefit of all.
Generally, the way open source works is that a bug that directly effects a
developer, gets fixed. They get annoyed enough they stop what they are
doing and fix it.
A bug that directly effects code they have written, might get checked into.
If it's a bug they can live with or work around, it doesn't get fixed. And
probably not reported, for that matter.
If it's a bug that effects an OS that they don't use, it gets ignored.
(Hence, the Windows builds were broken for a long time and nobody noticed it
or if they did notice, didn't bother to fix it.)
>> But that's no excuse for bug reports to just vanish into the void.
>> Without
>> an awknowledgement or somebody writting it down as a bug in qemu that
>> needs
>> to get fixed eventually.
>
> There rarely is a void these days. If you send a bug report to a public
> mailinglist then it
That makes the very very large assumption that the developers deliberately
go looking through the back message archives for bugs that haven't been
fixed.
After a couple days, people just forget about reported bugs.
> b) Other people later having the same problem quite likely finds it in
> the archives and refers to it when reporting the same issue again if it
> still isn't fixed.
Similar bugs can show up in different ways.
Even when a bug does show up repeatedly, and effects many people, doesn't
mean anybody cares to look into it.
It just turns into one of those consistant bugs that everybody knows about
but no longer think of as a bug. It becomes a 'feature' or a 'quirk'.
"It's just the way qemu does things" kind of mental shift.
The cd changing bugs are excellent examples.
They've been around for so long that most people in here no longer even
think of them as bugs. They are just simply quirks in qemu. And because
they are no longer 'bugs' but 'quirks', nobody even thinks to look into it.
Never mind whether they would find the bug or be able to fix it. It's been
around so long that they don't even *think* of it as a bug anymore, so they
don't even *think* to look at it.
(I"m not saying the cd changing bugs are absolutely critical. Yes, it does
prevent some OS's from being installed! But it doesn't crash qemu, etc. It
does show how a bug can stop being thought of as a bug.)
> So even if there is no official bugtracking tool (which depending on the
> developer situation can be good or bad) the report isn't really lost.
Technically, yes, it does get archived.
But effectively it gets lost because it's no longer immediately visible as a
bug. You have to specifically go looking for bug reports through the
archives. And then go looking through the messages again to see if it's
been fixed. (Either partially or fully.)
Mailing lists can be very convenient.
But they also make it easy for things to get essentially lost. If something
isn't in a recent message, then your brain just tends to forget about it
after a few days.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 17:14 ` jeebs
2005-06-14 17:40 ` Henrik Nordstrom
@ 2005-06-14 20:27 ` Jim C. Brown
2005-06-14 20:54 ` [Qemu-devel] " Ronald
` (2 more replies)
1 sibling, 3 replies; 26+ messages in thread
From: Jim C. Brown @ 2005-06-14 20:27 UTC (permalink / raw)
To: qemu-devel
On Tue, Jun 14, 2005 at 12:14:05PM -0500, jeebs@yango.us wrote:
> Not all of us are developers.
>
> The best that many can do is test qemu and report problems when they are
> found.
>
> Some of us do a bit more, by deliberately testing qemu with lots of
> software, looking for bugs. And reporting bugs when they are found.
If you really want a bug to be fixed badly, and you have no idea of how to fix
it, what you need to do is contact the developer of that code and let that
person know about the bug.
E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea about
what bugs it may have as no one has reported any to me. In fact, I have no idea
if anyone is even using it because I get no direct feedback. This is especially
true for using the gtk2 interface under Windows, because I am unable to test
the code there. If someone who could test it did, and told me about the bug,
I'd fix it right away.
The only problem with this approach is that the section of code you are interested
in having fixed may not have an active developer (person left a while ago or
it was a section written by Fabrice himself that he doesn't have time to go
over anymore). In that case, there isn't much you can do. Documenting bugs is
still good because a) we can let other users know its a known bug and b) when
a new maintainer for that section of code comes along, they'll be able to get
started on the fixes right away. But this is only satisfactory if you are a very
patient person.
>
> But that's no excuse for bug reports to just vanish into the void. Without
> an awknowledgement or somebody writting it down as a bug in qemu that needs
> to get fixed eventually.
>
No one looks at the Savanah bug tracker because its never been used. If you were
to say submit every unfixed bug you found there, just maybe those of us who
bother to look every once in a while will see it and fix it.
Do this often enough and others will use it, etc... the qemu user forum and
the qemu irc channel developed in much the same way.
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
2005-06-14 20:27 ` Jim C. Brown
@ 2005-06-14 20:54 ` Ronald
2005-06-14 21:15 ` [Qemu-devel] " jeebs
2005-06-14 21:46 ` [Qemu-devel] " Heike C. Zimmerer
2 siblings, 0 replies; 26+ messages in thread
From: Ronald @ 2005-06-14 20:54 UTC (permalink / raw)
To: qemu-devel
Le Tue, 14 Jun 2005 16:27:12 -0400, Jim C. Brown a écrit :
> E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea
> about what bugs it may have as no one has reported any to me. In fact, I
> have no idea if anyone is even using it because I get no direct feedback.
> This is especially true for using the gtk2 interface under Windows,
> because I am unable to test the code there. If someone who could test it
> did, and told me about the bug, I'd fix it right away.
If I can get gtk2 to work on windows , be sure I'll report/share , but
at this time I have had no success with gtk-2.4 (something about
mms-bitfields and gtk_box) on win98 (that's all I have), at least I can
build but can't run it with -use-gtk.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 20:27 ` Jim C. Brown
2005-06-14 20:54 ` [Qemu-devel] " Ronald
@ 2005-06-14 21:15 ` jeebs
2005-06-14 22:18 ` Jim C. Brown
2005-06-14 21:46 ` [Qemu-devel] " Heike C. Zimmerer
2 siblings, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-14 21:15 UTC (permalink / raw)
To: qemu-devel
"Jim C. Brown"
>> Some of us do a bit more, by deliberately testing qemu with lots of
>> software, looking for bugs. And reporting bugs when they are found.
>
> If you really want a bug to be fixed badly, and you have no idea of how to
> fix
> it, what you need to do is contact the developer of that code and let that
> person know about the bug.
That's not really practical, because most of us would have no idea who to
contact.
> E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea
> about
> what bugs it may have as no one has reported any to me. In fact, I have no
> idea
> if anyone is even using it because I get no direct feedback. This is
> especially
> true for using the gtk2 interface under Windows, because I am unable to
> test
> the code there. If someone who could test it did, and told me about the
> bug,
> I'd fix it right away.
I do use the Windows builds...
I'm willing to do some testing. But you'll have to tell me how to do the
gtk2 interface under windows.....
The only interface I know of is the regular SDL interface in the windows
version.
But yes, if you really do want somebody to test it, and do want feedback,
then I am willing to try. It wont be a major test for hours and hours kind
of thing. But I can play around with it for a while and see if there are
any obvious problems.
Contrary to what some might suspect, I *am* willing to test qemu and report
bugs. But only for as long as I think it might do any good, and that I'm
not being ignored.
Even the acknowledgement of a bug can be a major encouragement to find and
report new problems.
> over anymore). In that case, there isn't much you can do. Documenting bugs
> is
> still good because a) we can let other users know its a known bug and b)
> when
> a new maintainer for that section of code comes along, they'll be able to
> get
> started on the fixes right away. But this is only satisfactory if you are
> a very
> patient person.
I have been willing to do that.
But it gets significantly frustrating when you see the same problems month
after month after month, etc.
Bug reporting tends to feel a lot like shouting in a room full of deaf
people...
And bug reports get lost so easily.
If you aren't the developer of that piece of code, what are the odds that
you are actually going to remember the bug in a few days?
> No one looks at the Savanah bug tracker because its never been used. If
> you were
> to say submit every unfixed bug you found there, just maybe those of us
> who
> bother to look every once in a while will see it and fix it.
I have thought about it.
I've even started to do it a few times. Come to think of it, I even did
that a few times in the past year.
But since it's not used, and none of the developers suggest it being used, I
tend to get the feeling that it'd be a waste of time.
Right now, there are 50 bugs reported, and 50 bugs open.
http://savannah.nongnu.org/bugs/?group=qemu
> Do this often enough and others will use it, etc... the qemu user forum
> and
> the qemu irc channel developed in much the same way.
The qemu user forum does get regular comments about bugs etc.
About the best we can tell them is something like "Yes, that looks like a
bug. No, it probaly isn't going to get fixed any time soon. No, most of
the qemu developers don't visit here."
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
2005-06-14 20:27 ` Jim C. Brown
2005-06-14 20:54 ` [Qemu-devel] " Ronald
2005-06-14 21:15 ` [Qemu-devel] " jeebs
@ 2005-06-14 21:46 ` Heike C. Zimmerer
2005-06-14 22:43 ` Jim C. Brown
2 siblings, 1 reply; 26+ messages in thread
From: Heike C. Zimmerer @ 2005-06-14 21:46 UTC (permalink / raw)
To: qemu-devel
"Jim C. Brown" <jma5@umd.edu> writes:
> E.g. I'm the developer of the gtk2 interface for qemu, and I have no
> idea about what bugs it may have as no one has reported any to
> me. In fact, I have no idea if anyone is even using it because I get
> no direct feedback.
I'm using the snapshots from dad-answers.com/qemu/, and from time to
time did a grep for gtk through the entire source tree, but didn't
find any mention of it there.
Maybe I've missed something, so could you explain how to get hold of
the gtk code? Thanks.
- Heike
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 21:15 ` [Qemu-devel] " jeebs
@ 2005-06-14 22:18 ` Jim C. Brown
2005-06-14 23:02 ` jeebs
0 siblings, 1 reply; 26+ messages in thread
From: Jim C. Brown @ 2005-06-14 22:18 UTC (permalink / raw)
To: qemu-devel
On Tue, Jun 14, 2005 at 04:15:41PM -0500, jeebs@yango.us wrote:
> "Jim C. Brown"
>
>
> >> Some of us do a bit more, by deliberately testing qemu with lots of
> >> software, looking for bugs. And reporting bugs when they are found.
> >
> > If you really want a bug to be fixed badly, and you have no idea of how to
> > fix
> > it, what you need to do is contact the developer of that code and let that
> > person know about the bug.
>
> That's not really practical, because most of us would have no idea who to
> contact.
>
I didn't think about that. I generally ask that on the irc channel, and get
my answer there. Or I search the archives to see who was working on the code.
But if there is no developer, it may take a lot of work just to find that out.
>
> > E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea
> > about
> > what bugs it may have as no one has reported any to me. In fact, I have no
> > idea
> > if anyone is even using it because I get no direct feedback. This is
> > especially
> > true for using the gtk2 interface under Windows, because I am unable to
> > test
> > the code there. If someone who could test it did, and told me about the
> > bug,
> > I'd fix it right away.
>
> I do use the Windows builds...
>
> I'm willing to do some testing. But you'll have to tell me how to do the
> gtk2 interface under windows.....
>
Well, you will need to apply the patches and compile from source yourself.
Not to mention, you'll have to download the windows versions of the GTK2
libraries (you can probably get binaries).
Let me know if you need clearer instructions.
> The only interface I know of is the regular SDL interface in the windows
> version.
>
They should look identical. Fabrice mentioned some SDL keyboard bugs,
presumably you won't see those in the GTK version.
I'll let you know now: Fullscreen mode won't work. The mouse will be grabbed
(and made ungrabbable until you exit "fullscreen" mode) and the window will
be moved to the top left corner of the screen. Otherwise, no difference (if
my code works). Everything else should work identically between the two.
> But yes, if you really do want somebody to test it, and do want feedback,
> then I am willing to try. It wont be a major test for hours and hours kind
> of thing. But I can play around with it for a while and see if there are
> any obvious problems.
>
That would be great.
> But it gets significantly frustrating when you see the same problems month
> after month after month, etc.
>
Only report it the first time you see it.
> Bug reporting tends to feel a lot like shouting in a room full of deaf
> people...
>
> And bug reports get lost so easily.
>
> If you aren't the developer of that piece of code, what are the odds that
> you are actually going to remember the bug in a few days?
>
If you are the developer, you will remember the bug. Otherwise, it doesn't
really matter if you remember or not (in the sense that forgetting will hurt
things).
>
> > No one looks at the Savanah bug tracker because its never been used. If
> > you were
> > to say submit every unfixed bug you found there, just maybe those of us
> > who
> > bother to look every once in a while will see it and fix it.
>
> I have thought about it.
>
> I've even started to do it a few times. Come to think of it, I even did
> that a few times in the past year.
>
> But since it's not used, and none of the developers suggest it being used, I
> tend to get the feeling that it'd be a waste of time.
>
> Right now, there are 50 bugs reported, and 50 bugs open.
>
> http://savannah.nongnu.org/bugs/?group=qemu
>
Some one of those bugs have actually been fixed. A patch was sent a while
ago that got rid of bug #9441 IDE multimode failure. (Long before the bug itself
was submitted.) So was the gcc 3.4 bug (which includes a link to the patch).
Etc.
I have to take that back. Savannah bug tracker is not a good way to go, as e.g.
even if the bugs are fixed none of the developers can say so or close the bug.
Only Fabrice has access. Also, only he has commit access so good patches, such
as the graphics patch, don't always make it in right away.
Still, not enough developers have had issues with the way Fabrice runs things,
so thats not likely to change.
>
> > Do this often enough and others will use it, etc... the qemu user forum
> > and
> > the qemu irc channel developed in much the same way.
>
> The qemu user forum does get regular comments about bugs etc.
>
> About the best we can tell them is something like "Yes, that looks like a
> bug. No, it probaly isn't going to get fixed any time soon. No, most of
> the qemu developers don't visit here."
>
Yes, more communication is needed. We shouldnt be bothered by bugs which have
patches to fix them or bugs that are a non issue or bugs that are easily
worked around, and users should be able to find the answers to this easily.
But I am not entirely sure why this is not the case right now, so I have no
bright idea to suggest. Someone else will have to fill the void here.
As a side note, I have a hackish patch that will allow you to change the cdrom
in the monitor to a filename that includes spaces. It was not a difficult change
to implement. I don't see why you couldn't have fixed that yourself (if it hasn't
already been fixed in main CVS).
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
2005-06-14 21:46 ` [Qemu-devel] " Heike C. Zimmerer
@ 2005-06-14 22:43 ` Jim C. Brown
2005-06-15 17:28 ` jeebs
2005-06-15 18:11 ` Heike C. Zimmerer
0 siblings, 2 replies; 26+ messages in thread
From: Jim C. Brown @ 2005-06-14 22:43 UTC (permalink / raw)
To: hcz, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 984 bytes --]
On Tue, Jun 14, 2005 at 11:46:32PM +0200, Heike C. Zimmerer wrote:
> "Jim C. Brown" <jma5@umd.edu> writes:
>
> > E.g. I'm the developer of the gtk2 interface for qemu, and I have no
> > idea about what bugs it may have as no one has reported any to
> > me. In fact, I have no idea if anyone is even using it because I get
> > no direct feedback.
>
> I'm using the snapshots from dad-answers.com/qemu/, and from time to
> time did a grep for gtk through the entire source tree, but didn't
> find any mention of it there.
>
> Maybe I've missed something, so could you explain how to get hold of
> the gtk code? Thanks.
>
> - Heike
>
They weren't committed to the CVS tree yet. You'll need to get it in patch
form. I'm reattaching all the necessary patches and files here, so you can get
it all in one place. (The .c files I've attached should be dropped in the main qemu
directory).
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
[-- Attachment #2: qemu-gtk-patch.diff --]
[-- Type: text/plain, Size: 4575 bytes --]
diff -u qemu.orig/Makefile.target qemu/Makefile.target
--- qemu.orig/Makefile.target Mon May 30 19:42:28 2005
+++ qemu/Makefile.target Mon May 30 19:57:26 2005
@@ -357,6 +357,10 @@
ifdef CONFIG_SDL
VL_OBJS+=sdl.o
endif
+ifdef CONFIG_GTK
+VL_OBJS+=gtk2.o
+VL_OBJS+=fullscreen.o
+endif
ifdef CONFIG_COCOA
VL_OBJS+=cocoa.o
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
@@ -392,13 +396,19 @@
endif
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
- $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
+ $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(GTK_LIBS) $(FS_LIBS) $(VL_LIBS)
cocoa.o: cocoa.m
$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
sdl.o: sdl.c keymaps.c sdl_keysym.h
$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
+
+gtk2.o: gtk2.c keymaps.c gdk_keysym.h fullscreen.h
+ $(CC) $(CFLAGS) $(DEFINES) $(GTK_CFLAGS) -c -o $@ $<
+
+fullscreen.o: $(FSDRV) fullscreen.h
+ $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
sdlaudio.o: sdlaudio.c
$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
diff -u qemu.orig/configure qemu/configure
--- qemu.orig/configure Mon May 30 19:40:14 2005
+++ qemu/configure Mon May 30 20:10:11 2005
@@ -15,6 +15,7 @@
TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}"
TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S"
+TMPF="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}-conf"
# default parameters
prefix=""
@@ -171,6 +172,10 @@
;;
--disable-sdl) sdl="no"
;;
+ --enable-gtk) gtk="yes"
+ ;;
+ --set-fs-driver=*) fsdrv=`echo $opt | cut -d '=' -f 2`
+ ;;
--enable-fmod) fmod="yes"
;;
--fmod-lib=*) fmod_lib=${opt#--fmod-lib=}
@@ -311,6 +316,62 @@
fi # cross compilation
fi # -z $sdl
+##########################################
+# GTK probe
+
+gtk_too_old=no
+
+if test -z "$gtk" ; then
+
+gtk=no
+
+# normal GTK probe
+cat > $TMPC << EOF
+#include <stdlib.h>
+#include <gtk/gtk.h>
+int main(int argc, char **argv) { gtk_init(&argc, &argv); return EXIT_SUCCESS; }
+EOF
+
+if $cc -o $TMPE `pkg-config --cflags --libs gtk+-2.0 2> /dev/null` $TMPC 2> /dev/null ; then
+_gtkversion=`pkg-config --modversion gtk+-2.0 | sed 's/[^0-9]//g'`
+if test "$_sdlversion" -lt 240 ; then
+ gtk_too_old=yes
+else
+ gtk=yes
+
+fi
+
+fi # gtk compile test
+
+fi # -z $gtk
+
+if [ "$gtk" = "yes" ]; then
+
+if [ "$fsdrv" = "" ] ; then
+
+if [ "$bsd" = "yes" -o "$linux" = "yes" ]; then
+ fsdrv=xvid_fs.c
+else
+ fsdrv=null_fs.c
+fi
+
+fi # fsdrv test
+
+if [ "$fsdrv" = "xvid_fs.c" -o "$fsdrv" = "null_fs.c" ]; then
+ echo "fsdrv=$fsdrv" >> $TMPF
+else
+ echo "Warning: unknown gtk fullscreen driver: $fsdrv - using null driver"
+ echo 'fsdrv=null_fs.c' >> $TMPF
+ fsdrv=null_fs.c
+fi
+
+if [ "$fsdrv" = "xvid_fs.c" ]; then
+ FS_LIBS="-lX11 -lXxf86vm -lXext -L/usr/X11R6/lib"
+ echo 'FS_LIBS="-lX11 -lXxf86vm -lXext -L/usr/X11R6/lib"' >> $TMPF
+fi
+
+fi # gtk=yes test
+
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
cat << EOF
@@ -434,6 +495,8 @@
if test "$sdl" != "no" ; then
echo "SDL static link $sdl_static"
fi
+echo "GTK support $gtk"
+echo "GTK FS driver $fsdrv"
echo "mingw32 support $mingw32"
echo "Adlib support $adlib"
echo -n "FMOD support $fmod"
@@ -643,6 +706,8 @@
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"`
echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h
+. $TMPF
+
if test "$target_cpu" = "i386" ; then
echo "TARGET_ARCH=i386" >> $config_mak
echo "#define TARGET_ARCH \"i386\"" >> $config_h
@@ -720,6 +785,17 @@
fi
fi
+if test "$gtk" = "yes" ; then
+ . $TMPF
+ echo "#define CONFIG_GTK 1" >> $config_h
+ echo "CONFIG_GTK=yes" >> $config_mak
+ echo "GTK_LIBS=`pkg-config --libs gtk+-2.0`" >> $config_mak
+ echo "GTK_CFLAGS=`pkg-config --cflags gtk+-2.0`" >> $config_mak
+ echo "FSDRV=$fsdrv" >> $config_mak
+ echo "FS_LIBS=$FS_LIBS" >> $config_mak
+ echo "" >> $config_mak
+fi
+
if test "$cocoa" = "yes" ; then
echo "#define CONFIG_COCOA 1" >> $config_h
echo "CONFIG_COCOA=yes" >> $config_mak
@@ -739,4 +815,4 @@
done
fi
-rm -f $TMPO $TMPC $TMPE $TMPS
+rm -f $TMPO $TMPC $TMPE $TMPS $TMPF
diff -u qemu.orig/vl.h qemu/vl.h
--- qemu.orig/vl.h Mon May 30 19:40:14 2005
+++ qemu/vl.h Sat May 28 16:16:18 2005
@@ -579,6 +579,9 @@
/* sdl.c */
void sdl_display_init(DisplayState *ds, int full_screen);
+/* gtk2.c */
+void gtk2_display_init(DisplayState *ds, int full_screen);
+
/* cocoa.m */
void cocoa_display_init(DisplayState *ds, int full_screen);
[-- Attachment #3: vl.c.diff --]
[-- Type: text/plain, Size: 1611 bytes --]
--- vl.c.orig Tue May 31 14:53:22 2005
+++ vl.c Tue May 31 14:52:55 2005
@@ -147,6 +147,7 @@
TextConsole *vga_console;
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
+int use_gtk = 0;
#ifdef TARGET_I386
int win2k_install_hack = 0;
#endif
@@ -2877,6 +2878,7 @@
QEMU_OPTION_cirrusvga,
QEMU_OPTION_g,
QEMU_OPTION_std_vga,
+ QEMU_OPTION_use_gtk,
QEMU_OPTION_monitor,
QEMU_OPTION_serial,
QEMU_OPTION_parallel,
@@ -2947,6 +2949,7 @@
{ "localtime", 0, QEMU_OPTION_localtime },
{ "isa", 0, QEMU_OPTION_isa },
{ "std-vga", 0, QEMU_OPTION_std_vga },
+ { "use-gtk", 0, QEMU_OPTION_use_gtk },
{ "monitor", 1, QEMU_OPTION_monitor },
{ "serial", 1, QEMU_OPTION_serial },
{ "parallel", 1, QEMU_OPTION_parallel },
@@ -3345,6 +3348,9 @@
case QEMU_OPTION_std_vga:
cirrus_vga_enabled = 0;
break;
+ case QEMU_OPTION_use_gtk:
+ use_gtk = 1;
+ break;
case QEMU_OPTION_g:
{
const char *p;
@@ -3599,7 +3605,17 @@
if (nographic) {
dumb_display_init(ds);
} else {
+#if defined(CONFIG_GTK)
#if defined(CONFIG_SDL)
+ /* so we can choose */
+ if (use_gtk)
+ gtk2_display_init(ds, full_screen);
+ else
+ sdl_display_init(ds, full_screen);
+#else
+ gtk2_display_init(ds, full_screen);
+#endif
+#elif defined(CONFIG_SDL)
sdl_display_init(ds, full_screen);
#elif defined(CONFIG_COCOA)
cocoa_display_init(ds, full_screen);
[-- Attachment #4: gtk2.c --]
[-- Type: text/plain, Size: 21578 bytes --]
/*
* QEMU GTK2 display driver
* based on SDL driver by Fabrice
*
* Copyright (c) 2005 Jim Brown
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "vl.h"
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include "fullscreen.h"
/* define our own bitshift enums to allow qemugtk to know difference between left and right alt - something gtk doesnt provide in its modifiers mask. this uses qemu's own modifier_state[] map in order to guess correctly */
typedef enum
{
gtkshiftleft = 1 << 0,
gtkshiftright = 1 << 1,
gtkcontrolleft = 1 << 2,
gtkcontrolright = 1 << 3,
gtkaltleft = 1 << 4,
gtkaltright = 1 << 5,
gtkcapslock = 1 << 6
} gtk2keymod;
static GtkWidget *screen;
static GdkImage *image=NULL;
static GdkCursor *invisible_cursor;
static int ox = 0, oy = 0;
static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
static int last_vm_running;
static int gui_saved_grab;
static int gui_fullscreen;
static int gui_key_modifier_pressed;
static int gui_keysym;
static int gui_fullscreen_initial_grab;
static int gui_grab_code = gtkaltleft | gtkcontrolleft;
static uint8_t modifiers_state[256];
static unsigned int cw, ch;
static gint cx, cy;
static gboolean gtk2_expose(GtkWidget *wid, GdkEventExpose *event)
{
gdk_draw_image(wid->window, wid->style->fg_gc[GTK_WIDGET_STATE(wid)], image, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height);
return TRUE;
}
static void gtk2_update(DisplayState *ds, int x, int y, int w, int h)
{
// printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h);
GdkEventExpose ev;
ev.area.x = x;
ev.area.y = y;
ev.area.width = w;
ev.area.height = h;
gtk2_expose(screen, &ev);
}
static void gtk2_resize(DisplayState *ds, int w, int h)
{
// printf(" resizing to %d %d\n", w, h);
if (gui_fullscreen)
{
if (cw != w || ch != h)
fullscreen_switch(cx, cy, w, h); /* changing video modes */
//gtk_window_fullscreen(GTK_WINDOW(screen));
}
else
{
//gtk_window_unfullscreen(GTK_WINDOW(screen));
}
cw = w; ch = h;
if (image)
g_object_unref(image);
/* gdk_visual_get_best_with_depth() ??? but then how to paint onto window? */
image = gdk_image_new(GDK_IMAGE_NORMAL, gdk_visual_get_system(), w, h);
gdk_image_set_colormap(image, gdk_colormap_get_system());
gtk_window_set_default_size(GTK_WINDOW(screen), w, h);
gtk_widget_set_size_request(screen, w, h);
gtk_window_resize(GTK_WINDOW(screen), w, h);
ds->data = image->mem;
ds->linesize = image->bpl;
ds->depth = image->bits_per_pixel;
ds->width = w;
ds->height = h;
gtk2_update(ds, 0, 0, w, h);
}
/* generic keyboard conversion */
#include "gdk_keysym.h"
#include "keymaps.c"
static kbd_layout_t *kbd_layout = NULL;
static uint8_t gtk2_keyevent_to_keycode_generic(const GdkEventKey *ev)
{
int keysym;
/* workaround for X11+SDL bug with AltGR - is it still needed for Gtk2? */
keysym = ev->keyval;
if (keysym == 0 && ev->hardware_keycode == 113)
keysym = GDK_Mode_switch;
return keysym2scancode(kbd_layout, keysym);
}
/* specific keyboard conversions from scan codes */
#if defined(_WIN32)
static uint8_t gtk2_keyevent_to_keycode(const GdkEventKey *ev)
{
return ev->hardware_keycode; /* does this work on win32 gtk? */
}
#else
static const uint8_t x_keycode_to_pc_keycode[61] = {
0xc7, /* 97 Home */
0xc8, /* 98 Up */
0xc9, /* 99 PgUp */
0xcb, /* 100 Left */
0x4c, /* 101 KP-5 */
0xcd, /* 102 Right */
0xcf, /* 103 End */
0xd0, /* 104 Down */
0xd1, /* 105 PgDn */
0xd2, /* 106 Ins */
0xd3, /* 107 Del */
0x9c, /* 108 Enter */
0x9d, /* 109 Ctrl-R */
0x0, /* 110 Pause */
0xb7, /* 111 Print */
0xb5, /* 112 Divide */
0xb8, /* 113 Alt-R */
0xc6, /* 114 Break */
0x0, /* 115 */
0x0, /* 116 */
0x0, /* 117 */
0x0, /* 118 */
0x0, /* 119 */
0x70, /* 120 Hiragana_Katakana */
0x0, /* 121 */
0x0, /* 122 */
0x73, /* 123 backslash */
0x0, /* 124 */
0x0, /* 125 */
0x0, /* 126 */
0x0, /* 127 */
0x0, /* 128 */
0x79, /* 129 Henkan */
0x0, /* 130 */
0x7b, /* 131 Muhenkan */
0x0, /* 132 */
0x7d, /* 133 Yen */
0x0, /* 134 */
0x0, /* 135 */
0x47, /* 136 KP_7 */
0x48, /* 137 KP_8 */
0x49, /* 138 KP_9 */
0x4b, /* 139 KP_4 */
0x4c, /* 140 KP_5 */
0x4d, /* 141 KP_6 */
0x4f, /* 142 KP_1 */
0x50, /* 143 KP_2 */
0x51, /* 144 KP_3 */
0x52, /* 145 KP_0 */
0x53, /* 146 KP_. */
0x47, /* 147 KP_HOME */
0x48, /* 148 KP_UP */
0x49, /* 149 KP_PgUp */
0x4b, /* 150 KP_Left */
0x4c, /* 151 KP_ */
0x4d, /* 152 KP_Right */
0x4f, /* 153 KP_End */
0x50, /* 154 KP_Down */
0x51, /* 155 KP_PgDn */
0x52, /* 156 KP_Ins */
0x53, /* 157 KP_Del */
};
static uint8_t gtk2_keyevent_to_keycode(const GdkEventKey *ev)
{
int keycode;
keycode = ev->hardware_keycode;
if (keycode < 9) {
keycode = 0;
} else if (keycode < 97) {
keycode -= 8; /* just an offset */
} else if (keycode < 158) {
/* use conversion table */
keycode = x_keycode_to_pc_keycode[keycode - 97];
} else {
keycode = 0;
}
return keycode;
}
#endif
static void reset_keys(void)
{
int i;
for(i = 0; i < 256; i++) {
if (modifiers_state[i]) {
if (i & 0x80)
kbd_put_keycode(0xe0);
kbd_put_keycode(i | 0x80);
modifiers_state[i] = 0;
}
}
}
/* convert GDK modifiers and invoke ugly hack to distinguish
between left and right shift/control/alt */
static guint gtk2_GetModState(const GdkEventKey *ev)
{
guint key = 0, keyval = ev->keyval, state = ev->state;
switch(keyval)
{
case GDK_Shift_L:
if (ev->type != GDK_KEY_RELEASE)
key |= gtkshiftleft;
keyval = 1;
break;
case GDK_Shift_R:
if (ev->type != GDK_KEY_RELEASE)
key |= gtkshiftright;
keyval = 1;
break;
case GDK_Control_L:
if (ev->type != GDK_KEY_RELEASE)
key |= gtkcontrolleft;
keyval = 2;
break;
case GDK_Control_R:
if (ev->type != GDK_KEY_RELEASE)
key |= gtkcontrolright;
keyval = 2;
break;
case GDK_Alt_L:
if (ev->type != GDK_KEY_RELEASE)
key |= gtkaltleft;
keyval = 3;
break;
case GDK_Alt_R:
if (ev->type != GDK_KEY_RELEASE)
key |= gtkaltright;
keyval = 3;
break;
case GDK_Caps_Lock:
if (ev->type != GDK_KEY_RELEASE)
key |= gtkcapslock;
keyval = 4;
break;
default:
keyval = 0;
break;
}
if (keyval != 1 && (state & GDK_SHIFT_MASK))
{
if (modifiers_state[0x2a])
key |= gtkshiftleft;
if (modifiers_state[0x36])
key |= gtkshiftright;
}
if (keyval != 2 && (state & GDK_CONTROL_MASK))
{
if (modifiers_state[0x1d])
key |= gtkcontrolleft;
if (modifiers_state[0x9d])
key |= gtkcontrolright;
}
if (keyval != 3 && (state & GDK_MOD1_MASK)) /* fixme: need to do a check to make sure that alt is mapped to GDK_MOD1_MASK in the GDK_Keymap */
{
if (modifiers_state[0x38])
key |= gtkaltleft;
if (modifiers_state[0xb8])
key |= gtkaltright;
}
if (keyval != 4 && (state & GDK_LOCK_MASK))
key |= gtkcapslock;
return key;
}
static void gtk2_process_key(GdkEventKey *ev)
{
int keycode, v;
if (ev->keyval == GDK_Pause) {
/* specific case */
v = 0;
if (ev->type == GDK_KEY_RELEASE)
v |= 0x80;
kbd_put_keycode(0xe1);
kbd_put_keycode(0x1d | v);
kbd_put_keycode(0x45 | v);
return;
}
if (kbd_layout) {
keycode = gtk2_keyevent_to_keycode_generic(ev);
} else {
keycode = gtk2_keyevent_to_keycode(ev);
}
switch(keycode) {
case 0x00:
/* sent when leaving window: reset the modifiers state */
reset_keys();
return;
case 0x2a: /* Left Shift */
case 0x36: /* Right Shift */
case 0x1d: /* Left CTRL */
case 0x9d: /* Right CTRL */
case 0x38: /* Left ALT */
case 0xb8: /* Right ALT */
if (ev->type == GDK_KEY_RELEASE)
modifiers_state[keycode] = 0;
else
modifiers_state[keycode] = 1;
break;
case 0x45: /* num lock */
case 0x3a: /* caps lock */
/* GTK does send the key up event, so we dont generate it */
/*kbd_put_keycode(keycode);
kbd_put_keycode(keycode | 0x80);
return;*/
break;
}
/* now send the key code */
if (keycode & 0x80)
kbd_put_keycode(0xe0);
if (ev->type == GDK_KEY_RELEASE)
kbd_put_keycode(keycode | 0x80);
else
kbd_put_keycode(keycode & 0x7f);
}
static void gtk2_update_caption(void)
{
char buf[1024];
strcpy(buf, "QEMU");
if (!vm_running) {
strcat(buf, " [Stopped]");
}
if (gui_grab) {
strcat(buf, " - Press Ctrl-Alt to exit grab");
}
gtk_window_set_title(GTK_WINDOW(screen), buf);
}
/* what a nasty hack. this should be a part of the GDK, not external!!! */
#include "gdk_set_window_pointer.c"
static void gtk2_grab_start(void)
{
gint y;
guint events;
GdkModifierType state; /* dummy var */
events = GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_SCROLL_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK;
y = gdk_pointer_grab(screen->window, TRUE, events, screen->window, invisible_cursor, GDK_CURRENT_TIME);
if (y)
printf("GTK Warning - pointer grab failed!\n");
y = gdk_keyboard_grab(screen->window, TRUE, GDK_CURRENT_TIME);
if (y)
printf("GTK Warning - keyboard grab failed!\n");
/* do a dummy read to avoid moving mouse - set ox and oy to stay in sync */
gdk_window_get_pointer(screen->window, &ox, &oy, &state);
gui_grab = 1;
gtk2_update_caption();
}
static void gtk2_grab_end(void)
{
gdk_pointer_ungrab(GDK_CURRENT_TIME);
gdk_keyboard_ungrab(GDK_CURRENT_TIME);
gdk_window_set_pointer(screen->window, cx, cy);
gui_grab = 0;
gtk2_update_caption();
}
static gboolean gtk2_send_mouse_scroll(GtkWidget *wid, GdkEventScroll *ev)
{
int x, y, dx, dy, dz, state, buttons;
if (gui_grab)
{
x = ev->x;
y = ev->y;
state = ev->state;
buttons = 0;
dx = x - ox;
dy = y - oy;
ox = x;
oy = y;
buttons = 0;
if ((state & GDK_BUTTON1_MASK))
buttons |= MOUSE_EVENT_LBUTTON;
if ((state & GDK_BUTTON3_MASK))
buttons |= MOUSE_EVENT_RBUTTON;
if ((state & GDK_BUTTON2_MASK))
buttons |= MOUSE_EVENT_MBUTTON;
/* test wheel - copied from Sebastien Bechet's gtk.c */
dz = 0;
if ((state & GDK_BUTTON4_MASK) || ev->direction == GDK_SCROLL_UP)
dz--;
if ((state & GDK_BUTTON5_MASK) || ev->direction == GDK_SCROLL_DOWN)
dz++;
kbd_mouse_event(dx, dy, dz, buttons);
}
return TRUE;
}
static gboolean gtk2_send_mouse_button(GtkWidget *wid, GdkEventButton *ev)
{
int x, y, dx, dy, dz, state, buttons;
if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS)
return TRUE; /* double or triple click - superflurious - ignore */
if (gui_grab)
{
x = ev->x;
y = ev->y;
state = ev->state;
buttons = 0;
dx = x - ox;
dy = y - oy;
ox = x;
oy = y;
buttons = 0;
if ((state & GDK_BUTTON1_MASK) || ev->button == 1)
buttons |= MOUSE_EVENT_LBUTTON;
if ((state & GDK_BUTTON3_MASK) || ev->button == 3)
buttons |= MOUSE_EVENT_RBUTTON;
if ((state & GDK_BUTTON2_MASK) || ev->button == 2)
buttons |= MOUSE_EVENT_MBUTTON;
/* XXX: test wheel */
dz = 0;
if ((state & GDK_BUTTON4_MASK) || ev->button == 4)
dz--;
if ((state & GDK_BUTTON5_MASK) || ev->button == 5)
dz++;
kbd_mouse_event(dx, dy, dz, buttons);
}
else
{
if (ev->button == 1 && ev->type == GDK_BUTTON_PRESS)
{
/* start grabbing all events */
gtk2_grab_start();
}
}
return TRUE;
}
static gboolean gtk2_send_mouse_move(GtkWidget *wid, GdkEventMotion *ev)
{
int x, y, dx, dy, dz, state, buttons;
if (gui_grab)
{
if (ev->is_hint)
{
gdk_window_get_pointer(ev->window, &x, &y, (GdkModifierType*)&state);
}
else
{
x = ev->x;
y = ev->y;
state = ev->state;
}
dx = x - ox;
dy = y - oy;
ox = x;
oy = y;
buttons = 0;
if (state & GDK_BUTTON1_MASK)
buttons |= MOUSE_EVENT_LBUTTON;
if (state & GDK_BUTTON3_MASK)
buttons |= MOUSE_EVENT_RBUTTON;
if (state & GDK_BUTTON2_MASK)
buttons |= MOUSE_EVENT_MBUTTON;
/* XXX: test wheel */
dz = 0;
if (state & GDK_BUTTON4_MASK)
dz--;
if (state & GDK_BUTTON5_MASK)
dz++;
/* wrap the x,y coordinates back onto the window */
if (ev->x <= (cw/4))
x = ((3*cw/4)-1);
if (ev->y <= (ch/4))
y = ((3*ch/4)-1);
if (ev->x >= (3*cw/4))
x = (cw/4)+1;
if (ev->y >= (3*ch/4))
y = (ch/4)+1;
gdk_window_set_pointer(screen->window, (gint)x, (gint)y);
kbd_mouse_event(dx, dy, dz, buttons);
}
return TRUE;
}
static void toggle_full_screen(DisplayState *ds)
{
gui_fullscreen = !gui_fullscreen;
gtk2_resize(ds, image->width, image->height);
if (gui_fullscreen) {
gui_saved_grab = gui_grab;
gtk2_grab_start();
gtk_window_get_position(GTK_WINDOW(screen), &cx, &cy);
/* ignore window manager decorations when in fullscreen mode */
gtk_window_set_gravity(GTK_WINDOW(screen), GDK_GRAVITY_STATIC);
gtk_window_move(GTK_WINDOW(screen), 0, 0);
fullscreen_switch(cx, cy, ds->width, ds->height);
} else {
fullscreen_reset();
gtk_window_set_gravity(GTK_WINDOW(screen), GDK_GRAVITY_NORTH_WEST);
gtk_window_move(GTK_WINDOW(screen), cx, cy);
if (!gui_saved_grab)
gtk2_grab_end();
}
vga_invalidate_display();
vga_update_display();
}
static gboolean gtk2_key_press(GtkWidget *wid, GdkEventKey *ev, DisplayState *ds)
{
int mod_state;
if (ev->type == GDK_KEY_PRESS) {
mod_state = (gtk2_GetModState(ev) & (int)gui_grab_code) == (int)gui_grab_code;
gui_key_modifier_pressed = mod_state;
if (gui_key_modifier_pressed) {
int keycode;
keycode = gtk2_keyevent_to_keycode(ev);
switch(keycode) {
case 0x21: /* 'f' key on US keyboard */
toggle_full_screen(ds);
gui_keysym = 1;
break;
case 0x02 ... 0x0a: /* '1' to '9' keys */
console_select(keycode - 0x02);
if (is_active_console(vga_console)) {
/* tell the vga console to redisplay itself */
vga_invalidate_display();
} else {
/* display grab if going to a text console */
if (gui_grab)
gtk2_grab_end();
}
gui_keysym = 1;
break;
default:
break;
}
} else if (!is_active_console(vga_console)) {
int keysym;
keysym = 0;
if (ev->state & GDK_CONTROL_MASK) {
switch(ev->keyval) {
case GDK_Up: keysym = QEMU_KEY_CTRL_UP; break;
case GDK_Down: keysym = QEMU_KEY_CTRL_DOWN; break;
case GDK_Left: keysym = QEMU_KEY_CTRL_LEFT; break;
case GDK_Right: keysym = QEMU_KEY_CTRL_RIGHT; break;
case GDK_Home: keysym = QEMU_KEY_CTRL_HOME; break;
case GDK_End: keysym = QEMU_KEY_CTRL_END; break;
case GDK_Page_Up: keysym = QEMU_KEY_CTRL_PAGEUP; break;
case GDK_Page_Down: keysym = QEMU_KEY_CTRL_PAGEDOWN; break;
default: break;
}
} else {
switch(ev->keyval) {
case GDK_Up: keysym = QEMU_KEY_UP; break;
case GDK_Down: keysym = QEMU_KEY_DOWN; break;
case GDK_Left: keysym = QEMU_KEY_LEFT; break;
case GDK_Right: keysym = QEMU_KEY_RIGHT; break;
case GDK_Home: keysym = QEMU_KEY_HOME; break;
case GDK_End: keysym = QEMU_KEY_END; break;
case GDK_Page_Up: keysym = QEMU_KEY_PAGEUP; break;
case GDK_Page_Down: keysym = QEMU_KEY_PAGEDOWN; break;
case GDK_BackSpace: keysym = QEMU_KEY_BACKSPACE; break;
case GDK_Delete: keysym = QEMU_KEY_DELETE; break;
default: break;
}
}
if (keysym) {
kbd_put_keysym(keysym);
} /*else if (ev->key.keysym.unicode != 0) {
kbd_put_keysym(ev->key.keysym.unicode);
}*/
}
} else if (ev->type == GDK_KEY_RELEASE) {
mod_state = (gtk2_GetModState(ev) & gui_grab_code);
if (!mod_state) {
if (gui_key_modifier_pressed) {
if (gui_keysym == 0) {
/* exit/enter grab if pressing Ctrl-Alt */
if (!gui_grab)
gtk2_grab_start();
else
gtk2_grab_end();
/* SDL does not send back all the
modifiers key, so we must correct it */
reset_keys();
return TRUE;
}
gui_key_modifier_pressed = 0;
gui_keysym = 0;
}
}
}
if (is_active_console(vga_console))
gtk2_process_key(ev);
return TRUE;
}
static void gtk2_refresh(DisplayState *ds)
{
if (last_vm_running != vm_running) {
last_vm_running = vm_running;
gtk2_update_caption();
}
if (ds->data != image->mem)
{
ds->data = image->mem;
}
if (is_active_console(vga_console))
vga_update_display();
while (gtk_events_pending())
gtk_main_iteration();
}
static void gtk2_cleanup(void)
{
gtk_main_quit();
fullscreen_cleanup();
}
static gboolean gtk2_deletewin(void)
{
/* signal qemu that its time to shut itself off - this is the place that we hook to trap attempts to close the main qemu window */
qemu_system_shutdown_request();
return TRUE; /* dont close the window right away! give qemu time to think */
}
static void gtk2_destroy(void)
{
/* ideally we would call a hook here so qemu could clean itself up */
gtk2_cleanup();
}
void gtk2_display_init(DisplayState *ds, int full_screen)
{
int events;
#if defined(__APPLE__)
/* always use generic keymaps */
if (!keyboard_layout)
keyboard_layout = "en-us";
#endif
if(keyboard_layout) {
kbd_layout = init_keyboard_layout(keyboard_layout);
if (!kbd_layout)
exit(1);
}
if (!gtk_init_check (0,NULL))
{
fprintf(stderr, "Could not load GTK\n");
exit(0);
}
fullscreen_init();
/* note: adding GDK_DRAG_* and GDK_DROP_* would provide a mechanism for supporting drag and drop between host and guest */
events = GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_SCROLL_MASK | GDK_STRUCTURE_MASK;
screen = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_events(screen, events);
gtk_window_set_default_size(GTK_WINDOW(screen), 720, 400);
gtk_widget_set_size_request(screen, 720, 400);
g_signal_connect(G_OBJECT(screen), "delete_event", G_CALLBACK(gtk2_deletewin), NULL);
g_signal_connect(G_OBJECT(screen), "destroy", G_CALLBACK(gtk2_destroy), NULL);
gtk_container_set_border_width(GTK_CONTAINER(screen), 10);
gtk_signal_connect(GTK_OBJECT(screen), "expose_event", (GtkSignalFunc) gtk2_expose, NULL);
gtk_signal_connect(GTK_OBJECT(screen), "motion_notify_event", (GtkSignalFunc) gtk2_send_mouse_move, NULL);
gtk_signal_connect(GTK_OBJECT(screen), "button_press_event", (GtkSignalFunc) gtk2_send_mouse_button, NULL);
gtk_signal_connect(GTK_OBJECT(screen), "button_release_event", (GtkSignalFunc) gtk2_send_mouse_button, NULL);
gtk_signal_connect(GTK_OBJECT(screen), "scroll_event", (GtkSignalFunc) gtk2_send_mouse_scroll, NULL);
gtk_signal_connect(GTK_OBJECT(screen), "key_press_event", (GtkSignalFunc) gtk2_key_press, ds);
gtk_signal_connect(GTK_OBJECT(screen), "key_release_event", (GtkSignalFunc) gtk2_key_press, ds);
ds->dpy_update = gtk2_update;
ds->dpy_resize = gtk2_resize;
ds->dpy_refresh = gtk2_refresh;
gchar nullpixdata[1] = { 0 };
GdkColor nullcolor = { 0, 0, 0, 0 };
GdkPixmap *invis = gdk_bitmap_create_from_data(screen->window, nullpixdata, 1, 1);
invisible_cursor = gdk_cursor_new_from_pixmap(invis, invis, &nullcolor, &nullcolor, 0, 0);
gtk2_resize(ds, 720, 400);
gtk2_update_caption();
gui_grab = 0;
gtk_window_set_policy(GTK_WINDOW(screen), FALSE, FALSE, FALSE);
gtk_widget_show(screen);
if (full_screen) {
gui_fullscreen = 1;
gui_fullscreen_initial_grab = 1;
gtk2_grab_start();
}
}
[-- Attachment #5: gdk_keysym.h --]
[-- Type: text/plain, Size: 8786 bytes --]
#include <gdk/gdkkeysyms.h>
typedef struct {
const char* name;
int keysym;
} name2keysym_t;
static name2keysym_t name2keysym[]={
/* ascii */
{ "space", 0x020},
{ "exclam", 0x021},
{ "quotedbl", 0x022},
{ "numbersign", 0x023},
{ "dollar", 0x024},
{ "percent", 0x025},
{ "ampersand", 0x026},
{ "apostrophe", 0x027},
{ "parenleft", 0x028},
{ "parenright", 0x029},
{ "asterisk", 0x02a},
{ "plus", 0x02b},
{ "comma", 0x02c},
{ "minus", 0x02d},
{ "period", 0x02e},
{ "slash", 0x02f},
{ "0", 0x030},
{ "1", 0x031},
{ "2", 0x032},
{ "3", 0x033},
{ "4", 0x034},
{ "5", 0x035},
{ "6", 0x036},
{ "7", 0x037},
{ "8", 0x038},
{ "9", 0x039},
{ "colon", 0x03a},
{ "semicolon", 0x03b},
{ "less", 0x03c},
{ "equal", 0x03d},
{ "greater", 0x03e},
{ "question", 0x03f},
{ "at", 0x040},
{ "A", 0x041},
{ "B", 0x042},
{ "C", 0x043},
{ "D", 0x044},
{ "E", 0x045},
{ "F", 0x046},
{ "G", 0x047},
{ "H", 0x048},
{ "I", 0x049},
{ "J", 0x04a},
{ "K", 0x04b},
{ "L", 0x04c},
{ "M", 0x04d},
{ "N", 0x04e},
{ "O", 0x04f},
{ "P", 0x050},
{ "Q", 0x051},
{ "R", 0x052},
{ "S", 0x053},
{ "T", 0x054},
{ "U", 0x055},
{ "V", 0x056},
{ "W", 0x057},
{ "X", 0x058},
{ "Y", 0x059},
{ "Z", 0x05a},
{ "bracketleft", 0x05b},
{ "backslash", 0x05c},
{ "bracketright", 0x05d},
{ "asciicircum", 0x05e},
{ "underscore", 0x05f},
{ "grave", 0x060},
{ "a", 0x061},
{ "b", 0x062},
{ "c", 0x063},
{ "d", 0x064},
{ "e", 0x065},
{ "f", 0x066},
{ "g", 0x067},
{ "h", 0x068},
{ "i", 0x069},
{ "j", 0x06a},
{ "k", 0x06b},
{ "l", 0x06c},
{ "m", 0x06d},
{ "n", 0x06e},
{ "o", 0x06f},
{ "p", 0x070},
{ "q", 0x071},
{ "r", 0x072},
{ "s", 0x073},
{ "t", 0x074},
{ "u", 0x075},
{ "v", 0x076},
{ "w", 0x077},
{ "x", 0x078},
{ "y", 0x079},
{ "z", 0x07a},
{ "braceleft", 0x07b},
{ "bar", 0x07c},
{ "braceright", 0x07d},
{ "asciitilde", 0x07e},
/* latin 1 extensions */
{ "nobreakspace", 0x0a0},
{ "exclamdown", 0x0a1},
{ "cent", 0x0a2},
{ "sterling", 0x0a3},
{ "currency", 0x0a4},
{ "yen", 0x0a5},
{ "brokenbar", 0x0a6},
{ "section", 0x0a7},
{ "diaeresis", 0x0a8},
{ "copyright", 0x0a9},
{ "ordfeminine", 0x0aa},
{ "guillemotleft", 0x0ab},
{ "notsign", 0x0ac},
{ "hyphen", 0x0ad},
{ "registered", 0x0ae},
{ "macron", 0x0af},
{ "degree", 0x0b0},
{ "plusminus", 0x0b1},
{ "twosuperior", 0x0b2},
{ "threesuperior", 0x0b3},
{ "acute", 0x0b4},
{ "mu", 0x0b5},
{ "paragraph", 0x0b6},
{ "periodcentered", 0x0b7},
{ "cedilla", 0x0b8},
{ "onesuperior", 0x0b9},
{ "masculine", 0x0ba},
{ "guillemotright", 0x0bb},
{ "onequarter", 0x0bc},
{ "onehalf", 0x0bd},
{ "threequarters", 0x0be},
{ "questiondown", 0x0bf},
{ "Agrave", 0x0c0},
{ "Aacute", 0x0c1},
{ "Acircumflex", 0x0c2},
{ "Atilde", 0x0c3},
{ "Adiaeresis", 0x0c4},
{ "Aring", 0x0c5},
{ "AE", 0x0c6},
{ "Ccedilla", 0x0c7},
{ "Egrave", 0x0c8},
{ "Eacute", 0x0c9},
{ "Ecircumflex", 0x0ca},
{ "Ediaeresis", 0x0cb},
{ "Igrave", 0x0cc},
{ "Iacute", 0x0cd},
{ "Icircumflex", 0x0ce},
{ "Idiaeresis", 0x0cf},
{ "ETH", 0x0d0},
{ "Eth", 0x0d0},
{ "Ntilde", 0x0d1},
{ "Ograve", 0x0d2},
{ "Oacute", 0x0d3},
{ "Ocircumflex", 0x0d4},
{ "Otilde", 0x0d5},
{ "Odiaeresis", 0x0d6},
{ "multiply", 0x0d7},
{ "Ooblique", 0x0d8},
{ "Oslash", 0x0d8},
{ "Ugrave", 0x0d9},
{ "Uacute", 0x0da},
{ "Ucircumflex", 0x0db},
{ "Udiaeresis", 0x0dc},
{ "Yacute", 0x0dd},
{ "THORN", 0x0de},
{ "Thorn", 0x0de},
{ "ssharp", 0x0df},
{ "agrave", 0x0e0},
{ "aacute", 0x0e1},
{ "acircumflex", 0x0e2},
{ "atilde", 0x0e3},
{ "adiaeresis", 0x0e4},
{ "aring", 0x0e5},
{ "ae", 0x0e6},
{ "ccedilla", 0x0e7},
{ "egrave", 0x0e8},
{ "eacute", 0x0e9},
{ "ecircumflex", 0x0ea},
{ "ediaeresis", 0x0eb},
{ "igrave", 0x0ec},
{ "iacute", 0x0ed},
{ "icircumflex", 0x0ee},
{ "idiaeresis", 0x0ef},
{ "eth", 0x0f0},
{ "ntilde", 0x0f1},
{ "ograve", 0x0f2},
{ "oacute", 0x0f3},
{ "ocircumflex", 0x0f4},
{ "otilde", 0x0f5},
{ "odiaeresis", 0x0f6},
{ "division", 0x0f7},
{ "oslash", 0x0f8},
{ "ooblique", 0x0f8},
{ "ugrave", 0x0f9},
{ "uacute", 0x0fa},
{ "ucircumflex", 0x0fb},
{ "udiaeresis", 0x0fc},
{ "yacute", 0x0fd},
{ "thorn", 0x0fe},
{ "ydiaeresis", 0x0ff},
{"EuroSign", GDK_EuroSign},
/* modifiers */
{"Control_L", GDK_Control_L},
{"Control_R", GDK_Control_R},
{"Alt_L", GDK_Alt_L},
{"Alt_R", GDK_Alt_R},
{"Caps_Lock", GDK_Caps_Lock},
{"Meta_L", GDK_Meta_L},
{"Meta_R", GDK_Meta_R},
{"Shift_L", GDK_Shift_L},
{"Shift_R", GDK_Shift_R},
{"Super_L", GDK_Super_L},
{"Super_R", GDK_Super_R},
/* special keys */
{"BackSpace", GDK_BackSpace},
{"Tab", GDK_Tab},
{"Return", GDK_Return},
{"Right", GDK_Right},
{"Left", GDK_Left},
{"Up", GDK_Up},
{"Down", GDK_Down},
{"Page_Down", GDK_Page_Down},
{"Page_Up", GDK_Page_Up},
{"Insert", GDK_Insert},
{"Delete", GDK_Delete},
{"Home", GDK_Home},
{"End", GDK_End},
{"Scroll_Lock", GDK_Scroll_Lock},
{"F1", GDK_F1},
{"F2", GDK_F2},
{"F3", GDK_F3},
{"F4", GDK_F4},
{"F5", GDK_F5},
{"F6", GDK_F6},
{"F7", GDK_F7},
{"F8", GDK_F8},
{"F9", GDK_F9},
{"F10", GDK_F10},
{"F11", GDK_F11},
{"F12", GDK_F12},
{"F13", GDK_F13},
{"F14", GDK_F14},
{"F15", GDK_F15},
{"Sys_Req", GDK_Sys_Req},
{"KP_0", GDK_KP_0},
{"KP_1", GDK_KP_1},
{"KP_2", GDK_KP_2},
{"KP_3", GDK_KP_3},
{"KP_4", GDK_KP_4},
{"KP_5", GDK_KP_5},
{"KP_6", GDK_KP_6},
{"KP_7", GDK_KP_7},
{"KP_8", GDK_KP_8},
{"KP_9", GDK_KP_9},
{"KP_Add", GDK_KP_Add},
{"KP_Decimal", GDK_KP_Decimal},
{"KP_Divide", GDK_KP_Divide},
{"KP_Enter", GDK_KP_Enter},
{"KP_Equal", GDK_KP_Equal},
{"KP_Multiply", GDK_KP_Multiply},
{"KP_Subtract", GDK_KP_Subtract},
{"help", GDK_Help},
{"Menu", GDK_Menu},
{"Power", GDK_VoidSymbol},
{"Print", GDK_Print},
{"Mode_switch", GDK_Mode_switch},
{"Multi_Key", GDK_Multi_key},
{"Num_Lock", GDK_Num_Lock},
{"Pause", GDK_Pause},
{"Escape", GDK_Escape},
{0,0},
};
[-- Attachment #6: gdk_set_window_pointer.c --]
[-- Type: text/plain, Size: 1262 bytes --]
/* TODO: figure out how to handle linux framebuffer case - need to call the gdk-fb specific handle_mouse_movement() function in gdkmouse-fb.c ... that gets ugly fast .. */
#ifndef _WIN32
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <X11/X.h>
GdkWindow*
gdk_window_set_pointer (GdkWindow *window,
gint x,
gint y)
{
GdkWindow *return_val;
return_val = NULL;
XWarpPointer (GDK_WINDOW_XDISPLAY(window), None, GDK_WINDOW_XID(window), 0, 0, 0, 0, x, y);
return return_val;
}
#else
/* untested code based on MSDN library code... URL is :
http://msdn.microsoft.com/library/default.asp?url=/library/
en-us/winui/winui/windowsuserinterface/resources/cursors/
usingcursors.asp
Someone who codes on Windows want to tell me how to actually make this work??
*/
#include <windows.h>
GdkWindow*
gdk_window_set_pointer (GdkWindow *window,
gint x,
gint y)
{
GdkWindow *return_val;
POINT pt;
pt.x = x;
pt.y = y;
ClientToScreen(GDK_WINDOW_HWND(window), &pt);
SetCursorPos(pt.x, pt.y);
return_val = NULL;
return return_val;
}
#endif
[-- Attachment #7: xvid_fs.c --]
[-- Type: text/plain, Size: 2298 bytes --]
/* Use X11 Xvid extension to implement fullscreen mode */
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/xf86dga.h>
#include <X11/extensions/xf86vmode.h>
static Display *dpy;
static XF86VidModeModeInfo **mode_list;
static XF86VidModeModeInfo * modeinfo;
static int count;
int fullscreen_init(void)
{
int event, error, dotclock;
XF86VidModeModeLine * modeline;
/* load up X display and make sure we have the Xvid extention */
dpy = XOpenDisplay(""); /* FIXME: make this the one that Gtk uses */
if (dpy == NULL)
return 0;
if (!XF86VidModeQueryExtension(dpy, &event, &error))
return 0;
/* get list of all modes */
XF86VidModeGetAllModeLines(dpy, XDefaultScreen(dpy), &count, &mode_list);
/* get current modeline */
modeline = (XF86VidModeModeLine *)malloc(sizeof(XF86VidModeModeLine));
XF86VidModeGetModeLine(dpy, XDefaultScreen(dpy), &dotclock, modeline);
/* convert to ModeInfo structure */
modeinfo = (XF86VidModeModeInfo *)malloc(sizeof(XF86VidModeModeInfo));
modeinfo->dotclock = dotclock;
modeinfo->hdisplay = modeline->hdisplay;
modeinfo->hsyncstart = modeline->hsyncstart;
modeinfo->hsyncend = modeline->hsyncend;
modeinfo->htotal = modeline->htotal;
modeinfo->vdisplay = modeline->vdisplay;
modeinfo->vsyncstart = modeline->vsyncstart;
modeinfo->vsyncend = modeline->vsyncend;
modeinfo->vtotal = modeline->vtotal;
modeinfo->flags = modeline->flags;
modeinfo->privsize = modeline->privsize;
modeinfo->private = modeline->private;
free(modeline);
return 1;
}
int fullscreen_switch(int x, int y, int w, int h)
{
int i;
for (i = 0; i < count; i++)
{
if (w == mode_list[i]->hdisplay)
if (h == mode_list[i]->vdisplay)
{
XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy), mode_list[i]);
XF86VidModeSetViewPort(dpy, XDefaultScreen(dpy), 0, 0);
XFlush(dpy);
return 1;
}
}
return 0;
}
int fullscreen_reset(void)
{
XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy), modeinfo);
XFlush(dpy);
return 1;
}
void fullscreen_cleanup(void)
{
int i;
if (modeinfo->privsize != 0)
free(modeinfo->private);
free(modeinfo);
for (i = 0; i < count; i++)
{
if (mode_list[i]->privsize != 0)
free(mode_list[i]->private);
free(mode_list[i]);
}
free(mode_list);
}
[-- Attachment #8: null_fs.c --]
[-- Type: text/plain, Size: 326 bytes --]
/* dummy functions - return successful but dont actually change the mode */
/* use this with Win32 GTK until someone writes a win32_fs.c */
int fullscreen_init(void)
{
return 1;
}
int fullscreen_switch(int x, int y, int w, int h)
{
return 1;
}
int fullscreen_reset(void)
{
return 1;
}
void fullscreen_cleanup(void)
{
}
[-- Attachment #9: fullscreen.h --]
[-- Type: text/plain, Size: 163 bytes --]
/* fullscreen defines */
int fullscreen_init(void);
int fullscreen_switch(int x, int y, int w, int h);
int fullscreen_reset(void);
void fullscreen_cleanup(void);
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 22:18 ` Jim C. Brown
@ 2005-06-14 23:02 ` jeebs
2005-06-15 9:23 ` Jernej Simončič
2005-06-15 13:36 ` Henrik Nordstrom
0 siblings, 2 replies; 26+ messages in thread
From: jeebs @ 2005-06-14 23:02 UTC (permalink / raw)
To: qemu-devel
"Jim C. Brown"
>> I'm willing to do some testing. But you'll have to tell me how to do the
>> gtk2 interface under windows.....
>>
>
> Well, you will need to apply the patches and compile from source yourself.
> Not to mention, you'll have to download the windows versions of the GTK2
> libraries (you can probably get binaries).
I'll have to hunt around. I'm not familiar with gtk2.
>> But it gets significantly frustrating when you see the same problems
>> month
>> after month after month, etc.
>
> Only report it the first time you see it.
And then sit back and wait for it to be forgotten....[grimace]
> Some one of those bugs have actually been fixed. A patch was sent a while
> ago that got rid of bug #9441 IDE multimode failure. (Long before the bug
> itself
> was submitted.) So was the gcc 3.4 bug (which includes a link to the
> patch).
> Etc.
Yes, I'm sure some of them are fixed... Nobody is even looking there.
Except for the occasional user trying to be helpful, it's been ignored.
Meanwhile, all those possibly helpful bug reports by users have gone to
waste.
> I have to take that back. Savannah bug tracker is not a good way to go, as
> e.g.
> even if the bugs are fixed none of the developers can say so or close the
> bug.
> Only Fabrice has access. Also, only he has commit access so good patches,
> such
> as the graphics patch, don't always make it in right away.
I can't comment about how to close bugs... I've never done that.
As for submitting patches, Savanah has a facility to do that, too. They can
be submitted seperately. I would expect the most that would be needed would
be registration. (The qemu page doesn't have it enabled, but Savanah has
that ability. I've seen it on other projects.)
> Yes, more communication is needed. We shouldnt be bothered by bugs which
> have
> patches to fix them or bugs that are a non issue or bugs that are easily
Seperate patches aren't necessarily the right thing to do....
Most are *users*. They aren't going to build their own. They will download
one of the pre-made binaries, which is likely to be just CVS. Maybe with
one or two critical patches, but maybe not.
A good way to help this area would be a compile farm doing nightly builds!
This has been suggested before.
That way, everybody can get up to date cvs builds. With the important
patches applied.
> As a side note, I have a hackish patch that will allow you to change the
> cdrom
> in the monitor to a filename that includes spaces. It was not a difficult
> change
> to implement. I don't see why you couldn't have fixed that yourself (if it
> hasn't
> already been fixed in main CVS).
I don't think it's been fixed in cvs. Although I admit I haven't checked
with the last couple cvs builds.
As for fixing it myself...
I'm not really a developer.
I used to write some C code. Nothing really fancy.
But that's been a while. I haven't even had a compiler installed for about
two years.
I only recently did one when somebody in the qemu-user's forum explained how
to compile the cvs version under windows. Until then, I didn't even know
how to compile qemu. Qemu does it in the linux style, and I wasn't familiar
with that.
Getting back up to speed in C would take me a little while. Getting up to
speed with qemu, and familiar with the style that Fabrice uses, etc. would
take more time.
And although I might be able to fix one or two trivial bugs, I seriously
doubt I'd be able to do the others. They require significant knowledge of
qemu, and of how the hardware is supposed to work and how it's being
emulated. Not everybody can just 'jump in' and do that kind of work.
It's not time that I want to waste.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 18:51 ` jeebs
@ 2005-06-15 4:08 ` Herbert Poetzl
0 siblings, 0 replies; 26+ messages in thread
From: Herbert Poetzl @ 2005-06-15 4:08 UTC (permalink / raw)
To: jeebs; +Cc: qemu-devel
On Tue, Jun 14, 2005 at 01:51:10PM -0500, jeebs@yango.us wrote:
> From: "Henrik Nordstrom"
>
>
> >> The best that many can do is test qemu and report problems when they are
> >> found.
> >
> > Then you have to accept that the developers do the best they can in their
> > interest for the benefit of all.
>
> Generally, the way open source works is that a bug that directly effects a
> developer, gets fixed. They get annoyed enough they stop what they are
> doing and fix it.
>
> A bug that directly effects code they have written, might get checked into.
>
> If it's a bug they can live with or work around, it doesn't get fixed. And
> probably not reported, for that matter.
>
> If it's a bug that effects an OS that they don't use, it gets ignored.
> (Hence, the Windows builds were broken for a long time and nobody noticed it
> or if they did notice, didn't bother to fix it.)
well, sounds sane to me, or do you fix your
neighbors broken kitchen sink, just because
you heard him complain about it, instead of
fixing your own?
> >> But that's no excuse for bug reports to just vanish into the void.
> >> Without
> >> an awknowledgement or somebody writting it down as a bug in qemu that
> >> needs
> >> to get fixed eventually.
> >
> > There rarely is a void these days. If you send a bug report to a public
> > mailinglist then it
>
> That makes the very very large assumption that the developers deliberately
> go looking through the back message archives for bugs that haven't been
> fixed.
if there _are_ good reasons for them to do
so, they'll probably do it ...
> After a couple days, people just forget about reported bugs.
and real bugs pop up again and again ... which
is a very good method to filter real bugs from
coincidential issues ...
> > b) Other people later having the same problem quite likely finds it in
> > the archives and refers to it when reporting the same issue again if it
> > still isn't fixed.
>
> Similar bugs can show up in different ways.
>
> Even when a bug does show up repeatedly, and effects many people, doesn't
> mean anybody cares to look into it.
so?
> It just turns into one of those consistant bugs that everybody knows about
> but no longer think of as a bug. It becomes a 'feature' or a 'quirk'.
> "It's just the way qemu does things" kind of mental shift.
>
> The cd changing bugs are excellent examples.
>
> They've been around for so long that most people in here no longer even
> think of them as bugs. They are just simply quirks in qemu. And because
> they are no longer 'bugs' but 'quirks', nobody even thinks to look into it.
>
> Never mind whether they would find the bug or be able to fix it. It's been
> around so long that they don't even *think* of it as a bug anymore, so they
> don't even *think* to look at it.
>
> (I"m not saying the cd changing bugs are absolutely critical. Yes, it does
> prevent some OS's from being installed! But it doesn't crash qemu, etc. It
> does show how a bug can stop being thought of as a bug.)
if somebody cares enough, s/he will fix it or
make sure that it gets fixed ... whining is
probably the worst way to achieve this ...
> > So even if there is no official bugtracking tool (which depending on the
> > developer situation can be good or bad) the report isn't really lost.
>
> Technically, yes, it does get archived.
>
> But effectively it gets lost because it's no longer immediately visible as a
> bug. You have to specifically go looking for bug reports through the
> archives. And then go looking through the messages again to see if it's
> been fixed. (Either partially or fully.)
>
>
> Mailing lists can be very convenient.
>
> But they also make it easy for things to get essentially lost. If something
> isn't in a recent message, then your brain just tends to forget about it
> after a few days.
you are free to collect and prepare the bug
reports for them, just create your own page
with a list of (for you or others) relevant
bugs and possible fixes/workarounds. I'm pretty
confident the developers will make good use of
this page (if you do the collecting part) and
a bunch of issues will get fixed pretty fast ...
ah, and don't forget to announce it on the ML
best,
Herbert
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 23:02 ` jeebs
@ 2005-06-15 9:23 ` Jernej Simončič
2005-06-15 17:30 ` jeebs
2005-06-15 13:36 ` Henrik Nordstrom
1 sibling, 1 reply; 26+ messages in thread
From: Jernej Simončič @ 2005-06-15 9:23 UTC (permalink / raw)
To: jeebs@yango.us on [qemu-devel]
On Wednesday, June 15, 2005, 1:02:45, jeebs@yango.us wrote:
> I'll have to hunt around. I'm not familiar with gtk2.
http://www.gimp.org/win32/ has the development headers and libraries for
GTK+ 2.4 and 2.6 (compiling GTK+ on Windows is a PITA).
--
< Jernej Simoncic ><><><><>< http://deepthought.ena.si/ >
If you're feeling good, don't worry, you'll get over it.
-- Law of mental health
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 17:11 ` jeebs
@ 2005-06-15 13:20 ` Henrik Nordstrom
0 siblings, 0 replies; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-15 13:20 UTC (permalink / raw)
To: qemu-devel
On Tue, 14 Jun 2005 jeebs@yango.us wrote:
> But it gets more than a little darn frustrating when you are enthused about
> the project, you try to help the devlopers and project by deliberately doing
> the testing to find bugs and problems, you report the bugs and problems.....
> And nothing happens.
>
> Not an acknowledgement. Not a fix. Nothing.
>
> Not that week. Not that month. Not the next month. Basically, the effort
> you deliberately put into finding bugs and reporting the bugs has
> disappeared.
This I buy. But I am not that convinced a bug reporting tool automatically
helps the situation.
A (open) bug reporting tool is only meaningful if there is developer
resources to keep active track of the open bugs. If there isn't developer
resources to actively monitor and work with the bug reporting tool the
bugs just accumulate to the point that the reports looses their value.
This can be seen in quite many of the projects on savanna where the number
of bug reports is huge, and noone actively manages them so you don't
really know if a bug still exists or if it will get acted upon.. but it is
true that the reports doesn't get lost and sometimes it actually results
in the bug being fixed years later provided the bug report has the
relevant information to identify the problem.
But from experience being the Squid HTTP Proxy release maintainer on an
estimate about 20-30% of my time is spent on monitoring bug reports which
doesn't really get anywhere (usually the reporter never comes back with
requested additional information, or the problem is an old problen fixed
in the current version). Another 20% is spent on invalid bug reports
(configuration errors, bad builds, incorrect patching, not Squid being the
cause to the problems etc). Levaing about 50% of my available time for
real bug reports and development. While we do have (and use) a bug
tracking tool most of the important bugs is discovered either from
mailinglist discussions or internal testing. The perhaps most important
benefit we have from the bug reporting tools is as a scratchpad for
preleminary versions of the patches and to track forward porting of
patches from the stable version to the development version.
Regards
Henrik
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-14 23:02 ` jeebs
2005-06-15 9:23 ` Jernej Simončič
@ 2005-06-15 13:36 ` Henrik Nordstrom
1 sibling, 0 replies; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-15 13:36 UTC (permalink / raw)
To: qemu-devel
On Tue, 14 Jun 2005 jeebs@yango.us wrote:
> Seperate patches aren't necessarily the right thing to do....
It is without question.
It really hurts a project in long term is if users by default run
something else than the main version.
> A good way to help this area would be a compile farm doing nightly builds!
> This has been suggested before.
Setting up a build farm (or scripts for an existing farm if there is one
suitable) is a very good task for a user wanting to contribute to the
project.
Having developers time spent on configuring a build farm is waste of
resources.
Regards
Henrik
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
2005-06-14 22:43 ` Jim C. Brown
@ 2005-06-15 17:28 ` jeebs
2005-06-15 18:54 ` Jim C. Brown
2005-06-15 18:11 ` Heike C. Zimmerer
1 sibling, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-15 17:28 UTC (permalink / raw)
To: qemu-devel
"Jim C. Brown"
> They weren't committed to the CVS tree yet. You'll need to get it in patch
> form. I'm reattaching all the necessary patches and files here, so you can
> get
> it all in one place. (The .c files I've attached should be dropped in the
> main qemu
> directory).
Here are the steps I did.
I follwed the mingw compilation instructions posted in the qemu-user's
forum. Just to make sure that my setup was working.
>From http://www.gimp.org/win32/ I downloaded the recommended versions of:
atk-1.8.0.zip
atk-dev-1.8.0.zip
gettext-runtime-0.13.1.zip
glib-2.4.7.zip
glib-dev-2.4.7.zip
gtk+-2.4.14.zip
gtk+-dev-2.4.14.zip
libiconv-1.9.1.bin.woe32.zip
pango-1.4.1.zip
pango-dev-1.4.1.zip
pkgconfig-0.15.zip
I unzipped those in the msys/mingw directory.
I then ran the msys program to get a 'linux shell'.
I did a make clean in qemu.
I copied all your files to the qemu directory.
I did "patch <qemu-gtk-patch.diff" and "patch <vl.c.diff" Was I supposed to
use any options?
I did:
./configure --target-list=i386-softmmu --static --enable-gtk
and got:
Install prefix /c/Program Files/Qemu
BIOS directory /c/Program Files/Qemu
binary directory /c/Program Files/Qemu
Source path /home/Admin/qemu
C compiler gcc
make make
host CPU i386
host big endian no
target list i386-softmmu
gprof enabled no
static build yes
SDL support yes
SDL static link yes
GTK support yes
GTK FS driver null_fs.c
mingw32 support yes
Adlib support no
FMOD support no
kqemu support no
Then 'make' and I got this error right at the end...
H:/MSys/home/Admin/qemu/gdk_set_window_pointer.c:45: undefined reference to
`GDK_WINDOW_HWND'
(Plus, the usual assortment of warnings in a typical qemu build.)
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
2005-06-15 9:23 ` Jernej Simončič
@ 2005-06-15 17:30 ` jeebs
0 siblings, 0 replies; 26+ messages in thread
From: jeebs @ 2005-06-15 17:30 UTC (permalink / raw)
To: qemu-devel
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 314 bytes --]
From: "Jernej Simonèiè"
>> I'll have to hunt around. I'm not familiar with gtk2.
>http://www.gimp.org/win32/ has the development headers and libraries for
>GTK+ 2.4 and 2.6 (compiling GTK+ on Windows is a PITA).
Thanks for the link....
It was starting to look a bit more complicated than I could deal with...
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
2005-06-14 22:43 ` Jim C. Brown
2005-06-15 17:28 ` jeebs
@ 2005-06-15 18:11 ` Heike C. Zimmerer
1 sibling, 0 replies; 26+ messages in thread
From: Heike C. Zimmerer @ 2005-06-15 18:11 UTC (permalink / raw)
To: qemu-devel
"Jim C. Brown" <jma5@umd.edu> writes:
>> Maybe I've missed something, so could you explain how to get hold of
>> the gtk code? Thanks.
> I'm reattaching all the necessary patches and files here, so you can get
> it all in one place. (The .c files I've attached should be dropped in the main qemu
> directory).
Thanks. Though I'm not familiar with gtk2 internals, I hope to be
able to provide some useful feedback within the next few days.
- Heike
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
2005-06-15 17:28 ` jeebs
@ 2005-06-15 18:54 ` Jim C. Brown
0 siblings, 0 replies; 26+ messages in thread
From: Jim C. Brown @ 2005-06-15 18:54 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 2285 bytes --]
On Wed, Jun 15, 2005 at 12:28:35PM -0500, jeebs@yango.us wrote:
> Here are the steps I did.
>
> I follwed the mingw compilation instructions posted in the qemu-user's
> forum. Just to make sure that my setup was working.
>
> >From http://www.gimp.org/win32/ I downloaded the recommended versions of:
>
> atk-1.8.0.zip
> atk-dev-1.8.0.zip
> gettext-runtime-0.13.1.zip
> glib-2.4.7.zip
> glib-dev-2.4.7.zip
> gtk+-2.4.14.zip
> gtk+-dev-2.4.14.zip
> libiconv-1.9.1.bin.woe32.zip
> pango-1.4.1.zip
> pango-dev-1.4.1.zip
> pkgconfig-0.15.zip
>
> I unzipped those in the msys/mingw directory.
>
> I then ran the msys program to get a 'linux shell'.
>
> I did a make clean in qemu.
>
> I copied all your files to the qemu directory.
Looks like you did everything correctly.
>
> I did "patch <qemu-gtk-patch.diff" and "patch <vl.c.diff" Was I supposed to
> use any options?
>
No.
> I did:
>
> ./configure --target-list=i386-softmmu --static --enable-gtk
>
> and got:
>
> Install prefix /c/Program Files/Qemu
> BIOS directory /c/Program Files/Qemu
> binary directory /c/Program Files/Qemu
> Source path /home/Admin/qemu
> C compiler gcc
> make make
> host CPU i386
> host big endian no
> target list i386-softmmu
> gprof enabled no
> static build yes
> SDL support yes
> SDL static link yes
> GTK support yes
> GTK FS driver null_fs.c
> mingw32 support yes
> Adlib support no
> FMOD support no
> kqemu support no
>
> Then 'make' and I got this error right at the end...
>
> H:/MSys/home/Admin/qemu/gdk_set_window_pointer.c:45: undefined reference to
> `GDK_WINDOW_HWND'
>
> (Plus, the usual assortment of warnings in a typical qemu build.)
>
I don't know how to fix that. GDK_WINDOW_HWND() is defined in a file called
gdkwin32.h
I've attached a modified version that includes gdkwin32.h directly. Just put
this file in qemu's directory (overwriting the old file). If you have gdkwin32.h
in your gdk include directory this should fix the error.
If this version doesn't work I'll try to write a replacement marco (gtk uses many
internal macros - sometimes it can get real ugly).
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
[-- Attachment #2: gdk_set_window_pointer.c --]
[-- Type: text/plain, Size: 1309 bytes --]
/* TODO: figure out how to handle linux framebuffer case - need to call the gdk-fb specific handle_mouse_movement() function in gdkmouse-fb.c ... that gets ugly fast .. */
#ifndef _WIN32
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <X11/X.h>
GdkWindow*
gdk_window_set_pointer (GdkWindow *window,
gint x,
gint y)
{
GdkWindow *return_val;
return_val = NULL;
XWarpPointer (GDK_WINDOW_XDISPLAY(window), None, GDK_WINDOW_XID(window), 0, 0, 0, 0, x, y);
return return_val;
}
#else
/* untested code based on MSDN library code... URL is :
http://msdn.microsoft.com/library/default.asp?url=/library/
en-us/winui/winui/windowsuserinterface/resources/cursors/
usingcursors.asp
Someone who codes on Windows want to tell me how to actually make this work??
*/
#include <gdk/gdk.h>
#include <gdk/gdkwin32.h>
#include <windows.h>
GdkWindow*
gdk_window_set_pointer (GdkWindow *window,
gint x,
gint y)
{
GdkWindow *return_val;
POINT pt;
pt.x = x;
pt.y = y;
ClientToScreen(GDK_WINDOW_HWND(window), &pt);
SetCursorPos(pt.x, pt.y);
return_val = NULL;
return return_val;
}
#endif
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2005-06-15 18:58 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-13 17:49 [Qemu-devel] Norton Ghost crashes with page fault for me too Jeff Wiegley
2005-06-14 2:37 ` jeebs
2005-06-14 13:43 ` Ishwar Rattan
2005-06-14 16:39 ` Henrik Nordstrom
2005-06-14 17:14 ` jeebs
2005-06-14 17:40 ` Henrik Nordstrom
2005-06-14 18:51 ` jeebs
2005-06-15 4:08 ` Herbert Poetzl
2005-06-14 20:27 ` Jim C. Brown
2005-06-14 20:54 ` [Qemu-devel] " Ronald
2005-06-14 21:15 ` [Qemu-devel] " jeebs
2005-06-14 22:18 ` Jim C. Brown
2005-06-14 23:02 ` jeebs
2005-06-15 9:23 ` Jernej Simončič
2005-06-15 17:30 ` jeebs
2005-06-15 13:36 ` Henrik Nordstrom
2005-06-14 21:46 ` [Qemu-devel] " Heike C. Zimmerer
2005-06-14 22:43 ` Jim C. Brown
2005-06-15 17:28 ` jeebs
2005-06-15 18:54 ` Jim C. Brown
2005-06-15 18:11 ` Heike C. Zimmerer
2005-06-14 16:30 ` [Qemu-devel] " Henrik Nordstrom
2005-06-14 17:11 ` jeebs
2005-06-15 13:20 ` Henrik Nordstrom
2005-06-14 13:54 ` Elefterios Stamatogiannakis
2005-06-14 15:45 ` Andreas Bollhalder
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).