Compare commits
	
		
			3 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 74af1336e8 | |||
| 88b0afa319 | |||
| 4d487ed872 | 
@ -102,8 +102,12 @@ pub mod c {
 | 
			
		||||
        imservice.pending = IMProtocolState {
 | 
			
		||||
            content_hint: {
 | 
			
		||||
                ContentHint::from_bits(hint).unwrap_or_else(|| {
 | 
			
		||||
                    eprintln!("Warning: received invalid hint flags");
 | 
			
		||||
                    ContentHint::NONE
 | 
			
		||||
                    let out = ContentHint::from_bits_truncate(hint);
 | 
			
		||||
                    eprintln!(
 | 
			
		||||
                        "Warning: received hint flags with unknown bits set: 0x{:x}",
 | 
			
		||||
                        hint ^ out.bits(),
 | 
			
		||||
                    );
 | 
			
		||||
                    out
 | 
			
		||||
                })
 | 
			
		||||
            },
 | 
			
		||||
            content_purpose: {
 | 
			
		||||
@ -141,6 +145,16 @@ pub mod c {
 | 
			
		||||
    {
 | 
			
		||||
        let imservice = check_imservice(imservice, im).unwrap();
 | 
			
		||||
        let active_changed = imservice.current.active ^ imservice.pending.active;
 | 
			
		||||
 | 
			
		||||
        fn is_visible(state: &IMProtocolState) -> bool {
 | 
			
		||||
            state.active
 | 
			
		||||
                && !state.content_hint.contains(
 | 
			
		||||
                    ContentHint::ON_SCREEN_INPUT_PROVIDED
 | 
			
		||||
                )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let visible_changed = is_visible(&imservice.current)
 | 
			
		||||
            ^ is_visible(&imservice.pending);
 | 
			
		||||
        
 | 
			
		||||
        imservice.serial += Wrapping(1u32);
 | 
			
		||||
        imservice.current = imservice.pending.clone();
 | 
			
		||||
@ -148,13 +162,18 @@ pub mod c {
 | 
			
		||||
            active: imservice.current.active,
 | 
			
		||||
            ..IMProtocolState::default()
 | 
			
		||||
        };
 | 
			
		||||
        if active_changed {
 | 
			
		||||
            if imservice.current.active {
 | 
			
		||||
 | 
			
		||||
        if active_changed && imservice.current.active {
 | 
			
		||||
            eekboard_context_service_set_hint_purpose(
 | 
			
		||||
                imservice.ui_manager,
 | 
			
		||||
                imservice.current.content_hint.bits(),
 | 
			
		||||
                imservice.current.content_purpose.clone() as u32,
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if visible_changed {
 | 
			
		||||
            if is_visible(&imservice.current) {
 | 
			
		||||
                eekboard_context_service_show_keyboard(imservice.ui_manager);
 | 
			
		||||
                eekboard_context_service_set_hint_purpose(
 | 
			
		||||
                    imservice.ui_manager,
 | 
			
		||||
                    imservice.current.content_hint.bits(),
 | 
			
		||||
                    imservice.current.content_purpose.clone() as u32);
 | 
			
		||||
            } else {
 | 
			
		||||
                eekboard_context_service_hide_keyboard(imservice.ui_manager);
 | 
			
		||||
            }
 | 
			
		||||
@ -219,6 +238,7 @@ bitflags!{
 | 
			
		||||
        const SENSITIVE_DATA = 0x80;
 | 
			
		||||
        const LATIN = 0x100;
 | 
			
		||||
        const MULTILINE = 0x200;
 | 
			
		||||
        const ON_SCREEN_INPUT_PROVIDED = 0x400;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user