Advertisement
peter9477

Workaround for issue with auto-focus on Cascades TextField

Aug 24th, 2013
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Note to anyone reading. Use "inputRoute.primaryKeyTarget: true" for a robust and simple alternative to this entire mess. Do NOT use the code below. :-)
  2.  
  3.     keyListeners: [
  4.         KeyListener {
  5.             id: keyListener
  6.  
  7.             property bool filterFocused: filterBar.focused
  8.             property bool filterSynced: false
  9.             property string inferredText: ''
  10.  
  11.             onKeyReleased: {
  12.                 print('key', event.keycap, event.key, '"' + event.unicode + '"', filterBar.focused, filterBar.dynamicText);
  13.                 if (!filterBar.focused) {
  14.                     // print('focusing');
  15.                     filterBar.requestFocus();
  16.                     // filterBar.text = event.unicode;
  17.                 }
  18.  
  19.                 if (event.unicode) {
  20.                     if (!filterSynced) {
  21.                         if (event.unicode == '\b') {
  22.                             inferredText = inferredText.slice(0, -1);
  23.                             print('BS', '"' + inferredText + '"');
  24.                         }
  25.                         else
  26.                             inferredText = inferredText + event.unicode;
  27.  
  28.                         if (inferredText != filterBar.text) {
  29.                             filterBar.text = inferredText;
  30.                             print('out-of-sync, force text', inferredText);
  31.                         } else {
  32.                             filterSynced = true;
  33.                             print('synced!');
  34.                         }
  35.                     } else {
  36.                         inferredText = filterBar.text;
  37.                         print('tracking', inferredText);
  38.                     }
  39.                 }
  40.  
  41.                 syncTimer.start();
  42.             }
  43.  
  44.             onFilterFocusedChanged: {
  45.                 print('filter focus?', filterFocused);
  46.                 if (!filterFocused)
  47.                     filterSynced = false;
  48.                 else
  49.                     syncTimer.start();
  50.             }
  51.  
  52.             attachedObjects: [
  53.                 QTimer {
  54.                     id: syncTimer
  55.                     singleShot: true
  56.                     interval: 50
  57.                     onTimeout: {
  58.                         if (keyListener.inferredText == filterBar.text) {
  59.                             if (!keyListener.filterSynced)
  60.                                 print('sync detected');
  61.                             keyListener.filterSynced = true;
  62.                         }
  63.                     }
  64.                 }
  65.             ]
  66.  
  67.             function onDynamicTextChanged() {
  68.                 if (filterSynced)
  69.                     inferredText = filterBar.text;
  70.             }
  71.  
  72.             onCreationCompleted: {
  73.                 filterBar.dynamicTextChanged.connect(onDynamicTextChanged);
  74.             }
  75.         }
  76.     ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement