forked from AuroraMiddleware/gtk
Don't access GdkDragContext fields directly
Instead use the accessors.
This commit is contained in:
parent
fe5e0e4502
commit
83204928b9
@ -3387,11 +3387,11 @@ gtk_calendar_drag_motion (GtkWidget *widget,
|
||||
}
|
||||
|
||||
target = gtk_drag_dest_find_target (widget, context, NULL);
|
||||
if (target == GDK_NONE || context->suggested_action == 0)
|
||||
if (target == GDK_NONE || gdk_drag_context_get_suggested_action (context) == 0)
|
||||
gdk_drag_status (context, 0, time);
|
||||
else
|
||||
{
|
||||
set_status_pending (context, context->suggested_action);
|
||||
set_status_pending (context, gdk_drag_context_get_suggested_action (context));
|
||||
gtk_drag_get_data (widget, context, target, time);
|
||||
}
|
||||
|
||||
|
70
gtk/gtkdnd.c
70
gtk/gtkdnd.c
@ -981,7 +981,6 @@ gtk_drag_get_data (GtkWidget *widget,
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (!context->is_source);
|
||||
|
||||
selection_widget = gtk_drag_get_ipc_widget (widget);
|
||||
|
||||
@ -1016,14 +1015,13 @@ gtk_drag_get_source_widget (GdkDragContext *context)
|
||||
GSList *tmp_list;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_DRAG_CONTEXT (context), NULL);
|
||||
g_return_val_if_fail (!context->is_source, NULL);
|
||||
|
||||
tmp_list = source_widgets;
|
||||
while (tmp_list)
|
||||
{
|
||||
GtkWidget *ipc_widget = tmp_list->data;
|
||||
|
||||
if (gtk_widget_get_window (ipc_widget) == context->source_window)
|
||||
if (gtk_widget_get_window (ipc_widget) == gdk_drag_context_get_source_window (context))
|
||||
{
|
||||
GtkDragSourceInfo *info;
|
||||
info = g_object_get_data (G_OBJECT (ipc_widget), "gtk-info");
|
||||
@ -1057,13 +1055,12 @@ gtk_drag_finish (GdkDragContext *context,
|
||||
GdkAtom target = GDK_NONE;
|
||||
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (!context->is_source);
|
||||
|
||||
if (success && del)
|
||||
{
|
||||
target = gdk_atom_intern_static_string ("DELETE");
|
||||
}
|
||||
else if (context->protocol == GDK_DRAG_PROTO_MOTIF)
|
||||
else if (gdk_drag_context_get_protocol (context) == GDK_DRAG_PROTO_MOTIF)
|
||||
{
|
||||
target = gdk_atom_intern_static_string (success ?
|
||||
"XmTRANSFER_SUCCESS" :
|
||||
@ -1072,7 +1069,7 @@ gtk_drag_finish (GdkDragContext *context,
|
||||
|
||||
if (target != GDK_NONE)
|
||||
{
|
||||
GtkWidget *selection_widget = gtk_drag_get_ipc_widget_for_screen (gdk_window_get_screen (context->source_window));
|
||||
GtkWidget *selection_widget = gtk_drag_get_ipc_widget_for_screen (gdk_window_get_screen (gdk_drag_context_get_source_window (context)));
|
||||
|
||||
g_object_ref (context);
|
||||
|
||||
@ -1639,7 +1636,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
|
||||
else if (event->type == GDK_DROP_START && !info->proxy_source)
|
||||
{
|
||||
gdk_drop_reply (context, found, event->dnd.time);
|
||||
if ((context->protocol == GDK_DRAG_PROTO_MOTIF) && !found)
|
||||
if ((gdk_drag_context_get_protocol (context) == GDK_DRAG_PROTO_MOTIF) && !found)
|
||||
gtk_drag_finish (context, FALSE, FALSE, event->dnd.time);
|
||||
}
|
||||
}
|
||||
@ -1657,7 +1654,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
|
||||
* @target_list: (allow-none): list of droppable targets, or %NULL to use
|
||||
* gtk_drag_dest_get_target_list (@widget).
|
||||
*
|
||||
* Looks for a match between @context->targets and the
|
||||
* Looks for a match between the supported targets of @context and the
|
||||
* @dest_target_list, returning the first matching target, otherwise
|
||||
* returning %GDK_NONE. @dest_target_list should usually be the return
|
||||
* value from gtk_drag_dest_get_target_list(), but some widgets may
|
||||
@ -1665,7 +1662,8 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
|
||||
* that case, they will have to implement a drag_motion handler that
|
||||
* passes the correct target list to this function.
|
||||
*
|
||||
* Return value: first target that the source offers and the dest can accept, or %GDK_NONE
|
||||
* Return value: first target that the source offers and the dest can
|
||||
* accept, or %GDK_NONE
|
||||
**/
|
||||
GdkAtom
|
||||
gtk_drag_dest_find_target (GtkWidget *widget,
|
||||
@ -1678,7 +1676,6 @@ gtk_drag_dest_find_target (GtkWidget *widget,
|
||||
|
||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), GDK_NONE);
|
||||
g_return_val_if_fail (GDK_IS_DRAG_CONTEXT (context), GDK_NONE);
|
||||
g_return_val_if_fail (!context->is_source, GDK_NONE);
|
||||
|
||||
|
||||
source_widget = gtk_drag_get_source_widget (context);
|
||||
@ -1693,7 +1690,7 @@ gtk_drag_dest_find_target (GtkWidget *widget,
|
||||
while (tmp_target)
|
||||
{
|
||||
GtkTargetPair *pair = tmp_target->data;
|
||||
tmp_source = context->targets;
|
||||
tmp_source = gdk_drag_context_list_targets (context);
|
||||
while (tmp_source)
|
||||
{
|
||||
if (tmp_source->data == GUINT_TO_POINTER (pair->target))
|
||||
@ -1787,7 +1784,7 @@ gtk_drag_selection_received (GtkWidget *widget,
|
||||
|
||||
gtk_drag_finish (context,
|
||||
(selection_data->length >= 0),
|
||||
(context->action == GDK_ACTION_MOVE),
|
||||
(gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE),
|
||||
time);
|
||||
}
|
||||
|
||||
@ -1924,7 +1921,7 @@ gtk_drag_proxy_begin (GtkWidget *widget,
|
||||
|
||||
ipc_widget = gtk_drag_get_ipc_widget (widget);
|
||||
context = gdk_drag_begin (gtk_widget_get_window (ipc_widget),
|
||||
dest_info->context->targets);
|
||||
gdk_drag_context_list_targets (dest_info->context));
|
||||
|
||||
source_info = gtk_drag_get_source_info (context, TRUE);
|
||||
|
||||
@ -1932,7 +1929,7 @@ gtk_drag_proxy_begin (GtkWidget *widget,
|
||||
source_info->widget = g_object_ref (widget);
|
||||
|
||||
source_info->target_list = gtk_target_list_new (NULL, 0);
|
||||
tmp_list = dest_info->context->targets;
|
||||
tmp_list = gdk_drag_context_list_targets (dest_info->context);
|
||||
while (tmp_list)
|
||||
{
|
||||
gtk_target_list_add (source_info->target_list,
|
||||
@ -2123,8 +2120,9 @@ gtk_drag_dest_motion (GtkWidget *widget,
|
||||
dest_window, proto,
|
||||
current_event->dnd.x_root,
|
||||
current_event->dnd.y_root,
|
||||
context->suggested_action,
|
||||
context->actions, time);
|
||||
gdk_drag_context_get_suggested_action (context),
|
||||
gdk_drag_context_get_actions (context),
|
||||
time);
|
||||
|
||||
if (!site->proxy_window && dest_window)
|
||||
g_object_unref (dest_window);
|
||||
@ -2141,8 +2139,8 @@ gtk_drag_dest_motion (GtkWidget *widget,
|
||||
|
||||
if (site->track_motion || site->flags & GTK_DEST_DEFAULT_MOTION)
|
||||
{
|
||||
if (context->suggested_action & site->actions)
|
||||
action = context->suggested_action;
|
||||
if (gdk_drag_context_get_suggested_action (context) & site->actions)
|
||||
action = gdk_drag_context_get_suggested_action (context);
|
||||
else
|
||||
{
|
||||
gint i;
|
||||
@ -2150,7 +2148,7 @@ gtk_drag_dest_motion (GtkWidget *widget,
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if ((site->actions & (1 << i)) &&
|
||||
(context->actions & (1 << i)))
|
||||
(gdk_drag_context_get_actions (context) & (1 << i)))
|
||||
{
|
||||
action = (1 << i);
|
||||
break;
|
||||
@ -2205,7 +2203,7 @@ gtk_drag_dest_drop (GtkWidget *widget,
|
||||
if (site->do_proxy)
|
||||
{
|
||||
if (info->proxy_source ||
|
||||
(info->context->protocol == GDK_DRAG_PROTO_ROOTWIN))
|
||||
(gdk_drag_context_get_protocol (info->context) == GDK_DRAG_PROTO_ROOTWIN))
|
||||
{
|
||||
gtk_drag_drop (info->proxy_source, time);
|
||||
}
|
||||
@ -2245,8 +2243,9 @@ gtk_drag_dest_drop (GtkWidget *widget,
|
||||
dest_window, proto,
|
||||
current_event->dnd.x_root,
|
||||
current_event->dnd.y_root,
|
||||
context->suggested_action,
|
||||
context->actions, time);
|
||||
gdk_drag_context_get_suggested_action (context),
|
||||
gdk_drag_context_get_actions (context),
|
||||
time);
|
||||
|
||||
if (!site->proxy_window && dest_window)
|
||||
g_object_unref (dest_window);
|
||||
@ -3024,7 +3023,6 @@ gtk_drag_set_icon_widget (GdkDragContext *context,
|
||||
gint hot_y)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (context->is_source);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
gtk_drag_set_icon_window (context, widget, hot_x, hot_y, FALSE);
|
||||
@ -3097,7 +3095,7 @@ set_icon_stock_pixbuf (GdkDragContext *context,
|
||||
g_return_if_fail (pixbuf != NULL || stock_id != NULL);
|
||||
g_return_if_fail (pixbuf == NULL || stock_id == NULL);
|
||||
|
||||
screen = gdk_window_get_screen (context->source_window);
|
||||
screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context));
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_POPUP);
|
||||
gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DND);
|
||||
@ -3123,7 +3121,7 @@ set_icon_stock_pixbuf (GdkDragContext *context,
|
||||
else
|
||||
g_object_ref (pixbuf);
|
||||
|
||||
display = gdk_window_get_display (context->source_window);
|
||||
display = gdk_window_get_display (gdk_drag_context_get_source_window (context));
|
||||
width = gdk_pixbuf_get_width (pixbuf);
|
||||
height = gdk_pixbuf_get_height (pixbuf);
|
||||
|
||||
@ -3173,7 +3171,6 @@ gtk_drag_set_icon_pixbuf (GdkDragContext *context,
|
||||
gint hot_y)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (context->is_source);
|
||||
g_return_if_fail (GDK_IS_PIXBUF (pixbuf));
|
||||
|
||||
set_icon_stock_pixbuf (context, NULL, pixbuf, hot_x, hot_y, FALSE);
|
||||
@ -3196,7 +3193,6 @@ gtk_drag_set_icon_stock (GdkDragContext *context,
|
||||
gint hot_y)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (context->is_source);
|
||||
g_return_if_fail (stock_id != NULL);
|
||||
|
||||
set_icon_stock_pixbuf (context, stock_id, NULL, hot_x, hot_y, FALSE);
|
||||
@ -3264,13 +3260,12 @@ gtk_drag_set_icon_surface (GdkDragContext *context,
|
||||
cairo_pattern_t *pattern;
|
||||
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (context->is_source);
|
||||
g_return_if_fail (surface != NULL);
|
||||
|
||||
_gtk_cairo_surface_extents (surface, &extents);
|
||||
|
||||
|
||||
screen = gdk_window_get_screen (context->source_window);
|
||||
screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context));
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_POPUP);
|
||||
gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DND);
|
||||
@ -3359,10 +3354,9 @@ gtk_drag_set_icon_name (GdkDragContext *context,
|
||||
gint width, height, icon_size;
|
||||
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (context->is_source);
|
||||
g_return_if_fail (icon_name != NULL);
|
||||
|
||||
screen = gdk_window_get_screen (context->source_window);
|
||||
screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context));
|
||||
g_return_if_fail (screen != NULL);
|
||||
|
||||
settings = gtk_settings_get_for_screen (screen);
|
||||
@ -3395,7 +3389,6 @@ void
|
||||
gtk_drag_set_icon_default (GdkDragContext *context)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (context->is_source);
|
||||
|
||||
gtk_drag_set_icon_stock (context, GTK_STOCK_DND, -2, -2);
|
||||
}
|
||||
@ -3438,7 +3431,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
|
||||
{
|
||||
if (info->proxy_dest->proxy_drop_wait)
|
||||
{
|
||||
gboolean result = context->action != 0;
|
||||
gboolean result = gdk_drag_context_get_selected_action (context) != 0;
|
||||
|
||||
/* Aha - we can finally pass the MOTIF DROP on... */
|
||||
gdk_drop_reply (info->proxy_dest->context, result, info->proxy_dest->proxy_drop_time);
|
||||
@ -3450,7 +3443,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
|
||||
else
|
||||
{
|
||||
gdk_drag_status (info->proxy_dest->context,
|
||||
event->dnd.context->action,
|
||||
gdk_drag_context_get_selected_action (event->dnd.context),
|
||||
event->dnd.time);
|
||||
}
|
||||
}
|
||||
@ -3458,7 +3451,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
|
||||
else if (info->have_grab)
|
||||
{
|
||||
cursor = gtk_drag_get_cursor (gtk_widget_get_display (widget),
|
||||
event->dnd.context->action,
|
||||
gdk_drag_context_get_selected_action (event->dnd.context),
|
||||
info);
|
||||
if (info->cursor != cursor)
|
||||
{
|
||||
@ -3528,7 +3521,7 @@ gtk_drag_source_check_selection (GtkDragSourceInfo *info,
|
||||
tmp_list = tmp_list->next;
|
||||
}
|
||||
|
||||
if (info->context->protocol == GDK_DRAG_PROTO_MOTIF)
|
||||
if (gdk_drag_context_get_protocol (info->context) == GDK_DRAG_PROTO_MOTIF)
|
||||
{
|
||||
gtk_selection_add_target (info->ipc_widget,
|
||||
selection,
|
||||
@ -3642,7 +3635,7 @@ static void
|
||||
gtk_drag_drop (GtkDragSourceInfo *info,
|
||||
guint32 time)
|
||||
{
|
||||
if (info->context->protocol == GDK_DRAG_PROTO_ROOTWIN)
|
||||
if (gdk_drag_context_get_protocol (info->context) == GDK_DRAG_PROTO_ROOTWIN)
|
||||
{
|
||||
GtkSelectionData selection_data;
|
||||
GList *tmp_list;
|
||||
@ -4330,7 +4323,8 @@ gtk_drag_button_release_cb (GtkWidget *widget,
|
||||
if (event->button != info->button)
|
||||
return FALSE;
|
||||
|
||||
if ((info->context->action != 0) && (info->context->dest_window != NULL))
|
||||
if ((gdk_drag_context_get_selected_action (info->context) != 0) &&
|
||||
(gdk_drag_context_get_dest_window (info->context) != NULL))
|
||||
{
|
||||
gtk_drag_end (info, event->time);
|
||||
gtk_drag_drop (info, event->time);
|
||||
|
@ -8988,7 +8988,7 @@ gtk_entry_drag_motion (GtkWidget *widget,
|
||||
gtk_drag_dest_find_target (widget, context, NULL) != GDK_NONE)
|
||||
{
|
||||
source_widget = gtk_drag_get_source_widget (context);
|
||||
suggested_action = context->suggested_action;
|
||||
suggested_action = gdk_drag_context_get_suggested_action (context);
|
||||
|
||||
if (!gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &sel1, &sel2) ||
|
||||
new_position < sel1 || new_position > sel2)
|
||||
@ -8998,7 +8998,7 @@ gtk_entry_drag_motion (GtkWidget *widget,
|
||||
/* Default to MOVE, unless the user has
|
||||
* pressed ctrl or alt to affect available actions
|
||||
*/
|
||||
if ((context->actions & GDK_ACTION_MOVE) != 0)
|
||||
if ((gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE) != 0)
|
||||
suggested_action = GDK_ACTION_MOVE;
|
||||
}
|
||||
|
||||
@ -9075,7 +9075,7 @@ gtk_entry_drag_data_received (GtkWidget *widget,
|
||||
end_change (entry);
|
||||
}
|
||||
|
||||
gtk_drag_finish (context, TRUE, context->action == GDK_ACTION_MOVE, time);
|
||||
gtk_drag_finish (context, TRUE, gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE, time);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3071,11 +3071,11 @@ shortcuts_drag_motion_cb (GtkWidget *widget,
|
||||
}
|
||||
#endif
|
||||
|
||||
if (context->suggested_action == GDK_ACTION_COPY ||
|
||||
(context->actions & GDK_ACTION_COPY) != 0)
|
||||
if (gdk_drag_context_get_suggested_action (context) == GDK_ACTION_COPY ||
|
||||
(gdk_drag_context_get_actions (context) & GDK_ACTION_COPY) != 0)
|
||||
action = GDK_ACTION_COPY;
|
||||
else if (context->suggested_action == GDK_ACTION_MOVE ||
|
||||
(context->actions & GDK_ACTION_MOVE) != 0)
|
||||
else if (gdk_drag_context_get_suggested_action (context) == GDK_ACTION_MOVE ||
|
||||
(gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE) != 0)
|
||||
action = GDK_ACTION_MOVE;
|
||||
else
|
||||
{
|
||||
|
@ -6825,7 +6825,7 @@ out:
|
||||
{
|
||||
GtkWidget *source_widget;
|
||||
|
||||
*suggested_action = context->suggested_action;
|
||||
*suggested_action = gdk_drag_context_get_suggested_action (context);
|
||||
source_widget = gtk_drag_get_source_widget (context);
|
||||
|
||||
if (source_widget == widget)
|
||||
@ -6833,7 +6833,7 @@ out:
|
||||
/* Default to MOVE, unless the user has
|
||||
* pressed ctrl or shift to affect available actions
|
||||
*/
|
||||
if ((context->actions & GDK_ACTION_MOVE) != 0)
|
||||
if ((gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE) != 0)
|
||||
*suggested_action = GDK_ACTION_MOVE;
|
||||
}
|
||||
|
||||
@ -7284,7 +7284,7 @@ gtk_icon_view_drag_data_received (GtkWidget *widget,
|
||||
|
||||
gtk_drag_finish (context,
|
||||
accepted,
|
||||
(context->action == GDK_ACTION_MOVE),
|
||||
(gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE),
|
||||
time);
|
||||
|
||||
gtk_tree_path_free (dest_row);
|
||||
|
@ -7028,7 +7028,7 @@ gtk_text_view_drag_motion (GtkWidget *widget,
|
||||
{
|
||||
GtkWidget *source_widget;
|
||||
|
||||
suggested_action = context->suggested_action;
|
||||
suggested_action = gdk_drag_context_get_suggested_action (context);
|
||||
|
||||
source_widget = gtk_drag_get_source_widget (context);
|
||||
|
||||
@ -7037,7 +7037,7 @@ gtk_text_view_drag_motion (GtkWidget *widget,
|
||||
/* Default to MOVE, unless the user has
|
||||
* pressed ctrl or alt to affect available actions
|
||||
*/
|
||||
if ((context->actions & GDK_ACTION_MOVE) != 0)
|
||||
if ((gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE) != 0)
|
||||
suggested_action = GDK_ACTION_MOVE;
|
||||
}
|
||||
}
|
||||
@ -7194,7 +7194,7 @@ gtk_text_view_drag_data_received (GtkWidget *widget,
|
||||
|
||||
atoms = gtk_text_buffer_get_deserialize_formats (buffer, &n_atoms);
|
||||
|
||||
for (list = context->targets; list; list = g_list_next (list))
|
||||
for (list = gdk_drag_context_list_targets (context); list; list = g_list_next (list))
|
||||
{
|
||||
gint i;
|
||||
|
||||
@ -7262,7 +7262,7 @@ gtk_text_view_drag_data_received (GtkWidget *widget,
|
||||
|
||||
done:
|
||||
gtk_drag_finish (context, success,
|
||||
success && context->action == GDK_ACTION_MOVE,
|
||||
success && gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE,
|
||||
time);
|
||||
|
||||
if (success)
|
||||
|
@ -7188,7 +7188,7 @@ out:
|
||||
{
|
||||
GtkWidget *source_widget;
|
||||
|
||||
*suggested_action = context->suggested_action;
|
||||
*suggested_action = gdk_drag_context_get_suggested_action (context);
|
||||
source_widget = gtk_drag_get_source_widget (context);
|
||||
|
||||
if (source_widget == widget)
|
||||
@ -7196,7 +7196,7 @@ out:
|
||||
/* Default to MOVE, unless the user has
|
||||
* pressed ctrl or shift to affect available actions
|
||||
*/
|
||||
if ((context->actions & GDK_ACTION_MOVE) != 0)
|
||||
if ((gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE) != 0)
|
||||
*suggested_action = GDK_ACTION_MOVE;
|
||||
}
|
||||
|
||||
@ -7729,7 +7729,7 @@ gtk_tree_view_drag_data_received (GtkWidget *widget,
|
||||
|
||||
gtk_drag_finish (context,
|
||||
accepted,
|
||||
(context->action == GDK_ACTION_MOVE),
|
||||
(gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE),
|
||||
time);
|
||||
|
||||
if (gtk_tree_path_get_depth (dest_row) == 1
|
||||
|
Loading…
Reference in New Issue
Block a user