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.seanda...@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. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits