aboutsummaryrefslogtreecommitdiff
path: root/shell/callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/callbacks.c')
-rw-r--r--shell/callbacks.c325
1 files changed, 325 insertions, 0 deletions
diff --git a/shell/callbacks.c b/shell/callbacks.c
new file mode 100644
index 00000000..b9c6252b
--- /dev/null
+++ b/shell/callbacks.c
@@ -0,0 +1,325 @@
+/*
+ * HardInfo - Displays System Information
+ * Copyright (C) 2003-2009 L. A. F. Pereira <l@tia.mat.br>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 2 or later.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+#include "hardinfo.h"
+#include "callbacks.h"
+#include "iconcache.h"
+
+#include "shell.h"
+#include "report.h"
+#include "syncmanager.h"
+#include "uri_handler.h"
+
+#include "config.h"
+
+void cb_sync_manager()
+{
+ Shell *shell = shell_get_main_shell();
+
+ sync_manager_show(shell->window);
+}
+#if GLIB_CHECK_VERSION(2,40,0)
+#else
+//For compatibility with older glib
+gboolean g2_key_file_save_to_file (GKeyFile *key_file,
+ const gchar *filename, GError **error)
+{
+ gchar *contents;
+ gboolean success;
+ gsize length;
+
+ g_return_val_if_fail (key_file != NULL, FALSE);
+ g_return_val_if_fail (filename != NULL, FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ contents = g_key_file_to_data (key_file, &length, NULL);
+ g_assert (contents != NULL);
+
+ success = g_file_set_contents (filename, contents, length, error);
+ g_free (contents);
+
+ return success;
+}
+#endif
+
+void cb_sync_on_startup()
+{
+ gboolean setting = shell_action_get_active("SyncOnStartupAction");
+ GKeyFile *key_file = g_key_file_new();
+
+ g_mkdir(g_get_user_config_dir(),0755);
+ g_mkdir(g_build_filename(g_get_user_config_dir(), "hardinfo", NULL),0755);
+
+ gchar *conf_path = g_build_filename(g_get_user_config_dir(), "hardinfo2",
+ "settings.ini", NULL);
+
+ g_key_file_load_from_file(
+ key_file, conf_path,
+ G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, NULL);
+ g_key_file_set_boolean(key_file, "Sync", "OnStartup", setting);
+#if GLIB_CHECK_VERSION(2,40,0)
+ g_key_file_save_to_file(key_file, conf_path, NULL);
+#else
+ g2_key_file_save_to_file(key_file, conf_path, NULL);
+#endif
+ g_free(conf_path);
+ g_key_file_free(key_file);
+}
+
+void cb_open_web_page()
+{
+ uri_open("https://www.hardinfo2.org");
+}
+
+void cb_report_bug()
+{
+ uri_open("https://github.com/hardinfo2/hardinfo2/issues");
+}
+
+void cb_refresh()
+{
+ shell_do_reload();
+}
+
+void cb_copy_to_clipboard()
+{
+ ShellModuleEntry *entry = shell_get_main_shell()->selected;
+
+ if (entry) {
+ gchar *data = module_entry_function(entry);
+ GtkClipboard *clip =
+ gtk_clipboard_get(gdk_atom_intern("CLIPBOARD", FALSE));
+ ReportContext *ctx = report_context_text_new(NULL);
+
+ ctx->entry = entry;
+
+ report_header(ctx);
+ report_table(ctx, data);
+ report_footer(ctx);
+
+ gtk_clipboard_set_text(clip, ctx->output, -1);
+
+ g_free(data);
+ report_context_free(ctx);
+ }
+}
+
+void cb_side_pane()
+{
+ gboolean visible;
+
+ visible = shell_action_get_active("SidePaneAction");
+ shell_set_side_pane_visible(visible);
+}
+
+void cb_toolbar()
+{
+ gboolean visible;
+
+ visible = shell_action_get_active("ToolbarAction");
+ shell_ui_manager_set_visible("/MainMenuBarAction", visible);
+}
+
+void cb_about_module(GtkAction * action)
+{
+ Shell *shell = shell_get_main_shell();
+ GSList *modules = shell->tree->modules;
+ const ModuleAbout *ma;
+ gchar *name;
+
+ g_object_get(G_OBJECT(action), "tooltip", &name, NULL);
+
+ for (; modules; modules = modules->next) {
+ ShellModule *sm = (ShellModule *) modules->data;
+
+ if (!g_str_equal(sm->name, name))
+ continue;
+
+ if ((ma = module_get_about(sm))) {
+ GtkWidget *about;
+ gchar *text;
+
+ about = gtk_about_dialog_new();
+
+ gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(shell->window));
+
+ text = g_strdup(sm->name);
+#if GTK_CHECK_VERSION(2, 12, 0)
+ gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), text);
+#else
+ gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about), text);
+#endif
+ g_free(text);
+
+ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about),
+ ma->version);
+
+ text = g_strdup_printf(_("Written by %s\nLicensed under %s"),
+ ma->author, ma->license);
+ gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about), text);
+ g_free(text);
+
+ if (ma->description)
+ gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about),
+ _(ma->description));
+
+ gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about), sm->icon);
+ gtk_dialog_run(GTK_DIALOG(about));
+ gtk_widget_destroy(about);
+ } else {
+ g_warning
+ (_("No about information is associated with the %s module."),
+ name);
+ }
+
+ break;
+ }
+
+ g_free(name);
+}
+
+void cb_about()
+{
+ Shell *shell = shell_get_main_shell();
+ GtkWidget *about;
+ gchar *copyright = NULL;
+ const gchar *authors[] = {
+ "L. A. F. Pereira (2003-2023)",
+ "hwspeedy(2024-)",
+ "Agney Lopes Roth Ferraz",
+ "Andrey Esin",
+ "Burt P.",
+ "Ondrej Čerman",
+ "Stewart Adam",
+ "Pascal F. Martin",
+ "TotalCaesar659",
+ "Julian Ospald",
+ "Julien Lavergne",
+ "Fernando López",
+ "PICCORO Lenz McKAY",
+ "Alexander Münch",
+ "Simon Quigley",
+ "AsciiWolf",
+ "George Schneeloch",
+ "Mattia Rizzolo",
+ "Yo",
+ "jamesbond",
+ "Ondrej Čerman",
+ "Mike Hewitt",
+ "Boris Afonot",
+ "",
+ "Based on work by:",
+ "uber-graph by Christian Hergert and others.",
+ "BinReloc by Hongli Lai",
+ "decode-dimms by Philip Edelbrock",
+ "decode-dimms by Christian Zuckschwerdt",
+ "decode-dimms by Burkart Lingner",
+ "x86cpucaps by Osamu Kayasono",
+ "MD5 implementation by Colin Plumb",
+ "SHA1 implementation by Steve Reid",
+ "Blowfish implementation by Paul Kocher",
+ "Raytracing benchmark by John Walker",
+ "FFT benchmark by Scott Robert Ladd",
+ "Vendor list based on GtkSysInfo by Pissens Sebastien",
+ "DMI support based on code by Stewart Adam",
+ "SCSI support based on code by Pascal F. Martin",
+ "",
+ "Translated by:",
+ "Alexander Münch",
+ "micrococo",
+ "yolanteng0",
+ "Yunji Lee",
+ "Hugo Carvalho",
+ "Paulo Giovanni pereira",
+ "Sergey Rodin",
+ "Sabri Ünal",
+ "yetist",
+ "",
+ "Artwork by:",
+ "Jakub Szypulka",
+ "Tango Project",
+ "The GNOME Project",
+ "epicbard",
+ "Roundicons",
+ NULL
+ };
+
+ about = gtk_about_dialog_new();
+ gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(shell->window));
+
+#if GTK_CHECK_VERSION(2, 12, 0)
+ gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), "Hardinfo2");
+#else
+ gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about), "Hardinfo2");
+#endif
+
+ copyright = g_strdup_printf("Copyright \302\251 2003-2023 L. A. F. Pereira\nCopyright \302\251 2024-%d Hardinfo2 Project\n\n\n\n", HARDINFO2_COPYRIGHT_LATEST_YEAR);
+
+ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about), VERSION);
+ gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about), copyright);
+ gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about),
+ _("System Information and Benchmark"));
+ gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about),
+ icon_cache_get_pixbuf("hardinfo2.png"));
+
+ gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(about),
+ _("HardInfo2 is free software; you can redistribute it and/or modify "
+ "it under the terms of the GNU General Public License as published by "
+ "the Free Software Foundation, version 2 or later.\n\n"
+ "This program is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the "
+ "GNU General Public License for more details.\n\n"
+ "You should have received a copy of the GNU General Public License "
+ "along with this program; if not, write to the Free Software "
+ "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA"));
+ gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(about), TRUE);
+
+ gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(about), authors);
+ //gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(about), artists);
+ //gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(about), _("translator-credits"));
+
+ gtk_dialog_run(GTK_DIALOG(about));
+ gtk_widget_destroy(about);
+
+ g_free(copyright);
+}
+
+void cb_generate_report()
+{
+ Shell *shell = shell_get_main_shell();
+ gboolean btn_refresh = shell_action_get_enabled("RefreshAction");
+ gboolean btn_copy = shell_action_get_enabled("CopyAction");
+
+ report_dialog_show(shell->tree->model, shell->window);
+
+ shell_action_set_enabled("RefreshAction", btn_refresh);
+ shell_action_set_enabled("CopyAction", btn_copy);
+}
+
+void cb_quit(void)
+{
+ do {
+ gtk_main_quit();
+ } while (gtk_main_level() > 1);
+
+ exit(0);
+}