|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* gnome-keyring
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* Copyright (C) 2011 Stefan Walter
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* This program is free software; you can redistribute it and/or modify
|
|
Packit Service |
f02b19 |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit Service |
f02b19 |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit Service |
f02b19 |
* the License, or (at your option) any later version.
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* This program is distributed in the hope that it will be useful, but
|
|
Packit Service |
f02b19 |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
f02b19 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
f02b19 |
* Lesser General Public License for more details.
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
f02b19 |
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* Author: Stef Walter <stef@thewalter.net>
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "config.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "gcr/gcr-prompt.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "gcr-prompt-dialog.h"
|
|
Packit Service |
f02b19 |
#include "gcr-secure-entry-buffer.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include <gtk/gtk.h>
|
|
Packit Service |
f02b19 |
#include <gdk/gdkx.h>
|
|
Packit Service |
f02b19 |
#include <glib/gi18n.h>
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/**
|
|
Packit Service |
f02b19 |
* SECTION:gcr-prompt-dialog
|
|
Packit Service |
f02b19 |
* @title: GcrPromptDialog
|
|
Packit Service |
f02b19 |
* @short_description: a GTK+ dialog prompt
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* A #GcrPrompt implementation which shows a GTK+ dialog. The dialog will
|
|
Packit Service |
f02b19 |
* remain visible (but insensitive) between prompts. If the user cancels the
|
|
Packit Service |
f02b19 |
* dialog between prompts, then the dialog will be hidden.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/**
|
|
Packit Service |
f02b19 |
* GcrPromptDialog:
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* A #GcrPrompt implementation which shows a GTK+ dialog.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/**
|
|
Packit Service |
f02b19 |
* GcrPromptDialogClass:
|
|
Packit Service |
f02b19 |
* @parent_class: parent class
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* The class for #GcrPromptDialog.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#ifdef GCR_DISABLE_GRABS
|
|
Packit Service |
f02b19 |
#define GRAB_KEYBOARD 0
|
|
Packit Service |
f02b19 |
#else
|
|
Packit Service |
f02b19 |
#define GRAB_KEYBOARD 1
|
|
Packit Service |
f02b19 |
#endif
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef enum {
|
|
Packit Service |
f02b19 |
PROMPT_NONE,
|
|
Packit Service |
f02b19 |
PROMPT_CONFIRMING,
|
|
Packit Service |
f02b19 |
PROMPT_PASSWORDING
|
|
Packit Service |
f02b19 |
} PromptMode;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
enum {
|
|
Packit Service |
f02b19 |
PROP_0,
|
|
Packit Service |
f02b19 |
PROP_MESSAGE,
|
|
Packit Service |
f02b19 |
PROP_DESCRIPTION,
|
|
Packit Service |
f02b19 |
PROP_WARNING,
|
|
Packit Service |
f02b19 |
PROP_CHOICE_LABEL,
|
|
Packit Service |
f02b19 |
PROP_CHOICE_CHOSEN,
|
|
Packit Service |
f02b19 |
PROP_PASSWORD_NEW,
|
|
Packit Service |
f02b19 |
PROP_PASSWORD_STRENGTH,
|
|
Packit Service |
f02b19 |
PROP_CALLER_WINDOW,
|
|
Packit Service |
f02b19 |
PROP_CONTINUE_LABEL,
|
|
Packit Service |
f02b19 |
PROP_CANCEL_LABEL,
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
PROP_PASSWORD_VISIBLE,
|
|
Packit Service |
f02b19 |
PROP_CONFIRM_VISIBLE,
|
|
Packit Service |
f02b19 |
PROP_WARNING_VISIBLE,
|
|
Packit Service |
f02b19 |
PROP_CHOICE_VISIBLE,
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
struct _GcrPromptDialogPrivate {
|
|
Packit Service |
f02b19 |
gchar *title;
|
|
Packit Service |
f02b19 |
gchar *message;
|
|
Packit Service |
f02b19 |
gchar *description;
|
|
Packit Service |
f02b19 |
gchar *warning;
|
|
Packit Service |
f02b19 |
gchar *choice_label;
|
|
Packit Service |
f02b19 |
gboolean choice_chosen;
|
|
Packit Service |
f02b19 |
gboolean password_new;
|
|
Packit Service |
f02b19 |
guint password_strength;
|
|
Packit Service |
f02b19 |
gchar *caller_window;
|
|
Packit Service |
f02b19 |
gchar *continue_label;
|
|
Packit Service |
f02b19 |
gchar *cancel_label;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
GSimpleAsyncResult *async_result;
|
|
Packit Service |
f02b19 |
GcrPromptReply last_reply;
|
|
Packit Service |
f02b19 |
GtkWidget *widget_grid;
|
|
Packit Service |
f02b19 |
GtkWidget *continue_button;
|
|
Packit Service |
f02b19 |
GtkWidget *spinner;
|
|
Packit Service |
f02b19 |
GtkWidget *image;
|
|
Packit Service |
f02b19 |
GtkWidget *password_entry;
|
|
Packit Service |
f02b19 |
GtkEntryBuffer *password_buffer;
|
|
Packit Service |
f02b19 |
GtkEntryBuffer *confirm_buffer;
|
|
Packit Service |
f02b19 |
PromptMode mode;
|
|
Packit Service |
f02b19 |
GdkDevice *grabbed_device;
|
|
Packit Service |
f02b19 |
gulong grab_broken_id;
|
|
Packit Service |
f02b19 |
gboolean grab_disabled;
|
|
Packit Service |
f02b19 |
gboolean was_closed;
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void gcr_prompt_dialog_prompt_iface (GcrPromptIface *iface);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean ungrab_keyboard (GtkWidget *win,
|
|
Packit Service |
f02b19 |
GdkEvent *event,
|
|
Packit Service |
f02b19 |
gpointer unused);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
G_DEFINE_TYPE_WITH_CODE (GcrPromptDialog, gcr_prompt_dialog, GTK_TYPE_DIALOG,
|
|
Packit Service |
f02b19 |
G_IMPLEMENT_INTERFACE (GCR_TYPE_PROMPT, gcr_prompt_dialog_prompt_iface);
|
|
Packit Service |
f02b19 |
);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
update_transient_for (GcrPromptDialog *self)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GdkDisplay *display;
|
|
Packit Service |
f02b19 |
GdkWindow *transient_for;
|
|
Packit Service |
f02b19 |
GdkWindow *window;
|
|
Packit Service |
f02b19 |
gint64 handle;
|
|
Packit Service |
f02b19 |
gchar *end;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->caller_window == NULL || g_str_equal (self->pv->caller_window, "")) {
|
|
Packit Service |
f02b19 |
gtk_window_set_modal (GTK_WINDOW (self), FALSE);
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
window = gtk_widget_get_window (GTK_WIDGET (self));
|
|
Packit Service |
f02b19 |
if (window == NULL)
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
handle = g_ascii_strtoll (self->pv->caller_window, &end, 10);
|
|
Packit Service |
f02b19 |
if (!end || *end != '\0') {
|
|
Packit Service |
f02b19 |
g_warning ("couldn't parse caller-window property: %s", self->pv->caller_window);
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
display = gtk_widget_get_display (GTK_WIDGET (self));
|
|
Packit Service |
f02b19 |
transient_for = gdk_x11_window_foreign_new_for_display (display, (Window)handle);
|
|
Packit Service |
f02b19 |
if (transient_for == NULL) {
|
|
Packit Service |
f02b19 |
g_warning ("caller-window property doesn't represent a window on current display: %s",
|
|
Packit Service |
f02b19 |
self->pv->caller_window);
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
gdk_window_set_transient_for (window, transient_for);
|
|
Packit Service |
f02b19 |
g_object_unref (transient_for);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_window_set_modal (GTK_WINDOW (self), TRUE);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_init (GcrPromptDialog *self)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
self->pv = G_TYPE_INSTANCE_GET_PRIVATE (self, GCR_TYPE_PROMPT_DIALOG,
|
|
Packit Service |
f02b19 |
GcrPromptDialogPrivate);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* This is a stupid hack to work around to help the window act like
|
|
Packit Service |
f02b19 |
* a normal object with regards to reference counting and unref.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
gtk_window_set_has_user_ref_count (GTK_WINDOW (self), FALSE);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_set_property (GObject *obj,
|
|
Packit Service |
f02b19 |
guint prop_id,
|
|
Packit Service |
f02b19 |
const GValue *value,
|
|
Packit Service |
f02b19 |
GParamSpec *pspec)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (obj);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
switch (prop_id) {
|
|
Packit Service |
f02b19 |
case PROP_MESSAGE:
|
|
Packit Service |
f02b19 |
g_free (self->pv->message);
|
|
Packit Service |
f02b19 |
self->pv->message = g_value_dup_string (value);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "message");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_DESCRIPTION:
|
|
Packit Service |
f02b19 |
g_free (self->pv->description);
|
|
Packit Service |
f02b19 |
self->pv->description = g_value_dup_string (value);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "description");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_WARNING:
|
|
Packit Service |
f02b19 |
g_free (self->pv->warning);
|
|
Packit Service |
f02b19 |
self->pv->warning = g_value_dup_string (value);
|
|
Packit Service |
f02b19 |
if (self->pv->warning && self->pv->warning[0] == '\0') {
|
|
Packit Service |
f02b19 |
g_free (self->pv->warning);
|
|
Packit Service |
f02b19 |
self->pv->warning = NULL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "warning");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "warning-visible");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CHOICE_LABEL:
|
|
Packit Service |
f02b19 |
g_free (self->pv->choice_label);
|
|
Packit Service |
f02b19 |
self->pv->choice_label = g_value_dup_string (value);
|
|
Packit Service |
f02b19 |
if (self->pv->choice_label && self->pv->choice_label[0] == '\0') {
|
|
Packit Service |
f02b19 |
g_free (self->pv->choice_label);
|
|
Packit Service |
f02b19 |
self->pv->choice_label = NULL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "choice-label");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "choice-visible");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CHOICE_CHOSEN:
|
|
Packit Service |
f02b19 |
self->pv->choice_chosen = g_value_get_boolean (value);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "choice-chosen");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_PASSWORD_NEW:
|
|
Packit Service |
f02b19 |
self->pv->password_new = g_value_get_boolean (value);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "password-new");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "confirm-visible");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CALLER_WINDOW:
|
|
Packit Service |
f02b19 |
g_free (self->pv->caller_window);
|
|
Packit Service |
f02b19 |
self->pv->caller_window = g_value_dup_string (value);
|
|
Packit Service |
f02b19 |
if (self->pv->caller_window && self->pv->caller_window[0] == '\0') {
|
|
Packit Service |
f02b19 |
g_free (self->pv->caller_window);
|
|
Packit Service |
f02b19 |
self->pv->caller_window = NULL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
update_transient_for (self);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "caller-window");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CONTINUE_LABEL:
|
|
Packit Service |
f02b19 |
g_free (self->pv->continue_label);
|
|
Packit Service |
f02b19 |
self->pv->continue_label = g_value_dup_string (value);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "continue-label");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CANCEL_LABEL:
|
|
Packit Service |
f02b19 |
g_free (self->pv->cancel_label);
|
|
Packit Service |
f02b19 |
self->pv->cancel_label = g_value_dup_string (value);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "cancel-label");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
default:
|
|
Packit Service |
f02b19 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_get_property (GObject *obj,
|
|
Packit Service |
f02b19 |
guint prop_id,
|
|
Packit Service |
f02b19 |
GValue *value,
|
|
Packit Service |
f02b19 |
GParamSpec *pspec)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (obj);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
switch (prop_id) {
|
|
Packit Service |
f02b19 |
case PROP_MESSAGE:
|
|
Packit Service |
f02b19 |
g_value_set_string (value, self->pv->message);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_DESCRIPTION:
|
|
Packit Service |
f02b19 |
g_value_set_string (value, self->pv->description);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_WARNING:
|
|
Packit Service |
f02b19 |
g_value_set_string (value, self->pv->warning);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CHOICE_LABEL:
|
|
Packit Service |
f02b19 |
g_value_set_string (value, self->pv->choice_label);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CHOICE_CHOSEN:
|
|
Packit Service |
f02b19 |
g_value_set_boolean (value, self->pv->choice_chosen);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_PASSWORD_NEW:
|
|
Packit Service |
f02b19 |
g_value_set_boolean (value, self->pv->password_new);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_PASSWORD_STRENGTH:
|
|
Packit Service |
f02b19 |
g_value_set_int (value, self->pv->password_strength);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CALLER_WINDOW:
|
|
Packit Service |
f02b19 |
g_value_set_string (value, self->pv->caller_window);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_PASSWORD_VISIBLE:
|
|
Packit Service |
f02b19 |
g_value_set_boolean (value, self->pv->mode == PROMPT_PASSWORDING);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CONFIRM_VISIBLE:
|
|
Packit Service |
f02b19 |
g_value_set_boolean (value, self->pv->password_new &&
|
|
Packit Service |
f02b19 |
self->pv->mode == PROMPT_PASSWORDING);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_WARNING_VISIBLE:
|
|
Packit Service |
f02b19 |
g_value_set_boolean (value, self->pv->warning && self->pv->warning[0]);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CHOICE_VISIBLE:
|
|
Packit Service |
f02b19 |
g_value_set_boolean (value, self->pv->choice_label && self->pv->choice_label[0]);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CONTINUE_LABEL:
|
|
Packit Service |
f02b19 |
g_value_set_string (value, self->pv->continue_label);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case PROP_CANCEL_LABEL:
|
|
Packit Service |
f02b19 |
g_value_set_string (value, self->pv->cancel_label);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
default:
|
|
Packit Service |
f02b19 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
on_password_changed (GtkEditable *editable,
|
|
Packit Service |
f02b19 |
gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
int upper, lower, digit, misc;
|
|
Packit Service |
f02b19 |
const char *password;
|
|
Packit Service |
f02b19 |
gdouble pwstrength;
|
|
Packit Service |
f02b19 |
int length, i;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
password = gtk_entry_get_text (GTK_ENTRY (editable));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* This code is based on the Master Password dialog in Firefox
|
|
Packit Service |
f02b19 |
* (pref-masterpass.js)
|
|
Packit Service |
f02b19 |
* Original code triple-licensed under the MPL, GPL, and LGPL
|
|
Packit Service |
f02b19 |
* so is license-compatible with this file
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
length = strlen (password);
|
|
Packit Service |
f02b19 |
upper = 0;
|
|
Packit Service |
f02b19 |
lower = 0;
|
|
Packit Service |
f02b19 |
digit = 0;
|
|
Packit Service |
f02b19 |
misc = 0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for ( i = 0; i < length ; i++) {
|
|
Packit Service |
f02b19 |
if (g_ascii_isdigit (password[i]))
|
|
Packit Service |
f02b19 |
digit++;
|
|
Packit Service |
f02b19 |
else if (g_ascii_islower (password[i]))
|
|
Packit Service |
f02b19 |
lower++;
|
|
Packit Service |
f02b19 |
else if (g_ascii_isupper (password[i]))
|
|
Packit Service |
f02b19 |
upper++;
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
misc++;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (length > 5)
|
|
Packit Service |
f02b19 |
length = 5;
|
|
Packit Service |
f02b19 |
if (digit > 3)
|
|
Packit Service |
f02b19 |
digit = 3;
|
|
Packit Service |
f02b19 |
if (upper > 3)
|
|
Packit Service |
f02b19 |
upper = 3;
|
|
Packit Service |
f02b19 |
if (misc > 3)
|
|
Packit Service |
f02b19 |
misc = 3;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
pwstrength = ((length * 0.1) - 0.2) +
|
|
Packit Service |
f02b19 |
(digit * 0.1) +
|
|
Packit Service |
f02b19 |
(misc * 0.15) +
|
|
Packit Service |
f02b19 |
(upper * 0.1);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (pwstrength < 0.0)
|
|
Packit Service |
f02b19 |
pwstrength = 0.0;
|
|
Packit Service |
f02b19 |
if (pwstrength > 1.0)
|
|
Packit Service |
f02b19 |
pwstrength = 1.0;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (user_data), pwstrength);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const gchar*
|
|
Packit Service |
f02b19 |
grab_status_message (GdkGrabStatus status)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
switch (status) {
|
|
Packit Service |
f02b19 |
case GDK_GRAB_SUCCESS:
|
|
Packit Service |
f02b19 |
g_return_val_if_reached ("");
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
case GDK_GRAB_ALREADY_GRABBED:
|
|
Packit Service |
f02b19 |
return "already grabbed";
|
|
Packit Service |
f02b19 |
case GDK_GRAB_INVALID_TIME:
|
|
Packit Service |
f02b19 |
return "invalid time";
|
|
Packit Service |
f02b19 |
case GDK_GRAB_NOT_VIEWABLE:
|
|
Packit Service |
f02b19 |
return "not viewable";
|
|
Packit Service |
f02b19 |
case GDK_GRAB_FROZEN:
|
|
Packit Service |
f02b19 |
return "frozen";
|
|
Packit Service |
f02b19 |
default:
|
|
Packit Service |
f02b19 |
g_message ("unknown grab status: %d", (int)status);
|
|
Packit Service |
f02b19 |
return "unknown";
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
on_grab_broken (GtkWidget *widget,
|
|
Packit Service |
f02b19 |
GdkEventGrabBroken * event,
|
|
Packit Service |
f02b19 |
gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
ungrab_keyboard (widget, (GdkEvent *)event, user_data);
|
|
Packit Service |
f02b19 |
return TRUE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
grab_keyboard (GtkWidget *widget,
|
|
Packit Service |
f02b19 |
GdkEvent *event,
|
|
Packit Service |
f02b19 |
gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (user_data);
|
|
Packit Service |
f02b19 |
GdkGrabStatus status;
|
|
Packit Service |
f02b19 |
guint32 at;
|
|
Packit Service |
f02b19 |
GdkDevice *device = NULL;
|
|
Packit Service |
f02b19 |
GdkDeviceManager *manager;
|
|
Packit Service |
f02b19 |
GdkDisplay *display;
|
|
Packit Service |
f02b19 |
GList *devices, *l;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->grabbed_device || !GRAB_KEYBOARD)
|
|
Packit Service |
f02b19 |
return FALSE;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
display = gtk_widget_get_display (widget);
|
|
Packit Service |
f02b19 |
manager = gdk_display_get_device_manager (display);
|
|
Packit Service |
f02b19 |
devices = gdk_device_manager_list_devices (manager, GDK_DEVICE_TYPE_MASTER);
|
|
Packit Service |
f02b19 |
for (l = devices; l; l = g_list_next (l)) {
|
|
Packit Service |
f02b19 |
device = l->data;
|
|
Packit Service |
f02b19 |
if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
g_list_free (devices);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (!device) {
|
|
Packit Service |
f02b19 |
g_message ("couldn't find device to grab");
|
|
Packit Service |
f02b19 |
return FALSE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
at = event ? gdk_event_get_time (event) : GDK_CURRENT_TIME;
|
|
Packit Service |
f02b19 |
status = gdk_device_grab (device, gtk_widget_get_window (widget),
|
|
Packit Service |
f02b19 |
GDK_OWNERSHIP_APPLICATION, TRUE,
|
|
Packit Service |
f02b19 |
GDK_KEY_PRESS | GDK_KEY_RELEASE, NULL, at);
|
|
Packit Service |
f02b19 |
if (status == GDK_GRAB_SUCCESS) {
|
|
Packit Service |
f02b19 |
self->pv->grab_broken_id = g_signal_connect (widget, "grab-broken-event",
|
|
Packit Service |
f02b19 |
G_CALLBACK (on_grab_broken), self);
|
|
Packit Service |
f02b19 |
gtk_device_grab_add (widget, device, TRUE);
|
|
Packit Service |
f02b19 |
self->pv->grabbed_device = device;
|
|
Packit Service |
f02b19 |
} else {
|
|
Packit Service |
f02b19 |
g_message ("could not grab keyboard: %s", grab_status_message (status));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Always return false, so event is handled elsewhere */
|
|
Packit Service |
f02b19 |
return FALSE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
ungrab_keyboard (GtkWidget *widget,
|
|
Packit Service |
f02b19 |
GdkEvent *event,
|
|
Packit Service |
f02b19 |
gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
guint32 at = event ? gdk_event_get_time (event) : GDK_CURRENT_TIME;
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (user_data);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->grabbed_device) {
|
|
Packit Service |
f02b19 |
g_signal_handler_disconnect (widget, self->pv->grab_broken_id);
|
|
Packit Service |
f02b19 |
gdk_device_ungrab (self->pv->grabbed_device, at);
|
|
Packit Service |
f02b19 |
gtk_device_grab_remove (widget, self->pv->grabbed_device);
|
|
Packit Service |
f02b19 |
self->pv->grabbed_device = NULL;
|
|
Packit Service |
f02b19 |
self->pv->grab_broken_id = 0;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Always return false, so event is handled elsewhere */
|
|
Packit Service |
f02b19 |
return FALSE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
window_state_changed (GtkWidget *win, GdkEventWindowState *event, gpointer data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GdkWindowState state = gdk_window_get_state (gtk_widget_get_window (win));
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (data);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (state & GDK_WINDOW_STATE_WITHDRAWN ||
|
|
Packit Service |
f02b19 |
state & GDK_WINDOW_STATE_ICONIFIED ||
|
|
Packit Service |
f02b19 |
state & GDK_WINDOW_STATE_FULLSCREEN ||
|
|
Packit Service |
f02b19 |
state & GDK_WINDOW_STATE_MAXIMIZED) {
|
|
Packit Service |
f02b19 |
self->pv->grab_disabled = TRUE;
|
|
Packit Service |
f02b19 |
ungrab_keyboard (win, (GdkEvent*)event, data);
|
|
Packit Service |
f02b19 |
} else if (self->pv->grab_disabled) {
|
|
Packit Service |
f02b19 |
self->pv->grab_disabled = FALSE;
|
|
Packit Service |
f02b19 |
grab_keyboard (win, (GdkEvent*)event, data);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return FALSE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_constructed (GObject *obj)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (obj);
|
|
Packit Service |
f02b19 |
GtkDialog *dialog;
|
|
Packit Service |
f02b19 |
PangoAttrList *attrs;
|
|
Packit Service |
f02b19 |
GtkWidget *widget;
|
|
Packit Service |
f02b19 |
GtkWidget *entry;
|
|
Packit Service |
f02b19 |
GtkWidget *content;
|
|
Packit Service |
f02b19 |
GtkWidget *button;
|
|
Packit Service |
f02b19 |
GtkGrid *grid;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
G_OBJECT_CLASS (gcr_prompt_dialog_parent_class)->constructed (obj);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
dialog = GTK_DIALOG (self);
|
|
Packit Service |
f02b19 |
button = gtk_dialog_add_button (dialog, _("_Cancel"), GTK_RESPONSE_CANCEL);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "cancel-label", button, "label", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
|
Packit Service |
f02b19 |
gtk_button_set_use_underline (GTK_BUTTON (button), TRUE);
|
|
Packit Service |
f02b19 |
button = gtk_dialog_add_button (dialog, _("_OK"), GTK_RESPONSE_OK);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "continue-label", button, "label", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
|
Packit Service |
f02b19 |
gtk_button_set_use_underline (GTK_BUTTON (button), TRUE);
|
|
Packit Service |
f02b19 |
self->pv->continue_button = button;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_NORMAL);
|
|
Packit Service |
f02b19 |
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
|
|
Packit Service |
f02b19 |
gtk_window_set_keep_above (GTK_WINDOW (dialog), TRUE);
|
|
Packit Service |
f02b19 |
gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
content = gtk_dialog_get_content_area (dialog);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
grid = GTK_GRID (gtk_grid_new ());
|
|
Packit Service |
f02b19 |
gtk_container_set_border_width (GTK_CONTAINER (grid), 6);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (GTK_WIDGET (grid), TRUE);
|
|
Packit Service |
f02b19 |
gtk_grid_set_column_homogeneous (grid, FALSE);
|
|
Packit Service |
f02b19 |
gtk_grid_set_column_spacing (grid, 12);
|
|
Packit Service |
f02b19 |
gtk_grid_set_row_spacing (grid, 6);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The prompt image */
|
|
Packit Service |
f02b19 |
self->pv->image = gtk_image_new_from_icon_name ("dialog-password", GTK_ICON_SIZE_DIALOG);
|
|
Packit Service |
f02b19 |
gtk_widget_set_valign (self->pv->image, GTK_ALIGN_START);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, self->pv->image, -1, 0, 1, 4);
|
|
Packit Service |
f02b19 |
gtk_widget_show (self->pv->image);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The prompt spinner on the continue button */
|
|
Packit Service |
f02b19 |
widget = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog),
|
|
Packit Service |
f02b19 |
GTK_RESPONSE_OK);
|
|
Packit Service |
f02b19 |
self->pv->spinner = gtk_spinner_new ();
|
|
Packit Service |
f02b19 |
gtk_button_set_image (GTK_BUTTON (widget), self->pv->spinner);
|
|
Packit Service |
f02b19 |
gtk_button_set_image_position (GTK_BUTTON (widget), GTK_POS_LEFT);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The message label */
|
|
Packit Service |
f02b19 |
widget = gtk_label_new ("");
|
|
Packit Service |
f02b19 |
attrs = pango_attr_list_new ();
|
|
Packit Service |
f02b19 |
pango_attr_list_insert (attrs, pango_attr_weight_new (PANGO_WEIGHT_BOLD));
|
|
Packit Service |
f02b19 |
pango_attr_list_insert (attrs, pango_attr_scale_new (PANGO_SCALE_LARGE));
|
|
Packit Service |
f02b19 |
gtk_label_set_attributes (GTK_LABEL (widget), attrs);
|
|
Packit Service |
f02b19 |
pango_attr_list_unref (attrs);
|
|
Packit Service |
f02b19 |
gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_halign (widget, GTK_ALIGN_START);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_margin_bottom (widget, 8);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "message", widget, "label", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 0, 0, 2, 1);
|
|
Packit Service |
f02b19 |
gtk_widget_show (widget);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The description label */
|
|
Packit Service |
f02b19 |
widget = gtk_label_new ("");
|
|
Packit Service |
f02b19 |
gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_halign (widget, GTK_ALIGN_START);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_margin_bottom (widget, 4);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "description", widget, "label", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 0, 1, 2, 1);
|
|
Packit Service |
f02b19 |
gtk_widget_show (widget);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The password label */
|
|
Packit Service |
f02b19 |
widget = gtk_label_new (_("Password:"));
|
|
Packit Service |
f02b19 |
gtk_widget_set_halign (widget, GTK_ALIGN_START);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, FALSE);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "password-visible", widget, "visible", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 0, 2, 1, 1);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The password entry */
|
|
Packit Service |
f02b19 |
self->pv->password_buffer = gcr_secure_entry_buffer_new ();
|
|
Packit Service |
f02b19 |
entry = gtk_entry_new_with_buffer (self->pv->password_buffer);
|
|
Packit Service |
f02b19 |
gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE);
|
|
Packit Service |
f02b19 |
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (entry, TRUE);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "password-visible", entry, "visible", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, entry, 1, 2, 1, 1);
|
|
Packit Service |
f02b19 |
self->pv->password_entry = entry;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The confirm label */
|
|
Packit Service |
f02b19 |
widget = gtk_label_new (_("Confirm:"));
|
|
Packit Service |
f02b19 |
gtk_widget_set_halign (widget, GTK_ALIGN_START);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, FALSE);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "confirm-visible", widget, "visible", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 0, 3, 1, 1);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The confirm entry */
|
|
Packit Service |
f02b19 |
self->pv->confirm_buffer = gcr_secure_entry_buffer_new ();
|
|
Packit Service |
f02b19 |
widget = gtk_entry_new_with_buffer (self->pv->confirm_buffer);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, TRUE);
|
|
Packit Service |
f02b19 |
gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE);
|
|
Packit Service |
f02b19 |
gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "confirm-visible", widget, "visible", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 1, 3, 1, 1);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The quality progress bar */
|
|
Packit Service |
f02b19 |
widget = gtk_progress_bar_new ();
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, TRUE);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "confirm-visible", widget, "visible", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 1, 4, 1, 1);
|
|
Packit Service |
f02b19 |
g_signal_connect (entry, "changed", G_CALLBACK (on_password_changed), widget);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The warning */
|
|
Packit Service |
f02b19 |
widget = gtk_label_new ("");
|
|
Packit Service |
f02b19 |
attrs = pango_attr_list_new ();
|
|
Packit Service |
f02b19 |
pango_attr_list_insert (attrs, pango_attr_style_new (PANGO_STYLE_ITALIC));
|
|
Packit Service |
f02b19 |
gtk_label_set_attributes (GTK_LABEL (widget), attrs);
|
|
Packit Service |
f02b19 |
pango_attr_list_unref (attrs);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, FALSE);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "warning", widget, "label", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "warning-visible", widget, "visible", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 0, 5, 2, 1);
|
|
Packit Service |
f02b19 |
gtk_widget_show (widget);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* The checkbox */
|
|
Packit Service |
f02b19 |
widget = gtk_check_button_new ();
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "choice-label", widget, "label", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "choice-visible", widget, "visible", G_BINDING_DEFAULT);
|
|
Packit Service |
f02b19 |
g_object_bind_property (self, "choice-chosen", widget, "active", G_BINDING_BIDIRECTIONAL);
|
|
Packit Service |
f02b19 |
gtk_widget_set_hexpand (widget, FALSE);
|
|
Packit Service |
f02b19 |
gtk_grid_attach (grid, widget, 0, 6, 2, 1);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_container_add (GTK_CONTAINER (content), GTK_WIDGET (grid));
|
|
Packit Service |
f02b19 |
gtk_widget_show (GTK_WIDGET (grid));
|
|
Packit Service |
f02b19 |
self->pv->widget_grid = GTK_WIDGET (grid);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_signal_connect (self, "map-event", G_CALLBACK (grab_keyboard), self);
|
|
Packit Service |
f02b19 |
g_signal_connect (self, "unmap-event", G_CALLBACK (ungrab_keyboard), self);
|
|
Packit Service |
f02b19 |
g_signal_connect (self, "window-state-event", G_CALLBACK (window_state_changed), self);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
handle_password_response (GcrPromptDialog *self)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
const gchar *password;
|
|
Packit Service |
f02b19 |
const gchar *confirm;
|
|
Packit Service |
f02b19 |
const gchar *env;
|
|
Packit Service |
f02b19 |
gint strength;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
password = gtk_entry_buffer_get_text (self->pv->password_buffer);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Is it a new password? */
|
|
Packit Service |
f02b19 |
if (self->pv->password_new) {
|
|
Packit Service |
f02b19 |
confirm = gtk_entry_buffer_get_text (self->pv->confirm_buffer);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Do the passwords match? */
|
|
Packit Service |
f02b19 |
if (!g_str_equal (password, confirm)) {
|
|
Packit Service |
f02b19 |
gcr_prompt_set_warning (GCR_PROMPT (self), _("Passwords do not match."));
|
|
Packit Service |
f02b19 |
return FALSE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Don't allow blank passwords if in paranoid mode */
|
|
Packit Service |
f02b19 |
env = g_getenv ("GNOME_KEYRING_PARANOID");
|
|
Packit Service |
f02b19 |
if (env && *env) {
|
|
Packit Service |
f02b19 |
gcr_prompt_set_warning (GCR_PROMPT (self), _("Password cannot be blank"));
|
|
Packit Service |
f02b19 |
return FALSE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (g_str_equal (password, ""))
|
|
Packit Service |
f02b19 |
strength = 0;
|
|
Packit Service |
f02b19 |
else
|
|
Packit Service |
f02b19 |
strength = 1;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
self->pv->password_strength = strength;
|
|
Packit Service |
f02b19 |
g_object_notify (G_OBJECT (self), "password-strength");
|
|
Packit Service |
f02b19 |
return TRUE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_response (GtkDialog *dialog,
|
|
Packit Service |
f02b19 |
gint response_id)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (dialog);
|
|
Packit Service |
f02b19 |
GSimpleAsyncResult *res;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/*
|
|
Packit Service |
f02b19 |
* If this is called while no prompting is going on, then the dialog
|
|
Packit Service |
f02b19 |
* is waiting for the caller to perform some action. Close the dialog.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->mode == PROMPT_NONE) {
|
|
Packit Service |
f02b19 |
g_return_if_fail (response_id != GTK_RESPONSE_OK);
|
|
Packit Service |
f02b19 |
gcr_prompt_close (GCR_PROMPT (self));
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
switch (response_id) {
|
|
Packit Service |
f02b19 |
case GTK_RESPONSE_OK:
|
|
Packit Service |
f02b19 |
switch (self->pv->mode) {
|
|
Packit Service |
f02b19 |
case PROMPT_PASSWORDING:
|
|
Packit Service |
f02b19 |
if (!handle_password_response (self))
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
default:
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
self->pv->last_reply = GCR_PROMPT_REPLY_CONTINUE;
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
default:
|
|
Packit Service |
f02b19 |
self->pv->last_reply = GCR_PROMPT_REPLY_CANCEL;
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_widget_set_sensitive (self->pv->continue_button, FALSE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_sensitive (self->pv->widget_grid, FALSE);
|
|
Packit Service |
f02b19 |
gtk_widget_show (self->pv->spinner);
|
|
Packit Service |
f02b19 |
gtk_spinner_start (GTK_SPINNER (self->pv->spinner));
|
|
Packit Service |
f02b19 |
self->pv->mode = PROMPT_NONE;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
res = self->pv->async_result;
|
|
Packit Service |
f02b19 |
self->pv->async_result = NULL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_simple_async_result_complete (res);
|
|
Packit Service |
f02b19 |
g_object_unref (res);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_dispose (GObject *obj)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (obj);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_DELETE_EVENT);
|
|
Packit Service |
f02b19 |
g_assert (self->pv->async_result == NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gcr_prompt_close (GCR_PROMPT (self));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
ungrab_keyboard (GTK_WIDGET (self), NULL, self);
|
|
Packit Service |
f02b19 |
g_assert (self->pv->grabbed_device == NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
G_OBJECT_CLASS (gcr_prompt_dialog_parent_class)->dispose (obj);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_finalize (GObject *obj)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (obj);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_free (self->pv->title);
|
|
Packit Service |
f02b19 |
g_free (self->pv->message);
|
|
Packit Service |
f02b19 |
g_free (self->pv->description);
|
|
Packit Service |
f02b19 |
g_free (self->pv->warning);
|
|
Packit Service |
f02b19 |
g_free (self->pv->choice_label);
|
|
Packit Service |
f02b19 |
g_free (self->pv->caller_window);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (self->pv->password_buffer);
|
|
Packit Service |
f02b19 |
g_object_unref (self->pv->confirm_buffer);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
G_OBJECT_CLASS (gcr_prompt_dialog_parent_class)->finalize (obj);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_class_init (GcrPromptDialogClass *klass)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
Packit Service |
f02b19 |
GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gobject_class->constructed = gcr_prompt_dialog_constructed;
|
|
Packit Service |
f02b19 |
gobject_class->get_property = gcr_prompt_dialog_get_property;
|
|
Packit Service |
f02b19 |
gobject_class->set_property = gcr_prompt_dialog_set_property;
|
|
Packit Service |
f02b19 |
gobject_class->dispose = gcr_prompt_dialog_dispose;
|
|
Packit Service |
f02b19 |
gobject_class->finalize = gcr_prompt_dialog_finalize;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
dialog_class->response = gcr_prompt_dialog_response;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_type_class_add_private (gobject_class, sizeof (GcrPromptDialogPrivate));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_MESSAGE, "message");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_DESCRIPTION, "description");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_WARNING, "warning");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_PASSWORD_NEW, "password-new");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_PASSWORD_STRENGTH, "password-strength");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_CHOICE_LABEL, "choice-label");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_CHOICE_CHOSEN, "choice-chosen");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_CALLER_WINDOW, "caller-window");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_CONTINUE_LABEL, "continue-label");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_CANCEL_LABEL, "cancel-label");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/**
|
|
Packit Service |
f02b19 |
* GcrPromptDialog:password-visible:
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* Whether the password entry is visible or not.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
g_object_class_install_property (gobject_class, PROP_PASSWORD_VISIBLE,
|
|
Packit Service |
f02b19 |
g_param_spec_boolean ("password-visible", "Password visible", "Password field is visible",
|
|
Packit Service |
f02b19 |
FALSE, G_PARAM_READABLE));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/**
|
|
Packit Service |
f02b19 |
* GcrPromptDialog:confirm-visible:
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* Whether the password confirm entry is visible or not.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
g_object_class_install_property (gobject_class, PROP_CONFIRM_VISIBLE,
|
|
Packit Service |
f02b19 |
g_param_spec_boolean ("confirm-visible", "Confirm visible", "Confirm field is visible",
|
|
Packit Service |
f02b19 |
FALSE, G_PARAM_READABLE));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/**
|
|
Packit Service |
f02b19 |
* GcrPromptDialog:warning-visible:
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* Whether the warning label is visible or not.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
g_object_class_install_property (gobject_class, PROP_WARNING_VISIBLE,
|
|
Packit Service |
f02b19 |
g_param_spec_boolean ("warning-visible", "Warning visible", "Warning is visible",
|
|
Packit Service |
f02b19 |
FALSE, G_PARAM_READABLE));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/**
|
|
Packit Service |
f02b19 |
* GcrPromptDialog:choice-visible:
|
|
Packit Service |
f02b19 |
*
|
|
Packit Service |
f02b19 |
* Whether the choice check box is visible or not.
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
g_object_class_install_property (gobject_class, PROP_CHOICE_VISIBLE,
|
|
Packit Service |
f02b19 |
g_param_spec_boolean ("choice-visible", "Choice visible", "Choice is visible",
|
|
Packit Service |
f02b19 |
FALSE, G_PARAM_READABLE));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_password_async (GcrPrompt *prompt,
|
|
Packit Service |
f02b19 |
GCancellable *cancellable,
|
|
Packit Service |
f02b19 |
GAsyncReadyCallback callback,
|
|
Packit Service |
f02b19 |
gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (prompt);
|
|
Packit Service |
f02b19 |
GObject *obj;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->async_result != NULL) {
|
|
Packit Service |
f02b19 |
g_warning ("this prompt is already prompting");
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
self->pv->mode = PROMPT_PASSWORDING;
|
|
Packit Service |
f02b19 |
self->pv->async_result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_password_async);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_entry_buffer_set_text (self->pv->password_buffer, "", 0);
|
|
Packit Service |
f02b19 |
gtk_entry_buffer_set_text (self->pv->confirm_buffer, "", 0);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->was_closed) {
|
|
Packit Service |
f02b19 |
self->pv->last_reply = GCR_PROMPT_REPLY_CANCEL;
|
|
Packit Service |
f02b19 |
g_simple_async_result_complete_in_idle (self->pv->async_result);
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_image_set_from_icon_name (GTK_IMAGE (self->pv->image),
|
|
Packit Service |
f02b19 |
"dialog-password", GTK_ICON_SIZE_DIALOG);
|
|
Packit Service |
f02b19 |
gtk_widget_set_sensitive (self->pv->continue_button, TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_sensitive (self->pv->widget_grid, TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_hide (self->pv->spinner);
|
|
Packit Service |
f02b19 |
gtk_spinner_stop (GTK_SPINNER (self->pv->spinner));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = G_OBJECT (self);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "password-visible");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "confirm-visible");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "warning-visible");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "choice-visible");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_widget_grab_focus (self->pv->password_entry);
|
|
Packit Service |
f02b19 |
gtk_widget_show (GTK_WIDGET (self));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const gchar *
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_password_finish (GcrPrompt *prompt,
|
|
Packit Service |
f02b19 |
GAsyncResult *result,
|
|
Packit Service |
f02b19 |
GError **error)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (prompt);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (prompt),
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_password_async), NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
|
|
Packit Service |
f02b19 |
return NULL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->last_reply == GCR_PROMPT_REPLY_CONTINUE)
|
|
Packit Service |
f02b19 |
return gtk_entry_buffer_get_text (self->pv->password_buffer);
|
|
Packit Service |
f02b19 |
return NULL;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_confirm_async (GcrPrompt *prompt,
|
|
Packit Service |
f02b19 |
GCancellable *cancellable,
|
|
Packit Service |
f02b19 |
GAsyncReadyCallback callback,
|
|
Packit Service |
f02b19 |
gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (prompt);
|
|
Packit Service |
f02b19 |
GtkWidget *button;
|
|
Packit Service |
f02b19 |
GObject *obj;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->async_result != NULL) {
|
|
Packit Service |
f02b19 |
g_warning ("this prompt is already prompting");
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
self->pv->mode = PROMPT_CONFIRMING;
|
|
Packit Service |
f02b19 |
self->pv->async_result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_confirm_async);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (self->pv->was_closed) {
|
|
Packit Service |
f02b19 |
self->pv->last_reply = GCR_PROMPT_REPLY_CANCEL;
|
|
Packit Service |
f02b19 |
g_simple_async_result_complete_in_idle (self->pv->async_result);
|
|
Packit Service |
f02b19 |
return;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_image_set_from_icon_name (GTK_IMAGE (self->pv->image),
|
|
Packit Service |
f02b19 |
"dialog-question", GTK_ICON_SIZE_DIALOG);
|
|
Packit Service |
f02b19 |
gtk_widget_set_sensitive (self->pv->continue_button, TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_set_sensitive (self->pv->widget_grid, TRUE);
|
|
Packit Service |
f02b19 |
gtk_widget_hide (self->pv->spinner);
|
|
Packit Service |
f02b19 |
gtk_spinner_stop (GTK_SPINNER (self->pv->spinner));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
button = gtk_dialog_get_widget_for_response (GTK_DIALOG (self), GTK_RESPONSE_OK);
|
|
Packit Service |
f02b19 |
gtk_widget_grab_focus (button);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = G_OBJECT (self);
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "password-visible");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "confirm-visible");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "warning-visible");
|
|
Packit Service |
f02b19 |
g_object_notify (obj, "choice-visible");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gtk_widget_show (GTK_WIDGET (self));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static GcrPromptReply
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_confirm_finish (GcrPrompt *prompt,
|
|
Packit Service |
f02b19 |
GAsyncResult *result,
|
|
Packit Service |
f02b19 |
GError **error)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (prompt);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (prompt),
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_confirm_async), GCR_PROMPT_REPLY_CANCEL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
|
|
Packit Service |
f02b19 |
return GCR_PROMPT_REPLY_CANCEL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return self->pv->last_reply;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_close (GcrPrompt *prompt)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GcrPromptDialog *self = GCR_PROMPT_DIALOG (prompt);
|
|
Packit Service |
f02b19 |
if (!self->pv->was_closed) {
|
|
Packit Service |
f02b19 |
self->pv->was_closed = TRUE;
|
|
Packit Service |
f02b19 |
gtk_widget_hide (GTK_WIDGET (self));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
gcr_prompt_dialog_prompt_iface (GcrPromptIface *iface)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
iface->prompt_password_async = gcr_prompt_dialog_password_async;
|
|
Packit Service |
f02b19 |
iface->prompt_password_finish = gcr_prompt_dialog_password_finish;
|
|
Packit Service |
f02b19 |
iface->prompt_confirm_async = gcr_prompt_dialog_confirm_async;
|
|
Packit Service |
f02b19 |
iface->prompt_confirm_finish = gcr_prompt_dialog_confirm_finish;
|
|
Packit Service |
f02b19 |
iface->prompt_close = gcr_prompt_dialog_close;
|
|
Packit Service |
f02b19 |
}
|