mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
spice: misc fixes.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJVPhd0AAoJEEy22O7T6HE4sMkQAK9TcUjMKvKf7k20WsFBDgkc RS/NHEHNrrscnWz+n845NDueFvYAa7DfAKok0ayzD5XSK2RC3AkcGsQ/PF21kg5t +9B0y7YIdJoAt+9w+SulwF6hcK9wWBx0NOUWJomoZWntZcawAv5pTOTvcLR2TJhN eGHuI1lw/Hnsqr0vYXqkFdNNB66zA24oZiaryxsy/TMpd6vlGX3JIvDaLcTden1W u0Fmta5JEDlPCiPIBVxau88U21pDeg6PHEHmWhkeLo45Tsr+R+dB72Ugbguihr1x LRpzQtZoq8gqyqY2+r1lOS5cHNvCkqZhtDK80Aeo2UPxlg88YPMFvonTuvY8Y8Jm 6Mq1gepyI48LdoKwoL8S2ja5W8++unS6kd1oP1fxqalWqFI8mwIB1v4W75a4ejxq drbVWY4jnJDkNiz8BKmg9GLE4mEConei0Ip/lbgflESbjJ9g0Y7IGoc91cjsCXCv 1MuAphNrkwLSckJpNxooKzO7MMhYFw9PGNX26RWE64iRnwMFCsqOxE1KC7rzdnZY Y09fVV+GC1h5XyH25M5cyMCV5r/S/eM1Y6GEhq/OS8xmunGp2WKB7rmaoLMlioMs SiPExlwTaqiZldBHfB71h2E41C7awcmcmY+NsORSxIEg6eTyT4/jljQQXGiwm0JA IcfrFHJHvmmWPL6CLwS0 =Vi97 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/spice/tags/pull-spice-20150427-1' into staging spice: misc fixes. # gpg: Signature made Mon Apr 27 12:03:16 2015 BST using RSA key ID D3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" * remotes/spice/tags/pull-spice-20150427-1: spice: learn to hide cursor spice: set pointer position on hotspot spice: fix mouse cursor position spice: fix simple display on bigendian hosts monitor: Make client_migrate_info synchronous Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
3d27b09cf6
@ -998,8 +998,7 @@ ETEXI
|
||||
.params = "protocol hostname port tls-port cert-subject",
|
||||
.help = "send migration info to spice/vnc client",
|
||||
.user_print = monitor_user_noop,
|
||||
.mhandler.cmd_async = client_migrate_info,
|
||||
.flags = MONITOR_CMD_ASYNC,
|
||||
.mhandler.cmd_new = client_migrate_info,
|
||||
},
|
||||
|
||||
STEXI
|
||||
|
@ -35,6 +35,7 @@
|
||||
# define PIXMAN_BE_r8g8b8a8 PIXMAN_r8g8b8a8
|
||||
# define PIXMAN_BE_x8b8g8r8 PIXMAN_x8b8g8r8
|
||||
# define PIXMAN_BE_a8b8g8r8 PIXMAN_a8b8g8r8
|
||||
# define PIXMAN_LE_x8r8g8b8 PIXMAN_b8g8r8x8
|
||||
#else
|
||||
# define PIXMAN_BE_r8g8b8 PIXMAN_b8g8r8
|
||||
# define PIXMAN_BE_x8r8g8b8 PIXMAN_b8g8r8x8
|
||||
@ -45,6 +46,7 @@
|
||||
# define PIXMAN_BE_r8g8b8a8 PIXMAN_a8b8g8r8
|
||||
# define PIXMAN_BE_x8b8g8r8 PIXMAN_r8g8b8x8
|
||||
# define PIXMAN_BE_a8b8g8r8 PIXMAN_r8g8b8a8
|
||||
# define PIXMAN_LE_x8r8g8b8 PIXMAN_x8r8g8b8
|
||||
#endif
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@ -42,8 +42,7 @@ int qemu_spice_set_passwd(const char *passwd,
|
||||
bool fail_if_connected, bool disconnect_if_connected);
|
||||
int qemu_spice_set_pw_expire(time_t expires);
|
||||
int qemu_spice_migrate_info(const char *hostname, int port, int tls_port,
|
||||
const char *subject,
|
||||
MonitorCompletion cb, void *opaque);
|
||||
const char *subject);
|
||||
|
||||
CharDriverState *qemu_chr_open_spice_vmc(const char *type);
|
||||
#if SPICE_SERVER_VERSION >= 0x000c02
|
||||
@ -70,10 +69,8 @@ static inline int qemu_spice_set_pw_expire(time_t expires)
|
||||
return -1;
|
||||
}
|
||||
static inline int qemu_spice_migrate_info(const char *h, int p, int t,
|
||||
const char *s,
|
||||
MonitorCompletion cb, void *opaque)
|
||||
const char *s)
|
||||
{
|
||||
cb(opaque, NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,8 @@ struct SimpleSpiceDisplay {
|
||||
/* cursor (without qxl): displaychangelistener -> spice server */
|
||||
SimpleSpiceCursor *ptr_define;
|
||||
SimpleSpiceCursor *ptr_move;
|
||||
uint16_t ptr_x, ptr_y;
|
||||
int16_t ptr_x, ptr_y;
|
||||
int16_t hot_x, hot_y;
|
||||
|
||||
/* cursor (with qxl): qxl local renderer -> displaychangelistener */
|
||||
QEMUCursor *cursor;
|
||||
|
@ -1086,7 +1086,7 @@ static void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
|
||||
static int client_migrate_info(Monitor *mon, const QDict *qdict,
|
||||
MonitorCompletion cb, void *opaque)
|
||||
QObject **ret_data)
|
||||
{
|
||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||
const char *hostname = qdict_get_str(qdict, "hostname");
|
||||
@ -1108,8 +1108,7 @@ static int client_migrate_info(Monitor *mon, const QDict *qdict,
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = qemu_spice_migrate_info(hostname, port, tls_port, subject,
|
||||
cb, opaque);
|
||||
ret = qemu_spice_migrate_info(hostname, port, tls_port, subject);
|
||||
if (ret != 0) {
|
||||
qerror_report(QERR_UNDEFINED_ERROR);
|
||||
return -1;
|
||||
|
@ -785,8 +785,7 @@ EQMP
|
||||
.args_type = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
|
||||
.params = "protocol hostname port tls-port cert-subject",
|
||||
.help = "send migration info to spice/vnc client",
|
||||
.mhandler.cmd_async = client_migrate_info,
|
||||
.flags = MONITOR_CMD_ASYNC,
|
||||
.mhandler.cmd_new = client_migrate_info,
|
||||
},
|
||||
|
||||
SQMP
|
||||
|
@ -273,14 +273,6 @@ static SpiceCoreInterface core_interface = {
|
||||
.channel_event = channel_event,
|
||||
};
|
||||
|
||||
typedef struct SpiceMigration {
|
||||
SpiceMigrateInstance sin;
|
||||
struct {
|
||||
MonitorCompletion *cb;
|
||||
void *opaque;
|
||||
} connect_complete;
|
||||
} SpiceMigration;
|
||||
|
||||
static void migrate_connect_complete_cb(SpiceMigrateInstance *sin);
|
||||
static void migrate_end_complete_cb(SpiceMigrateInstance *sin);
|
||||
|
||||
@ -293,15 +285,11 @@ static const SpiceMigrateInterface migrate_interface = {
|
||||
.migrate_end_complete = migrate_end_complete_cb,
|
||||
};
|
||||
|
||||
static SpiceMigration spice_migrate;
|
||||
static SpiceMigrateInstance spice_migrate;
|
||||
|
||||
static void migrate_connect_complete_cb(SpiceMigrateInstance *sin)
|
||||
{
|
||||
SpiceMigration *sm = container_of(sin, SpiceMigration, sin);
|
||||
if (sm->connect_complete.cb) {
|
||||
sm->connect_complete.cb(sm->connect_complete.opaque, NULL);
|
||||
}
|
||||
sm->connect_complete.cb = NULL;
|
||||
/* nothing, but libspice-server expects this cb being present. */
|
||||
}
|
||||
|
||||
static void migrate_end_complete_cb(SpiceMigrateInstance *sin)
|
||||
@ -585,13 +573,10 @@ static void migration_state_notifier(Notifier *notifier, void *data)
|
||||
}
|
||||
|
||||
int qemu_spice_migrate_info(const char *hostname, int port, int tls_port,
|
||||
const char *subject,
|
||||
MonitorCompletion *cb, void *opaque)
|
||||
const char *subject)
|
||||
{
|
||||
int ret;
|
||||
|
||||
spice_migrate.connect_complete.cb = cb;
|
||||
spice_migrate.connect_complete.opaque = opaque;
|
||||
ret = spice_server_migrate_connect(spice_server, hostname,
|
||||
port, tls_port, subject);
|
||||
spice_have_target_host = true;
|
||||
@ -812,9 +797,8 @@ void qemu_spice_init(void)
|
||||
|
||||
migration_state.notify = migration_state_notifier;
|
||||
add_migration_state_change_notifier(&migration_state);
|
||||
spice_migrate.sin.base.sif = &migrate_interface.base;
|
||||
spice_migrate.connect_complete.cb = NULL;
|
||||
qemu_spice_add_interface(&spice_migrate.sin.base);
|
||||
spice_migrate.base.sif = &migrate_interface.base;
|
||||
qemu_spice_add_interface(&spice_migrate.base);
|
||||
|
||||
qemu_spice_input_init();
|
||||
qemu_spice_audio_init();
|
||||
|
@ -178,7 +178,7 @@ static void qemu_spice_create_one_update(SimpleSpiceDisplay *ssd,
|
||||
image->bitmap.palette = 0;
|
||||
image->bitmap.format = SPICE_BITMAP_FMT_32BIT;
|
||||
|
||||
dest = pixman_image_create_bits(PIXMAN_x8r8g8b8, bw, bh,
|
||||
dest = pixman_image_create_bits(PIXMAN_LE_x8r8g8b8, bw, bh,
|
||||
(void *)update->bitmap, bw * 4);
|
||||
pixman_image_composite(PIXMAN_OP_SRC, ssd->surface, NULL, ssd->mirror,
|
||||
rect->left, rect->top, 0, 0,
|
||||
@ -260,7 +260,8 @@ static void qemu_spice_create_update(SimpleSpiceDisplay *ssd)
|
||||
|
||||
static SimpleSpiceCursor*
|
||||
qemu_spice_create_cursor_update(SimpleSpiceDisplay *ssd,
|
||||
QEMUCursor *c)
|
||||
QEMUCursor *c,
|
||||
int on)
|
||||
{
|
||||
size_t size = c ? c->width * c->height * 4 : 0;
|
||||
SimpleSpiceCursor *update;
|
||||
@ -275,8 +276,8 @@ qemu_spice_create_cursor_update(SimpleSpiceDisplay *ssd,
|
||||
|
||||
if (c) {
|
||||
ccmd->type = QXL_CURSOR_SET;
|
||||
ccmd->u.set.position.x = ssd->ptr_x;
|
||||
ccmd->u.set.position.y = ssd->ptr_y;
|
||||
ccmd->u.set.position.x = ssd->ptr_x + ssd->hot_x;
|
||||
ccmd->u.set.position.y = ssd->ptr_y + ssd->hot_y;
|
||||
ccmd->u.set.visible = true;
|
||||
ccmd->u.set.shape = (uintptr_t)cursor;
|
||||
cursor->header.unique = ssd->unique++;
|
||||
@ -288,10 +289,12 @@ qemu_spice_create_cursor_update(SimpleSpiceDisplay *ssd,
|
||||
cursor->data_size = size;
|
||||
cursor->chunk.data_size = size;
|
||||
memcpy(cursor->chunk.data, c->data, size);
|
||||
} else if (!on) {
|
||||
ccmd->type = QXL_CURSOR_HIDE;
|
||||
} else {
|
||||
ccmd->type = QXL_CURSOR_MOVE;
|
||||
ccmd->u.position.x = ssd->ptr_x;
|
||||
ccmd->u.position.y = ssd->ptr_y;
|
||||
ccmd->u.position.x = ssd->ptr_x + ssd->hot_x;
|
||||
ccmd->u.position.y = ssd->ptr_y + ssd->hot_y;
|
||||
}
|
||||
ccmd->release_info.id = (uintptr_t)(&update->ext);
|
||||
|
||||
@ -734,11 +737,11 @@ static void display_mouse_set(DisplayChangeListener *dcl,
|
||||
|
||||
qemu_mutex_lock(&ssd->lock);
|
||||
ssd->ptr_x = x;
|
||||
ssd->ptr_y = x;
|
||||
ssd->ptr_y = y;
|
||||
if (ssd->ptr_move) {
|
||||
g_free(ssd->ptr_move);
|
||||
}
|
||||
ssd->ptr_move = qemu_spice_create_cursor_update(ssd, NULL);
|
||||
ssd->ptr_move = qemu_spice_create_cursor_update(ssd, NULL, on);
|
||||
qemu_mutex_unlock(&ssd->lock);
|
||||
}
|
||||
|
||||
@ -748,6 +751,8 @@ static void display_mouse_define(DisplayChangeListener *dcl,
|
||||
SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl);
|
||||
|
||||
qemu_mutex_lock(&ssd->lock);
|
||||
ssd->hot_x = c->hot_x;
|
||||
ssd->hot_y = c->hot_y;
|
||||
if (ssd->ptr_move) {
|
||||
g_free(ssd->ptr_move);
|
||||
ssd->ptr_move = NULL;
|
||||
@ -755,7 +760,7 @@ static void display_mouse_define(DisplayChangeListener *dcl,
|
||||
if (ssd->ptr_define) {
|
||||
g_free(ssd->ptr_define);
|
||||
}
|
||||
ssd->ptr_define = qemu_spice_create_cursor_update(ssd, c);
|
||||
ssd->ptr_define = qemu_spice_create_cursor_update(ssd, c, 0);
|
||||
qemu_mutex_unlock(&ssd->lock);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user