Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
security:tls:staging
enlightenment
feature-wizard-keylayout-from-sys.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File feature-wizard-keylayout-from-sys.patch of Package enlightenment
commit 2a7e877f1ab1f45dabeee951ca77ccb90851d73d Author: Simon Lees (SUSE) <sflees@suse.de> Date: Tue Nov 29 14:51:08 2016 +1030 feature-wizard-keylayout-from-sys Index: enlightenment-0.24.0/src/modules/wizard/page_011.c =================================================================== --- enlightenment-0.24.0.orig/src/modules/wizard/page_011.c +++ enlightenment-0.24.0/src/modules/wizard/page_011.c @@ -11,8 +11,9 @@ struct _Layout }; static const char *rules_file = NULL; -static const char *layout = NULL; +static Eina_Stringshare *layout = NULL; static Eina_List *layouts = NULL; +static Eina_Bool set = EINA_FALSE; static void find_rules(void) @@ -112,7 +113,7 @@ implement_layout(void) if (!found) { nl = E_NEW(E_Config_XKB_Layout, 1); - nl->name = eina_stringshare_ref(layout); + nl->name = eina_stringshare_ref(eina_stringshare_add(layout)); nl->variant = eina_stringshare_add("basic"); nl->model = eina_stringshare_add("default"); e_config->xkb.used_layouts = eina_list_prepend(e_config->xkb.used_layouts, nl); @@ -169,6 +170,15 @@ _layout_select(void *data, Evas_Object * E_API int wizard_page_show(E_Wizard_Page *pg EINA_UNUSED) { + /* If we can get the current X11 input method set that rather then asking */ + FILE *output; + output = popen("localectl", "r"); + + Eina_Bool readLayout = EINA_FALSE; + char layout_tmp[32]; + char model_tmp[1024]; + char varient_tmp[1024]; + Evas_Object *of, *ob; Eina_List *l; Layout *lay; @@ -184,6 +194,50 @@ wizard_page_show(E_Wizard_Page *pg EINA_ .version = ELM_GENLIST_ITEM_CLASS_VERSION }; + layout_tmp[0] = 0; + model_tmp[0] = 0; + varient_tmp[0] = 0; + + if (output) + { + char line[1024]; + + while (fscanf(output, "%[^\n]\n", line) == 1) + { + sscanf (line, "X11 Layout: %31s", layout_tmp); + /* These aren't used currently, I want it to work first */ + sscanf (line, "X11 Model: %31s", model_tmp); + sscanf (line, "X11 Variant: %31s", varient_tmp); + } + pclose(output); + } + + /* If we don't find a layout or the layout is not availble */ + if ((layout_tmp[0] != 0) && (strstr(layout_tmp, "n/a") == NULL)) + { + layout = eina_stringshare_add_length(layout_tmp, strlen(layout_tmp)); + + EINA_LIST_FOREACH(layouts, l, lay) + { + if (eina_streq(lay->name, layout_tmp)) + layout = lay->name; + } + /* T4934 - Commenting out the 3 lines below should set the keyboard + layout from the system without showing the screen, this fails + however its possible to pre select what is probably the right layout */ + /* implement_layout(); + set = EINA_TRUE; + return 0; */ + } + + /* Previous behavior always selected US */ + if ((layout_tmp[0] == 0) || (strstr(layout_tmp, "n/a") != NULL)) + { + layout_tmp[0] = 'u'; + layout_tmp[1] = 's'; + layout_tmp[2] = 0; + } + api->wizard_title_set(_("Keyboard")); of = elm_frame_add(e_comp->elm); elm_object_text_set(of, _("Select one")); @@ -198,7 +252,7 @@ wizard_page_show(E_Wizard_Page *pg EINA_ void *it; it = elm_genlist_item_append(ob, &itc, lay, NULL, 0, _layout_select, lay); - if (eina_streq(lay->name, "us")) + if (eina_streq(lay->name, layout_tmp)) sel_it = it; } @@ -219,7 +273,10 @@ E_API int wizard_page_hide(E_Wizard_Page *pg EINA_UNUSED) { /* special - key layout inits its stuff the moment it goes away */ - implement_layout(); + if (!set) + { + implement_layout(); + } return 1; } @@ -227,7 +284,9 @@ E_API int wizard_page_apply(E_Wizard_Page *pg EINA_UNUSED) { // do this again as we want it to apply to the new profile - implement_layout(); - return 1; + if (!set) + { + implement_layout(); + } + return 1; } -
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor