static gboolean dequeue_message (GdmSmartcardExtension *extension) { if (!g_queue_is_empty (extension->priv->message_queue)) { int duration; gboolean needs_beep; QueuedMessage *message; message = (QueuedMessage *) g_queue_pop_head (extension->priv->message_queue); switch (message->type) { case GDM_SERVICE_MESSAGE_TYPE_INFO: needs_beep = FALSE; break; case GDM_SERVICE_MESSAGE_TYPE_PROBLEM: needs_beep = TRUE; break; default: g_assert_not_reached (); } set_message (extension, message->text); duration = (int) (g_utf8_strlen (message->text, -1) / 66.0) * 1000; duration = CLAMP (duration, 400, 3000); extension->priv->message_timeout_id = g_timeout_add (duration, (GSourceFunc) dequeue_message, extension); if (needs_beep) { gdk_window_beep (gtk_widget_get_window (GTK_WIDGET (extension))); } free_queued_message (message); } else { extension->priv->message_timeout_id = 0; _gdm_login_extension_emit_message_queue_empty (GDM_LOGIN_EXTENSION (extension)); } return FALSE; }
static VALUE gdkwin_beep(VALUE self) { gdk_window_beep(_SELF(self)); return self; }