summaryrefslogtreecommitdiffstats
path: root/server/red_dispatcher.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2010-06-24 16:12:17 +0200
committerGerd Hoffmann <kraxel@redhat.com>2010-06-29 12:30:20 +0200
commit58c23b66860def72f6b5186d77b5e047964e40cb (patch)
treefdc46ea6610264bd34cafcbbef079924d94a01d9 /server/red_dispatcher.c
parent4fb61b9aa5c092db1f8fcbd51f7967ccfda364ac (diff)
downloadspice-58c23b66860def72f6b5186d77b5e047964e40cb.tar.gz
spice-58c23b66860def72f6b5186d77b5e047964e40cb.tar.xz
spice-58c23b66860def72f6b5186d77b5e047964e40cb.zip
qxl abi: parse QXLRect.
Diffstat (limited to 'server/red_dispatcher.c')
-rw-r--r--server/red_dispatcher.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
index 4368cf60..dbc82d4a 100644
--- a/server/red_dispatcher.c
+++ b/server/red_dispatcher.c
@@ -32,6 +32,7 @@
#include "gl_canvas.h"
#include "reds.h"
#include "red_dispatcher.h"
+#include "red_parse_qxl.h"
static int num_active_workers = 0;
@@ -200,11 +201,16 @@ static void update_client_mouse_allowed()
}
static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
- SpiceRect *area, SpiceRect *dirty_rects,
+ QXLRect *qxl_area, QXLRect *qxl_dirty_rects,
uint32_t num_dirty_rects, uint32_t clear_dirty_region)
{
RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
RedWorkerMessage message = RED_WORKER_MESSAGE_UPDATE;
+ SpiceRect *dirty_rects = spice_new0(SpiceRect, num_dirty_rects);
+ SpiceRect *area = spice_new0(SpiceRect, 1);
+ int i;
+
+ red_get_rect_ptr(area, qxl_area);
write_message(dispatcher->channel, &message);
send_data(dispatcher->channel, &surface_id, sizeof(uint32_t));
@@ -214,6 +220,16 @@ static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
send_data(dispatcher->channel, &clear_dirty_region, sizeof(uint32_t));
read_message(dispatcher->channel, &message);
ASSERT(message == RED_WORKER_MESSAGE_READY);
+
+ for (i = 0; i < num_dirty_rects; i++) {
+ qxl_dirty_rects[i].top = dirty_rects[i].top;
+ qxl_dirty_rects[i].left = dirty_rects[i].left;
+ qxl_dirty_rects[i].bottom = dirty_rects[i].bottom;
+ qxl_dirty_rects[i].right = dirty_rects[i].right;
+ }
+
+ free(dirty_rects);
+ free(area);
}
static void qxl_worker_add_memslot(QXLWorker *qxl_worker, QXLDevMemSlot *mem_slot)