qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Miguel Angel Fraile <mianfrar@gmail.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH] Embed QEmu screen on a custom window
Date: Thu, 26 May 2005 13:42:57 +0200	[thread overview]
Message-ID: <26b3ab7050526044214f0ff81@mail.gmail.com> (raw)

Hi,

I'm the author of QGui, a windows frontend for QEmu available at
http://perso.wanadoo.es/comike.

I've been trying to attach the QEmu screen to my frontend, but I
finally realized I needed to modify QEmu source to get it.

So I've attached a patch that adds a "-hwnd <handle>" argument to QEmu.

<handle> refers to the window handle where QEmu should be embedded (it
can be any control like a groupbox, form, etc).

Then, QEmu creates a new window that has the window specified at
command-line as parent. If QEmu screen size changes, parent and child
windows are resized automatically.

I hope the patch can be applied to CVS, as it would be very useful for
frontend authors.

PS: Please, add my mail address on CC, as I'm not subscribed to this list.

------------------------------------
--- vl.c Thu May 26 11:04:04 2005
+++ vl.c.new Thu May 26 11:03:34 2005
@@ -150,6 +150,9 @@
#ifdef TARGET_I386
int win2k_install_hack = 0;
#endif
+#ifdef _WIN32
+HWND fend_hwnd, qemu_hwnd;
+#endif

/***********************************************************/
/* x86 ISA bus support */
@@ -2785,6 +2788,9 @@
            "-serial dev     redirect the serial port to char device 'dev'\n"
            "-parallel dev   redirect the parallel port to char device 'dev'\n"
            "-pidfile file   Write PID to 'file'\n"
+#ifdef _WIN32
+           "-hwnd handle embed QEmu inside a custom window"
+#endif
            "-S              freeze CPU at startup (use 'c' to start
execution)\n"
            "-s              wait gdb connection to port %d\n"
            "-p port         change gdb connection port\n"
@@ -2883,6 +2889,7 @@
     QEMU_OPTION_loadvm,
     QEMU_OPTION_full_screen,
     QEMU_OPTION_pidfile,
+ QEMU_OPTION_hwnd,
     QEMU_OPTION_no_kqemu,
     QEMU_OPTION_win2k_hack,
};
@@ -2953,6 +2960,9 @@
     { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
     { "full-screen", 0, QEMU_OPTION_full_screen },
     { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
+#ifdef _WIN32
+ { "hwnd", HAS_ARG, QEMU_OPTION_hwnd },
+#endif
     { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
     
     /* temporary options */
@@ -3036,7 +3046,13 @@
     char parallel_devices[MAX_PARALLEL_PORTS][128];
     int parallel_device_index;
     const char *loadvm = NULL;
-    
+
+#ifdef _WIN32
+ char widbuf[24];
+ fend_hwnd=NULL;
+ qemu_hwnd=NULL;
+#endif
+
#if !defined(CONFIG_SOFTMMU)
     /* we never want that malloc() uses mmap() */
     mallopt(M_MMAP_THRESHOLD, 4096 * 1024);
@@ -3405,6 +3421,16 @@
             case QEMU_OPTION_pidfile:
                 create_pidfile(optarg);
                 break;
+#ifdef _WIN32
+ case QEMU_OPTION_hwnd:
+ fend_hwnd=(HWND)atoi(optarg);
+ qemu_hwnd=CreateWindow("BUTTON",NULL,BS_OWNERDRAW | WS_CHILD |
+ WS_VISIBLE,0,0,700,420,fend_hwnd,NULL,
+ GetModuleHandle(NULL),NULL);
+ sprintf(widbuf,"SDL_WINDOWID=%#x",(long)qemu_hwnd);
+ putenv(widbuf);
+ break;
+#endif
#ifdef TARGET_I386
             case QEMU_OPTION_win2k_hack:
                 win2k_install_hack = 1;
--- sdl.c Thu May 26 11:03:50 2005
+++ sdl.c.new Thu May 26 11:03:44 2005
@@ -27,6 +27,9 @@

#ifndef _WIN32
#include <signal.h>
+#else
+#include <windows.h>
+extern HWND fend_hwnd,qemu_hwnd;
#endif

static SDL_Surface *screen;
@@ -66,6 +69,12 @@
     ds->depth = screen->format->BitsPerPixel;
     ds->width = w;
     ds->height = h;
+#ifdef _WIN32
+ SetWindowPos(qemu_hwnd,NULL,0,0,w,h,SWP_NOMOVE |
+ SWP_NOREPOSITION | SWP_NOZORDER);
+ SetWindowPos(fend_hwnd,NULL,0,0,w,h,SWP_NOMOVE |
+ SWP_NOREPOSITION | SWP_NOZORDER);
+#endif
}

/* generic keyboard conversion */
@@ -258,6 +267,9 @@
     if (gui_grab) {
         strcat(buf, " - Press Ctrl-Alt to exit grab");
     }
+#ifdef _WIN32
+ if (qemu_hwnd!=NULL)
+#endif
     SDL_WM_SetCaption(buf, "QEMU");
} 
-----------------------------------

Best regards.
Míguel

             reply	other threads:[~2005-05-26 11:49 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-26 11:42 Miguel Angel Fraile [this message]
2005-05-26 12:10 ` [Qemu-devel] [PATCH] Embed QEmu screen on a custom window Christian MICHON
2005-05-26 12:43   ` Oliver Gerlich
2005-05-26 13:22     ` Christian MICHON
2005-05-26 20:03   ` Fabrice Bellard
2005-05-26 20:32     ` gtk [was Re: [Qemu-devel] [PATCH] Embed QEmu screen on a custom window] Jim C. Brown
2005-05-26 21:09       ` Christian MICHON
2005-05-26 22:22         ` Mark Williamson
2005-05-27  6:07       ` Jim C. Brown
2005-05-27 10:59         ` [Qemu-devel] gtk2 driver Sebastien Bechet
2005-05-27 15:28           ` [Qemu-devel] " Jim C. Brown
2005-05-27 18:06             ` Jim C. Brown
2005-05-27 22:29               ` Jim C. Brown
2005-05-26 21:07     ` [Qemu-devel] [PATCH] Embed QEmu screen on a custom window Christian MICHON
2005-05-26 21:55       ` Fabrice Bellard
2005-05-27 14:39       ` Pierre d'Herbemont
2005-05-28 13:17         ` Christian MICHON
2005-05-28 14:10           ` Oliver Gerlich
2005-05-28 15:35             ` Joe Batt
2005-05-26 21:39     ` Jernej Simončič
  -- strict thread matches above, loose matches on Subject: below --
2005-05-26 15:14 Christian Bourque
2005-05-26 19:24 ` Christian MICHON
2005-05-28 12:37 ` Jerome Warnier
2005-05-27 10:50 Miguel Angel Fraile
2005-05-28  7:13 Sylvain Petreolle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=26b3ab7050526044214f0ff81@mail.gmail.com \
    --to=mianfrar@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).