3 * Here we implement the functions which feed the cheetah menuengine
6 * Copyright (C) Heiko Voigt, 2009
10 #include "../common/git-compat-util.h"
11 #include "../common/debug.h"
12 #include "../common/strbuf.h"
13 #include "../common/menuengine.h"
14 #include "../common/cheetahmenu.h"
18 static struct git_data git_data
;
20 BOOL
build_item(struct git_data
*me
, const struct menu_item
*item
,
25 char item_reference_string
[1024];
26 NautilusMenuItem
*one_menu_item
;
27 struct nautilus_menu_data
*nautilus_data
= platform
;
32 item_name
= strdup(item
->string
);
34 shortcut_key
= parse_and_remove_shortcuts(item_name
);
36 debug_git("Adding entry: %s", item_name
);
38 snprintf(item_reference_string
, 1024, "GitExtension::%s", item_name
);
39 item_reference_string
[1023] = '\0';
40 one_menu_item
= nautilus_menu_item_new(item_reference_string
,
43 NULL
/* icon name */);
44 g_signal_connect(one_menu_item
, "activate",
45 G_CALLBACK(invoke_command
), nautilus_data
->provider
);
47 g_object_set_data((GObject
*) one_menu_item
, "git_extension_id",
48 (void *)next_active_item
);
49 g_object_set_data((GObject
*) one_menu_item
,
50 "git_extension_git_data", me
);
52 nautilus_data
->menu_items
= g_list_append(nautilus_data
->menu_items
,
59 BOOL
build_separator(struct git_data
*me
, const struct menu_item
*item
,
62 /* not implemented, yet */
66 void reset_platform(void *platform
)
68 /* nautilus does not need to reset anything */
71 void *start_submenu(struct git_data
*me
, const struct menu_item
*item
,
74 /* not implemented, yet */
78 void end_submenu(void *parent
, void *submenu
)
80 /* not implemented, yet */
83 static inline char *get_local_filename_from_fileinfo(char *filename
, int n
,
84 NautilusFileInfo
*file
)
87 char locator
[MAX_PATH
];
89 name
= nautilus_file_info_get_uri(file
);
91 /* find out if this is a local file */
92 strncpy(locator
, name
, MAX_PATH
);
94 if (!strcmp(locator
, "file://")) {
95 strncpy(filename
, name
+7, n
);
105 GList
*git_extension_get_file_items(NautilusMenuProvider
*provider
,
114 struct nautilus_menu_data nautilus_data
= {
120 git_data
.name
[0] = '\0';
121 for (l
= files
; l
!= NULL
; l
= l
->next
) {
122 get_local_filename_from_fileinfo(git_data
.name
,
123 MAX_PATH
, NAUTILUS_FILE_INFO(l
->data
));
126 /* if we could not get a local file we stop */
127 if (!git_data
.name
[0])
130 debug_git("selected %s\n", git_data
.name
);
132 build_cheetah_menu(&git_data
, &nautilus_data
);
134 return nautilus_data
.menu_items
;
137 GList
*git_extension_get_background_items(NautilusMenuProvider
*provider
,
139 NautilusFileInfo
*current_folder
)
144 struct nautilus_menu_data nautilus_data
= {
149 git_data
.name
[0] = '\0';
150 get_local_filename_from_fileinfo(git_data
.name
,
151 MAX_PATH
, NAUTILUS_FILE_INFO(current_folder
));
153 /* if we could not get a local file we stop */
154 if (!git_data
.name
[0])
157 debug_git("selected %s\n", git_data
.name
);
159 build_cheetah_menu(&git_data
, &nautilus_data
);
161 return nautilus_data
.menu_items
;
164 GList
*git_extension_get_toolbar_items(NautilusMenuProvider
*provider
,
166 NautilusFileInfo
*current_folder
)
168 return git_extension_get_background_items(provider
,
169 window
, current_folder
);
172 void invoke_command(NautilusMenuItem
*item
,
178 id
= (int) g_object_get_data((GObject
*) item
, "git_extension_id");
179 me
= (struct git_data
*) g_object_get_data((GObject
*) item
,
180 "git_extension_git_data");
182 debug_git("invoke_command: %s, id: %i", me
->name
, id
);
184 handle_menu_item(me
, id
);
187 const char **menu_get_platform_argv(menu_commands cmd
, const void *data
,
188 free_func_t
*free_argv
, void **argv_data
)
190 static const char *bash_argv
[] = { "gnome-terminal", NULL
};