servo: Merge #7523 - Fix up some unnecessary uses of `unsafe` (from eefriedman:unnecessary-unsafe); r=SimonSapin

Source-Repo: https://github.com/servo/servo
Source-Revision: be9a9ffda10fa2c50b13f79dabd49255f29f12f6
This commit is contained in:
Eli Friedman 2015-09-09 00:05:17 -06:00
Родитель 22eaaf37cf
Коммит 4875f833cb
8 изменённых файлов: 208 добавлений и 226 удалений

Просмотреть файл

@ -6,9 +6,8 @@ use euclid::{Point2D, Rect, Size2D};
use smallvec::SmallVec; use smallvec::SmallVec;
use std::borrow::ToOwned; use std::borrow::ToOwned;
use std::cell::RefCell; use std::cell::RefCell;
use std::mem;
use std::rc::Rc; use std::rc::Rc;
use std::slice; use std::str;
use std::sync::Arc; use std::sync::Arc;
use style::computed_values::{font_stretch, font_variant, font_weight}; use style::computed_values::{font_stretch, font_variant, font_weight};
use style::properties::style_structs::Font as FontStyle; use style::properties::style_structs::Font as FontStyle;
@ -56,12 +55,11 @@ pub trait FontTableTagConversions {
impl FontTableTagConversions for FontTableTag { impl FontTableTagConversions for FontTableTag {
fn tag_to_str(&self) -> String { fn tag_to_str(&self) -> String {
unsafe { let bytes = [(self >> 24) as u8,
let pointer = mem::transmute::<&u32, *const u8>(self); (self >> 16) as u8,
let mut bytes = slice::from_raw_parts(pointer, 4).to_vec(); (self >> 8) as u8,
bytes.reverse(); (self >> 0) as u8];
String::from_utf8_unchecked(bytes) str::from_utf8(&bytes).unwrap().to_owned()
}
} }
} }

Просмотреть файл

@ -81,15 +81,11 @@ pub enum Command {
Exit(Sender<()>), Exit(Sender<()>),
} }
unsafe impl Send for Command {}
/// Reply messages sent from the font cache task to the FontContext caller. /// Reply messages sent from the font cache task to the FontContext caller.
pub enum Reply { pub enum Reply {
GetFontTemplateReply(Option<Arc<FontTemplateData>>), GetFontTemplateReply(Option<Arc<FontTemplateData>>),
} }
unsafe impl Send for Reply {}
/// The font cache task itself. It maintains a list of reference counted /// The font cache task itself. It maintains a list of reference counted
/// font templates that are currently in use. /// font templates that are currently in use.
struct FontCache { struct FontCache {

Просмотреть файл

@ -23,13 +23,12 @@ use selectors::parser::PseudoElement;
use selectors::{Element}; use selectors::{Element};
use std::borrow::ToOwned; use std::borrow::ToOwned;
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
use std::mem;
use std::slice::Iter; use std::slice::Iter;
use std::sync::Arc; use std::sync::Arc;
use std::sync::mpsc::Sender; use std::sync::mpsc::Sender;
use string_cache::{Atom, Namespace}; use string_cache::{Atom, Namespace};
use style::node::TElementAttributes; use style::node::TElementAttributes;
use style::properties::{ComputedValues, cascade}; use style::properties::{ComputedValues, cascade, PropertyDeclaration};
use style::selector_matching::{Stylist, DeclarationBlock}; use style::selector_matching::{Stylist, DeclarationBlock};
use util::arc_ptr_eq; use util::arc_ptr_eq;
use util::cache::{LRUCache, SimpleHashCache}; use util::cache::{LRUCache, SimpleHashCache};
@ -128,9 +127,9 @@ impl<'a> PartialEq<ApplicableDeclarationsCacheEntry> for ApplicableDeclarationsC
impl<'a> Hash for ApplicableDeclarationsCacheQuery<'a> { impl<'a> Hash for ApplicableDeclarationsCacheQuery<'a> {
fn hash<H: Hasher>(&self, state: &mut H) { fn hash<H: Hasher>(&self, state: &mut H) {
for declaration in self.declarations { for declaration in self.declarations {
let ptr: usize = unsafe { // Each declaration contians an Arc, which is a stable
mem::transmute_copy(declaration) // pointer; we use that for hashing and equality.
}; let ptr = &*declaration.declarations as *const Vec<PropertyDeclaration>;
ptr.hash(state); ptr.hash(state);
} }
} }

Просмотреть файл

@ -105,7 +105,7 @@ fn read_block<R: Read>(reader: &mut R) -> Result<ReadResult, ()> {
match reader.read(&mut buf) { match reader.read(&mut buf) {
Ok(len) if len > 0 => { Ok(len) if len > 0 => {
unsafe { buf.set_len(len); } buf.truncate(len);
Ok(ReadResult::Payload(buf)) Ok(ReadResult::Payload(buf))
} }
Ok(_) => Ok(ReadResult::EOF), Ok(_) => Ok(ReadResult::EOF),

Просмотреть файл

@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#![allow(unsafe_code, unrooted_must_root)] #![allow(unrooted_must_root)]
use document_loader::DocumentLoader; use document_loader::DocumentLoader;
use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods;

Просмотреть файл

@ -4,7 +4,6 @@
//! A persistent, thread-safe singly-linked list. //! A persistent, thread-safe singly-linked list.
use std::mem;
use std::sync::Arc; use std::sync::Arc;
pub struct PersistentList<T> { pub struct PersistentList<T> {
@ -81,15 +80,7 @@ impl<'a, T> Iterator for PersistentListIterator<'a, T> where T: Send + Sync + 's
fn next(&mut self) -> Option<&'a T> { fn next(&mut self) -> Option<&'a T> {
let entry = match self.entry { let entry = match self.entry {
None => return None, None => return None,
Some(entry) => { Some(entry) => entry,
// This `transmute` is necessary to ensure that the lifetimes of the next entry and
// this entry match up; the compiler doesn't know this, but we do because of the
// reference counting behavior of `Arc`.
unsafe {
mem::transmute::<&'a PersistentListEntry<T>,
&'static PersistentListEntry<T>>(entry)
}
}
}; };
let value = &entry.value; let value = &entry.value;
self.entry = match entry.next { self.entry = match entry.next {

Просмотреть файл

@ -6,7 +6,7 @@ use std::cell::RefCell;
use std::rc::Rc; use std::rc::Rc;
use std::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT, Ordering}; use std::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT, Ordering};
static mut next_tid: AtomicUsize = ATOMIC_USIZE_INIT; static NEXT_TID: AtomicUsize = ATOMIC_USIZE_INIT;
thread_local!(static TASK_LOCAL_TID: Rc<RefCell<Option<usize>>> = Rc::new(RefCell::new(None))); thread_local!(static TASK_LOCAL_TID: Rc<RefCell<Option<usize>>> = Rc::new(RefCell::new(None)));
@ -15,7 +15,7 @@ pub fn tid() -> usize {
TASK_LOCAL_TID.with(|ref k| { TASK_LOCAL_TID.with(|ref k| {
let ret = let ret =
match *k.borrow() { match *k.borrow() {
None => unsafe { next_tid.fetch_add(1, Ordering::SeqCst) }, None => NEXT_TID.fetch_add(1, Ordering::SeqCst),
Some(x) => x, Some(x) => x,
}; };

Просмотреть файл

@ -17,8 +17,6 @@ use libc::{c_double, c_int};
use msg::constellation_msg::{self, KeyModifiers, KeyState}; use msg::constellation_msg::{self, KeyModifiers, KeyState};
use script_traits::MouseButton; use script_traits::MouseButton;
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
use std::intrinsics;
use std::mem::transmute;
pub struct ServoCefBrowserHost { pub struct ServoCefBrowserHost {
/// A reference to the browser. /// A reference to the browser.
@ -31,203 +29,203 @@ pub struct ServoCefBrowserHost {
// From blink ui/events/keycodes/keyboard_codes_posix.h. // From blink ui/events/keycodes/keyboard_codes_posix.h.
#[allow(dead_code)] #[allow(dead_code)]
enum KeyboardCode { #[allow(non_snake_case)]
VKEY_BACK = 0x08, mod KeyboardCode {
VKEY_TAB = 0x09, pub const VKEY_BACK : u8 = 0x08;
VKEY_BACKTAB = 0x0A, pub const VKEY_TAB : u8 = 0x09;
VKEY_CLEAR = 0x0C, pub const VKEY_BACKTAB : u8 = 0x0A;
VKEY_RETURN = 0x0D, pub const VKEY_CLEAR : u8 = 0x0C;
VKEY_SHIFT = 0x10, pub const VKEY_RETURN : u8 = 0x0D;
VKEY_CONTROL = 0x11, pub const VKEY_SHIFT : u8 = 0x10;
VKEY_MENU = 0x12, pub const VKEY_CONTROL : u8 = 0x11;
VKEY_PAUSE = 0x13, pub const VKEY_MENU : u8 = 0x12;
VKEY_CAPITAL = 0x14, pub const VKEY_PAUSE : u8 = 0x13;
VKEY_KANA = 0x15, pub const VKEY_CAPITAL : u8 = 0x14;
//VKEY_HANGUL = 0x15, pub const VKEY_KANA : u8 = 0x15;
VKEY_JUNJA = 0x17, //VKEY_HANGUL = 0x15,
VKEY_FINAL = 0x18, pub const VKEY_JUNJA : u8 = 0x17;
VKEY_HANJA = 0x19, pub const VKEY_FINAL : u8 = 0x18;
//VKEY_KANJI = 0x19, pub const VKEY_HANJA : u8 = 0x19;
VKEY_ESCAPE = 0x1B, //VKEY_KANJI = 0x19,
VKEY_CONVERT = 0x1C, pub const VKEY_ESCAPE : u8 = 0x1B;
VKEY_NONCONVERT = 0x1D, pub const VKEY_CONVERT : u8 = 0x1C;
VKEY_ACCEPT = 0x1E, pub const VKEY_NONCONVERT : u8 = 0x1D;
VKEY_MODECHANGE = 0x1F, pub const VKEY_ACCEPT : u8 = 0x1E;
VKEY_SPACE = 0x20, pub const VKEY_MODECHANGE : u8 = 0x1F;
VKEY_PRIOR = 0x21, pub const VKEY_SPACE : u8 = 0x20;
VKEY_NEXT = 0x22, pub const VKEY_PRIOR : u8 = 0x21;
VKEY_END = 0x23, pub const VKEY_NEXT : u8 = 0x22;
VKEY_HOME = 0x24, pub const VKEY_END : u8 = 0x23;
VKEY_LEFT = 0x25, pub const VKEY_HOME : u8 = 0x24;
VKEY_UP = 0x26, pub const VKEY_LEFT : u8 = 0x25;
VKEY_RIGHT = 0x27, pub const VKEY_UP : u8 = 0x26;
VKEY_DOWN = 0x28, pub const VKEY_RIGHT : u8 = 0x27;
VKEY_SELECT = 0x29, pub const VKEY_DOWN : u8 = 0x28;
VKEY_PRINT = 0x2A, pub const VKEY_SELECT : u8 = 0x29;
VKEY_EXECUTE = 0x2B, pub const VKEY_PRINT : u8 = 0x2A;
VKEY_SNAPSHOT = 0x2C, pub const VKEY_EXECUTE : u8 = 0x2B;
VKEY_INSERT = 0x2D, pub const VKEY_SNAPSHOT : u8 = 0x2C;
VKEY_DELETE = 0x2E, pub const VKEY_INSERT : u8 = 0x2D;
VKEY_HELP = 0x2F, pub const VKEY_DELETE : u8 = 0x2E;
VKEY_0 = 0x30, pub const VKEY_HELP : u8 = 0x2F;
VKEY_1 = 0x31, pub const VKEY_0 : u8 = 0x30;
VKEY_2 = 0x32, pub const VKEY_1 : u8 = 0x31;
VKEY_3 = 0x33, pub const VKEY_2 : u8 = 0x32;
VKEY_4 = 0x34, pub const VKEY_3 : u8 = 0x33;
VKEY_5 = 0x35, pub const VKEY_4 : u8 = 0x34;
VKEY_6 = 0x36, pub const VKEY_5 : u8 = 0x35;
VKEY_7 = 0x37, pub const VKEY_6 : u8 = 0x36;
VKEY_8 = 0x38, pub const VKEY_7 : u8 = 0x37;
VKEY_9 = 0x39, pub const VKEY_8 : u8 = 0x38;
VKEY_A = 0x41, pub const VKEY_9 : u8 = 0x39;
VKEY_B = 0x42, pub const VKEY_A : u8 = 0x41;
VKEY_C = 0x43, pub const VKEY_B : u8 = 0x42;
VKEY_D = 0x44, pub const VKEY_C : u8 = 0x43;
VKEY_E = 0x45, pub const VKEY_D : u8 = 0x44;
VKEY_F = 0x46, pub const VKEY_E : u8 = 0x45;
VKEY_G = 0x47, pub const VKEY_F : u8 = 0x46;
VKEY_H = 0x48, pub const VKEY_G : u8 = 0x47;
VKEY_I = 0x49, pub const VKEY_H : u8 = 0x48;
VKEY_J = 0x4A, pub const VKEY_I : u8 = 0x49;
VKEY_K = 0x4B, pub const VKEY_J : u8 = 0x4A;
VKEY_L = 0x4C, pub const VKEY_K : u8 = 0x4B;
VKEY_M = 0x4D, pub const VKEY_L : u8 = 0x4C;
VKEY_N = 0x4E, pub const VKEY_M : u8 = 0x4D;
VKEY_O = 0x4F, pub const VKEY_N : u8 = 0x4E;
VKEY_P = 0x50, pub const VKEY_O : u8 = 0x4F;
VKEY_Q = 0x51, pub const VKEY_P : u8 = 0x50;
VKEY_R = 0x52, pub const VKEY_Q : u8 = 0x51;
VKEY_S = 0x53, pub const VKEY_R : u8 = 0x52;
VKEY_T = 0x54, pub const VKEY_S : u8 = 0x53;
VKEY_U = 0x55, pub const VKEY_T : u8 = 0x54;
VKEY_V = 0x56, pub const VKEY_U : u8 = 0x55;
VKEY_W = 0x57, pub const VKEY_V : u8 = 0x56;
VKEY_X = 0x58, pub const VKEY_W : u8 = 0x57;
VKEY_Y = 0x59, pub const VKEY_X : u8 = 0x58;
VKEY_Z = 0x5A, pub const VKEY_Y : u8 = 0x59;
VKEY_LWIN = 0x5B, pub const VKEY_Z : u8 = 0x5A;
VKEY_RWIN = 0x5C, pub const VKEY_LWIN : u8 = 0x5B;
VKEY_APPS = 0x5D, pub const VKEY_RWIN : u8 = 0x5C;
VKEY_SLEEP = 0x5F, pub const VKEY_APPS : u8 = 0x5D;
VKEY_NUMPAD0 = 0x60, pub const VKEY_SLEEP : u8 = 0x5F;
VKEY_NUMPAD1 = 0x61, pub const VKEY_NUMPAD0 : u8 = 0x60;
VKEY_NUMPAD2 = 0x62, pub const VKEY_NUMPAD1 : u8 = 0x61;
VKEY_NUMPAD3 = 0x63, pub const VKEY_NUMPAD2 : u8 = 0x62;
VKEY_NUMPAD4 = 0x64, pub const VKEY_NUMPAD3 : u8 = 0x63;
VKEY_NUMPAD5 = 0x65, pub const VKEY_NUMPAD4 : u8 = 0x64;
VKEY_NUMPAD6 = 0x66, pub const VKEY_NUMPAD5 : u8 = 0x65;
VKEY_NUMPAD7 = 0x67, pub const VKEY_NUMPAD6 : u8 = 0x66;
VKEY_NUMPAD8 = 0x68, pub const VKEY_NUMPAD7 : u8 = 0x67;
VKEY_NUMPAD9 = 0x69, pub const VKEY_NUMPAD8 : u8 = 0x68;
VKEY_MULTIPLY = 0x6A, pub const VKEY_NUMPAD9 : u8 = 0x69;
VKEY_ADD = 0x6B, pub const VKEY_MULTIPLY : u8 = 0x6A;
VKEY_SEPARATOR = 0x6C, pub const VKEY_ADD : u8 = 0x6B;
VKEY_SUBTRACT = 0x6D, pub const VKEY_SEPARATOR : u8 = 0x6C;
VKEY_DECIMAL = 0x6E, pub const VKEY_SUBTRACT : u8 = 0x6D;
VKEY_DIVIDE = 0x6F, pub const VKEY_DECIMAL : u8 = 0x6E;
VKEY_F1 = 0x70, pub const VKEY_DIVIDE : u8 = 0x6F;
VKEY_F2 = 0x71, pub const VKEY_F1 : u8 = 0x70;
VKEY_F3 = 0x72, pub const VKEY_F2 : u8 = 0x71;
VKEY_F4 = 0x73, pub const VKEY_F3 : u8 = 0x72;
VKEY_F5 = 0x74, pub const VKEY_F4 : u8 = 0x73;
VKEY_F6 = 0x75, pub const VKEY_F5 : u8 = 0x74;
VKEY_F7 = 0x76, pub const VKEY_F6 : u8 = 0x75;
VKEY_F8 = 0x77, pub const VKEY_F7 : u8 = 0x76;
VKEY_F9 = 0x78, pub const VKEY_F8 : u8 = 0x77;
VKEY_F10 = 0x79, pub const VKEY_F9 : u8 = 0x78;
VKEY_F11 = 0x7A, pub const VKEY_F10 : u8 = 0x79;
VKEY_F12 = 0x7B, pub const VKEY_F11 : u8 = 0x7A;
VKEY_F13 = 0x7C, pub const VKEY_F12 : u8 = 0x7B;
VKEY_F14 = 0x7D, pub const VKEY_F13 : u8 = 0x7C;
VKEY_F15 = 0x7E, pub const VKEY_F14 : u8 = 0x7D;
VKEY_F16 = 0x7F, pub const VKEY_F15 : u8 = 0x7E;
VKEY_F17 = 0x80, pub const VKEY_F16 : u8 = 0x7F;
VKEY_F18 = 0x81, pub const VKEY_F17 : u8 = 0x80;
VKEY_F19 = 0x82, pub const VKEY_F18 : u8 = 0x81;
VKEY_F20 = 0x83, pub const VKEY_F19 : u8 = 0x82;
VKEY_F21 = 0x84, pub const VKEY_F20 : u8 = 0x83;
VKEY_F22 = 0x85, pub const VKEY_F21 : u8 = 0x84;
VKEY_F23 = 0x86, pub const VKEY_F22 : u8 = 0x85;
VKEY_F24 = 0x87, pub const VKEY_F23 : u8 = 0x86;
VKEY_NUMLOCK = 0x90, pub const VKEY_F24 : u8 = 0x87;
VKEY_SCROLL = 0x91, pub const VKEY_NUMLOCK : u8 = 0x90;
VKEY_LSHIFT = 0xA0, pub const VKEY_SCROLL : u8 = 0x91;
VKEY_RSHIFT = 0xA1, pub const VKEY_LSHIFT : u8 = 0xA0;
VKEY_LCONTROL = 0xA2, pub const VKEY_RSHIFT : u8 = 0xA1;
VKEY_RCONTROL = 0xA3, pub const VKEY_LCONTROL : u8 = 0xA2;
VKEY_LMENU = 0xA4, pub const VKEY_RCONTROL : u8 = 0xA3;
VKEY_RMENU = 0xA5, pub const VKEY_LMENU : u8 = 0xA4;
VKEY_BROWSER_BACK = 0xA6, pub const VKEY_RMENU : u8 = 0xA5;
VKEY_BROWSER_FORWARD = 0xA7, pub const VKEY_BROWSER_BACK : u8 = 0xA6;
VKEY_BROWSER_REFRESH = 0xA8, pub const VKEY_BROWSER_FORWARD : u8 = 0xA7;
VKEY_BROWSER_STOP = 0xA9, pub const VKEY_BROWSER_REFRESH : u8 = 0xA8;
VKEY_BROWSER_SEARCH = 0xAA, pub const VKEY_BROWSER_STOP : u8 = 0xA9;
VKEY_BROWSER_FAVORITES = 0xAB, pub const VKEY_BROWSER_SEARCH : u8 = 0xAA;
VKEY_BROWSER_HOME = 0xAC, pub const VKEY_BROWSER_FAVORITES : u8 = 0xAB;
VKEY_VOLUME_MUTE = 0xAD, pub const VKEY_BROWSER_HOME : u8 = 0xAC;
VKEY_VOLUME_DOWN = 0xAE, pub const VKEY_VOLUME_MUTE : u8 = 0xAD;
VKEY_VOLUME_UP = 0xAF, pub const VKEY_VOLUME_DOWN : u8 = 0xAE;
VKEY_MEDIA_NEXT_TRACK = 0xB0, pub const VKEY_VOLUME_UP : u8 = 0xAF;
VKEY_MEDIA_PREV_TRACK = 0xB1, pub const VKEY_MEDIA_NEXT_TRACK : u8 = 0xB0;
VKEY_MEDIA_STOP = 0xB2, pub const VKEY_MEDIA_PREV_TRACK : u8 = 0xB1;
VKEY_MEDIA_PLAY_PAUSE = 0xB3, pub const VKEY_MEDIA_STOP : u8 = 0xB2;
VKEY_MEDIA_LAUNCH_MAIL = 0xB4, pub const VKEY_MEDIA_PLAY_PAUSE : u8 = 0xB3;
VKEY_MEDIA_LAUNCH_MEDIA_SELECT = 0xB5, pub const VKEY_MEDIA_LAUNCH_MAIL : u8 = 0xB4;
VKEY_MEDIA_LAUNCH_APP1 = 0xB6, pub const VKEY_MEDIA_LAUNCH_MEDIA_SELECT : u8 = 0xB5;
VKEY_MEDIA_LAUNCH_APP2 = 0xB7, pub const VKEY_MEDIA_LAUNCH_APP1 : u8 = 0xB6;
VKEY_OEM_1 = 0xBA, pub const VKEY_MEDIA_LAUNCH_APP2 : u8 = 0xB7;
VKEY_OEM_PLUS = 0xBB, pub const VKEY_OEM_1 : u8 = 0xBA;
VKEY_OEM_COMMA = 0xBC, pub const VKEY_OEM_PLUS : u8 = 0xBB;
VKEY_OEM_MINUS = 0xBD, pub const VKEY_OEM_COMMA : u8 = 0xBC;
VKEY_OEM_PERIOD = 0xBE, pub const VKEY_OEM_MINUS : u8 = 0xBD;
VKEY_OEM_2 = 0xBF, pub const VKEY_OEM_PERIOD : u8 = 0xBE;
VKEY_OEM_3 = 0xC0, pub const VKEY_OEM_2 : u8 = 0xBF;
VKEY_OEM_4 = 0xDB, pub const VKEY_OEM_3 : u8 = 0xC0;
VKEY_OEM_5 = 0xDC, pub const VKEY_OEM_4 : u8 = 0xDB;
VKEY_OEM_6 = 0xDD, pub const VKEY_OEM_5 : u8 = 0xDC;
VKEY_OEM_7 = 0xDE, pub const VKEY_OEM_6 : u8 = 0xDD;
VKEY_OEM_8 = 0xDF, pub const VKEY_OEM_7 : u8 = 0xDE;
VKEY_OEM_102 = 0xE2, pub const VKEY_OEM_8 : u8 = 0xDF;
VKEY_OEM_103 = 0xE3, // GTV KEYCODE_MEDIA_REWIND pub const VKEY_OEM_102 : u8 = 0xE2;
VKEY_OEM_104 = 0xE4, // GTV KEYCODE_MEDIA_FAST_FORWARD pub const VKEY_OEM_103 : u8 = 0xE3; // GTV KEYCODE_MEDIA_REWIND
VKEY_PROCESSKEY = 0xE5, pub const VKEY_OEM_104 : u8 = 0xE4; // GTV KEYCODE_MEDIA_FAST_FORWARD
VKEY_PACKET = 0xE7, pub const VKEY_PROCESSKEY : u8 = 0xE5;
VKEY_DBE_SBCSCHAR = 0xF3, pub const VKEY_PACKET : u8 = 0xE7;
VKEY_DBE_DBCSCHAR = 0xF4, pub const VKEY_DBE_SBCSCHAR : u8 = 0xF3;
VKEY_ATTN = 0xF6, pub const VKEY_DBE_DBCSCHAR : u8 = 0xF4;
VKEY_CRSEL = 0xF7, pub const VKEY_ATTN : u8 = 0xF6;
VKEY_EXSEL = 0xF8, pub const VKEY_CRSEL : u8 = 0xF7;
VKEY_EREOF = 0xF9, pub const VKEY_EXSEL : u8 = 0xF8;
VKEY_PLAY = 0xFA, pub const VKEY_EREOF : u8 = 0xF9;
VKEY_ZOOM = 0xFB, pub const VKEY_PLAY : u8 = 0xFA;
VKEY_NONAME = 0xFC, pub const VKEY_ZOOM : u8 = 0xFB;
VKEY_PA1 = 0xFD, pub const VKEY_NONAME : u8 = 0xFC;
VKEY_OEM_CLEAR = 0xFE, pub const VKEY_PA1 : u8 = 0xFD;
VKEY_UNKNOWN = 0, pub const VKEY_OEM_CLEAR : u8 = 0xFE;
pub const VKEY_UNKNOWN : u8 = 0x0;
// POSIX specific VKEYs. Note that as of Windows SDK 7.1, 0x97-9F, 0xD8-DA, // POSIX specific VKEYs. Note that as of Windows SDK 7.1, 0x97-9F, 0xD8-DA,
// and 0xE8 are unassigned. // and 0xE8 are unassigned.
VKEY_WLAN = 0x97, pub const VKEY_WLAN : u8 = 0x97;
VKEY_POWER = 0x98, pub const VKEY_POWER : u8 = 0x98;
VKEY_BRIGHTNESS_DOWN = 0xD8, pub const VKEY_BRIGHTNESS_DOWN : u8 = 0xD8;
VKEY_BRIGHTNESS_UP = 0xD9, pub const VKEY_BRIGHTNESS_UP : u8 = 0xD9;
VKEY_KBD_BRIGHTNESS_DOWN = 0xDA, pub const VKEY_KBD_BRIGHTNESS_DOWN : u8 = 0xDA;
VKEY_KBD_BRIGHTNESS_UP = 0xE8, pub const VKEY_KBD_BRIGHTNESS_UP : u8 = 0xE8;
// Windows does not have a specific key code for AltGr. We use the unused 0xE1 // Windows does not have a specific key code for AltGr. We use the unused 0xE1
// (VK_OEM_AX) code to represent AltGr, matching the behaviour of Firefox on // (VK_OEM_AX) code to represent AltGr, matching the behaviour of Firefox on
// Linux. // Linux.
VKEY_ALTGR = 0xE1, pub const VKEY_ALTGR : u8 = 0xE1;
// Windows does not have a specific key code for Compose. We use the unused // Windows does not have a specific key code for Compose. We use the unused
// 0xE6 (VK_ICO_CLEAR) code to represent Compose. // 0xE6 (VK_ICO_CLEAR) code to represent Compose.
VKEY_COMPOSE = 0xE6, pub const VKEY_COMPOSE : u8 = 0xE6;
} }
// this is way too much work to do 100% correctly right now. // this is way too much work to do 100% correctly right now.
// see xkb_keyboard_layout_engine.cc -> XkbKeyboardLayoutEngine::Lookup in chromium for details // see xkb_keyboard_layout_engine.cc -> XkbKeyboardLayoutEngine::Lookup in chromium for details
fn get_key_msg(keycode: c_int, character: u16) -> Option<constellation_msg::Key> { fn get_key_msg(keycode: c_int, character: u16) -> Option<constellation_msg::Key> {
let code: KeyboardCode = unsafe { transmute(keycode as u8) }; match keycode as u8 {
match code {
KeyboardCode::VKEY_BACK => Some(constellation_msg::Key::Backspace), KeyboardCode::VKEY_BACK => Some(constellation_msg::Key::Backspace),
KeyboardCode::VKEY_RIGHT => Some(constellation_msg::Key::Right), KeyboardCode::VKEY_RIGHT => Some(constellation_msg::Key::Right),
KeyboardCode::VKEY_LEFT => Some(constellation_msg::Key::Left), KeyboardCode::VKEY_LEFT => Some(constellation_msg::Key::Left),
@ -417,13 +415,13 @@ full_cef_class_impl! {
KEYEVENT_KEYUP => KeyState::Released, KEYEVENT_KEYUP => KeyState::Released,
}; };
let mut key_modifiers = KeyModifiers::empty(); let mut key_modifiers = KeyModifiers::empty();
if (*event).modifiers & unsafe { intrinsics::discriminant_value(&EVENTFLAG_SHIFT_DOWN) as u32 } != 0 { if (*event).modifiers & EVENTFLAG_SHIFT_DOWN as u32 != 0 {
key_modifiers = key_modifiers | constellation_msg::SHIFT; key_modifiers = key_modifiers | constellation_msg::SHIFT;
} }
if (*event).modifiers & unsafe { intrinsics::discriminant_value(&EVENTFLAG_CONTROL_DOWN) as u32 } != 0 { if (*event).modifiers & EVENTFLAG_CONTROL_DOWN as u32 != 0 {
key_modifiers = key_modifiers | constellation_msg::CONTROL; key_modifiers = key_modifiers | constellation_msg::CONTROL;
} }
if (*event).modifiers & unsafe { intrinsics::discriminant_value(&EVENTFLAG_ALT_DOWN) as u32 } != 0 { if (*event).modifiers & EVENTFLAG_ALT_DOWN as u32 != 0 {
key_modifiers = key_modifiers | constellation_msg::ALT; key_modifiers = key_modifiers | constellation_msg::ALT;
} }
this.downcast().send_window_event(WindowEvent::KeyEvent(key, key_state, key_modifiers)) this.downcast().send_window_event(WindowEvent::KeyEvent(key, key_state, key_modifiers))