[gnome-control-center/T20771: 40/44] user panel, password: add fallback kbd layout if necessary
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/T20771: 40/44] user panel, password: add fallback kbd layout if necessary
- Date: Tue, 23 Jan 2018 21:09:56 +0000 (UTC)
commit 5c5b7ce18377a7172d2f5e99468a1078ac056a55
Author: Simon Schampijer <simon schampijer endlessm com>
Date: Thu Dec 7 09:22:17 2017 +0100
user panel, password: add fallback kbd layout if necessary
If the current keyboard layout is not a latin one we
will add the fallback kbd layout 'en'. This calls
out to gnome-shell where the logic to detect
the keyboard layout is kept. The layout will
be available in the popup switcher and the taskbar
keyboard layout switcher.
panels/user-accounts/um-password-dialog.c | 47 ++++++++++++++++++++++++++++-
1 files changed, 46 insertions(+), 1 deletions(-)
---
diff --git a/panels/user-accounts/um-password-dialog.c b/panels/user-accounts/um-password-dialog.c
index 225cf99..fd3b6ac 100644
--- a/panels/user-accounts/um-password-dialog.c
+++ b/panels/user-accounts/um-password-dialog.c
@@ -25,6 +25,7 @@
#include <sys/types.h>
#include <sys/wait.h>
+#include <gio/gio.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <gtk/gtk.h>
@@ -55,6 +56,8 @@ struct _UmPasswordDialog {
ActUser *user;
ActUserPasswordMode password_mode;
+ GDBusProxy *input_source_manager;
+
GtkWidget *old_password_label;
GtkWidget *old_password_entry;
gboolean old_password_ok;
@@ -97,8 +100,29 @@ update_password_strength (UmPasswordDialog *um)
}
static void
+shell_enable_password_mode (UmPasswordDialog *um,
+ gboolean enable)
+{
+ g_autoptr(GError) error = NULL;
+
+ if (!um->input_source_manager)
+ return;
+
+ g_dbus_proxy_call_sync (um->input_source_manager,
+ "Set",
+ g_variant_new_parsed ("('org.gnome.Shell.InputSourceManager',
'PasswordModeEnabled', %v)",
+ g_variant_new_boolean (enable)),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+
+ if (error)
+ g_critical ("Unable to set PasswordMode: %s", error->message);
+}
+
+static void
finish_password_change (UmPasswordDialog *um)
{
+ shell_enable_password_mode (um, FALSE);
gtk_widget_hide (um->dialog);
gtk_entry_set_text (GTK_ENTRY (um->password_entry), " ");
@@ -116,11 +140,22 @@ cancel_password_dialog (GtkButton *button,
finish_password_change (um);
}
+static gboolean
+hide_password_dialog (GtkWidget *dialog,
+ GdkEvent *event,
+ UmPasswordDialog *um)
+{
+ shell_enable_password_mode (um, FALSE);
+ gtk_widget_hide_on_delete (dialog);
+ return TRUE;
+}
+
static void
dialog_closed (GtkWidget *dialog,
gint response_id,
UmPasswordDialog *um)
{
+ shell_enable_password_mode (um, FALSE);
gtk_widget_destroy (dialog);
}
@@ -512,7 +547,7 @@ um_password_dialog_new (void)
widget = (GtkWidget *) gtk_builder_get_object (builder, "dialog");
g_signal_connect (widget, "delete-event",
- G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+ G_CALLBACK (hide_password_dialog), um);
um->dialog = widget;
widget = (GtkWidget *) gtk_builder_get_object (builder, "cancel-button");
@@ -565,6 +600,13 @@ um_password_dialog_new (void)
g_object_unref (builder);
+ um->input_source_manager = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.gnome.Shell.InputSourceManager",
+ "/org/gnome/Shell/InputSourceManager",
+ "org.freedesktop.DBus.Properties",
+ NULL, NULL);
return um;
}
@@ -574,6 +616,7 @@ um_password_dialog_free (UmPasswordDialog *um)
gtk_widget_destroy (um->dialog);
g_clear_object (&um->user);
+ g_clear_object (&um->input_source_manager);
if (um->passwd_handler)
passwd_destroy (um->passwd_handler);
@@ -642,6 +685,8 @@ void
um_password_dialog_show (UmPasswordDialog *um,
GtkWindow *parent)
{
+ shell_enable_password_mode (um, TRUE);
+
gtk_window_set_transient_for (GTK_WINDOW (um->dialog), parent);
gtk_window_present (GTK_WINDOW (um->dialog));
if (um->old_password_ok == FALSE)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]