aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hardinfo2/hardinfo.h2
-rw-r--r--hardinfo2/menu.c2
-rw-r--r--hardinfo2/remote.c3
-rw-r--r--hardinfo2/shell.c18
-rw-r--r--hardinfo2/shell.h1
-rw-r--r--hardinfo2/syncmanager.c8
-rw-r--r--hardinfo2/syncmanager.h1
-rw-r--r--hardinfo2/uidefs.h2
-rw-r--r--hardinfo2/util.c54
-rw-r--r--hardinfo2/xmlrpc-server.c2
10 files changed, 87 insertions, 6 deletions
diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h
index 755d4af4..2314c043 100644
--- a/hardinfo2/hardinfo.h
+++ b/hardinfo2/hardinfo.h
@@ -100,6 +100,7 @@ void open_url(gchar *url);
GSList *modules_get_list(void);
GSList *modules_load_selected(void);
GSList *modules_load_all(void);
+void module_unload_all(void);
ModuleAbout *module_get_about(ShellModule *module);
gchar *seconds_to_string(unsigned int seconds);
@@ -117,6 +118,7 @@ const gchar *module_entry_get_note(ShellModuleEntry *module_entry);
gchar *module_entry_get_field(ShellModuleEntry * module_entry, gchar * field);
gchar *module_entry_get_moreinfo(ShellModuleEntry * module_entry);
+
/* BinReloc stuff */
gboolean binreloc_init(gboolean try_hardcoded);
diff --git a/hardinfo2/menu.c b/hardinfo2/menu.c
index 5a274978..b42225bd 100644
--- a/hardinfo2/menu.c
+++ b/hardinfo2/menu.c
@@ -53,7 +53,7 @@ static GtkActionEntry entries[] = {
G_CALLBACK(cb_sync_manager)},
{"ConnectToAction", GTK_STOCK_CONNECT,
- "_Connect to...", NULL,
+ "_Connect to", NULL,
NULL,
G_CALLBACK(cb_connect_to)},
diff --git a/hardinfo2/remote.c b/hardinfo2/remote.c
index 556299ca..5abf3a91 100644
--- a/hardinfo2/remote.c
+++ b/hardinfo2/remote.c
@@ -98,6 +98,9 @@ static gboolean load_module_list()
return FALSE;
}
+ shell_status_update("Unloading local modules...");
+ module_unload_all();
+
for (; i < modules->n_values; i++) {
GValueArray *entries;
const gchar *module = g_value_get_string(&modules->values[i]);
diff --git a/hardinfo2/shell.c b/hardinfo2/shell.c
index c33be0ef..6a8ef1fd 100644
--- a/hardinfo2/shell.c
+++ b/hardinfo2/shell.c
@@ -249,6 +249,7 @@ void shell_view_set_enabled(gboolean setting)
gtk_widget_set_sensitive(shell->hpaned, setting);
shell_action_set_enabled("ViewMenuAction", setting);
+ shell_action_set_enabled("ConnectToAction", setting);
shell_action_set_enabled("RefreshAction", setting);
shell_action_set_enabled("CopyAction", setting);
shell_action_set_enabled("ReportAction", setting);
@@ -419,6 +420,7 @@ static void view_menu_select_entry(gpointer data, gpointer data2)
static void add_module_to_menu(gchar * name, GdkPixbuf * pixbuf)
{
gchar *about_module = g_strdup_printf("AboutModule%s", name);
+ gint merge_id;
GtkActionEntry entries[] = {
{
@@ -443,22 +445,27 @@ static void add_module_to_menu(gchar * name, GdkPixbuf * pixbuf)
gtk_action_group_add_actions(shell->action_group, entries, 2, NULL);
+ merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager);
gtk_ui_manager_add_ui(shell->ui_manager,
- gtk_ui_manager_new_merge_id(shell->ui_manager),
+ merge_id,
"/menubar/ViewMenu/LastSep",
name, name, GTK_UI_MANAGER_MENU, TRUE);
-
+ shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
+
+ merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager);
gtk_ui_manager_add_ui(shell->ui_manager,
- gtk_ui_manager_new_merge_id(shell->ui_manager),
+ merge_id,
"/menubar/HelpMenu/HelpMenuModules/LastSep",
about_module, about_module, GTK_UI_MANAGER_AUTO,
TRUE);
+ shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
}
static void
add_module_entry_to_view_menu(gchar * module, gchar * name,
GdkPixbuf * pixbuf, GtkTreeIter * iter)
{
+ gint merge_id;
GtkActionEntry entries[] = {
{
name, /* name */
@@ -473,10 +480,12 @@ add_module_entry_to_view_menu(gchar * module, gchar * name,
stock_icon_register_pixbuf(pixbuf, name);
gtk_action_group_add_actions(shell->action_group, entries, 1, iter);
+ merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager);
gtk_ui_manager_add_ui(shell->ui_manager,
- gtk_ui_manager_new_merge_id(shell->ui_manager),
+ merge_id,
g_strdup_printf("/menubar/ViewMenu/%s", module),
name, name, GTK_UI_MANAGER_AUTO, FALSE);
+ shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
}
static void add_modules_to_gui(gpointer data, gpointer user_data)
@@ -545,6 +554,7 @@ void shell_init(GSList * modules)
create_window();
+ shell_action_set_property("ConnectToAction", "is-important", TRUE);
shell_action_set_property("CopyAction", "is-important", TRUE);
shell_action_set_property("RefreshAction", "is-important", TRUE);
shell_action_set_property("ReportAction", "is-important", TRUE);
diff --git a/hardinfo2/shell.h b/hardinfo2/shell.h
index 6fe86009..c8e1e185 100644
--- a/hardinfo2/shell.h
+++ b/hardinfo2/shell.h
@@ -85,6 +85,7 @@ struct _Shell {
GtkActionGroup *action_group;
GtkUIManager *ui_manager;
+ GSList *merge_ids;
ShellViewType view_type;
gboolean normalize_percentage;
diff --git a/hardinfo2/syncmanager.c b/hardinfo2/syncmanager.c
index df2e1e7c..0aa560ca 100644
--- a/hardinfo2/syncmanager.c
+++ b/hardinfo2/syncmanager.c
@@ -113,6 +113,14 @@ void sync_manager_add_entry(SyncEntry * entry)
#endif /* HAS_LIBSOUP */
}
+void sync_manager_clear_entries(void)
+{
+ DEBUG("clearing syncmanager entries");
+
+ g_slist_free(entries);
+ entries = NULL;
+}
+
void sync_manager_show(GtkWidget *parent)
{
#ifndef HAS_LIBSOUP
diff --git a/hardinfo2/syncmanager.h b/hardinfo2/syncmanager.h
index d5385451..ae0ed267 100644
--- a/hardinfo2/syncmanager.h
+++ b/hardinfo2/syncmanager.h
@@ -35,6 +35,7 @@ struct _SyncEntry {
};
void sync_manager_add_entry(SyncEntry *entry);
+void sync_manager_clear_entries(void);
void sync_manager_show(GtkWidget *parent);
gint sync_manager_count_entries(void);
diff --git a/hardinfo2/uidefs.h b/hardinfo2/uidefs.h
index ed1abf92..7da7a263 100644
--- a/hardinfo2/uidefs.h
+++ b/hardinfo2/uidefs.h
@@ -43,6 +43,8 @@ char *uidefs_str = "<ui>" \
" <placeholder name=\"ToolItems\">" \
" <toolitem name=\"Refresh\" action=\"RefreshAction\"/>" \
" <separator/>" \
+" <toolitem name=\"ConnectTo\" action=\"ConnectToAction\" />" \
+" <separator/>" \
" <toolitem name=\"Copy\" action=\"CopyAction\"/>" \
" <toolitem name=\"Report\" action=\"ReportAction\"/>" \
" </placeholder>" \
diff --git a/hardinfo2/util.c b/hardinfo2/util.c
index 7b99f0ea..723077cf 100644
--- a/hardinfo2/util.c
+++ b/hardinfo2/util.c
@@ -45,6 +45,8 @@
#define MiB 1048576
#define GiB 1073741824
+static GSList *modules_list = NULL;
+
gchar *find_program(gchar *program_name)
{
int i;
@@ -577,6 +579,57 @@ gchar *module_call_method_param(gchar * method, gchar * parameter)
return function ? g_strdup(function(parameter)) : NULL;
}
+static gboolean remove_module_methods(gpointer key, gpointer value, gpointer data)
+{
+ return g_str_has_prefix(key, data);
+}
+
+static void module_unload(ShellModule * module)
+{
+ GSList *entry;
+ gchar *name;
+
+ name = g_path_get_basename(g_module_name(module->dll));
+ g_hash_table_foreach_remove(__module_methods, remove_module_methods, name);
+
+ g_module_close(module->dll);
+ g_free(module->name);
+ gdk_pixbuf_unref(module->icon);
+
+ for (entry = module->entries; entry; entry = entry->next) {
+ g_free(entry->data);
+ }
+
+ g_slist_free(module->entries);
+ g_free(module);
+ g_free(name);
+}
+
+void module_unload_all(void)
+{
+ Shell *shell;
+ GSList *module, *merge_id;
+
+ shell = shell_get_main_shell();
+
+ for (module = shell->tree->modules; module; module = module->next) {
+ module_unload((ShellModule *)module->data);
+ }
+
+ for (merge_id = shell->merge_ids; merge_id; merge_id = merge_id->next) {
+ gtk_ui_manager_remove_ui(shell->ui_manager,
+ GPOINTER_TO_INT(merge_id->data));
+ }
+
+ gtk_tree_store_clear(GTK_TREE_STORE(shell->tree->model));
+ sync_manager_clear_entries();
+
+ g_slist_free(shell->tree->modules);
+ g_slist_free(shell->merge_ids);
+ shell->merge_ids = NULL;
+ shell->tree->modules = NULL;
+}
+
static ShellModule *module_load(gchar * filename)
{
ShellModule *module;
@@ -808,7 +861,6 @@ static GSList *modules_check_deps(GSList * modules)
return modules;
}
-static GSList *modules_list = NULL;
GSList *modules_get_list()
{
diff --git a/hardinfo2/xmlrpc-server.c b/hardinfo2/xmlrpc-server.c
index e0643e2a..a85e8a45 100644
--- a/hardinfo2/xmlrpc-server.c
+++ b/hardinfo2/xmlrpc-server.c
@@ -137,6 +137,8 @@ static void method_get_module_list(SoupMessage * msg, GValueArray * params)
for (modules = modules_get_list(); modules; modules = modules->next) {
ShellModule *module = (ShellModule *) modules->data;
+ /* gchar *name = g_path_get_basename(g_module_name(module->dll)); */
+
soup_value_array_append(out, G_TYPE_STRING, module->name);
}