mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-08-07 09:39:27 +00:00
Make cursor data @as_ptr to avoid copying data
This commit is contained in:
parent
7fa29ea67e
commit
3c8cb83af5
@ -485,7 +485,7 @@ void CursorChannel::create_native_cursor(CursorData* cursor)
|
||||
cursor->set_opaque(native_cursor);
|
||||
}
|
||||
|
||||
void CursorChannel::set_cursor(SpiceCursor& red_cursor, int data_size, int x, int y, bool visible)
|
||||
void CursorChannel::set_cursor(SpiceCursor& red_cursor, int x, int y, bool visible)
|
||||
{
|
||||
CursorData *cursor;
|
||||
|
||||
@ -497,7 +497,7 @@ void CursorChannel::set_cursor(SpiceCursor& red_cursor, int data_size, int x, in
|
||||
if (red_cursor.flags & SPICE_CURSOR_FLAGS_FROM_CACHE) {
|
||||
cursor = _cursor_cache.get(red_cursor.header.unique);
|
||||
} else {
|
||||
cursor = new CursorData(red_cursor, data_size);
|
||||
cursor = new CursorData(red_cursor, red_cursor.data_size);
|
||||
if (red_cursor.flags & SPICE_CURSOR_FLAGS_CACHE_ME) {
|
||||
ASSERT(red_cursor.header.unique);
|
||||
_cursor_cache.add(red_cursor.header.unique, cursor);
|
||||
@ -560,7 +560,7 @@ void CursorChannel::handle_init(RedPeer::InMessage *message)
|
||||
attach_to_screen(get_client().get_application(), get_id());
|
||||
remove_cursor();
|
||||
_cursor_cache.clear();
|
||||
set_cursor(init->cursor, message->size() - sizeof(SpiceMsgCursorInit), init->position.x,
|
||||
set_cursor(init->cursor, init->position.x,
|
||||
init->position.y, init->visible != 0);
|
||||
}
|
||||
|
||||
@ -574,7 +574,7 @@ void CursorChannel::handle_reset(RedPeer::InMessage *message)
|
||||
void CursorChannel::handle_cursor_set(RedPeer::InMessage* message)
|
||||
{
|
||||
SpiceMsgCursorSet* set = (SpiceMsgCursorSet*)message->data();
|
||||
set_cursor(set->cursor, message->size() - sizeof(SpiceMsgCursorSet), set->position.x,
|
||||
set_cursor(set->cursor, set->position.x,
|
||||
set->position.y, set->visible != 0);
|
||||
}
|
||||
|
||||
|
||||
@ -63,7 +63,7 @@ private:
|
||||
static void create_native_cursor(CursorData* cursor);
|
||||
|
||||
void update_display_cursor();
|
||||
void set_cursor(SpiceCursor& red_cursor, int data_size, int x, int y, bool visible);
|
||||
void set_cursor(SpiceCursor& red_cursor, int x, int y, bool visible);
|
||||
void remove_cursor();
|
||||
|
||||
virtual void copy_pixels(const QRegion& dest_region, RedDrawable& dest_dc);
|
||||
|
||||
@ -173,7 +173,8 @@ typedef struct SpiceMsgcMainMouseModeRequest {
|
||||
typedef struct SpiceCursor {
|
||||
uint32_t flags;
|
||||
SpiceCursorHeader header;
|
||||
uint8_t data[0];
|
||||
uint32_t data_size;
|
||||
uint8_t *data;
|
||||
} SpiceCursor;
|
||||
|
||||
typedef struct SpiceMsgDisplayMode {
|
||||
|
||||
@ -867,7 +867,7 @@ struct CursorHeader {
|
||||
struct Cursor {
|
||||
cursor_flags flags;
|
||||
CursorHeader header;
|
||||
uint8 data[] @end;
|
||||
uint8 data[] @end @as_ptr(data_size);
|
||||
};
|
||||
|
||||
channel CursorChannel : BaseChannel {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user