Compare commits
7 Commits
css-variab
...
wip/matthi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab08566844 | ||
|
|
b7c09e6abb | ||
|
|
26cf06da8d | ||
|
|
89cfc027f2 | ||
|
|
3fbd86aaae | ||
|
|
44ec2fd543 | ||
|
|
8621943552 |
@@ -42,7 +42,6 @@ static void gdk_broadway_device_warp (GdkDevice *device,
|
|||||||
gdouble y);
|
gdouble y);
|
||||||
static void gdk_broadway_device_query_state (GdkDevice *device,
|
static void gdk_broadway_device_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -143,7 +142,6 @@ gdk_broadway_device_warp (GdkDevice *device,
|
|||||||
static void
|
static void
|
||||||
gdk_broadway_device_query_state (GdkDevice *device,
|
gdk_broadway_device_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -151,14 +149,10 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
|||||||
gdouble *win_y,
|
gdouble *win_y,
|
||||||
GdkModifierType *mask)
|
GdkModifierType *mask)
|
||||||
{
|
{
|
||||||
GdkWindow *toplevel;
|
|
||||||
GdkWindowImplBroadway *impl;
|
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
GdkBroadwayDisplay *broadway_display;
|
GdkBroadwayDisplay *broadway_display;
|
||||||
GdkScreen *screen;
|
|
||||||
gint32 device_root_x, device_root_y;
|
gint32 device_root_x, device_root_y;
|
||||||
guint32 mouse_toplevel_id;
|
guint32 mouse_toplevel_id;
|
||||||
GdkWindow *mouse_toplevel;
|
|
||||||
guint32 mask32;
|
guint32 mask32;
|
||||||
|
|
||||||
if (gdk_device_get_source (device) != GDK_SOURCE_MOUSE)
|
if (gdk_device_get_source (device) != GDK_SOURCE_MOUSE)
|
||||||
@@ -167,21 +161,11 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
|||||||
display = gdk_device_get_display (device);
|
display = gdk_device_get_display (device);
|
||||||
broadway_display = GDK_BROADWAY_DISPLAY (display);
|
broadway_display = GDK_BROADWAY_DISPLAY (display);
|
||||||
|
|
||||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
|
||||||
toplevel = impl->wrapper;
|
|
||||||
|
|
||||||
if (root_window)
|
|
||||||
{
|
|
||||||
screen = gdk_window_get_screen (window);
|
|
||||||
*root_window = gdk_screen_get_root_window (screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
_gdk_broadway_server_query_mouse (broadway_display->server,
|
_gdk_broadway_server_query_mouse (broadway_display->server,
|
||||||
&mouse_toplevel_id,
|
&mouse_toplevel_id,
|
||||||
&device_root_x,
|
&device_root_x,
|
||||||
&device_root_y,
|
&device_root_y,
|
||||||
&mask32);
|
&mask32);
|
||||||
mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GUINT_TO_POINTER (mouse_toplevel_id));
|
|
||||||
|
|
||||||
if (root_x)
|
if (root_x)
|
||||||
*root_x = device_root_x;
|
*root_x = device_root_x;
|
||||||
@@ -195,6 +179,17 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
|||||||
*mask = mask32;
|
*mask = mask32;
|
||||||
if (child_window)
|
if (child_window)
|
||||||
{
|
{
|
||||||
|
GdkWindowImplBroadway *impl;
|
||||||
|
GdkWindow *toplevel;
|
||||||
|
GdkWindow *mouse_toplevel;
|
||||||
|
|
||||||
|
if (window == NULL)
|
||||||
|
window = gdk_get_default_root_window ();
|
||||||
|
|
||||||
|
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||||
|
toplevel = impl->wrapper;
|
||||||
|
|
||||||
|
mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GUINT_TO_POINTER (mouse_toplevel_id));
|
||||||
if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
|
if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
|
||||||
{
|
{
|
||||||
*child_window = mouse_toplevel;
|
*child_window = mouse_toplevel;
|
||||||
@@ -347,7 +342,7 @@ gdk_broadway_device_window_at_position (GdkDevice *device,
|
|||||||
screen = gdk_display_get_default_screen (gdk_device_get_display (device));
|
screen = gdk_display_get_default_screen (gdk_device_get_display (device));
|
||||||
root_window = gdk_screen_get_root_window (screen);
|
root_window = gdk_screen_get_root_window (screen);
|
||||||
|
|
||||||
gdk_broadway_device_query_state (device, root_window, NULL, &window, NULL, NULL, win_x, win_y, mask);
|
gdk_broadway_device_query_state (device, root_window, &window, NULL, NULL, win_x, win_y, mask);
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -586,7 +586,6 @@ gdk_device_get_position_double (GdkDevice *device,
|
|||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
gdouble tmp_x, tmp_y;
|
gdouble tmp_x, tmp_y;
|
||||||
GdkScreen *default_screen;
|
GdkScreen *default_screen;
|
||||||
GdkWindow *root;
|
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_DEVICE (device));
|
g_return_if_fail (GDK_IS_DEVICE (device));
|
||||||
g_return_if_fail (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD);
|
g_return_if_fail (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD);
|
||||||
@@ -599,13 +598,13 @@ gdk_device_get_position_double (GdkDevice *device,
|
|||||||
default_screen = gdk_display_get_default_screen (display);
|
default_screen = gdk_display_get_default_screen (display);
|
||||||
|
|
||||||
_gdk_device_query_state (device,
|
_gdk_device_query_state (device,
|
||||||
gdk_screen_get_root_window (default_screen),
|
NULL,
|
||||||
&root, NULL,
|
NULL,
|
||||||
&tmp_x, &tmp_y,
|
&tmp_x, &tmp_y,
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
|
|
||||||
if (screen)
|
if (screen)
|
||||||
*screen = gdk_window_get_screen (root);
|
*screen = default_screen;
|
||||||
if (x)
|
if (x)
|
||||||
*x = tmp_x;
|
*x = tmp_x;
|
||||||
if (y)
|
if (y)
|
||||||
@@ -1838,7 +1837,6 @@ _gdk_device_translate_axis (GdkDevice *device,
|
|||||||
void
|
void
|
||||||
_gdk_device_query_state (GdkDevice *device,
|
_gdk_device_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -1848,7 +1846,6 @@ _gdk_device_query_state (GdkDevice *device,
|
|||||||
{
|
{
|
||||||
GDK_DEVICE_GET_CLASS (device)->query_state (device,
|
GDK_DEVICE_GET_CLASS (device)->query_state (device,
|
||||||
window,
|
window,
|
||||||
root_window,
|
|
||||||
child_window,
|
child_window,
|
||||||
root_x,
|
root_x,
|
||||||
root_y,
|
root_y,
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ struct _GdkDeviceClass
|
|||||||
gdouble y);
|
gdouble y);
|
||||||
void (* query_state) (GdkDevice *device,
|
void (* query_state) (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -172,7 +171,6 @@ void _gdk_device_remove_slave (GdkDevice *device,
|
|||||||
GdkDevice *slave);
|
GdkDevice *slave);
|
||||||
void _gdk_device_query_state (GdkDevice *device,
|
void _gdk_device_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
|
|||||||
@@ -392,6 +392,10 @@ void _gdk_screen_set_resolution (GdkScreen *screen,
|
|||||||
gdouble dpi);
|
gdouble dpi);
|
||||||
void _gdk_screen_close (GdkScreen *screen);
|
void _gdk_screen_close (GdkScreen *screen);
|
||||||
|
|
||||||
|
GdkWindow *gdk_screen_get_root_window (GdkScreen *screen);
|
||||||
|
GdkWindow *gdk_get_default_root_window (void);
|
||||||
|
|
||||||
|
|
||||||
/*****************************************
|
/*****************************************
|
||||||
* Interfaces provided by windowing code *
|
* Interfaces provided by windowing code *
|
||||||
*****************************************/
|
*****************************************/
|
||||||
|
|||||||
@@ -261,16 +261,6 @@ gdk_screen_get_display (GdkScreen *screen)
|
|||||||
return GDK_SCREEN_GET_CLASS (screen)->get_display (screen);
|
return GDK_SCREEN_GET_CLASS (screen)->get_display (screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gdk_screen_get_root_window:
|
|
||||||
* @screen: a #GdkScreen
|
|
||||||
*
|
|
||||||
* Gets the root window of @screen.
|
|
||||||
*
|
|
||||||
* Returns: (transfer none): the root window
|
|
||||||
*
|
|
||||||
* Since: 2.2
|
|
||||||
**/
|
|
||||||
GdkWindow *
|
GdkWindow *
|
||||||
gdk_screen_get_root_window (GdkScreen *screen)
|
gdk_screen_get_root_window (GdkScreen *screen)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -41,8 +41,6 @@ G_BEGIN_DECLS
|
|||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
GType gdk_screen_get_type (void) G_GNUC_CONST;
|
GType gdk_screen_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GdkWindow * gdk_screen_get_root_window (GdkScreen *screen);
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
GdkDisplay * gdk_screen_get_display (GdkScreen *screen);
|
GdkDisplay * gdk_screen_get_display (GdkScreen *screen);
|
||||||
|
|
||||||
|
|||||||
@@ -1159,8 +1159,7 @@ gdk_window_new_toplevel (GdkDisplay *display,
|
|||||||
attr.height = height;
|
attr.height = height;
|
||||||
attr.window_type = GDK_WINDOW_TOPLEVEL;
|
attr.window_type = GDK_WINDOW_TOPLEVEL;
|
||||||
|
|
||||||
return gdk_window_new (gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
|
return gdk_window_new (NULL, &attr);
|
||||||
&attr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1194,8 +1193,7 @@ gdk_window_new_popup (GdkDisplay *display,
|
|||||||
attr.height = position->height;
|
attr.height = position->height;
|
||||||
attr.window_type = GDK_WINDOW_TEMP;
|
attr.window_type = GDK_WINDOW_TEMP;
|
||||||
|
|
||||||
return gdk_window_new (gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
|
return gdk_window_new (NULL, &attr);
|
||||||
&attr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1226,8 +1224,7 @@ gdk_window_new_temp (GdkDisplay *display)
|
|||||||
attr.height = 10;
|
attr.height = 10;
|
||||||
attr.window_type = GDK_WINDOW_TEMP;
|
attr.window_type = GDK_WINDOW_TEMP;
|
||||||
|
|
||||||
return gdk_window_new (gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
|
return gdk_window_new (NULL, &attr);
|
||||||
&attr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1970,8 +1967,7 @@ gdk_window_remove_filter (GdkWindow *window,
|
|||||||
* @screen: The #GdkScreen where the toplevels are located.
|
* @screen: The #GdkScreen where the toplevels are located.
|
||||||
*
|
*
|
||||||
* Obtains a list of all toplevel windows known to GDK on the screen @screen.
|
* Obtains a list of all toplevel windows known to GDK on the screen @screen.
|
||||||
* A toplevel window is a child of the root window (see
|
* A toplevel window has no parent window.
|
||||||
* gdk_get_default_root_window()).
|
|
||||||
*
|
*
|
||||||
* The returned list should be freed with g_list_free(), but
|
* The returned list should be freed with g_list_free(), but
|
||||||
* its elements need not be freed.
|
* its elements need not be freed.
|
||||||
@@ -3478,14 +3474,6 @@ gdk_window_get_device_position (GdkWindow *window,
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gdk_get_default_root_window:
|
|
||||||
*
|
|
||||||
* Obtains the root window (parent all other windows are inside)
|
|
||||||
* for the default display and screen.
|
|
||||||
*
|
|
||||||
* Returns: (transfer none): the default root window
|
|
||||||
**/
|
|
||||||
GdkWindow *
|
GdkWindow *
|
||||||
gdk_get_default_root_window (void)
|
gdk_get_default_root_window (void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -884,9 +884,6 @@ void gdk_window_constrain_size (GdkGeometry *geometry,
|
|||||||
gint *new_width,
|
gint *new_width,
|
||||||
gint *new_height);
|
gint *new_height);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GdkWindow *gdk_get_default_root_window (void);
|
|
||||||
|
|
||||||
/* Multidevice support */
|
/* Multidevice support */
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gdk_window_set_support_multidevice (GdkWindow *window,
|
void gdk_window_set_support_multidevice (GdkWindow *window,
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ gdk_mir_keyboard_warp (GdkDevice *device,
|
|||||||
static void
|
static void
|
||||||
gdk_mir_keyboard_query_state (GdkDevice *device,
|
gdk_mir_keyboard_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
|
|||||||
@@ -133,7 +133,6 @@ gdk_mir_pointer_warp (GdkDevice *device,
|
|||||||
static void
|
static void
|
||||||
gdk_mir_pointer_query_state (GdkDevice *device,
|
gdk_mir_pointer_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -143,8 +142,6 @@ gdk_mir_pointer_query_state (GdkDevice *device,
|
|||||||
{
|
{
|
||||||
GdkMirPointer *p = GDK_MIR_POINTER (device);
|
GdkMirPointer *p = GDK_MIR_POINTER (device);
|
||||||
|
|
||||||
if (root_window)
|
|
||||||
*root_window = gdk_screen_get_root_window (gdk_display_get_default_screen (gdk_device_get_display (device)));
|
|
||||||
if (child_window)
|
if (child_window)
|
||||||
*child_window = p->over_window;
|
*child_window = p->over_window;
|
||||||
if (root_x)
|
if (root_x)
|
||||||
|
|||||||
@@ -1327,7 +1327,7 @@ gdk_mir_window_impl_get_device_state (GdkWindow *window,
|
|||||||
{
|
{
|
||||||
GdkWindow *child;
|
GdkWindow *child;
|
||||||
|
|
||||||
_gdk_device_query_state (device, window, NULL, &child, NULL, NULL, x, y, mask);
|
_gdk_device_query_state (device, window, &child, NULL, NULL, x, y, mask);
|
||||||
|
|
||||||
return child != NULL;
|
return child != NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,7 +258,6 @@ gdk_quartz_device_core_query_state_helper (GdkWindow *window,
|
|||||||
static void
|
static void
|
||||||
gdk_quartz_device_core_query_state (GdkDevice *device,
|
gdk_quartz_device_core_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -270,6 +269,9 @@ gdk_quartz_device_core_query_state (GdkDevice *device,
|
|||||||
NSPoint point;
|
NSPoint point;
|
||||||
gint x_tmp, y_tmp;
|
gint x_tmp, y_tmp;
|
||||||
|
|
||||||
|
if (window == NULL)
|
||||||
|
window = _gdk_root;
|
||||||
|
|
||||||
found_window = gdk_quartz_device_core_query_state_helper (window, device,
|
found_window = gdk_quartz_device_core_query_state_helper (window, device,
|
||||||
win_x, win_y,
|
win_x, win_y,
|
||||||
mask);
|
mask);
|
||||||
|
|||||||
@@ -583,7 +583,6 @@ device_get_modifiers (GdkDevice *device)
|
|||||||
static void
|
static void
|
||||||
gdk_wayland_device_query_state (GdkDevice *device,
|
gdk_wayland_device_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -591,16 +590,13 @@ gdk_wayland_device_query_state (GdkDevice *device,
|
|||||||
gdouble *win_y,
|
gdouble *win_y,
|
||||||
GdkModifierType *mask)
|
GdkModifierType *mask)
|
||||||
{
|
{
|
||||||
GdkWaylandSeat *seat;
|
|
||||||
GdkWaylandPointerData *pointer;
|
GdkWaylandPointerData *pointer;
|
||||||
GdkScreen *default_screen;
|
|
||||||
|
|
||||||
seat = GDK_WAYLAND_SEAT (gdk_device_get_seat (device));
|
if (window == NULL)
|
||||||
|
window = gdk_get_default_root_window ();
|
||||||
|
|
||||||
pointer = GDK_WAYLAND_DEVICE (device)->pointer;
|
pointer = GDK_WAYLAND_DEVICE (device)->pointer;
|
||||||
default_screen = gdk_display_get_default_screen (seat->display);
|
|
||||||
|
|
||||||
if (root_window)
|
|
||||||
*root_window = gdk_screen_get_root_window (default_screen);
|
|
||||||
if (child_window)
|
if (child_window)
|
||||||
/* Set child only if actually a child of the given window, as XIQueryPointer() does */
|
/* Set child only if actually a child of the given window, as XIQueryPointer() does */
|
||||||
*child_window = g_list_find (window->children, pointer->focus) ? pointer->focus : NULL;
|
*child_window = g_list_find (window->children, pointer->focus) ? pointer->focus : NULL;
|
||||||
|
|||||||
@@ -2780,7 +2780,7 @@ gdk_window_wayland_get_device_state (GdkWindow *window,
|
|||||||
GdkWindow *child;
|
GdkWindow *child;
|
||||||
|
|
||||||
GDK_DEVICE_GET_CLASS (device)->query_state (device, window,
|
GDK_DEVICE_GET_CLASS (device)->query_state (device, window,
|
||||||
NULL, &child,
|
&child,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
x, y, mask);
|
x, y, mask);
|
||||||
return_val = (child != NULL);
|
return_val = (child != NULL);
|
||||||
|
|||||||
@@ -133,7 +133,6 @@ gdk_device_virtual_warp (GdkDevice *device,
|
|||||||
static void
|
static void
|
||||||
gdk_device_virtual_query_state (GdkDevice *device,
|
gdk_device_virtual_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -144,7 +143,7 @@ gdk_device_virtual_query_state (GdkDevice *device,
|
|||||||
GdkDeviceVirtual *virtual = GDK_DEVICE_VIRTUAL (device);
|
GdkDeviceVirtual *virtual = GDK_DEVICE_VIRTUAL (device);
|
||||||
|
|
||||||
_gdk_device_query_state (virtual->active_device,
|
_gdk_device_query_state (virtual->active_device,
|
||||||
window, root_window, child_window,
|
window, child_window,
|
||||||
root_x, root_y,
|
root_x, root_y,
|
||||||
win_x, win_y,
|
win_x, win_y,
|
||||||
mask);
|
mask);
|
||||||
|
|||||||
@@ -100,7 +100,6 @@ get_current_mask (void)
|
|||||||
static void
|
static void
|
||||||
gdk_device_win32_query_state (GdkDevice *device,
|
gdk_device_win32_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -108,12 +107,12 @@ gdk_device_win32_query_state (GdkDevice *device,
|
|||||||
gdouble *win_y,
|
gdouble *win_y,
|
||||||
GdkModifierType *mask)
|
GdkModifierType *mask)
|
||||||
{
|
{
|
||||||
GdkScreen *screen;
|
|
||||||
POINT point;
|
POINT point;
|
||||||
HWND hwnd, hwndc;
|
HWND hwnd, hwndc;
|
||||||
GdkWindowImplWin32 *impl;
|
GdkWindowImplWin32 *impl;
|
||||||
|
|
||||||
screen = gdk_window_get_screen (window);
|
if (window == NULL)
|
||||||
|
window = gdk_get_default_root_window ();
|
||||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||||
|
|
||||||
hwnd = GDK_WINDOW_HWND (window);
|
hwnd = GDK_WINDOW_HWND (window);
|
||||||
@@ -133,7 +132,7 @@ gdk_device_win32_query_state (GdkDevice *device,
|
|||||||
if (win_y)
|
if (win_y)
|
||||||
*win_y = point.y / impl->window_scale;
|
*win_y = point.y / impl->window_scale;
|
||||||
|
|
||||||
if (window == gdk_screen_get_root_window (screen))
|
if (window == gdk_get_default_root_window ())
|
||||||
{
|
{
|
||||||
if (win_x)
|
if (win_x)
|
||||||
*win_x += _gdk_offset_x;
|
*win_x += _gdk_offset_x;
|
||||||
@@ -158,9 +157,6 @@ gdk_device_win32_query_state (GdkDevice *device,
|
|||||||
*child_window = NULL; /* Direct child unknown to gdk */
|
*child_window = NULL; /* Direct child unknown to gdk */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root_window)
|
|
||||||
*root_window = gdk_screen_get_root_window (screen);
|
|
||||||
|
|
||||||
if (mask)
|
if (mask)
|
||||||
*mask = get_current_mask ();
|
*mask = get_current_mask ();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,6 @@ gdk_device_wintab_warp (GdkDevice *device,
|
|||||||
static void
|
static void
|
||||||
gdk_device_wintab_query_state (GdkDevice *device,
|
gdk_device_wintab_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -118,13 +117,13 @@ gdk_device_wintab_query_state (GdkDevice *device,
|
|||||||
GdkModifierType *mask)
|
GdkModifierType *mask)
|
||||||
{
|
{
|
||||||
GdkDeviceWintab *device_wintab;
|
GdkDeviceWintab *device_wintab;
|
||||||
GdkScreen *screen;
|
|
||||||
POINT point;
|
POINT point;
|
||||||
HWND hwnd, hwndc;
|
HWND hwnd, hwndc;
|
||||||
GdkWindowImplWin32 *impl;
|
GdkWindowImplWin32 *impl;
|
||||||
|
|
||||||
device_wintab = GDK_DEVICE_WINTAB (device);
|
device_wintab = GDK_DEVICE_WINTAB (device);
|
||||||
screen = gdk_window_get_screen (window);
|
if (window == NULL)
|
||||||
|
window = gdk_get_default_root_window ();
|
||||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||||
|
|
||||||
hwnd = GDK_WINDOW_HWND (window);
|
hwnd = GDK_WINDOW_HWND (window);
|
||||||
@@ -163,9 +162,6 @@ gdk_device_wintab_query_state (GdkDevice *device,
|
|||||||
*child_window = NULL; /* Direct child unknown to gdk */
|
*child_window = NULL; /* Direct child unknown to gdk */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root_window)
|
|
||||||
*root_window = gdk_screen_get_root_window (screen);
|
|
||||||
|
|
||||||
if (mask)
|
if (mask)
|
||||||
{
|
{
|
||||||
*mask = get_current_mask ();
|
*mask = get_current_mask ();
|
||||||
|
|||||||
@@ -2214,7 +2214,7 @@ gdk_window_win32_get_device_state (GdkWindow *window,
|
|||||||
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), FALSE);
|
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), FALSE);
|
||||||
|
|
||||||
GDK_DEVICE_GET_CLASS (device)->query_state (device, window,
|
GDK_DEVICE_GET_CLASS (device)->query_state (device, window,
|
||||||
NULL, &child,
|
&child,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
x, y, mask);
|
x, y, mask);
|
||||||
return (child != NULL);
|
return (child != NULL);
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ static void gdk_x11_device_core_warp (GdkDevice *device,
|
|||||||
gdouble y);
|
gdouble y);
|
||||||
static void gdk_x11_device_core_query_state (GdkDevice *device,
|
static void gdk_x11_device_core_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -250,7 +249,6 @@ gdk_x11_device_core_warp (GdkDevice *device,
|
|||||||
static void
|
static void
|
||||||
gdk_x11_device_core_query_state (GdkDevice *device,
|
gdk_x11_device_core_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -258,15 +256,18 @@ gdk_x11_device_core_query_state (GdkDevice *device,
|
|||||||
gdouble *win_y,
|
gdouble *win_y,
|
||||||
GdkModifierType *mask)
|
GdkModifierType *mask)
|
||||||
{
|
{
|
||||||
GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (window->impl);
|
GdkWindowImplX11 *impl;
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
GdkScreen *default_screen;
|
GdkScreen *default_screen;
|
||||||
Window xroot_window, xchild_window;
|
Window xroot_window, xchild_window;
|
||||||
int xroot_x, xroot_y, xwin_x, xwin_y;
|
int xroot_x, xroot_y, xwin_x, xwin_y;
|
||||||
unsigned int xmask;
|
unsigned int xmask;
|
||||||
|
|
||||||
display = gdk_window_get_display (window);
|
display = gdk_device_get_display (device);
|
||||||
default_screen = gdk_display_get_default_screen (display);
|
default_screen = gdk_display_get_default_screen (display);
|
||||||
|
if (window == NULL)
|
||||||
|
window = gdk_screen_get_root_window (default_screen);
|
||||||
|
impl = GDK_WINDOW_IMPL_X11 (window->impl);
|
||||||
|
|
||||||
if (!GDK_X11_DISPLAY (display)->trusted_client ||
|
if (!GDK_X11_DISPLAY (display)->trusted_client ||
|
||||||
!XQueryPointer (GDK_WINDOW_XDISPLAY (window),
|
!XQueryPointer (GDK_WINDOW_XDISPLAY (window),
|
||||||
@@ -297,9 +298,6 @@ gdk_x11_device_core_query_state (GdkDevice *device,
|
|||||||
XDestroyWindow (xdisplay, w);
|
XDestroyWindow (xdisplay, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root_window)
|
|
||||||
*root_window = gdk_x11_window_lookup_for_display (display, xroot_window);
|
|
||||||
|
|
||||||
if (child_window)
|
if (child_window)
|
||||||
*child_window = gdk_x11_window_lookup_for_display (display, xchild_window);
|
*child_window = gdk_x11_window_lookup_for_display (display, xchild_window);
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,6 @@ static void gdk_x11_device_xi2_warp (GdkDevice *device,
|
|||||||
gdouble y);
|
gdouble y);
|
||||||
static void gdk_x11_device_xi2_query_state (GdkDevice *device,
|
static void gdk_x11_device_xi2_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -271,7 +270,7 @@ gdk_x11_device_xi2_get_state (GdkDevice *device,
|
|||||||
|
|
||||||
if (mask)
|
if (mask)
|
||||||
gdk_x11_device_xi2_query_state (device, window,
|
gdk_x11_device_xi2_query_state (device, window,
|
||||||
NULL, NULL,
|
NULL,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
mask);
|
mask);
|
||||||
@@ -321,7 +320,6 @@ gdk_x11_device_xi2_warp (GdkDevice *device,
|
|||||||
static void
|
static void
|
||||||
gdk_x11_device_xi2_query_state (GdkDevice *device,
|
gdk_x11_device_xi2_query_state (GdkDevice *device,
|
||||||
GdkWindow *window,
|
GdkWindow *window,
|
||||||
GdkWindow **root_window,
|
|
||||||
GdkWindow **child_window,
|
GdkWindow **child_window,
|
||||||
gdouble *root_x,
|
gdouble *root_x,
|
||||||
gdouble *root_y,
|
gdouble *root_y,
|
||||||
@@ -329,7 +327,7 @@ gdk_x11_device_xi2_query_state (GdkDevice *device,
|
|||||||
gdouble *win_y,
|
gdouble *win_y,
|
||||||
GdkModifierType *mask)
|
GdkModifierType *mask)
|
||||||
{
|
{
|
||||||
GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (window->impl);
|
GdkWindowImplX11 *impl;
|
||||||
GdkX11DeviceXI2 *device_xi2 = GDK_X11_DEVICE_XI2 (device);
|
GdkX11DeviceXI2 *device_xi2 = GDK_X11_DEVICE_XI2 (device);
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
GdkScreen *default_screen;
|
GdkScreen *default_screen;
|
||||||
@@ -339,15 +337,18 @@ gdk_x11_device_xi2_query_state (GdkDevice *device,
|
|||||||
XIModifierState mod_state;
|
XIModifierState mod_state;
|
||||||
XIGroupState group_state;
|
XIGroupState group_state;
|
||||||
|
|
||||||
display = gdk_window_get_display (window);
|
display = gdk_device_get_display (device);
|
||||||
default_screen = gdk_display_get_default_screen (display);
|
default_screen = gdk_display_get_default_screen (display);
|
||||||
|
if (window == NULL)
|
||||||
|
window = gdk_screen_get_root_window (default_screen);
|
||||||
|
impl = GDK_WINDOW_IMPL_X11 (window->impl);
|
||||||
|
|
||||||
if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_SLAVE)
|
if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_SLAVE)
|
||||||
{
|
{
|
||||||
GdkDevice *master = gdk_device_get_associated_device (device);
|
GdkDevice *master = gdk_device_get_associated_device (device);
|
||||||
|
|
||||||
if (master)
|
if (master)
|
||||||
_gdk_device_query_state (master, window, root_window, child_window,
|
_gdk_device_query_state (master, window, child_window,
|
||||||
root_x, root_y, win_x, win_y, mask);
|
root_x, root_y, win_x, win_y, mask);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -387,9 +388,6 @@ gdk_x11_device_xi2_query_state (GdkDevice *device,
|
|||||||
XDestroyWindow (xdisplay, w);
|
XDestroyWindow (xdisplay, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root_window)
|
|
||||||
*root_window = gdk_x11_window_lookup_for_display (display, xroot_window);
|
|
||||||
|
|
||||||
if (child_window)
|
if (child_window)
|
||||||
*child_window = gdk_x11_window_lookup_for_display (display, xchild_window);
|
*child_window = gdk_x11_window_lookup_for_display (display, xchild_window);
|
||||||
|
|
||||||
|
|||||||
@@ -2791,7 +2791,7 @@ gdk_window_x11_get_device_state (GdkWindow *window,
|
|||||||
|
|
||||||
/*HIDPI: handle coords here?*/
|
/*HIDPI: handle coords here?*/
|
||||||
GDK_DEVICE_GET_CLASS (device)->query_state (device, window,
|
GDK_DEVICE_GET_CLASS (device)->query_state (device, window,
|
||||||
NULL, &child,
|
&child,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
x, y, mask);
|
x, y, mask);
|
||||||
return child != NULL;
|
return child != NULL;
|
||||||
|
|||||||
57
gtk/gtkdnd.c
57
gtk/gtkdnd.c
@@ -2384,9 +2384,6 @@ gtk_drag_motion_cb (GtkWidget *widget,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BIG_STEP 20
|
|
||||||
#define SMALL_STEP 1
|
|
||||||
|
|
||||||
/* “key-press/release-event” callback during drag */
|
/* “key-press/release-event” callback during drag */
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_drag_key_cb (GtkWidget *widget,
|
gtk_drag_key_cb (GtkWidget *widget,
|
||||||
@@ -2394,14 +2391,6 @@ gtk_drag_key_cb (GtkWidget *widget,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
|
GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
|
||||||
GdkModifierType state;
|
|
||||||
GdkWindow *root_window;
|
|
||||||
GdkDevice *pointer;
|
|
||||||
gint dx, dy;
|
|
||||||
|
|
||||||
dx = dy = 0;
|
|
||||||
state = event->state & gtk_accelerator_get_default_mod_mask ();
|
|
||||||
pointer = gdk_device_get_associated_device (gdk_event_get_device ((GdkEvent *) event));
|
|
||||||
|
|
||||||
if (event->type == GDK_KEY_PRESS)
|
if (event->type == GDK_KEY_PRESS)
|
||||||
{
|
{
|
||||||
@@ -2409,7 +2398,7 @@ gtk_drag_key_cb (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
case GDK_KEY_Escape:
|
case GDK_KEY_Escape:
|
||||||
gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_USER_CANCELLED, event->time);
|
gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_USER_CANCELLED, event->time);
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
case GDK_KEY_space:
|
case GDK_KEY_space:
|
||||||
case GDK_KEY_Return:
|
case GDK_KEY_Return:
|
||||||
@@ -2426,52 +2415,10 @@ gtk_drag_key_cb (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_NO_TARGET, event->time);
|
gtk_drag_cancel_internal (info, GTK_DRAG_RESULT_NO_TARGET, event->time);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
case GDK_KEY_Up:
|
|
||||||
case GDK_KEY_KP_Up:
|
|
||||||
dy = (state & GDK_MOD1_MASK) ? -BIG_STEP : -SMALL_STEP;
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case GDK_KEY_Down:
|
|
||||||
case GDK_KEY_KP_Down:
|
|
||||||
dy = (state & GDK_MOD1_MASK) ? BIG_STEP : SMALL_STEP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_KEY_Left:
|
|
||||||
case GDK_KEY_KP_Left:
|
|
||||||
dx = (state & GDK_MOD1_MASK) ? -BIG_STEP : -SMALL_STEP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_KEY_Right:
|
|
||||||
case GDK_KEY_KP_Right:
|
|
||||||
dx = (state & GDK_MOD1_MASK) ? BIG_STEP : SMALL_STEP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now send a "motion" so that the modifier state is updated */
|
|
||||||
|
|
||||||
/* The state is not yet updated in the event, so we need
|
|
||||||
* to query it here. We could use XGetModifierMapping, but
|
|
||||||
* that would be overkill.
|
|
||||||
*/
|
|
||||||
root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
|
|
||||||
gdk_window_get_device_position (root_window, pointer, NULL, NULL, &state);
|
|
||||||
event->state = state;
|
|
||||||
|
|
||||||
if (dx != 0 || dy != 0)
|
|
||||||
{
|
|
||||||
info->cur_x += dx;
|
|
||||||
info->cur_y += dy;
|
|
||||||
gdk_device_warp (pointer,
|
|
||||||
gtk_widget_get_screen (widget),
|
|
||||||
info->cur_x, info->cur_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_drag_update (info, info->cur_screen, info->cur_x, info->cur_y, (GdkEvent *)event);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -660,14 +660,12 @@ gtk_im_context_xim_filter_keypress (GtkIMContext *context,
|
|||||||
KeySym keysym;
|
KeySym keysym;
|
||||||
Status status;
|
Status status;
|
||||||
gboolean result = FALSE;
|
gboolean result = FALSE;
|
||||||
GdkWindow *root_window;
|
|
||||||
GdkWindow *window;
|
GdkWindow *window;
|
||||||
XKeyPressedEvent xevent;
|
XKeyPressedEvent xevent;
|
||||||
|
|
||||||
if (event->type == GDK_KEY_RELEASE && !context_xim->filter_key_release)
|
if (event->type == GDK_KEY_RELEASE && !context_xim->filter_key_release)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
root_window = gdk_screen_get_root_window (gdk_window_get_screen (event->window));
|
|
||||||
window = gdk_window_get_toplevel (event->window);
|
window = gdk_window_get_toplevel (event->window);
|
||||||
|
|
||||||
xevent.type = (event->type == GDK_KEY_PRESS) ? KeyPress : KeyRelease;
|
xevent.type = (event->type == GDK_KEY_PRESS) ? KeyPress : KeyRelease;
|
||||||
@@ -675,7 +673,7 @@ gtk_im_context_xim_filter_keypress (GtkIMContext *context,
|
|||||||
xevent.send_event = event->send_event;
|
xevent.send_event = event->send_event;
|
||||||
xevent.display = GDK_WINDOW_XDISPLAY (window);
|
xevent.display = GDK_WINDOW_XDISPLAY (window);
|
||||||
xevent.window = GDK_WINDOW_XID (window);
|
xevent.window = GDK_WINDOW_XID (window);
|
||||||
xevent.root = GDK_WINDOW_XID (root_window);
|
xevent.root = DefaultRootWindow(GDK_WINDOW_XDISPLAY (window));
|
||||||
xevent.subwindow = xevent.window;
|
xevent.subwindow = xevent.window;
|
||||||
xevent.time = event->time;
|
xevent.time = event->time;
|
||||||
xevent.x = xevent.x_root = 0;
|
xevent.x = xevent.x_root = 0;
|
||||||
@@ -1638,7 +1636,7 @@ on_status_toplevel_configure (GtkWidget *toplevel,
|
|||||||
|
|
||||||
if (status_window->window)
|
if (status_window->window)
|
||||||
{
|
{
|
||||||
height = gdk_window_get_height (gdk_screen_get_root_window (gtk_widget_get_screen (toplevel)));
|
height = DisplayHeight(GDK_WINDOW_XDISPLAY (gtk_widget_get_window (toplevel)), 0);
|
||||||
|
|
||||||
gdk_window_get_frame_extents (gtk_widget_get_window (toplevel),
|
gdk_window_get_frame_extents (gtk_widget_get_window (toplevel),
|
||||||
&rect);
|
&rect);
|
||||||
|
|||||||
@@ -5702,7 +5702,7 @@ create_paned_keyboard_navigation (GtkWidget *widget)
|
|||||||
gtk_widget_show (GTK_WIDGET (window4));
|
gtk_widget_show (GTK_WIDGET (window4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
/*
|
/*
|
||||||
* Shaped Windows
|
* Shaped Windows
|
||||||
*/
|
*/
|
||||||
@@ -5925,6 +5925,7 @@ create_shapes (GtkWidget *widget)
|
|||||||
else
|
else
|
||||||
gtk_widget_destroy (with_region);
|
gtk_widget_destroy (with_region);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* WM Hints demo
|
* WM Hints demo
|
||||||
@@ -8300,7 +8301,9 @@ struct {
|
|||||||
{ "rotated text", create_rotated_text },
|
{ "rotated text", create_rotated_text },
|
||||||
{ "saved position", create_saved_position },
|
{ "saved position", create_saved_position },
|
||||||
{ "scrolled windows", create_scrolled_windows },
|
{ "scrolled windows", create_scrolled_windows },
|
||||||
|
#if 0
|
||||||
{ "shapes", create_shapes },
|
{ "shapes", create_shapes },
|
||||||
|
#endif
|
||||||
{ "size groups", create_size_groups },
|
{ "size groups", create_size_groups },
|
||||||
{ "snapshot", create_snapshot },
|
{ "snapshot", create_snapshot },
|
||||||
{ "spinbutton", create_spins },
|
{ "spinbutton", create_spins },
|
||||||
|
|||||||
Reference in New Issue
Block a user