Merge pull request #1519 from emersion/dedup-source-mime-type
De-duplicate data source MIME types
This commit is contained in:
commit
16a93eddfb
|
@ -190,16 +190,29 @@ static void data_source_offer(struct wl_client *client,
|
||||||
"wl_data_device.set_selection");
|
"wl_data_device.set_selection");
|
||||||
}
|
}
|
||||||
|
|
||||||
char **p = wl_array_add(&source->source.mime_types, sizeof(*p));
|
const char **mime_type_ptr;
|
||||||
if (p) {
|
wl_array_for_each(mime_type_ptr, &source->source.mime_types) {
|
||||||
*p = strdup(mime_type);
|
if (strcmp(*mime_type_ptr, mime_type) == 0) {
|
||||||
|
wlr_log(WLR_DEBUG, "Ignoring duplicate MIME type offer %s",
|
||||||
|
mime_type);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (!p || !*p) {
|
|
||||||
if (p) {
|
|
||||||
source->source.mime_types.size -= sizeof(*p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *dup_mime_type = strdup(mime_type);
|
||||||
|
if (dup_mime_type == NULL) {
|
||||||
wl_resource_post_no_memory(resource);
|
wl_resource_post_no_memory(resource);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char **p = wl_array_add(&source->source.mime_types, sizeof(*p));
|
||||||
|
if (p == NULL) {
|
||||||
|
free(dup_mime_type);
|
||||||
|
wl_resource_post_no_memory(resource);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*p = dup_mime_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct wl_data_source_interface data_source_impl = {
|
static const struct wl_data_source_interface data_source_impl = {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <wlr/types/wlr_data_control_v1.h>
|
#include <wlr/types/wlr_data_control_v1.h>
|
||||||
#include <wlr/types/wlr_data_device.h>
|
#include <wlr/types/wlr_data_device.h>
|
||||||
|
#include <wlr/util/log.h>
|
||||||
#include "util/signal.h"
|
#include "util/signal.h"
|
||||||
#include "wlr-data-control-unstable-v1-protocol.h"
|
#include "wlr-data-control-unstable-v1-protocol.h"
|
||||||
|
|
||||||
|
@ -69,6 +70,15 @@ static void source_handle_offer(struct wl_client *client,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char **mime_type_ptr;
|
||||||
|
wl_array_for_each(mime_type_ptr, &source->source.mime_types) {
|
||||||
|
if (strcmp(*mime_type_ptr, mime_type) == 0) {
|
||||||
|
wlr_log(WLR_DEBUG, "Ignoring duplicate MIME type offer %s",
|
||||||
|
mime_type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char *dup_mime_type = strdup(mime_type);
|
char *dup_mime_type = strdup(mime_type);
|
||||||
if (dup_mime_type == NULL) {
|
if (dup_mime_type == NULL) {
|
||||||
wl_resource_post_no_memory(resource);
|
wl_resource_post_no_memory(resource);
|
||||||
|
|
|
@ -143,6 +143,15 @@ static void source_handle_offer(struct wl_client *client,
|
||||||
wlr_log(WLR_DEBUG, "Offering additional MIME type after set_selection");
|
wlr_log(WLR_DEBUG, "Offering additional MIME type after set_selection");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char **mime_type_ptr;
|
||||||
|
wl_array_for_each(mime_type_ptr, &source->source.mime_types) {
|
||||||
|
if (strcmp(*mime_type_ptr, mime_type) == 0) {
|
||||||
|
wlr_log(WLR_DEBUG, "Ignoring duplicate MIME type offer %s",
|
||||||
|
mime_type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char *dup_mime_type = strdup(mime_type);
|
char *dup_mime_type = strdup(mime_type);
|
||||||
if (dup_mime_type == NULL) {
|
if (dup_mime_type == NULL) {
|
||||||
wl_resource_post_no_memory(resource);
|
wl_resource_post_no_memory(resource);
|
||||||
|
|
Loading…
Reference in New Issue