LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Нет, тут сразу несколько плохих вещей разной степени плохости:

1) функция _init_quarks() вызывается до объявления переменных

2) инициализация переменных в объявлении (это не строго плохо, но стараюсь такого избегать)

2а) (сразу не заметил) мешаниниа из объявлений и инициализаций в начале - а вот в таком виде это точно плохо

3) фигурная скобка после if (и после заголовка функции) на отдельной строке

4) фигурные скобки до и после else на отдельных двух строках

5) тела нескольких if-ов на отдельных строках без фигурных скобок

6) всякая мелочь типа return; на отдельных строках

Правильно так:

static void on_create_new(GtkAction *act, FmFolderView *fv) {
    const char* name;
    GtkMenu *popup;
    GtkWidget *win;
    GtkUIManager *ui;
    GList *templates;
    FmTemplate *templ;
    FmMimeType *mime_type;
    const char *prompt, *template_name, *label;
    char *_prompt, *header, *basename;
    FmPath *dest;
    GFile *gf;
    GError *error;
    GtkWidget *run_button, *sub_button;
    gboolean new_folder, run_app;
    gint n;

    _init_quarks();
    name = gtk_action_get_name(act);
    popup = g_object_get_qdata(G_OBJECT(fv), popup_quark);
    win = gtk_menu_get_attach_widget(popup);
    ui = g_object_get_qdata(G_OBJECT(fv), ui_quark);
    templates = g_object_get_qdata(G_OBJECT(ui), templates_quark);
    _prompt = NULL;
    error = NULL;
    new_folder = FALSE;

    if(!strncmp(name,"NewFolder",9)) {
        templ = NULL;
        prompt = _("Enter a name for the newly created folder:");
        header = _("Creating new folder");
        new_folder = TRUE;
    } else if(G_LIKELY(!strncmp(name,"NewFile",7))) {
        n = atoi(name+7);
        if(n<0 || !(templ=g_list_nth_data(templates,n))) return; /* invalid action name, is it possible? */
    } else if(G_LIKELY(!strcmp(name,"NewBlank"))) {
        templ = NULL;
        prompt = _("Enter a name for empty file:");
        header = _("Creating ...");
    } else { /* invalid action name, is it possible? */
        return;
    }
    if(!templ) { /* new folder */
        template_name = _("New");
        n = -1;
        run_app = FALSE;
        run_button = NULL;
    } else {
        mime_type = fm_template_get_mime_type(templ);
        prompt = fm_template_get_prompt(templ);
        if(!prompt) prompt = _prompt = g_strdup_printf(_("Enter a name for the new %s:"), fm_mime_type_get_desc(mime_type));
        label = fm_template_get_label(templ);
        header = g_strdup_printf(_("Creating %s"), label ? label : fm_mime_type_get_desc(mime_type));
        template_name = fm_template_get_name(templ, &n);
        run_app = fm_config->template_run_app;
        sub_button = gtk_check_button_new_with_mnemonic(_("_Run default application on file after creation"));
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sub_button), run_app);
        g_signal_connect(sub_button, "toggled", G_CALLBACK(on_run_app_toggled), &run_app);
        run_button = gtk_alignment_new(0, 0, 1, 1);
        gtk_alignment_set_padding(GTK_ALIGNMENT(run_button), 0, 0, 16, 0);
        gtk_container_add(GTK_CONTAINER(run_button), sub_button);
    }
    basename = fm_get_user_input_n(GTK_WINDOW(win), header, prompt, template_name, n, run_button);
    if(templ) { g_free(_prompt); g_free(header); }
    if(!basename) return;
    dest = fm_path_new_child(fm_folder_view_get_cwd(fv), basename);
    g_free(basename);
    gf = fm_path_to_gfile(dest);
    fm_path_unref(dest);
    if(templ) fm_template_create_file(templ, gf, &error, run_app);
    else if(new_folder) g_file_make_directory(gf, NULL, &error);
    else { /* 'NewBlank' */
        GFileOutputStream *f;
        if(f=g_file_create(gf,G_FILE_CREATE_NONE,NULL,&error)) g_object_unref(f);
    }
    if(error) {
        fm_show_error(GTK_WINDOW(win), NULL, error->message);
        g_error_free(error);
    }
    g_object_unref(gf);
}

Кажется тут можно ещё и логику работы почистить, но я исправил только синтаксис - стало выглядеть намного приятнее.

Исправление firkax, :

Нет, тут сразу несколько плохих вещей разной степени плохости:

1) функция _init_quarks() вызывается до объявления переменных

2) инициализация переменных в объявлении (это не строго плохо, но стараюсь такого избегать)

3) фигурная скобка после if (и после заголовка функции) на отдельной строке

4) фигурные скобки до и после else на отдельных двух строках

5) тела нескольких if-ов на отдельных строках без фигурных скобок

6) всякая мелочь типа return; на отдельных строках

Правильно так:

static void on_create_new(GtkAction *act, FmFolderView *fv) {
    const char* name;
    GtkMenu *popup;
    GtkWidget *win;
    GtkUIManager *ui;
    GList *templates;
    FmTemplate *templ;
    FmMimeType *mime_type;
    const char *prompt, *template_name, *label;
    char *_prompt, *header, *basename;
    FmPath *dest;
    GFile *gf;
    GError *error;
    GtkWidget *run_button, *sub_button;
    gboolean new_folder, run_app;
    gint n;

    _init_quarks();
    name = gtk_action_get_name(act);
    popup = g_object_get_qdata(G_OBJECT(fv), popup_quark);
    win = gtk_menu_get_attach_widget(popup);
    ui = g_object_get_qdata(G_OBJECT(fv), ui_quark);
    templates = g_object_get_qdata(G_OBJECT(ui), templates_quark);
    _prompt = NULL;
    error = NULL;
    new_folder = FALSE;

    if(!strncmp(name,"NewFolder",9)) {
        templ = NULL;
        prompt = _("Enter a name for the newly created folder:");
        header = _("Creating new folder");
        new_folder = TRUE;
    } else if(G_LIKELY(!strncmp(name,"NewFile",7))) {
        n = atoi(name+7);
        if(n<0 || !(templ=g_list_nth_data(templates,n))) return; /* invalid action name, is it possible? */
    } else if(G_LIKELY(!strcmp(name,"NewBlank"))) {
        templ = NULL;
        prompt = _("Enter a name for empty file:");
        header = _("Creating ...");
    } else { /* invalid action name, is it possible? */
        return;
    }
    if(!templ) { /* new folder */
        template_name = _("New");
        n = -1;
        run_app = FALSE;
        run_button = NULL;
    } else {
        mime_type = fm_template_get_mime_type(templ);
        prompt = fm_template_get_prompt(templ);
        if(!prompt) prompt = _prompt = g_strdup_printf(_("Enter a name for the new %s:"), fm_mime_type_get_desc(mime_type));
        label = fm_template_get_label(templ);
        header = g_strdup_printf(_("Creating %s"), label ? label : fm_mime_type_get_desc(mime_type));
        template_name = fm_template_get_name(templ, &n);
        run_app = fm_config->template_run_app;
        sub_button = gtk_check_button_new_with_mnemonic(_("_Run default application on file after creation"));
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sub_button), run_app);
        g_signal_connect(sub_button, "toggled", G_CALLBACK(on_run_app_toggled), &run_app);
        run_button = gtk_alignment_new(0, 0, 1, 1);
        gtk_alignment_set_padding(GTK_ALIGNMENT(run_button), 0, 0, 16, 0);
        gtk_container_add(GTK_CONTAINER(run_button), sub_button);
    }
    basename = fm_get_user_input_n(GTK_WINDOW(win), header, prompt, template_name, n, run_button);
    if(templ) { g_free(_prompt); g_free(header); }
    if(!basename) return;
    dest = fm_path_new_child(fm_folder_view_get_cwd(fv), basename);
    g_free(basename);
    gf = fm_path_to_gfile(dest);
    fm_path_unref(dest);
    if(templ) fm_template_create_file(templ, gf, &error, run_app);
    else if(new_folder) g_file_make_directory(gf, NULL, &error);
    else { /* 'NewBlank' */
        GFileOutputStream *f;
        if(f=g_file_create(gf,G_FILE_CREATE_NONE,NULL,&error)) g_object_unref(f);
    }
    if(error) {
        fm_show_error(GTK_WINDOW(win), NULL, error->message);
        g_error_free(error);
    }
    g_object_unref(gf);
}

Кажется тут можно ещё и логику работы почистить, но я исправил только синтаксис - стало выглядеть намного приятнее.

Исходная версия firkax, :

Нет, тут сразу несколько плохих вещей разной степени плохости:

1) функция _init_quarks() вызывается до объявления переменных

2) инициализация переменных в объявлении (это не строго плохо, но стараюсь такого избегать)

3) фигурная скобка после if (и после заголовка функции) на отдельной строке

4) фигурные скобки до и после else на отдельных двух строках

5) тела нескольких if-ов на отдельных строках без фигурных скобок

6) всякая мелочь типа return; на отдельных строках

Правильно так:

static void on_create_new(GtkAction *act, FmFolderView *fv) {
    const char* name;
    GtkMenu *popup;
    GtkWidget *win;
    GtkUIManager *ui;
    GList *templates;
    FmTemplate *templ;
    FmMimeType *mime_type;
    const char *prompt, *template_name, *label;
    char *_prompt, *header, *basename;
    FmPath *dest;
    GFile *gf;
    GError *error;
    GtkWidget *run_button, *sub_button;
    gboolean new_folder, run_app;
    gint n;

    _init_quarks();
    name = gtk_action_get_name(act);
    popup = g_object_get_qdata(G_OBJECT(fv), popup_quark);
    win = gtk_menu_get_attach_widget(popup);
    ui = g_object_get_qdata(G_OBJECT(fv), ui_quark);
    templates = g_object_get_qdata(G_OBJECT(ui), templates_quark);
    _prompt = NULL;
    error = NULL;
    new_folder = FALSE;

    if(!strncmp(name,"NewFolder",9)) {
        templ = NULL;
        prompt = _("Enter a name for the newly created folder:");
        header = _("Creating new folder");
        new_folder = TRUE;
    } else if(G_LIKELY(!strncmp(name,"NewFile",7))) {
        n = atoi(name+7);
        if(n<0 || !(templ=g_list_nth_data(templates,n))) return; /* invalid action name, is it possible? */
    } else if(G_LIKELY(!strcmp(name,"NewBlank"))) {
        templ = NULL;
        prompt = _("Enter a name for empty file:");
        header = _("Creating ...");
    } else { /* invalid action name, is it possible? */
        return;
    }
    if(!templ) { /* new folder */
        template_name = _("New");
        n = -1;
        run_app = FALSE;
        run_button = NULL;
    } else {
        mime_type = fm_template_get_mime_type(templ);
        prompt = fm_template_get_prompt(templ);
        if(!prompt) prompt = _prompt = g_strdup_printf(_("Enter a name for the new %s:"), fm_mime_type_get_desc(mime_type));
        label = fm_template_get_label(templ);
        header = g_strdup_printf(_("Creating %s"), label ? label : fm_mime_type_get_desc(mime_type));
        template_name = fm_template_get_name(templ, &n);
        run_app = fm_config->template_run_app;
        sub_button = gtk_check_button_new_with_mnemonic(_("_Run default application on file after creation"));
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sub_button), run_app);
        g_signal_connect(sub_button, "toggled", G_CALLBACK(on_run_app_toggled), &run_app);
        run_button = gtk_alignment_new(0, 0, 1, 1);
        gtk_alignment_set_padding(GTK_ALIGNMENT(run_button), 0, 0, 16, 0);
        gtk_container_add(GTK_CONTAINER(run_button), sub_button);
    }
    basename = fm_get_user_input_n(GTK_WINDOW(win), header, prompt, template_name, n, run_button);
    if(templ) { g_free(_prompt); g_free(header); }
    if(!basename) return;
    dest = fm_path_new_child(fm_folder_view_get_cwd(fv), basename);
    g_free(basename);
    gf = fm_path_to_gfile(dest);
    fm_path_unref(dest);
    if(templ) fm_template_create_file(templ, gf, &error, run_app);
    else if(new_folder) g_file_make_directory(gf, NULL, &error);
    else { /* 'NewBlank' */
        GFileOutputStream *f;
        if(f=g_file_create(gf,G_FILE_CREATE_NONE,NULL,&error)) g_object_unref(f);
    }
    if(error) {
        fm_show_error(GTK_WINDOW(win), NULL, error->message);
        g_error_free(error);
    }
    g_object_unref(gf);
}