Compare commits
	
		
			3 Commits
		
	
	
		
			pureos/1.1
			...
			osk_skip
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 74af1336e8 | |||
| 88b0afa319 | |||
| 4d487ed872 | 
@ -102,8 +102,12 @@ pub mod c {
 | 
				
			|||||||
        imservice.pending = IMProtocolState {
 | 
					        imservice.pending = IMProtocolState {
 | 
				
			||||||
            content_hint: {
 | 
					            content_hint: {
 | 
				
			||||||
                ContentHint::from_bits(hint).unwrap_or_else(|| {
 | 
					                ContentHint::from_bits(hint).unwrap_or_else(|| {
 | 
				
			||||||
                    eprintln!("Warning: received invalid hint flags");
 | 
					                    let out = ContentHint::from_bits_truncate(hint);
 | 
				
			||||||
                    ContentHint::NONE
 | 
					                    eprintln!(
 | 
				
			||||||
 | 
					                        "Warning: received hint flags with unknown bits set: 0x{:x}",
 | 
				
			||||||
 | 
					                        hint ^ out.bits(),
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					                    out
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            content_purpose: {
 | 
					            content_purpose: {
 | 
				
			||||||
@ -142,19 +146,34 @@ pub mod c {
 | 
				
			|||||||
        let imservice = check_imservice(imservice, im).unwrap();
 | 
					        let imservice = check_imservice(imservice, im).unwrap();
 | 
				
			||||||
        let active_changed = imservice.current.active ^ imservice.pending.active;
 | 
					        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.serial += Wrapping(1u32);
 | 
				
			||||||
        imservice.current = imservice.pending.clone();
 | 
					        imservice.current = imservice.pending.clone();
 | 
				
			||||||
        imservice.pending = IMProtocolState {
 | 
					        imservice.pending = IMProtocolState {
 | 
				
			||||||
            active: imservice.current.active,
 | 
					            active: imservice.current.active,
 | 
				
			||||||
            ..IMProtocolState::default()
 | 
					            ..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_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 {
 | 
					            } else {
 | 
				
			||||||
                eekboard_context_service_hide_keyboard(imservice.ui_manager);
 | 
					                eekboard_context_service_hide_keyboard(imservice.ui_manager);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -219,6 +238,7 @@ bitflags!{
 | 
				
			|||||||
        const SENSITIVE_DATA = 0x80;
 | 
					        const SENSITIVE_DATA = 0x80;
 | 
				
			||||||
        const LATIN = 0x100;
 | 
					        const LATIN = 0x100;
 | 
				
			||||||
        const MULTILINE = 0x200;
 | 
					        const MULTILINE = 0x200;
 | 
				
			||||||
 | 
					        const ON_SCREEN_INPUT_PROVIDED = 0x400;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user