imservice: Handle unavailable message
This commit is contained in:
		@ -5,9 +5,6 @@
 | 
				
			|||||||
#include "eekboard/eekboard-context-service.h"
 | 
					#include "eekboard/eekboard-context-service.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void imservice_handle_unavailable(void *data, struct zwp_input_method_v2 *input_method) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const struct zwp_input_method_v2_listener input_method_listener = {
 | 
					static const struct zwp_input_method_v2_listener input_method_listener = {
 | 
				
			||||||
    .activate = imservice_handle_input_method_activate,
 | 
					    .activate = imservice_handle_input_method_activate,
 | 
				
			||||||
    .deactivate = imservice_handle_input_method_deactivate,
 | 
					    .deactivate = imservice_handle_input_method_deactivate,
 | 
				
			||||||
@ -42,3 +39,9 @@ void imservice_try_hide(EekboardContextService *context,
 | 
				
			|||||||
    (void)im;
 | 
					    (void)im;
 | 
				
			||||||
    eekboard_context_service_hide_keyboard (context);
 | 
					    eekboard_context_service_hide_keyboard (context);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Declared explicitly because _destroy is inline,
 | 
				
			||||||
 | 
					/// making it unavailable in Rust
 | 
				
			||||||
 | 
					void imservice_destroy_im(struct zwp_input_method_v2 *im) {
 | 
				
			||||||
 | 
					    zwp_input_method_v2_destroy(im);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -20,5 +20,6 @@ void imservice_handle_surrounding_text(void *data, struct zwp_input_method_v2 *i
 | 
				
			|||||||
void imservice_handle_commit_state(void *data, struct zwp_input_method_v2 *input_method);
 | 
					void imservice_handle_commit_state(void *data, struct zwp_input_method_v2 *input_method);
 | 
				
			||||||
void imservice_handle_content_type(void *data, struct zwp_input_method_v2 *input_method, uint32_t hint, uint32_t purpose);
 | 
					void imservice_handle_content_type(void *data, struct zwp_input_method_v2 *input_method, uint32_t hint, uint32_t purpose);
 | 
				
			||||||
void imservice_handle_text_change_cause(void *data, struct zwp_input_method_v2 *input_method, uint32_t cause);
 | 
					void imservice_handle_text_change_cause(void *data, struct zwp_input_method_v2 *input_method, uint32_t cause);
 | 
				
			||||||
 | 
					void imservice_handle_unavailable(void *data, struct zwp_input_method_v2 *input_method);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,7 @@ pub mod c {
 | 
				
			|||||||
    extern "C" {
 | 
					    extern "C" {
 | 
				
			||||||
        fn imservice_make_visible(imservice: *const UIManager);
 | 
					        fn imservice_make_visible(imservice: *const UIManager);
 | 
				
			||||||
        fn imservice_try_hide(imservice: *const UIManager);
 | 
					        fn imservice_try_hide(imservice: *const UIManager);
 | 
				
			||||||
 | 
					        fn imservice_destroy_im(im: *mut c::InputMethod);
 | 
				
			||||||
        fn eekboard_context_service_set_hint_purpose(imservice: *const UIManager, hint: u32, purpose: u32);
 | 
					        fn eekboard_context_service_set_hint_purpose(imservice: *const UIManager, hint: u32, purpose: u32);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -162,6 +163,22 @@ pub mod c {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    #[no_mangle]
 | 
				
			||||||
 | 
					    pub unsafe extern "C"
 | 
				
			||||||
 | 
					    fn imservice_handle_unavailable(imservice: *mut IMService,
 | 
				
			||||||
 | 
					        im: *mut InputMethod)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        imservice_destroy_im(im);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let imservice = &mut *imservice;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // no need to care about proper double-buffering,
 | 
				
			||||||
 | 
					        // the keyboard is already decommissioned
 | 
				
			||||||
 | 
					        imservice.current.active = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        imservice_try_hide(imservice.ui_manager);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // FIXME: destroy and deallocate
 | 
					    // FIXME: destroy and deallocate
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user