diff options
author | Laszlo Agocs <laszlo.p.agocs@nokia.com> | 2012-02-14 16:33:29 +0100 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@nokia.com> | 2012-02-15 20:37:14 +0100 |
commit | a6ba08ef1eeeaac4325ddbc9b4cf214dad32ed1e (patch) | |
tree | d9016c71ee9192fdd09149f024cfb8e0ed578674 /src/compositor/wayland_wrapper/wlinputdevice.cpp | |
parent | af808243e01b13f12c27527198968b0a83423fb6 (diff) |
Compositor memory leak fixes
Change-Id: Ia0510e00ffc925cde98ec5345a8129d1979c478c
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Diffstat (limited to 'src/compositor/wayland_wrapper/wlinputdevice.cpp')
-rw-r--r-- | src/compositor/wayland_wrapper/wlinputdevice.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/compositor/wayland_wrapper/wlinputdevice.cpp b/src/compositor/wayland_wrapper/wlinputdevice.cpp index b1c5cb74b..edf55d7fb 100644 --- a/src/compositor/wayland_wrapper/wlinputdevice.cpp +++ b/src/compositor/wayland_wrapper/wlinputdevice.cpp @@ -61,6 +61,11 @@ InputDevice::InputDevice(WaylandInputDevice *handle, Compositor *compositor) wl_display_add_global(compositor->wl_display(),&wl_input_device_interface,this,InputDevice::bind_func); } +InputDevice::~InputDevice() +{ + qDeleteAll(m_data_devices); +} + void InputDevice::sendMousePressEvent(Qt::MouseButton button, const QPoint &localPos, const QPoint &globalPos) { sendMouseMoveEvent(localPos,globalPos); @@ -225,12 +230,14 @@ void InputDevice::setMouseFocus(Surface *surface, const QPoint &globalPos, const localPos.x(), localPos.y()); } -void InputDevice::cleanupDataDeviceForClient(struct wl_client *client) +void InputDevice::cleanupDataDeviceForClient(struct wl_client *client, bool destroyDev) { for (int i = 0; i < m_data_devices.size(); i++) { struct wl_resource *data_device_resource = m_data_devices.at(i)->dataDeviceResource(); if (data_device_resource->client == client) { + if (destroyDev) + delete m_data_devices.at(i); m_data_devices.removeAt(i); break; } @@ -239,7 +246,7 @@ void InputDevice::cleanupDataDeviceForClient(struct wl_client *client) void InputDevice::clientRequestedDataDevice(DataDeviceManager *data_device_manager, struct wl_client *client, uint32_t id) { - cleanupDataDeviceForClient(client); + cleanupDataDeviceForClient(client, false); DataDevice *dataDevice = new DataDevice(data_device_manager,client,id); m_data_devices.append(dataDevice); } @@ -337,7 +344,7 @@ void InputDevice::destroy_resource(wl_resource *resource) input_device->base()->pointer_focus_resource = 0; } - input_device->cleanupDataDeviceForClient(resource->client); + input_device->cleanupDataDeviceForClient(resource->client, true); wl_list_remove(&resource->link); |