From 7398c1fd56287888f51fdc6d4ba6eedfd84edfdb Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Mon, 22 Apr 2019 03:05:43 -0500 Subject: [PATCH] figure out how to add signal callbacks --- Cargo.lock | 2 ++ src/lib.rs | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 331b8bd..67b5427 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,3 +1,5 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. [[package]] name = "aho-corasick" version = "0.6.9" diff --git a/src/lib.rs b/src/lib.rs index 438fa01..ae5333c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,8 +1,38 @@ use c_str_macro::c_str; use shenlong_sys::*; +use std::ffi::CStr; +use std::ptr; +use std::mem::transmute; extern "C" fn shenlong_init(plugin: *mut GeanyPlugin, pdata: gpointer) -> gboolean { println!("shenlong init"); + + unsafe { + plugin_signal_connect( + plugin, + ptr::null_mut(), + c_str!("document-open").to_owned().as_ptr(), + 0, + Some(transmute(shenlong_document_open as usize)), + ptr::null_mut() + ); + plugin_signal_connect( + plugin, + ptr::null_mut(), + c_str!("document-new").to_owned().as_ptr(), + 0, + Some(transmute(shenlong_document_new as usize)), + ptr::null_mut() + ); + plugin_signal_connect( + plugin, + ptr::null_mut(), + c_str!("document-save").to_owned().as_ptr(), + 0, + Some(transmute(shenlong_document_save as usize)), + ptr::null_mut() + ); + } 1 } @@ -10,6 +40,26 @@ extern "C" fn shenlong_cleanup(plugin: *mut GeanyPlugin, pdata: gpointer) { println!("shenlong cleanup"); } +extern "C" fn shenlong_document_open(obj: *mut GObject, doc: *mut GeanyDocument, user_data: gpointer) { + unsafe { + println!("shenlong document open: {:?}", CStr::from_ptr((*doc).real_path).to_str()); + } +} + +extern "C" fn shenlong_document_new(obj: *mut GObject, doc: *mut GeanyDocument, user_data: gpointer) { + println!("shenlong document new"); +} + +extern "C" fn shenlong_document_save(obj: *mut GObject, doc: *mut GeanyDocument, user_data: gpointer) { + unsafe { + println!("shenlong document save: {:?}", CStr::from_ptr((*doc).real_path).to_str()); + } +} + +extern "C" fn shenlong_empty_callback() { + println!("shenlong empty callback"); +} + #[no_mangle] pub extern "C" fn geany_load_module(plugin: *mut GeanyPlugin) { println!("loading shenlong module"); @@ -23,7 +73,53 @@ pub extern "C" fn geany_load_module(plugin: *mut GeanyPlugin) { let mut plugin_funcs = &mut *(*plugin).funcs; plugin_funcs.init = Some(shenlong_init); plugin_funcs.cleanup = Some(shenlong_cleanup); + + /*let mut plugin_callbacks: [PluginCallback; 6] = [ + PluginCallback { + signal_name: c_str!("document-open").to_owned().into_raw(), + callback: Some(transmute(shenlong_document_open as usize)), + //callback: Some(shenlong_empty_callback), + after: 0, + user_data: ptr::null_mut() + }, + PluginCallback { + signal_name: c_str!("document-new").to_owned().into_raw(), + //callback: Some(transmute(shenlong_document_new as usize)), + callback: Some(shenlong_empty_callback), + after: 0, + user_data: ptr::null_mut() + }, + PluginCallback { + signal_name: c_str!("document-close").to_owned().into_raw(), + //callback: Some(transmute(shenlong_document_new as usize)), + callback: Some(shenlong_empty_callback), + after: 0, + user_data: ptr::null_mut() + }, + PluginCallback { + signal_name: c_str!("document-save").to_owned().into_raw(), + //callback: Some(transmute(shenlong_document_save as usize)), + callback: Some(shenlong_empty_callback), + after: 0, + user_data: ptr::null_mut() + }, + PluginCallback { + signal_name: c_str!("document-reload").to_owned().into_raw(), + //callback: Some(transmute(shenlong_document_new as usize)), + callback: Some(shenlong_empty_callback), + after: 0, + user_data: ptr::null_mut() + }, + PluginCallback { + signal_name: ptr::null(), + callback: None, + after: 0, + user_data: ptr::null_mut() + } + ]; + plugin_funcs.callbacks = plugin_callbacks.as_mut_ptr();*/ geany_plugin_register(plugin, 235, GEANY_API_VERSION as i32, GEANY_ABI_VERSION as i32); } + println!("... shenlong module loaded"); }