int main(int argc, char **argv) { GtkWidget *win; GError *error = NULL; GtkApplication *application; gchar *locale_dir; gint retval; locale_dir = ghex_locale_dir (); bindtextdomain (GETTEXT_PACKAGE, locale_dir); g_free (locale_dir); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); /* Initialize GTK+ program */ if (!gtk_init_with_args (&argc, &argv, _("- GTK+ binary editor"), options, GETTEXT_PACKAGE, &error)) { g_printerr (_("%s\nRun '%s --help' to see a full list of available command line options.\n"), error->message, argv[0]); g_error_free (error); return 1; } /* Set default window icon */ gtk_window_set_default_icon_name ("ghex"); /* load preferences */ ghex_init_configuration(); /* accessibility setup */ setup_factory(); application = gtk_application_new ("org.gnome.GHexApplication", G_APPLICATION_NON_UNIQUE); g_signal_connect (application, "activate", G_CALLBACK (ghex_activate), NULL); g_application_register (G_APPLICATION (application), NULL, NULL); if (args_remaining != NULL) { gchar **filename; for (filename = args_remaining; *filename != NULL; filename++) { if (g_file_test (*filename, G_FILE_TEST_EXISTS)) { win = ghex_window_new_from_file (application, *filename); if(win != NULL) { if(geometry) { if(!gtk_window_parse_geometry(GTK_WINDOW(win), geometry)) g_warning(_("Invalid geometry string \"%s\"\n"), geometry); geometry = NULL; } gtk_widget_show(win); } } } } if(ghex_window_get_list() == NULL) { win = ghex_window_new (application); if(geometry) { if(!gtk_window_parse_geometry(GTK_WINDOW(win), geometry)) g_warning(_("Invalid geometry string \"%s\"\n"), geometry); geometry = NULL; } gtk_widget_show(win); } else win = GTK_WIDGET(ghex_window_get_list()->data); retval = g_application_run (G_APPLICATION (application), argc, argv); g_object_unref (application); return retval; }
static void ghex_prefs_notify_cb (GConfClient *gconf_client, guint cnxn_id, GConfEntry *entry, gpointer user_data) { const GList *winn, *docn; if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_OFFSETS_COLUMN)) { gboolean show_off = gconf_value_get_bool(entry->value); show_offsets_column = show_off; winn = ghex_window_get_list(); while(winn) { if(GHEX_WINDOW(winn->data)->gh) gtk_hex_show_offsets(GHEX_WINDOW(winn->data)->gh, show_off); winn = g_list_next(winn); } } else if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_GROUP)) { def_group_type = gconf_value_get_int(entry->value); } else if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_MAX_UNDO_DEPTH)) { gint new_undo_max = gconf_value_get_int(entry->value); max_undo_depth = new_undo_max; docn = hex_document_get_list(); while(docn) { hex_document_set_max_undo(HEX_DOCUMENT(docn->data), max_undo_depth); docn = g_list_next(docn); } } else if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_BOX_SIZE)) { shaded_box_size = gconf_value_get_int(entry->value); } else if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_OFFSET_FORMAT) && strcmp(gconf_value_get_string(entry->value), offset_fmt)) { gchar *old_offset_fmt = offset_fmt; gint len, i; gboolean expect_spec; offset_fmt = g_strdup(gconf_value_get_string(entry->value)); /* check for a valid format string */ len = strlen(offset_fmt); expect_spec = FALSE; for(i = 0; i < len; i++) { if(offset_fmt[i] == '%') expect_spec = TRUE; if( expect_spec && ( (offset_fmt[i] >= 'a' && offset_fmt[i] <= 'z') || (offset_fmt[i] >= 'A' && offset_fmt[i] <= 'Z') ) ) { expect_spec = FALSE; if(offset_fmt[i] != 'x' && offset_fmt[i] != 'd' && offset_fmt[i] != 'o' && offset_fmt[i] != 'X' && offset_fmt[i] != 'P' && offset_fmt[i] != 'p') { g_free(offset_fmt); offset_fmt = old_offset_fmt; gconf_client_set_string(gconf_client, GHEX_BASE_KEY GHEX_PREF_OFFSET_FORMAT, "%X", NULL); } } } if(offset_fmt != old_offset_fmt) g_free(old_offset_fmt); } else if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_FONT)) { if(gconf_value_get_string(entry->value) != NULL) { const gchar *font_name = gconf_value_get_string(entry->value); PangoFontMetrics *new_metrics; PangoFontDescription *new_desc; if((new_metrics = gtk_hex_load_font(font_name)) != NULL) { new_desc = pango_font_description_from_string (font_name); winn = ghex_window_get_list(); while(winn) { if(GHEX_WINDOW(winn->data)->gh) gtk_hex_set_font(GHEX_WINDOW(winn->data)->gh, new_metrics, new_desc); winn = g_list_next(winn); } if (def_metrics) pango_font_metrics_unref (def_metrics); if (def_font_desc) pango_font_description_free (def_font_desc); if (def_font_name) g_free(def_font_name); def_metrics = new_metrics; def_font_name = g_strdup(font_name); def_font_desc = new_desc; } } } else if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_DATA_FONT)) { if(data_font_name) g_free(data_font_name); data_font_name = g_strdup (gconf_value_get_string(entry->value)); } else if(!strcmp(entry->key, GHEX_BASE_KEY GHEX_PREF_HEADER_FONT)) { if(header_font_name) g_free(header_font_name); header_font_name = g_strdup (gconf_value_get_string(entry->value)); } }