#endif
#include <gtk/gtk.h>
-#include <gmodule.h>
#include "callbacks.h"
#include "interface.h"
#include "support.h"
+#include <lttv/lttv.h>
#include <lttv/mainwindow.h>
#include <lttv/menu.h>
#include <lttv/toolbar.h>
static int g_win_count = 0;
+// MD : keep old directory
+static char remember_dir[PATH_LENGTH] = "";
+
+
MainWindow * get_window_data_struct(GtkWidget * widget);
char * get_unload_module(char ** loaded_module_name, int nb_module);
char * get_remove_trace(char ** all_trace_name, int nb_trace);
if(clone){
g_printf("Clone : use the same traceset\n");
- construct_main_window(parent, NULL);
+ construct_main_window(parent);
}else{
g_printf("Empty : traceset is set to NULL\n");
- construct_main_window(NULL, parent->win_creation_data);
+ construct_main_window(NULL);
}
}
char str[PATH_LENGTH], *str1;
MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem);
GtkFileSelection * file_selector = (GtkFileSelection *)gtk_file_selection_new("Select a module");
+ if(remember_dir[0] != '\0')
+ gtk_file_selection_set_filename(file_selector, remember_dir);
gtk_file_selection_hide_fileop_buttons(file_selector);
str[0] = '\0';
case GTK_RESPONSE_ACCEPT:
case GTK_RESPONSE_OK:
dir = gtk_file_selection_get_selections (file_selector);
- sprintf(str,dir[0]);
+ strncpy(str,dir[0],PATH_LENGTH);
+ strncpy(remember_dir,dir[0],PATH_LENGTH);
str1 = strrchr(str,'/');
if(str1)str1++;
else{
str1 = strrchr(str,'\\');
str1++;
}
- if(mw_data->win_creation_data)
- lttv_module_load(str1, mw_data->win_creation_data->argc,mw_data->win_creation_data->argv);
- else
- lttv_module_load(str1, 0,NULL);
+ lttv_module_require(str1, NULL);
g_slist_foreach(g_main_window_list, (gpointer)insert_menu_toolbar_item,
NULL);
g_strfreev(dir);
gpointer user_data)
{
int i;
- char **name, *unload_module_name;
+ GPtrArray *name;
+ char *unload_module_name;
guint nb;
- LttvModule ** modules, *module;
+ LttvLibrary *library;
+ LttvLibraryInfo library_info;
MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem);
- modules = lttv_module_list(&nb);
- name = g_new(char*, nb);
+ name = g_ptr_array_new();
+ nb = lttv_library_number();
+
for(i=0;i<nb;i++){
- module = modules[i];
- name[i] = lttv_module_name(module);
+ library = lttv_library_get(i);
+ lttv_library_info(library, &library_info);
+ if(library_info.load_count > 0) g_ptr_array_add(name, library_info.name);
}
- unload_module_name =get_unload_module(name,nb);
+ unload_module_name =get_unload_module((char **)(name->pdata), name->len);
if(unload_module_name){
for(i=0;i<nb;i++){
- if(strcmp(unload_module_name, name[i]) == 0){
- lttv_module_unload(modules[i]);
+ library = lttv_library_get(i);
+ lttv_library_info(library, &library_info);
+ if(strcmp(unload_module_name, library_info.name) == 0){
+ lttv_library_unload(library);
break;
}
}
}
- g_free(name);
+ g_ptr_array_free(name, TRUE);
}
gint id;
MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem);
+ if(remember_dir[0] != '\0')
+ gtk_dir_selection_set_filename(file_selector, remember_dir);
id = gtk_dialog_run(GTK_DIALOG(file_selector));
switch(id){
case GTK_RESPONSE_ACCEPT:
case GTK_RESPONSE_OK:
dir = gtk_dir_selection_get_dir (file_selector);
- lttv_module_path_add(dir);
+ strncpy(remember_dir,dir,PATH_LENGTH);
+ strncat(remember_dir,"/",PATH_LENGTH);
+ lttv_library_path_add(dir);
case GTK_RESPONSE_REJECT:
case GTK_RESPONSE_CANCEL:
default:
/* Create a main window
*/
-void construct_main_window(MainWindow * parent, WindowCreationData * win_creation_data)
+void construct_main_window(MainWindow * parent)
{
- g_critical("construct_main_window()");
+ g_debug("construct_main_window()");
GtkWidget * new_window; /* New generated main window */
MainWindow * new_m_window;/* New main window structure */
GtkNotebook * notebook;
new_m_window->tab = NULL;
new_m_window->current_tab = NULL;
new_m_window->attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
- if(parent){
- new_m_window->win_creation_data = parent->win_creation_data;
- }else{
- new_m_window->win_creation_data = win_creation_data;
- }
new_m_window->hash_menu_item = g_hash_table_new_full (g_str_hash, g_str_equal,
main_window_destroy_hash_key,