1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#![deny(bare_trait_objects)]

extern crate gio_sys as gio_ffi;
extern crate glib_sys as glib_ffi;
extern crate gobject_sys as gobject_ffi;
extern crate gtk_sys as gtk_ffi;
extern crate libc;

use gio_ffi::{GFile, GFileType, GMount};
use glib_ffi::{GList, GType, gboolean, gpointer};
use gobject_ffi::{GClosure, GTypeInterface};
use gtk_ffi::GtkWidget;
use libc::c_char;

#[repr(C)]
pub struct NemoFileInfo {
    g_iface: GTypeInterface,
    is_gone: Option<extern fn(*mut NemoFileInfo) -> gboolean>,
    get_name: Option<extern fn(*mut NemoFileInfo) -> *mut c_char>,
    get_uri: Option<extern fn(*mut NemoFileInfo) -> *mut c_char>,
    get_parent_uri: Option<extern fn(*mut NemoFileInfo) -> *mut c_char>,
    get_uri_scheme: Option<extern fn(*mut NemoFileInfo) -> *mut c_char>,
    get_mime_type: Option<extern fn(*mut NemoFileInfo) -> *mut c_char>,
    is_mime_type: Option<extern fn(*mut NemoFileInfo) -> gboolean>,
    is_directory: Option<extern fn(*mut NemoFileInfo) -> gboolean>,
    add_emblem: Option<extern fn(*mut NemoFileInfo)>,
    get_string_attribute: Option<extern fn(*mut NemoFileInfo) -> *mut c_char>,
    add_string_attribute: Option<extern fn(*mut NemoFileInfo)>,
    invalidate_extension_info: Option<extern fn(*mut NemoFileInfo)>,
    get_activation_uri: Option<extern fn(*mut NemoFileInfo) -> *mut c_char>,
    get_file_type: Option<extern fn(*mut NemoFileInfo) -> GFileType>,
    get_location: Option<extern fn(*mut NemoFileInfo) -> *mut GFile>,
    get_parent_location: Option<extern fn(*mut NemoFileInfo) -> *mut GFile>,
    get_parent_info: Option<extern fn(*mut NemoFileInfo) -> *mut NemoFileInfo>,
    get_mount: Option<extern fn(*mut NemoFileInfo) -> *mut GMount>,
    can_write: Option<extern fn(*mut NemoFileInfo) -> gboolean>,
}

#[repr(C)]
pub struct NemoColumnProviderIface {
    g_iface: GTypeInterface,
    pub get_columns: Option<extern fn(gpointer) -> *mut GList>
}

#[repr(C)]
pub struct NemoInfoProviderIface {
    g_iface: GTypeInterface,
    pub update_file_info: Option<extern fn(*mut NemoInfoProvider, *mut NemoFileInfo, *mut GClosure, *mut *mut NemoOperationHandle) -> NemoOperationResult>,
    pub cancel_update: Option<extern fn(*mut NemoInfoProvider, *mut NemoOperationHandle)>
}

#[repr(C)]
pub struct NemoLocationWidgetProviderIface {
    g_iface: GTypeInterface,
    get_widget: Option<extern fn(*mut NemoLocationWidgetProvider, *const c_char, *mut GtkWidget) -> *mut GtkWidget>
}

#[repr(C)]
pub struct NemoMenuProviderIface {
    g_iface: GTypeInterface,
    pub get_file_items: Option<extern fn(gpointer, *mut GtkWidget, *mut GList) -> *mut GList>,
    pub get_background_items: Option<extern fn(gpointer, *mut GtkWidget, *mut NemoFileInfo) -> *mut GList>,
}

#[repr(C)]
pub struct NemoPropertyPageProviderIface {
    g_iface: GTypeInterface,
    pub get_pages: Option<extern fn(*mut NemoPropertyPageProvider, *mut GList) -> *mut GList>
}

pub enum NemoColumn {}
pub enum NemoInfoProvider {}
pub enum NemoLocationWidgetProvider {}
pub enum NemoMenu {}
pub enum NemoMenuItem {}
pub enum NemoOperationHandle {}
pub enum NemoPropertyPage {}
pub enum NemoPropertyPageProvider {}

#[link(name = "nemo-extension")]
extern {
    pub fn nemo_column_new(name: *const c_char, attribute: *const c_char, label: *const c_char, description: *const c_char) -> *mut NemoColumn;
    pub fn nemo_column_provider_get_type() -> GType;
    pub fn nemo_file_info_add_string_attribute(file: *mut NemoFileInfo, attribute_name: *const c_char, value: *const c_char);
    pub fn nemo_file_info_get_uri(file_info: *mut NemoFileInfo) -> *mut c_char;
    pub fn nemo_file_info_get_uri_scheme(file_info: *mut NemoFileInfo) -> *mut c_char;
    pub fn nemo_file_info_invalidate_extension_info(file: *mut NemoFileInfo);
    pub fn nemo_file_info_list_copy(files: *mut GList) -> *mut GList;
    pub fn nemo_info_provider_get_type() -> GType;
    pub fn nemo_info_provider_update_complete_invoke(update_complete: *mut GClosure,
                                                         provider: *mut NemoInfoProvider,
                                                         handle: *mut NemoOperationHandle,
                                                         result: NemoOperationResult);
    pub fn nemo_menu_append_item(menu: *mut NemoMenu, item: *mut NemoMenuItem);
    pub fn nemo_menu_item_new(name: *const c_char, label: *const c_char, tip: *const c_char, icon: *const c_char) -> *mut NemoMenuItem;
    pub fn nemo_menu_item_set_submenu(item: *mut NemoMenuItem, menu: *mut NemoMenu);
    pub fn nemo_menu_new() -> *mut NemoMenu;
    pub fn nemo_menu_provider_get_type() -> GType;
    pub fn nemo_property_page_new(name: *const c_char, label: *mut GtkWidget, page: *mut GtkWidget) -> *mut NemoPropertyPage;
    pub fn nemo_property_page_provider_get_type() -> GType;
}

#[repr(C)]
pub enum NemoOperationResult {
    NemoOperationComplete,
    NemoOperationFailed,
    NemoOperationInProgress,
}

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
    }
}