[Xfce4-commits] [apps/xfce4-screensaver] 01/01: Add toggle for on-screen keyboard for individual user/use preference
noreply at xfce.org
noreply at xfce.org
Sun Jul 14 01:38:04 CEST 2019
This is an automated email from the git hooks/post-receive script.
b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository apps/xfce4-screensaver.
commit 6f9deef9b9fd5b4508bf1db4ab65f4e26be28084
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Sat Jul 13 19:37:57 2019 -0400
Add toggle for on-screen keyboard for individual user/use preference
---
src/Makefile.am | 2 +
src/gs-lock-plug.c | 35 ++++++++
src/gs-prefs.c | 16 ++++
src/gs-prefs.h | 8 ++
src/gs-window-x11.c | 18 +++++
src/xfce4-screensaver-dialog.ui | 171 +++++++++++++++++++++++-----------------
6 files changed, 176 insertions(+), 74 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 8ee7b55..b8969f5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -119,6 +119,8 @@ xfce4_screensaver_dialog_SOURCES = \
gs-lock-plug.h \
gs-debug.c \
gs-debug.h \
+ gs-prefs.c \
+ gs-prefs.h \
setuid.c \
setuid.h \
subprocs.c \
diff --git a/src/gs-lock-plug.c b/src/gs-lock-plug.c
index ed566b2..d3291d7 100644
--- a/src/gs-lock-plug.c
+++ b/src/gs-lock-plug.c
@@ -40,9 +40,11 @@
#include <gtk/gtkx.h>
#include <libxfce4util/libxfce4util.h>
+#include <xfconf/xfconf.h>
#include "gs-lock-plug.h"
#include "gs-debug.h"
+#include "gs-prefs.h"
#include "xfce-bg.h"
#include "xfce-desktop-utils.h"
#include "xfce4-screensaver-dialog-ui.h"
@@ -88,6 +90,7 @@ struct GSLockPlugPrivate {
GtkWidget *auth_logout_button;
GtkWidget *auth_prompt_kbd_layout_indicator;
+ GtkWidget *keyboard_toggle;
gboolean caps_lock_on;
gboolean switch_enabled;
@@ -105,6 +108,9 @@ struct GSLockPlugPrivate {
gint monitor_index;
GList *key_events;
+
+ GSPrefs *prefs;
+ XfconfChannel *channel;
};
typedef struct _ResponseData ResponseData;
@@ -1442,6 +1448,17 @@ redraw_background (GSLockPlug *plug) {
gtk_image_set_from_pixbuf(GTK_IMAGE(plug->priv->background_image), pixbuf);
}
+static void
+keyboard_toggled_cb (GtkToggleButton *button,
+ gpointer *user_data) {
+ GSLockPlug *plug = GS_LOCK_PLUG (user_data);
+
+ gboolean active = gtk_toggle_button_get_active (button);
+ xfconf_channel_set_bool (plug->priv->channel, KEY_KEYBOARD_DISPLAYED, active);
+
+ gtk_widget_grab_focus (plug->priv->auth_prompt_entry);
+}
+
static gboolean
gs_lock_plug_add_login_window (GSLockPlug *plug) {
GtkBuilder *builder;
@@ -1458,6 +1475,9 @@ gs_lock_plug_add_login_window (GSLockPlug *plug) {
return FALSE;
}
+ plug->priv->prefs = gs_prefs_new ();
+ plug->priv->channel = xfconf_channel_get (SETTINGS_XFCONF_CHANNEL);
+
lock_overlay = GTK_WIDGET(gtk_builder_get_object(builder, "lock-overlay"));
lock_panel = GTK_WIDGET(gtk_builder_get_object(builder, "lock-panel"));
lock_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "login_window"));
@@ -1492,6 +1512,15 @@ gs_lock_plug_add_login_window (GSLockPlug *plug) {
plug->priv->auth_capslock_label = GTK_WIDGET (gtk_builder_get_object(builder, "auth-capslock-label"));
plug->priv->auth_message_label = GTK_WIDGET (gtk_builder_get_object(builder, "auth-status-label"));
+ plug->priv->keyboard_toggle = GTK_WIDGET (gtk_builder_get_object(builder, "keyboard-toggle"));
+ if (plug->priv->prefs->keyboard_enabled) {
+ gtk_widget_show (plug->priv->keyboard_toggle);
+ gtk_widget_set_no_show_all (plug->priv->keyboard_toggle, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plug->priv->keyboard_toggle), plug->priv->prefs->keyboard_displayed);
+ g_signal_connect (GTK_TOGGLE_BUTTON (plug->priv->keyboard_toggle), "toggled",
+ G_CALLBACK (keyboard_toggled_cb), plug);
+ }
+
/* Placeholder for the keyboard indicator */
plug->priv->auth_prompt_kbd_layout_indicator = GTK_WIDGET (
gtk_builder_get_object(builder, "auth-prompt-kbd-layout-indicator"));
@@ -1637,6 +1666,12 @@ gs_lock_plug_finalize (GObject *object) {
g_free (plug->priv->logout_command);
+ g_free (plug->priv->prefs);
+ plug->priv->prefs = NULL;
+
+ g_free (plug->priv->channel);
+ plug->priv->channel = NULL;
+
remove_response_idle (plug);
remove_cancel_timeout (plug);
remove_datetime_timeout (plug);
diff --git a/src/gs-prefs.c b/src/gs-prefs.c
index 3b81cd6..0b5e5e2 100644
--- a/src/gs-prefs.c
+++ b/src/gs-prefs.c
@@ -240,6 +240,12 @@ _gs_prefs_set_keyboard_command (GSPrefs *prefs,
}
static void
+_gs_prefs_set_keyboard_displayed (GSPrefs *prefs,
+ gboolean displayed) {
+ prefs->keyboard_displayed = displayed;
+}
+
+static void
_gs_prefs_set_status_message_enabled (GSPrefs *prefs,
gboolean enabled) {
prefs->status_message_enabled = enabled;
@@ -355,6 +361,11 @@ gs_prefs_load_from_settings (GSPrefs *prefs) {
g_free (string);
bvalue = xfconf_channel_get_bool (prefs->priv->channel,
+ KEY_KEYBOARD_DISPLAYED,
+ DEFAULT_KEY_KEYBOARD_DISPLAYED);
+ _gs_prefs_set_keyboard_displayed (prefs, bvalue);
+
+ bvalue = xfconf_channel_get_bool (prefs->priv->channel,
KEY_STATUS_MESSAGE_ENABLED,
DEFAULT_KEY_STATUS_MESSAGE_ENABLED);
_gs_prefs_set_status_message_enabled (prefs, bvalue);
@@ -469,6 +480,11 @@ key_changed_cb (XfconfChannel *channel,
command = xfconf_channel_get_string (channel, property, DEFAULT_KEY_KEYBOARD_COMMAND);
_gs_prefs_set_keyboard_command (prefs, command);
g_free (command);
+ } else if (strcmp (property, KEY_KEYBOARD_DISPLAYED) == 0) {
+ gboolean enabled;
+
+ enabled = xfconf_channel_get_bool (channel, property, DEFAULT_KEY_KEYBOARD_DISPLAYED);
+ _gs_prefs_set_keyboard_displayed (prefs, enabled);
} else if (strcmp (property, KEY_STATUS_MESSAGE_ENABLED) == 0) {
gboolean enabled;
diff --git a/src/gs-prefs.h b/src/gs-prefs.h
index f4a7f27..70ca1e4 100644
--- a/src/gs-prefs.h
+++ b/src/gs-prefs.h
@@ -131,6 +131,13 @@ G_BEGIN_DECLS
#define DEFAULT_KEY_KEYBOARD_COMMAND ""
/**
+ * Display embedded keyboard
+ * Remembers the current user preference to display the on-screen keyboard.
+ */
+#define KEY_KEYBOARD_DISPLAYED "/lock/embedded-keyboard/displayed"
+#define DEFAULT_KEY_KEYBOARD_DISPLAYED FALSE
+
+/**
* Allow the session status message to be displayed
* Allow the session status message to be displayed when the screen is locked.
*/
@@ -195,6 +202,7 @@ typedef struct
guint logout_enabled : 1; /* Whether to offer the logout option */
guint user_switch_enabled : 1; /* Whether to offer the user switch option */
guint keyboard_enabled : 1; /* Whether to try to embed a keyboard */
+ guint keyboard_displayed : 1; /* Whether the keyboard is displayed */
guint status_message_enabled : 1; /* show the status message in the lock */
guint timeout; /* how much idle time before activation */
guint lock_timeout; /* how long after activation locking starts */
diff --git a/src/gs-window-x11.c b/src/gs-window-x11.c
index 2cf9db3..8bf28fd 100644
--- a/src/gs-window-x11.c
+++ b/src/gs-window-x11.c
@@ -1084,6 +1084,16 @@ remove_key_events (GSWindow *window) {
}
static void
+prefs_changed (GSPrefs *prefs,
+ GSWindow *window) {
+ if (window->priv->prefs->keyboard_enabled) {
+ if (window->priv->keyboard_socket) {
+ gtk_widget_set_visible (window->priv->keyboard_socket, window->priv->prefs->keyboard_displayed);
+ }
+ }
+}
+
+static void
lock_socket_show (GtkWidget *widget,
GSWindow *window) {
gtk_widget_child_focus (window->priv->lock_socket, GTK_DIR_TAB_FORWARD);
@@ -1099,6 +1109,7 @@ lock_socket_destroyed (GtkWidget *widget,
g_signal_handlers_disconnect_by_func (widget, lock_socket_destroyed, window);
g_signal_handlers_disconnect_by_func (widget, lock_plug_added, window);
g_signal_handlers_disconnect_by_func (widget, lock_plug_removed, window);
+ g_signal_handlers_disconnect_by_func (window->priv->prefs, prefs_changed, window);
window->priv->lock_socket = NULL;
}
@@ -1146,6 +1157,10 @@ create_keyboard_socket (GSWindow *window,
gtk_overlay_add_overlay (GTK_OVERLAY (window->priv->overlay), window->priv->keyboard_socket);
gtk_socket_add_id (GTK_SOCKET (window->priv->keyboard_socket), id);
+
+ if (!window->priv->prefs->keyboard_displayed) {
+ gtk_widget_hide (window->priv->keyboard_socket);
+ }
}
/* adapted from gspawn.c */
@@ -1311,6 +1326,9 @@ create_lock_socket (GSWindow *window,
if (window->priv->prefs->keyboard_enabled) {
embed_keyboard (window);
}
+
+ g_signal_connect (window->priv->prefs, "changed",
+ G_CALLBACK (prefs_changed), window);
}
static void
diff --git a/src/xfce4-screensaver-dialog.ui b/src/xfce4-screensaver-dialog.ui
index 53f5caa..6d3bcc7 100644
--- a/src/xfce4-screensaver-dialog.ui
+++ b/src/xfce4-screensaver-dialog.ui
@@ -2,81 +2,12 @@
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
- <object class="GtkOverlay" id="lock-overlay">
- <property name="name">screen</property>
+ <object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <child>
- <object class="GtkImage" id="lock-image">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-missing-image</property>
- </object>
- <packing>
- <property name="index">-1</property>
- </packing>
- </child>
- <style>
- <class name="lightdm-gtk-greeter"/>
- </style>
- </object>
- <object class="GtkBox" id="lock-panel">
- <property name="name">panel_window</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="auth-hostname-label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_left">6</property>
- <property name="label" translatable="yes"><b>%h</b></property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child type="center">
- <object class="GtkLabel" id="auth-date-time-label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_right">6</property>
- <property name="label" translatable="yes"><b>%s</b></property>
- <property name="use_markup">True</property>
- <property name="xalign">0.5</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_right">6</property>
- <property name="margin_top">6</property>
- <property name="margin_bottom">6</property>
- <property name="pixel_size">16</property>
- <property name="icon_name">system-lock-screen-symbolic</property>
- <property name="icon_size">1</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">3</property>
- </packing>
- </child>
- <style>
- <class name="background"/>
- <class name="panel"/>
- <class name="xfce4-panel"/>
- </style>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">input-keyboard-symbolic</property>
+ <property name="use_fallback">True</property>
</object>
<object class="GtkEventBox" id="login_window">
<property name="name">login_window</property>
@@ -175,6 +106,22 @@
</packing>
</child>
<child>
+ <object class="GtkToggleButton" id="keyboard-toggle">
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="no_show_all">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="image">image1</property>
+ <property name="relief">none</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkBox" id="auth-prompt-kbd-layout-indicator">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -187,7 +134,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
@@ -400,4 +347,80 @@
<class name="keycap"/>
</style>
</object>
+ <object class="GtkOverlay" id="lock-overlay">
+ <property name="name">screen</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImage" id="lock-image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-missing-image</property>
+ </object>
+ <packing>
+ <property name="index">-1</property>
+ </packing>
+ </child>
+ <style>
+ <class name="lightdm-gtk-greeter"/>
+ </style>
+ </object>
+ <object class="GtkBox" id="lock-panel">
+ <property name="name">panel_window</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="auth-hostname-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">6</property>
+ <property name="label" translatable="yes"><b>%h</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child type="center">
+ <object class="GtkLabel" id="auth-date-time-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_right">6</property>
+ <property name="label" translatable="yes"><b>%s</b></property>
+ <property name="use_markup">True</property>
+ <property name="xalign">0.5</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_right">6</property>
+ <property name="margin_top">6</property>
+ <property name="margin_bottom">6</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">system-lock-screen-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <style>
+ <class name="background"/>
+ <class name="panel"/>
+ <class name="xfce4-panel"/>
+ </style>
+ </object>
</interface>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list