All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.