diff options
| author | Matthias Clasen <mclasen@redhat.com> | 2020-05-14 21:27:45 -0400 |
|---|---|---|
| committer | Matthias Clasen <mclasen@redhat.com> | 2020-05-15 14:11:53 -0400 |
| commit | 8912a6eb757c39a6801358331fa81f8f52ebad8a (patch) | |
| tree | b410b78952f174bed33fd9d1fb63615eb20d3082 /gtk/gtkpasswordentry.c | |
| parent | 9b7a73268ea264f5674d04e129d9dabf680d3513 (diff) | |
| download | gtk+-8912a6eb757c39a6801358331fa81f8f52ebad8a.tar.gz | |
gtk: Handle seatless displays
If you run weston with the headless backend, you get a Wayland
display with no seat, which is just fine by the protocol.
gdk_display_get_default_seat() returns NULL in this case. Various
widgets assume that we always have a seat with a keyboard and a
pointer, since that is what X guarantees. Make things survive
without that, so we can run the testsuite under a headless
Wayland compositor.
Diffstat (limited to 'gtk/gtkpasswordentry.c')
| -rw-r--r-- | gtk/gtkpasswordentry.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gtk/gtkpasswordentry.c b/gtk/gtkpasswordentry.c index d26bf75645..ab68a7dbd8 100644 --- a/gtk/gtkpasswordentry.c +++ b/gtk/gtkpasswordentry.c @@ -167,12 +167,20 @@ gtk_password_entry_realize (GtkWidget *widget) { GtkPasswordEntry *entry = GTK_PASSWORD_ENTRY (widget); GtkPasswordEntryPrivate *priv = gtk_password_entry_get_instance_private (entry); + GdkSeat *seat; GTK_WIDGET_CLASS (gtk_password_entry_parent_class)->realize (widget); - priv->keyboard = gdk_seat_get_keyboard (gdk_display_get_default_seat (gtk_widget_get_display (widget))); - g_signal_connect (priv->keyboard, "notify::caps-lock-state", G_CALLBACK (caps_lock_state_changed), entry); - caps_lock_state_changed (priv->keyboard, NULL, widget); + seat = gdk_display_get_default_seat (gtk_widget_get_display (widget)); + if (seat) + priv->keyboard = gdk_seat_get_keyboard (seat); + + if (priv->keyboard) + { + g_signal_connect (priv->keyboard, "notify::caps-lock-state", + G_CALLBACK (caps_lock_state_changed), entry); + caps_lock_state_changed (priv->keyboard, NULL, widget); + } } static void @@ -496,7 +504,8 @@ gtk_password_entry_set_show_peek_icon (GtkPasswordEntry *entry, entry); } - caps_lock_state_changed (priv->keyboard, NULL, GTK_WIDGET (entry)); + if (priv->keyboard) + caps_lock_state_changed (priv->keyboard, NULL, GTK_WIDGET (entry)); g_object_notify_by_pspec (G_OBJECT (entry), props[PROP_SHOW_PEEK_ICON]); } |
