* Electron version: Various, as tested by apps mentioned below
* Operating system: Windows, macOS, Linux


### Expected behavior

<!-- What do you think should happen? -->

Electron should honor OS-level cursor blink settings.

Using Windows and Firefox as an example, here is what should be happening (thanks @jonathansampson for the gif):

<img src="https://cloud.githubusercontent.com/assets/815158/24823693/131bb71c-1bc7-11e7-8dd4-b969b1c86bbe.gif">


### Actual behavior

<!-- What actually happens? -->

The cursor still blinks. The choices made by the user in his/her OS are ignored.

Aside from the OS’s settings not being honored, note that this is an accessibility issue for some ([example 1](https://discussions.apple.com/thread/7689487), [example 2](https://github.com/brave/browser-laptop/issues/8123)), and an irritation or frustration for many others. A google search for `turn off blinking cursor` produces [387,000 results](https://www.google.com/search?q=turn+off+blinking+cursor).

I tried various apps built using Electron ([Tusk](https://champloohq.github.io/tusk/), [Wavebox](https://wavebox.io/), [Wire](https://wire.com/en/), [Boostnote](https://boostnote.io/), [Brave](https://brave.com/), and [Min](https://minbrowser.github.io/min/)). In every app and on any OS, the result was the same: the cursor blinked, though I have the OS settings for cursor blinking turned off.


### How to reproduce

1. Change your respective OS’s setting for cursor blink to off.

    #### On Windows:

     - Set `HKEY_CURRENT_USER\Control Panel\Desktop\CursorBlinkRate` in the registry to `-1`.
     - OR (this will set the above value) navigate to Control Panel -> Keyboard, and under “Cursor blink rate,” move the slider all the way to the left.

    #### On macOS:
    Set values in the terminal approximating the following:
    ```
    defaults write -g NSTextInsertionPointBlinkPeriodOn -float 30000
    defaults write -g NSTextInsertionPointBlinkPeriodOff -float 1
    ```
    This input causes the cursor to be on for 30 seconds, off for just a millisecond, then on again. Though this is not technically “off,” with these values the blink is not noticeable and is as good as being off.

    #### On Linux:
    ##### GNOME
    Enter `gsettings set org.gnome.desktop.interface cursor-blink false` in a terminal.

     ##### Xfce
     - Enter `xfconf-query -c xsettings -p /Net/CursorBlink -s false` in a terminal.
     - OR (changes above value) navigate to the Keyboard settings and on the first tab (Behavior) uncheck “Show blinking” in the Cursor section.

     ##### MATE
     - Enter `gsettings set org.mate.interface cursor-blink false` in a terminal.
     - OR (changes above value) navigate to Preferences -> Keyboard and uncheck "Cursor blinks in text fields."

     ##### KDE (since 5.11)
     Edit the ~/.config/kdeglobals file, adding `CursorBlinkRate=0` to the `[KDE]` section.
<cr>

2. On macOS it may be necessary to then log out and back in. Within the other two OSes, the effect should be immediate.

3. Use _any_ app built with Electron. Place the cursor in any text field. It will continue to blink on steadily, irrespective of what you have just done with the blink rate settings.

Bonus: Thanks, [Charles A. Kiesling, Sr. (1930-2014)](https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US3531796.pdf)!

(17/11/21) EDITED to add: Xfce cursor blink settings
(18/8/30) EDITED to add: MATE and KDE cursor blink settings
shell/browser/api/atom_api_web_contents.cc
} else {
    settings.SetBoolean(printing::kSettingHeaderFooterEnabled, false);
  }
  
  
  settings.SetBoolean(printing::kSettingPrintToPDF, false);
  settings.SetBoolean(printing::kSettingCloudPrintDialog, false);
  settings.SetBoolean(printing::kSettingPrintWithPrivet, false);
  settings.SetBoolean(printing::kSettingShouldPrintSelectionOnly, false);
  settings.SetBoolean(printing::kSettingPrintWithExtension, false);
  settings.SetBoolean(printing::kSettingRasterizePdf, false);
  
  std::vector<mate::Dictionary> page_ranges;
  if (options.Get("pageRanges", &page_ranges)) {
    std::unique_ptr<base::ListValue> page_range_list(new base::ListValue());
    for (size_t i = 0; i < page_ranges.size(); ++i) {
      int from, to;
      if (page_ranges[i].Get("from", &from) && page_ranges[i].Get("to", &to)) {
        std::unique_ptr<base::DictionaryValue> range(
            new base::DictionaryValue());
        range->SetInteger(printing::kSettingPageRangeFrom, from);
        range->SetInteger(printing::kSettingPageRangeTo, to);
        page_range_list->Append(std::move(range));
      } else {
        continue;
      }
    }
    if (page_range_list->GetSize() > 0)
      settings.SetList(printing::kSettingPageRange, std::move(page_range_list));
  }