summaryrefslogtreecommitdiff
path: root/community/lightdm-gtk3-greeter/onscreen-keyboard.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/lightdm-gtk3-greeter/onscreen-keyboard.patch')
-rwxr-xr-xcommunity/lightdm-gtk3-greeter/onscreen-keyboard.patch306
1 files changed, 306 insertions, 0 deletions
diff --git a/community/lightdm-gtk3-greeter/onscreen-keyboard.patch b/community/lightdm-gtk3-greeter/onscreen-keyboard.patch
new file mode 100755
index 000000000..6db01d3f6
--- /dev/null
+++ b/community/lightdm-gtk3-greeter/onscreen-keyboard.patch
@@ -0,0 +1,306 @@
+diff -aur lightdm-gtk-greeter-1.5.1.src/data/lightdm-gtk-greeter.conf lightdm-gtk-greeter-1.5.1.patch/data/lightdm-gtk-greeter.conf
+--- lightdm-gtk-greeter-1.5.1.src/data/lightdm-gtk-greeter.conf 2013-02-11 00:19:17.000000000 +1100
++++ lightdm-gtk-greeter-1.5.1.patch/data/lightdm-gtk-greeter.conf 2013-02-20 19:17:39.382817993 +1100
+@@ -9,6 +9,7 @@
+ # xft-rgba = Type of subpixel antialiasing (none, rgb, bgr, vrgb or vbgr)
+ # show-language-selector (true or false)
+ # show-indicators = semi-colon ";" separated list of allowed indicator modules (e.g. indicator-sound.so)
++# keyboard = Command to launch on screen keyboard. Ensure it does not steal focus.
+ #
+ [greeter]
+ #background=
+@@ -21,3 +22,4 @@
+ #xft-rgba=
+ #show-language-selector=
+ #show-indicators=
++#keyboard=
+diff -aur lightdm-gtk-greeter-1.5.1.src/src/lightdm-gtk-greeter.c lightdm-gtk-greeter-1.5.1.patch/src/lightdm-gtk-greeter.c
+--- lightdm-gtk-greeter-1.5.1.src/src/lightdm-gtk-greeter.c 2013-02-11 00:48:21.000000000 +1100
++++ lightdm-gtk-greeter-1.5.1.patch/src/lightdm-gtk-greeter.c 2013-02-20 20:09:30.219150045 +1100
+@@ -23,6 +23,7 @@
+ #include <cairo-xlib.h>
+ #include <gdk-pixbuf/gdk-pixbuf.h>
+ #include <gdk/gdkx.h>
++#include <glib.h>
+
+ #ifdef HAVE_LIBINDICATOR
+ #include <libindicator/indicator-object.h>
+@@ -44,6 +45,7 @@
+ static GtkComboBox *user_combo;
+ static GtkComboBox *session_combo;
+ static GtkComboBox *language_combo;
++static GtkCheckMenuItem *keyboard_menuitem;
+ static gchar *default_font_name, *default_theme_name, *default_icon_theme_name;
+ static GdkPixbuf *default_background_pixbuf = NULL;
+ #if GTK_CHECK_VERSION (3, 0, 0)
+@@ -52,6 +54,10 @@
+ static GdkColor *default_background_color = NULL;
+ #endif
+ static gboolean cancelling = FALSE, prompted = FALSE;
++static gchar **a11y_keyboard_command;
++static int a11y_kbd_pid = 0;
++static GPid *a11y_keyboard_pid = &a11y_kbd_pid;
++static GError *a11y_keyboard_error;
+
+
+ #ifdef HAVE_LIBINDICATOR
+@@ -649,7 +655,10 @@
+ if (lightdm_greeter_get_is_authenticated (greeter))
+ {
+ if (prompted)
+- start_session ();
++ {
++ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (keyboard_menuitem), FALSE);
++ start_session ();
++ }
+ }
+ else
+ {
+@@ -864,6 +873,32 @@
+ }
+ }
+
++void a11y_keyboard_cb (GtkWidget *widget);
++G_MODULE_EXPORT
++void
++a11y_keyboard_cb (GtkWidget *widget)
++{
++ if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)))
++ {
++ if (!g_spawn_async(NULL, a11y_keyboard_command, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, a11y_keyboard_pid, &a11y_keyboard_error))
++ {
++ g_debug ("a11y keyboard command error : '%s'", a11y_keyboard_error->message);
++ a11y_kbd_pid = 0;
++ g_clear_error(&a11y_keyboard_error);
++ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), FALSE);
++ }
++ }
++ else
++ {
++ if (a11y_kbd_pid != 0)
++ {
++ kill (a11y_kbd_pid, SIGTERM);
++ g_spawn_close_pid(*a11y_keyboard_pid);
++ a11y_kbd_pid = 0;
++ }
++ }
++}
++
+ static void
+ sigterm_cb (int signum)
+ {
+@@ -1190,6 +1225,13 @@
+ g_object_set (gtk_settings_get_default (), "gtk-xft-rgba", value, NULL);
+ g_free (value);
+
++ /* Get a11y on screen keyboard command*/
++ gint argp;
++ value = g_key_file_get_value (config, "greeter", "keyboard", NULL);
++ g_debug ("a11y keyboard command is '%s'", value);
++ g_shell_parse_argv (value, &argp, &a11y_keyboard_command, NULL);
++ g_free (value);
++
+ builder = gtk_builder_new ();
+ if (!gtk_builder_add_from_string (builder, lightdm_gtk_greeter_ui,
+ lightdm_gtk_greeter_ui_length, &error))
+@@ -1212,6 +1254,7 @@
+ language_combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, "language_combobox"));
+ panel_window = GTK_WINDOW (gtk_builder_get_object (builder, "panel_window"));
+ user_avatar = GTK_IMAGE (gtk_builder_get_object (builder, "user_avatar"));
++ keyboard_menuitem = GTK_CHECK_MENU_ITEM (gtk_builder_get_object (builder, "keyboard_menuitem"));
+
+ gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "hostname_label")), lightdm_get_hostname ());
+
+@@ -1264,7 +1307,7 @@
+ #endif
+ gtk_widget_show (hbox);
+ gtk_container_add (GTK_CONTAINER (menuitem), hbox);
+- image = gtk_image_new_from_icon_name ("system-shutdown", GTK_ICON_SIZE_MENU);
++ image = gtk_image_new_from_icon_name ("system-shutdown", GTK_ICON_SIZE_BUTTON);
+ gtk_widget_show (image);
+ gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0);
+
+@@ -1276,7 +1319,7 @@
+ #endif
+ gtk_widget_show (hbox);
+ gtk_container_add (GTK_CONTAINER (menuitem), hbox);
+- image = gtk_image_new_from_icon_name ("preferences-desktop-accessibility", GTK_ICON_SIZE_MENU);
++ image = gtk_image_new_from_icon_name ("preferences-desktop-accessibility", GTK_ICON_SIZE_BUTTON);
+ gtk_widget_show (image);
+ gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0);
+
+@@ -1377,6 +1420,11 @@
+ gtk_widget_show (GTK_WIDGET (login_window));
+ gdk_window_focus (gtk_widget_get_window (GTK_WIDGET (login_window)), GDK_CURRENT_TIME);
+
++ if (a11y_keyboard_command)
++ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (keyboard_menuitem), TRUE);
++ else
++ gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, "keyboard_menuitem")));
++
+ gtk_main ();
+
+ if (default_background_pixbuf)
+diff -aur lightdm-gtk-greeter-1.5.1.src/src/lightdm-gtk-greeter.glade lightdm-gtk-greeter-1.5.1.patch/src/lightdm-gtk-greeter.glade
+--- lightdm-gtk-greeter-1.5.1.src/src/lightdm-gtk-greeter.glade 2013-02-10 23:48:19.000000000 +1100
++++ lightdm-gtk-greeter-1.5.1.patch/src/lightdm-gtk-greeter.glade 2013-02-20 17:11:01.968469713 +1100
+@@ -215,6 +215,7 @@
+ <object class="GtkWindow" id="panel_window">
+ <property name="name">panel_window</property>
+ <property name="can_focus">False</property>
++ <property name="default_height">40</property>
+ <property name="decorated">False</property>
+ <property name="has_resize_grip">False</property>
+ <child>
+@@ -309,6 +310,16 @@
+ <signal name="toggled" handler="a11y_contrast_cb" swapped="no"/>
+ </object>
+ </child>
++ <child>
++ <object class="GtkCheckMenuItem" id="keyboard_menuitem">
++ <property name="name">keyboard_menuitem</property>
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
++ <property name="label" translatable="yes">On Screen Keyboard</property>
++ <signal name="toggled" handler="a11y_keyboard_cb" swapped="no"/>
++ </object>
++ </child>
+ </object>
+ </child>
+ </object>
+diff -aur lightdm-gtk-greeter-1.5.1.src/src/lightdm-gtk-greeter-ui.h lightdm-gtk-greeter-1.5.1.patch/src/lightdm-gtk-greeter-ui.h
+--- lightdm-gtk-greeter-1.5.1.src/src/lightdm-gtk-greeter-ui.h 2013-02-11 01:46:04.000000000 +1100
++++ lightdm-gtk-greeter-1.5.1.patch/src/lightdm-gtk-greeter-ui.h 2013-02-20 17:52:56.172967000 +1100
+@@ -108,66 +108,73 @@
+ "\">3</property></packing></child></object></child><child type=\"tab\"><"
+ "placeholder/></child></object></child></object><object class=\"GtkWindo"
+ "w\" id=\"panel_window\"><property name=\"name\">panel_window</property>"
+- "<property name=\"can_focus\">False</property><property name=\"decorated"
+- "\">False</property><property name=\"has_resize_grip\">False</property><"
+- "child><object class=\"GtkMenuBar\" id=\"menubar\"><property name=\"name"
+- "\">menubar</property><property name=\"visible\">True</property><propert"
+- "y name=\"can_focus\">False</property><property name=\"pack_direction\">"
+- "rtl</property><child><object class=\"GtkMenuItem\" id=\"power_menuitem\""
+- "><property name=\"name\">power_menuitem</property><property name=\"visi"
+- "ble\">True</property><property name=\"can_focus\">False</property><prop"
+- "erty name=\"use_action_appearance\">False</property><child type=\"subme"
+- "nu\"><object class=\"GtkMenu\" id=\"power_menu\"><property name=\"name\""
+- ">power_menu</property><property name=\"visible\">True</property><proper"
+- "ty name=\"can_focus\">False</property><child><object class=\"GtkMenuIte"
+- "m\" id=\"suspend_menuitem\"><property name=\"name\">suspend_menuitem</p"
+- "roperty><property name=\"visible\">True</property><property name=\"can_"
+- "focus\">False</property><property name=\"use_action_appearance\">False<"
+- "/property><property name=\"label\" translatable=\"yes\">Suspend</proper"
+- "ty><signal name=\"activate\" handler=\"suspend_cb\" swapped=\"no\"/></o"
+- "bject></child><child><object class=\"GtkMenuItem\" id=\"hibernate_menui"
+- "tem\"><property name=\"name\">hibernate_menuitem</property><property na"
+- "me=\"visible\">True</property><property name=\"can_focus\">False</prope"
+- "rty><property name=\"use_action_appearance\">False</property><property "
+- "name=\"label\" translatable=\"yes\">Hibernate</property><signal name=\""
+- "activate\" handler=\"hibernate_cb\" swapped=\"no\"/></object></child><c"
+- "hild><object class=\"GtkMenuItem\" id=\"restart_menuitem\"><property na"
+- "me=\"name\">restart_menuitem</property><property name=\"visible\">True<"
+- "/property><property name=\"can_focus\">False</property><property name=\""
+- "use_action_appearance\">False</property><property name=\"label\" transl"
+- "atable=\"yes\">Restart...</property><signal name=\"activate\" handler=\""
+- "restart_cb\" swapped=\"no\"/></object></child><child><object class=\"Gt"
+- "kMenuItem\" id=\"shutdown_menuitem\"><property name=\"name\">shutdown_m"
+- "enuitem</property><property name=\"visible\">True</property><property n"
+- "ame=\"can_focus\">False</property><property name=\"use_action_appearanc"
+- "e\">False</property><property name=\"label\" translatable=\"yes\">Shutd"
+- "own...</property><signal name=\"activate\" handler=\"shutdown_cb\" swap"
+- "ped=\"no\"/></object></child></object></child></object></child><child><"
+- "object class=\"GtkMenuItem\" id=\"a11y_menuitem\"><property name=\"name"
+- "\">a11y_menuitem</property><property name=\"visible\">True</property><p"
+- "roperty name=\"can_focus\">False</property><property name=\"use_action_"
+- "appearance\">False</property><child type=\"submenu\"><object class=\"Gt"
+- "kMenu\" id=\"a11y_menu\"><property name=\"name\">a11y_menu</property><p"
+- "roperty name=\"visible\">True</property><property name=\"can_focus\">Fa"
+- "lse</property><child><object class=\"GtkCheckMenuItem\" id=\"large_font"
+- "_menuitem\"><property name=\"name\">large_font_menuitem</property><prop"
++ "<property name=\"can_focus\">False</property><property name=\"default_h"
++ "eight\">40</property><property name=\"decorated\">False</property><prop"
++ "erty name=\"has_resize_grip\">False</property><child><object class=\"Gt"
++ "kMenuBar\" id=\"menubar\"><property name=\"name\">menubar</property><pr"
++ "operty name=\"visible\">True</property><property name=\"can_focus\">Fal"
++ "se</property><property name=\"pack_direction\">rtl</property><child><ob"
++ "ject class=\"GtkMenuItem\" id=\"power_menuitem\"><property name=\"name\""
++ ">power_menuitem</property><property name=\"visible\">True</property><pr"
++ "operty name=\"can_focus\">False</property><property name=\"use_action_a"
++ "ppearance\">False</property><child type=\"submenu\"><object class=\"Gtk"
++ "Menu\" id=\"power_menu\"><property name=\"name\">power_menu</property><"
++ "property name=\"visible\">True</property><property name=\"can_focus\">F"
++ "alse</property><child><object class=\"GtkMenuItem\" id=\"suspend_menuit"
++ "em\"><property name=\"name\">suspend_menuitem</property><property name="
++ "\"visible\">True</property><property name=\"can_focus\">False</property"
++ "><property name=\"use_action_appearance\">False</property><property nam"
++ "e=\"label\" translatable=\"yes\">Suspend</property><signal name=\"activ"
++ "ate\" handler=\"suspend_cb\" swapped=\"no\"/></object></child><child><o"
++ "bject class=\"GtkMenuItem\" id=\"hibernate_menuitem\"><property name=\""
++ "name\">hibernate_menuitem</property><property name=\"visible\">True</pr"
++ "operty><property name=\"can_focus\">False</property><property name=\"us"
++ "e_action_appearance\">False</property><property name=\"label\" translat"
++ "able=\"yes\">Hibernate</property><signal name=\"activate\" handler=\"hi"
++ "bernate_cb\" swapped=\"no\"/></object></child><child><object class=\"Gt"
++ "kMenuItem\" id=\"restart_menuitem\"><property name=\"name\">restart_men"
++ "uitem</property><property name=\"visible\">True</property><property nam"
++ "e=\"can_focus\">False</property><property name=\"use_action_appearance\""
++ ">False</property><property name=\"label\" translatable=\"yes\">Restart."
++ "..</property><signal name=\"activate\" handler=\"restart_cb\" swapped=\""
++ "no\"/></object></child><child><object class=\"GtkMenuItem\" id=\"shutdo"
++ "wn_menuitem\"><property name=\"name\">shutdown_menuitem</property><prop"
+ "erty name=\"visible\">True</property><property name=\"can_focus\">False"
+ "</property><property name=\"use_action_appearance\">False</property><pr"
+- "operty name=\"label\" translatable=\"yes\">Large Font</property><signal"
+- " name=\"toggled\" handler=\"a11y_font_cb\" swapped=\"no\"/></object></c"
+- "hild><child><object class=\"GtkCheckMenuItem\" id=\"high_contrast_menui"
+- "tem\"><property name=\"name\">high_contrast_menuitem</property><propert"
+- "y name=\"visible\">True</property><property name=\"can_focus\">False</p"
+- "roperty><property name=\"use_action_appearance\">False</property><prope"
+- "rty name=\"label\" translatable=\"yes\">High Contrast</property><signal"
+- " name=\"toggled\" handler=\"a11y_contrast_cb\" swapped=\"no\"/></object"
+- "></child></object></child></object></child></object></child></object><o"
+- "bject class=\"GtkListStore\" id=\"session_liststore\"><columns><column "
+- "type=\"gchararray\"/><column type=\"gchararray\"/></columns></object><o"
+- "bject class=\"GtkListStore\" id=\"user_liststore\"><columns><column typ"
+- "e=\"gchararray\"/><column type=\"gchararray\"/><column type=\"gint\"/><"
+- "/columns></object></interface>"
++ "operty name=\"label\" translatable=\"yes\">Shutdown...</property><signa"
++ "l name=\"activate\" handler=\"shutdown_cb\" swapped=\"no\"/></object></"
++ "child></object></child></object></child><child><object class=\"GtkMenuI"
++ "tem\" id=\"a11y_menuitem\"><property name=\"name\">a11y_menuitem</prope"
++ "rty><property name=\"visible\">True</property><property name=\"can_focu"
++ "s\">False</property><property name=\"use_action_appearance\">False</pro"
++ "perty><child type=\"submenu\"><object class=\"GtkMenu\" id=\"a11y_menu\""
++ "><property name=\"name\">a11y_menu</property><property name=\"visible\""
++ ">True</property><property name=\"can_focus\">False</property><child><ob"
++ "ject class=\"GtkCheckMenuItem\" id=\"large_font_menuitem\"><property na"
++ "me=\"name\">large_font_menuitem</property><property name=\"visible\">Tr"
++ "ue</property><property name=\"can_focus\">False</property><property nam"
++ "e=\"use_action_appearance\">False</property><property name=\"label\" tr"
++ "anslatable=\"yes\">Large Font</property><signal name=\"toggled\" handle"
++ "r=\"a11y_font_cb\" swapped=\"no\"/></object></child><child><object clas"
++ "s=\"GtkCheckMenuItem\" id=\"high_contrast_menuitem\"><property name=\"n"
++ "ame\">high_contrast_menuitem</property><property name=\"visible\">True<"
++ "/property><property name=\"can_focus\">False</property><property name=\""
++ "use_action_appearance\">False</property><property name=\"label\" transl"
++ "atable=\"yes\">High Contrast</property><signal name=\"toggled\" handler"
++ "=\"a11y_contrast_cb\" swapped=\"no\"/></object></child><child><object c"
++ "lass=\"GtkCheckMenuItem\" id=\"keyboard_menuitem\"><property name=\"nam"
++ "e\">keyboard_menuitem</property><property name=\"visible\">True</proper"
++ "ty><property name=\"can_focus\">False</property><property name=\"use_ac"
++ "tion_appearance\">False</property><property name=\"label\" translatable"
++ "=\"yes\">On Screen Keyboard</property><signal name=\"toggled\" handler="
++ "\"a11y_keyboard_cb\" swapped=\"no\"/></object></child></object></child>"
++ "</object></child></object></child></object><object class=\"GtkListStore"
++ "\" id=\"session_liststore\"><columns><column type=\"gchararray\"/><colu"
++ "mn type=\"gchararray\"/></columns></object><object class=\"GtkListStore"
++ "\" id=\"user_liststore\"><columns><column type=\"gchararray\"/><column "
++ "type=\"gchararray\"/><column type=\"gint\"/></columns></object></interf"
++ "ace>"
+ };
+
+-static const unsigned lightdm_gtk_greeter_ui_length = 10699u;
++static const unsigned lightdm_gtk_greeter_ui_length = 11147u;
+