Compare commits
3 Commits
css-variab
...
seat-model
Author | SHA1 | Date | |
---|---|---|---|
|
a83317a796 | ||
|
4032ef1509 | ||
|
e7afca6bbf |
@@ -85,7 +85,7 @@ gdk_display_supports_input_shapes
|
|||||||
gdk_display_get_app_launch_context
|
gdk_display_get_app_launch_context
|
||||||
gdk_display_notify_startup_complete
|
gdk_display_notify_startup_complete
|
||||||
gdk_display_get_default_seat
|
gdk_display_get_default_seat
|
||||||
gdk_display_list_seats
|
gdk_display_get_seats
|
||||||
gdk_display_get_monitors
|
gdk_display_get_monitors
|
||||||
gdk_display_get_monitor_at_surface
|
gdk_display_get_monitor_at_surface
|
||||||
gdk_display_get_clipboard
|
gdk_display_get_clipboard
|
||||||
|
@@ -51,7 +51,7 @@
|
|||||||
*
|
*
|
||||||
* Most of the input device handling has been factored out into separate #GdkSeat
|
* Most of the input device handling has been factored out into separate #GdkSeat
|
||||||
* objects. Every display has a one or more seats, which can be accessed with
|
* objects. Every display has a one or more seats, which can be accessed with
|
||||||
* gdk_display_get_default_seat() and gdk_display_list_seats().
|
* gdk_display_get_default_seat() and gdk_display_get_seats().
|
||||||
*
|
*
|
||||||
* Output devices are represented by #GdkMonitor objects, which can be accessed
|
* Output devices are represented by #GdkMonitor objects, which can be accessed
|
||||||
* with gdk_display_get_monitor_at_surface() and similar APIs.
|
* with gdk_display_get_monitor_at_surface() and similar APIs.
|
||||||
@@ -147,10 +147,17 @@ gdk_display_real_event_data_free (GdkDisplay *display,
|
|||||||
static GdkSeat *
|
static GdkSeat *
|
||||||
gdk_display_real_get_default_seat (GdkDisplay *display)
|
gdk_display_real_get_default_seat (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
if (!display->seats)
|
GListModel *seats;
|
||||||
|
GdkSeat *seat;
|
||||||
|
|
||||||
|
seats = G_LIST_MODEL (display->seats);
|
||||||
|
if (g_list_model_get_n_items (seats) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return display->seats->data;
|
seat = g_list_model_get_item (seats, 0);
|
||||||
|
g_object_unref (seat);
|
||||||
|
|
||||||
|
return seat;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -338,6 +345,8 @@ gdk_display_init (GdkDisplay *display)
|
|||||||
display->composited = TRUE;
|
display->composited = TRUE;
|
||||||
display->rgba = TRUE;
|
display->rgba = TRUE;
|
||||||
display->input_shapes = TRUE;
|
display->input_shapes = TRUE;
|
||||||
|
|
||||||
|
display->seats = g_list_store_new (GDK_TYPE_SEAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -364,7 +373,7 @@ gdk_display_finalize (GObject *object)
|
|||||||
|
|
||||||
g_hash_table_destroy (display->pointers_info);
|
g_hash_table_destroy (display->pointers_info);
|
||||||
|
|
||||||
g_list_free_full (display->seats, g_object_unref);
|
g_object_unref (display->seats);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gdk_display_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gdk_display_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
@@ -1365,7 +1374,7 @@ gdk_display_add_seat (GdkDisplay *display,
|
|||||||
g_return_if_fail (GDK_IS_DISPLAY (display));
|
g_return_if_fail (GDK_IS_DISPLAY (display));
|
||||||
g_return_if_fail (GDK_IS_SEAT (seat));
|
g_return_if_fail (GDK_IS_SEAT (seat));
|
||||||
|
|
||||||
display->seats = g_list_append (display->seats, g_object_ref (seat));
|
g_list_store_append (display->seats, seat);
|
||||||
g_signal_emit (display, signals[SEAT_ADDED], 0, seat);
|
g_signal_emit (display, signals[SEAT_ADDED], 0, seat);
|
||||||
|
|
||||||
g_signal_connect (seat, "device-removed", G_CALLBACK (device_removed_cb), display);
|
g_signal_connect (seat, "device-removed", G_CALLBACK (device_removed_cb), display);
|
||||||
@@ -1375,21 +1384,19 @@ void
|
|||||||
gdk_display_remove_seat (GdkDisplay *display,
|
gdk_display_remove_seat (GdkDisplay *display,
|
||||||
GdkSeat *seat)
|
GdkSeat *seat)
|
||||||
{
|
{
|
||||||
GList *link;
|
guint pos;
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_DISPLAY (display));
|
g_return_if_fail (GDK_IS_DISPLAY (display));
|
||||||
g_return_if_fail (GDK_IS_SEAT (seat));
|
g_return_if_fail (GDK_IS_SEAT (seat));
|
||||||
|
|
||||||
g_signal_handlers_disconnect_by_func (seat, G_CALLBACK (device_removed_cb), display);
|
g_signal_handlers_disconnect_by_func (seat, G_CALLBACK (device_removed_cb), display);
|
||||||
|
|
||||||
link = g_list_find (display->seats, seat);
|
if (g_list_store_find (display->seats, seat, &pos))
|
||||||
|
|
||||||
if (link)
|
|
||||||
{
|
{
|
||||||
display->seats = g_list_remove_link (display->seats, link);
|
seat = g_list_model_get_item (G_LIST_MODEL (display->seats), pos);
|
||||||
|
g_list_store_remove (display->seats, pos);
|
||||||
g_signal_emit (display, signals[SEAT_REMOVED], 0, seat);
|
g_signal_emit (display, signals[SEAT_REMOVED], 0, seat);
|
||||||
g_object_unref (link->data);
|
g_object_unref (seat);
|
||||||
g_list_free (link);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1417,20 +1424,25 @@ gdk_display_get_default_seat (GdkDisplay *display)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gdk_display_list_seats:
|
* gdk_display_get_seats:
|
||||||
* @display: a #GdkDisplay
|
* @display: a #GdkDisplay
|
||||||
*
|
*
|
||||||
* Returns the list of seats known to @display.
|
* Returns the list of seats known to @display.
|
||||||
*
|
*
|
||||||
* Returns: (transfer container) (element-type GdkSeat): the
|
* Subsequent calls to this function will always return the same list
|
||||||
* list of seats known to the #GdkDisplay
|
* for the same display.
|
||||||
**/
|
*
|
||||||
GList *
|
* You can listen to the #GListModel::items-changed signal on this list
|
||||||
gdk_display_list_seats (GdkDisplay *display)
|
* to observe changes to the seats of this display.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): the list of seats
|
||||||
|
*/
|
||||||
|
GListModel *
|
||||||
|
gdk_display_get_seats (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
||||||
|
|
||||||
return g_list_copy (display->seats);
|
return G_LIST_MODEL (display->seats);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1442,8 +1454,8 @@ gdk_display_list_seats (GdkDisplay *display)
|
|||||||
* Subsequent calls to this function will always return the same list for the
|
* Subsequent calls to this function will always return the same list for the
|
||||||
* same display.
|
* same display.
|
||||||
*
|
*
|
||||||
* You can listen to the GListModel::items-changed signal on this list
|
* You can listen to the #GListModel::items-changed signal on this list
|
||||||
* to monitor changes to the monitor of this display.
|
* to observe changes to the monitors of this display.
|
||||||
*
|
*
|
||||||
* Returns: (transfer none): a #GListModel of #GdkMonitor
|
* Returns: (transfer none): a #GListModel of #GdkMonitor
|
||||||
*/
|
*/
|
||||||
|
@@ -89,7 +89,7 @@ GDK_AVAILABLE_IN_ALL
|
|||||||
GdkSeat * gdk_display_get_default_seat (GdkDisplay *display);
|
GdkSeat * gdk_display_get_default_seat (GdkDisplay *display);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
GList * gdk_display_list_seats (GdkDisplay *display);
|
GListModel * gdk_display_get_seats (GdkDisplay *display);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
GListModel * gdk_display_get_monitors (GdkDisplay *self) G_GNUC_PURE;
|
GListModel * gdk_display_get_monitors (GdkDisplay *self) G_GNUC_PURE;
|
||||||
|
@@ -108,7 +108,7 @@ struct _GdkDisplay
|
|||||||
|
|
||||||
GdkDebugFlags debug_flags;
|
GdkDebugFlags debug_flags;
|
||||||
|
|
||||||
GList *seats;
|
GListStore *seats;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GdkDisplayClass
|
struct _GdkDisplayClass
|
||||||
|
@@ -1790,7 +1790,7 @@ gdk_surface_get_cursor (GdkSurface *surface)
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gdk_surface_set_cursor (GdkSurface *surface,
|
gdk_surface_set_cursor (GdkSurface *surface,
|
||||||
GdkCursor *cursor)
|
GdkCursor *cursor)
|
||||||
{
|
{
|
||||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||||
|
|
||||||
@@ -1803,30 +1803,33 @@ gdk_surface_set_cursor (GdkSurface *surface,
|
|||||||
if (!GDK_SURFACE_DESTROYED (surface))
|
if (!GDK_SURFACE_DESTROYED (surface))
|
||||||
{
|
{
|
||||||
GdkDevice *device;
|
GdkDevice *device;
|
||||||
GList *seats, *s;
|
GListModel *seats;
|
||||||
|
guint i, n;
|
||||||
|
|
||||||
if (cursor)
|
if (cursor)
|
||||||
surface->cursor = g_object_ref (cursor);
|
surface->cursor = g_object_ref (cursor);
|
||||||
|
|
||||||
seats = gdk_display_list_seats (surface->display);
|
seats = gdk_display_get_seats (surface->display);
|
||||||
|
|
||||||
for (s = seats; s; s = s->next)
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
{
|
{
|
||||||
|
GdkSeat *seat;
|
||||||
GList *devices, *d;
|
GList *devices, *d;
|
||||||
|
|
||||||
device = gdk_seat_get_pointer (s->data);
|
seat = g_list_model_get_item (seats, i);
|
||||||
|
device = gdk_seat_get_pointer (seat);
|
||||||
gdk_surface_set_cursor_internal (surface, device, surface->cursor);
|
gdk_surface_set_cursor_internal (surface, device, surface->cursor);
|
||||||
|
|
||||||
devices = gdk_seat_get_devices (s->data, GDK_SEAT_CAPABILITY_TABLET_STYLUS);
|
devices = gdk_seat_get_devices (seat, GDK_SEAT_CAPABILITY_TABLET_STYLUS);
|
||||||
for (d = devices; d; d = d->next)
|
for (d = devices; d; d = d->next)
|
||||||
{
|
{
|
||||||
device = d->data;
|
device = d->data;
|
||||||
gdk_surface_set_cursor_internal (surface, device, surface->cursor);
|
gdk_surface_set_cursor_internal (surface, device, surface->cursor);
|
||||||
}
|
}
|
||||||
g_list_free (devices);
|
g_list_free (devices);
|
||||||
|
g_object_unref (seat);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (seats);
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_CURSOR]);
|
g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_CURSOR]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4819,22 +4819,23 @@ _gdk_wayland_display_remove_seat (GdkWaylandDisplay *display_wayland,
|
|||||||
guint32 id)
|
guint32 id)
|
||||||
{
|
{
|
||||||
GdkDisplay *display = GDK_DISPLAY (display_wayland);
|
GdkDisplay *display = GDK_DISPLAY (display_wayland);
|
||||||
GList *l, *seats;
|
GListModel *seats;
|
||||||
|
guint i, n;
|
||||||
|
gboolean removed = FALSE;
|
||||||
|
|
||||||
seats = gdk_display_list_seats (display);
|
seats = gdk_display_get_seats (display);
|
||||||
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n && !removed; i++)
|
||||||
for (l = seats; l != NULL; l = l->next)
|
|
||||||
{
|
{
|
||||||
GdkWaylandSeat *seat = l->data;
|
GdkWaylandSeat *seat = g_list_model_get_item (seats, i);
|
||||||
|
|
||||||
if (seat->id != id)
|
if (seat->id == id)
|
||||||
continue;
|
{
|
||||||
|
gdk_display_remove_seat (display, GDK_SEAT (seat));
|
||||||
|
removed = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gdk_display_remove_seat (display, GDK_SEAT (seat));
|
g_object_unref (seat);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (seats);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
@@ -2213,20 +2213,20 @@ transform_to_string (int transform)
|
|||||||
static void
|
static void
|
||||||
update_scale (GdkDisplay *display)
|
update_scale (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
GList *seats;
|
GListModel *seats;
|
||||||
GList *l;
|
guint i, n;
|
||||||
|
|
||||||
g_list_foreach (gdk_wayland_display_get_toplevel_surfaces (display),
|
g_list_foreach (gdk_wayland_display_get_toplevel_surfaces (display),
|
||||||
(GFunc)gdk_wayland_surface_update_scale,
|
(GFunc)gdk_wayland_surface_update_scale,
|
||||||
NULL);
|
NULL);
|
||||||
seats = gdk_display_list_seats (display);
|
|
||||||
for (l = seats; l; l = l->next)
|
|
||||||
{
|
|
||||||
GdkSeat *seat = l->data;
|
|
||||||
|
|
||||||
|
seats = gdk_display_get_seats (display);
|
||||||
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
|
{
|
||||||
|
GdkSeat *seat = g_list_model_get_item (seats, i);
|
||||||
gdk_wayland_seat_update_cursor_scale (GDK_WAYLAND_SEAT (seat));
|
gdk_wayland_seat_update_cursor_scale (GDK_WAYLAND_SEAT (seat));
|
||||||
|
g_object_unref (seat);
|
||||||
}
|
}
|
||||||
g_list_free (seats);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -2796,34 +2796,29 @@ gdk_x11_display_get_keymap (GdkDisplay *display)
|
|||||||
static GdkSeat *
|
static GdkSeat *
|
||||||
gdk_x11_display_get_default_seat (GdkDisplay *display)
|
gdk_x11_display_get_default_seat (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
GList *seats, *l;
|
GListModel *seats;
|
||||||
|
guint i, n;
|
||||||
int device_id;
|
int device_id;
|
||||||
gboolean result = FALSE;
|
gboolean result = FALSE;
|
||||||
|
|
||||||
seats = gdk_display_list_seats (display);
|
seats = gdk_display_get_seats (display);
|
||||||
|
|
||||||
gdk_x11_display_error_trap_push (display);
|
gdk_x11_display_error_trap_push (display);
|
||||||
result = XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
|
result = XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
|
||||||
None, &device_id);
|
None, &device_id);
|
||||||
gdk_x11_display_error_trap_pop_ignored (display);
|
gdk_x11_display_error_trap_pop_ignored (display);
|
||||||
|
|
||||||
for (l = seats; l; l = l->next)
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
{
|
{
|
||||||
GdkDevice *pointer;
|
GdkSeat *seat = g_list_model_get_item (seats, i);
|
||||||
|
GdkDevice *pointer = gdk_seat_get_pointer (seat);
|
||||||
|
|
||||||
pointer = gdk_seat_get_pointer (l->data);
|
g_object_unref (seat);
|
||||||
|
|
||||||
if (gdk_x11_device_get_id (pointer) == device_id || !result)
|
if (gdk_x11_device_get_id (pointer) == device_id || !result)
|
||||||
{
|
return seat;
|
||||||
GdkSeat *seat = l->data;
|
|
||||||
g_list_free (seats);
|
|
||||||
|
|
||||||
return seat;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (seats);
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -608,16 +608,20 @@ close_menu (GtkPopover *popover)
|
|||||||
static gboolean
|
static gboolean
|
||||||
gtk_popover_has_mnemonic_modifier_pressed (GtkPopover *popover)
|
gtk_popover_has_mnemonic_modifier_pressed (GtkPopover *popover)
|
||||||
{
|
{
|
||||||
GList *seats, *s;
|
GListModel *seats;
|
||||||
|
guint i, n;
|
||||||
gboolean retval = FALSE;
|
gboolean retval = FALSE;
|
||||||
|
|
||||||
seats = gdk_display_list_seats (gtk_widget_get_display (GTK_WIDGET (popover)));
|
seats = gdk_display_get_seats (gtk_widget_get_display (GTK_WIDGET (popover)));
|
||||||
|
|
||||||
for (s = seats; s; s = s->next)
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
{
|
{
|
||||||
GdkDevice *dev = gdk_seat_get_keyboard (s->data);
|
GdkSeat *seat = g_list_model_get_item (seats, i);
|
||||||
|
GdkDevice *dev = gdk_seat_get_keyboard (seat);
|
||||||
GdkModifierType mask;
|
GdkModifierType mask;
|
||||||
|
|
||||||
|
g_object_unref (seat);
|
||||||
|
|
||||||
mask = gdk_device_get_modifier_state (dev);
|
mask = gdk_device_get_modifier_state (dev);
|
||||||
if ((mask & gtk_accelerator_get_default_mod_mask ()) == GDK_ALT_MASK)
|
if ((mask & gtk_accelerator_get_default_mod_mask ()) == GDK_ALT_MASK)
|
||||||
{
|
{
|
||||||
@@ -626,8 +630,6 @@ gtk_popover_has_mnemonic_modifier_pressed (GtkPopover *popover)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (seats);
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4792,16 +4792,20 @@ gtk_window_real_activate_focus (GtkWindow *window)
|
|||||||
static gboolean
|
static gboolean
|
||||||
gtk_window_has_mnemonic_modifier_pressed (GtkWindow *window)
|
gtk_window_has_mnemonic_modifier_pressed (GtkWindow *window)
|
||||||
{
|
{
|
||||||
GList *seats, *s;
|
GListModel *seats;
|
||||||
|
guint i, n;
|
||||||
gboolean retval = FALSE;
|
gboolean retval = FALSE;
|
||||||
|
|
||||||
seats = gdk_display_list_seats (gtk_widget_get_display (GTK_WIDGET (window)));
|
seats = gdk_display_get_seats (gtk_widget_get_display (GTK_WIDGET (window)));
|
||||||
|
|
||||||
for (s = seats; s; s = s->next)
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
{
|
{
|
||||||
GdkDevice *dev = gdk_seat_get_keyboard (s->data);
|
GdkSeat *seat = g_list_model_get_item (seats, i);
|
||||||
|
GdkDevice *dev = gdk_seat_get_keyboard (seat);
|
||||||
GdkModifierType mask;
|
GdkModifierType mask;
|
||||||
|
|
||||||
|
g_object_unref (seat);
|
||||||
|
|
||||||
mask = gdk_device_get_modifier_state (dev);
|
mask = gdk_device_get_modifier_state (dev);
|
||||||
if ((mask & gtk_accelerator_get_default_mod_mask ()) == GDK_ALT_MASK)
|
if ((mask & gtk_accelerator_get_default_mod_mask ()) == GDK_ALT_MASK)
|
||||||
{
|
{
|
||||||
@@ -4810,8 +4814,6 @@ gtk_window_has_mnemonic_modifier_pressed (GtkWindow *window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (seats);
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -828,18 +828,20 @@ static void
|
|||||||
populate_seats (GtkInspectorGeneral *gen)
|
populate_seats (GtkInspectorGeneral *gen)
|
||||||
{
|
{
|
||||||
GtkWidget *child;
|
GtkWidget *child;
|
||||||
GList *list, *l;
|
GListModel *seats;
|
||||||
int i;
|
guint i, n;
|
||||||
|
|
||||||
while ((child = gtk_widget_get_first_child (gen->device_box)))
|
while ((child = gtk_widget_get_first_child (gen->device_box)))
|
||||||
gtk_list_box_remove (GTK_LIST_BOX (gen->device_box), child);
|
gtk_list_box_remove (GTK_LIST_BOX (gen->device_box), child);
|
||||||
|
|
||||||
list = gdk_display_list_seats (gen->display);
|
seats = gdk_display_get_seats (gen->display);
|
||||||
|
|
||||||
for (l = list, i = 0; l; l = l->next, i++)
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
add_seat (gen, GDK_SEAT (l->data), i);
|
{
|
||||||
|
GdkSeat *seat = g_list_model_get_item (seats, i);
|
||||||
g_list_free (list);
|
add_seat (gen, seat, i);
|
||||||
|
g_object_unref (seat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -935,17 +937,21 @@ static void
|
|||||||
gtk_inspector_general_dispose (GObject *object)
|
gtk_inspector_general_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (object);
|
GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (object);
|
||||||
GList *list, *l;
|
GListModel *seats;
|
||||||
|
guint i, n;
|
||||||
|
|
||||||
g_clear_pointer (&gen->swin, gtk_widget_unparent);
|
g_clear_pointer (&gen->swin, gtk_widget_unparent);
|
||||||
|
|
||||||
g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_added), gen);
|
g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_added), gen);
|
||||||
g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_removed), gen);
|
g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_removed), gen);
|
||||||
|
|
||||||
list = gdk_display_list_seats (gen->display);
|
seats = gdk_display_get_seats (gen->display);
|
||||||
for (l = list; l; l = l->next)
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
disconnect_seat (gen, GDK_SEAT (l->data));
|
{
|
||||||
g_list_free (list);
|
GdkSeat *seat = g_list_model_get_item (seats, i);
|
||||||
|
disconnect_seat (gen, seat);
|
||||||
|
g_object_unref (seat);
|
||||||
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (gtk_inspector_general_parent_class)->dispose (object);
|
G_OBJECT_CLASS (gtk_inspector_general_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -1,11 +1,12 @@
|
|||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_list_seats (void)
|
test_get_seats (void)
|
||||||
{
|
{
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
GdkSeat *seat0, *seat;
|
GdkSeat *seat0, *seat;
|
||||||
GList *list, *l;
|
GListModel *seats;
|
||||||
|
guint i, n;
|
||||||
gboolean found_default;
|
gboolean found_default;
|
||||||
|
|
||||||
display = gdk_display_get_default ();
|
display = gdk_display_get_default ();
|
||||||
@@ -14,25 +15,24 @@ test_list_seats (void)
|
|||||||
g_assert_true (GDK_IS_SEAT (seat0));
|
g_assert_true (GDK_IS_SEAT (seat0));
|
||||||
|
|
||||||
found_default = FALSE;
|
found_default = FALSE;
|
||||||
list = gdk_display_list_seats (display);
|
seats = gdk_display_get_seats (display);
|
||||||
|
for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
|
||||||
for (l = list; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
seat = l->data;
|
seat = g_list_model_get_item (seats, i);
|
||||||
|
|
||||||
g_assert_true (GDK_IS_SEAT (seat));
|
g_assert_true (GDK_IS_SEAT (seat));
|
||||||
g_assert (gdk_seat_get_display (seat) == display);
|
g_assert (gdk_seat_get_display (seat) == display);
|
||||||
|
|
||||||
if (seat == seat0)
|
if (seat == seat0)
|
||||||
found_default = TRUE;
|
found_default = TRUE;
|
||||||
|
|
||||||
|
g_object_unref (seat);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seat0 != NULL)
|
if (seat0 != NULL)
|
||||||
g_assert_true (found_default);
|
g_assert_true (found_default);
|
||||||
else
|
else
|
||||||
g_assert_true (list == NULL);
|
g_assert_true (n == 0);
|
||||||
|
|
||||||
g_list_free (list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -118,7 +118,7 @@ main (int argc, char *argv[])
|
|||||||
|
|
||||||
gtk_init ();
|
gtk_init ();
|
||||||
|
|
||||||
g_test_add_func ("/seat/list", test_list_seats);
|
g_test_add_func ("/seat/list", test_get_seats);
|
||||||
g_test_add_func ("/seat/default", test_default_seat);
|
g_test_add_func ("/seat/default", test_default_seat);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
|
Reference in New Issue
Block a user