static FmJobErrorAction on_error(FmFileOpsJob* job, GError* err, FmJobErrorSeverity severity, FmProgressDisplay* data) { GtkTextIter it; if(err->domain == G_IO_ERROR) { if(err->code == G_IO_ERROR_CANCELLED) return FM_JOB_ABORT; else if(err->code == G_IO_ERROR_FAILED_HANDLED) return FM_JOB_CONTINUE; } if(data->timer) g_timer_stop(data->timer); data->has_error = TRUE; ensure_dlg(data); /* FIXME: Need to mount volumes on demand here, too. if( err->domain == G_IO_ERROR ) { if( err->code == G_IO_ERROR_NOT_MOUNTED && severity < FM_JOB_ERROR_CRITICAL ) if(fm_mount_path(parent, dest_path)) return FM_JOB_RETRY; } */ gtk_text_buffer_get_end_iter(data->error_buf, &it); if(data->cur_file == NULL) g_warning("FmProgressDialog on_error: assertion `cur_file != NULL' failed"); if(data->cur_file || data->old_cur_file) { gtk_text_buffer_insert_with_tags(data->error_buf, &it, data->cur_file ? data->cur_file : data->old_cur_file, -1, data->bold_tag, NULL); gtk_text_buffer_insert(data->error_buf, &it, _(": "), -1); } gtk_text_buffer_insert(data->error_buf, &it, err->message, -1); gtk_text_buffer_insert(data->error_buf, &it, "\n", 1); if(!gtk_widget_get_visible(data->error_pane)) gtk_widget_show(data->error_pane); if(data->timer) g_timer_continue(data->timer); return FM_JOB_CONTINUE; }
static gint on_ask_rename (FmFileOpsJob *job, FmFileInfo *src, FmFileInfo *dest, char **new_name, FmProgressDisplay *data) { int res; GtkBuilder *builder = gtk_builder_new (); GtkWidget *dlg, *src_icon, *dest_icon, *src_fi, *dest_fi, *filename, *apply_all; char *tmp; const char *disp_size; // return default operation if the user has set it if (data->default_opt) return data->default_opt; if (data->timer) g_timer_stop (data->timer); gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE); ensure_dlg (data); gtk_builder_add_from_string (builder, RENAME_DLG, -1, NULL); dlg = (GtkWidget*)gtk_builder_get_object (builder, "dlg"); src_icon = (GtkWidget*)gtk_builder_get_object (builder, "src_icon"); src_fi = (GtkWidget*)gtk_builder_get_object (builder, "src_fi"); dest_icon = (GtkWidget*)gtk_builder_get_object (builder, "dest_icon"); dest_fi = (GtkWidget*)gtk_builder_get_object (builder, "dest_fi"); filename = (GtkWidget*)gtk_builder_get_object (builder, "filename"); apply_all = (GtkWidget*)gtk_builder_get_object (builder, "apply_all"); gtk_window_set_transient_for (GTK_WINDOW (dlg), (GtkWindow*) data->dlg); gtk_image_set_from_gicon (GTK_IMAGE (src_icon), fm_file_info_get_gicon (src), GTK_ICON_SIZE_DIALOG); disp_size = fm_file_info_get_disp_size (src); if (disp_size) { tmp = g_strdup_printf (_("Type: %s\nSize: %s\nModified: %s"), fm_file_info_get_desc (src), disp_size, fm_file_info_get_disp_mtime (src)); } else { tmp = g_strdup_printf (_("Type: %s\nModified: %s"), fm_file_info_get_desc (src), fm_file_info_get_disp_mtime (src)); } gtk_label_set_text (GTK_LABEL (src_fi), tmp); g_free (tmp); gtk_image_set_from_gicon (GTK_IMAGE (dest_icon), fm_file_info_get_gicon (src), GTK_ICON_SIZE_DIALOG); disp_size = fm_file_info_get_disp_size (dest); if (disp_size) { tmp = g_strdup_printf (_("Type: %s\nSize: %s\nModified: %s"), fm_file_info_get_desc (dest), fm_file_info_get_disp_size (dest), fm_file_info_get_disp_mtime (dest)); } else { tmp = g_strdup_printf (_("Type: %s\nModified: %s"), fm_file_info_get_desc (dest), fm_file_info_get_disp_mtime (dest)); } gtk_label_set_text (GTK_LABEL (dest_fi), tmp); g_free (tmp); tmp = g_filename_display_name (dest->path->name); gtk_entry_set_text (GTK_ENTRY (filename), tmp); g_free (tmp); g_object_set_data (G_OBJECT (filename), "old_name", dest->disp_name); g_signal_connect (filename, "changed", (GCallback) on_filename_changed, gtk_builder_get_object (builder, "rename")); g_object_unref (builder); res = gtk_dialog_run (GTK_DIALOG (dlg)); switch (res) { case RESPONSE_RENAME: *new_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (filename))); res = FM_FILE_OP_RENAME; break; case RESPONSE_OVERWRITE: res = FM_FILE_OP_OVERWRITE; break; case RESPONSE_SKIP: res = FM_FILE_OP_SKIP; break; default: res = FM_FILE_OP_CANCEL; } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (apply_all))) { if (res == RESPONSE_OVERWRITE || res == FM_FILE_OP_SKIP) data->default_opt = res; } gtk_widget_destroy (dlg); if (data->timer) g_timer_continue (data->timer); return res; }
static gint on_ask (FmFileOpsJob *job, const char *question, const char **options, FmProgressDisplay *data) { ensure_dlg (data); return fm_askv (GTK_WINDOW (data->dlg), NULL, question, options); }
static gint on_ask_rename(FmFileOpsJob* job, FmFileInfo* src, FmFileInfo* dest, char** new_name, FmProgressDisplay* data) { int res; GtkBuilder* builder; GtkDialog *dlg; GtkImage *src_icon, *dest_icon; GtkLabel *src_fi, *dest_fi; GtkEntry *filename; GtkToggleButton *apply_all; char* tmp; const char* disp_size; FmPath* path; FmIcon* icon; /* return default operation if the user has set it */ if(data->default_opt) return data->default_opt; builder = gtk_builder_new(); path = fm_file_info_get_path(dest); icon = fm_file_info_get_icon(src); if(data->timer) g_timer_stop(data->timer); gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE); ensure_dlg(data); gtk_builder_add_from_file(builder, PACKAGE_UI_DIR "/ask-rename.ui", NULL); dlg = GTK_DIALOG(gtk_builder_get_object(builder, "dlg")); src_icon = GTK_IMAGE(gtk_builder_get_object(builder, "src_icon")); src_fi = GTK_LABEL(gtk_builder_get_object(builder, "src_fi")); dest_icon = GTK_IMAGE(gtk_builder_get_object(builder, "dest_icon")); dest_fi = GTK_LABEL(gtk_builder_get_object(builder, "dest_fi")); filename = GTK_ENTRY(gtk_builder_get_object(builder, "filename")); apply_all = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "apply_all")); gtk_window_set_transient_for(GTK_WINDOW(dlg), GTK_WINDOW(data->dlg)); gtk_image_set_from_gicon(src_icon, icon->gicon, GTK_ICON_SIZE_DIALOG); disp_size = fm_file_info_get_disp_size(src); if(disp_size) { tmp = g_strdup_printf(_("Type: %s\nSize: %s\nModified: %s"), fm_file_info_get_desc(src), disp_size, fm_file_info_get_disp_mtime(src)); } else { tmp = g_strdup_printf(_("Type: %s\nModified: %s"), fm_file_info_get_desc(src), fm_file_info_get_disp_mtime(src)); } gtk_label_set_text(src_fi, tmp); g_free(tmp); gtk_image_set_from_gicon(dest_icon, icon->gicon, GTK_ICON_SIZE_DIALOG); disp_size = fm_file_info_get_disp_size(dest); if(disp_size) { tmp = g_strdup_printf(_("Type: %s\nSize: %s\nModified: %s"), fm_file_info_get_desc(dest), fm_file_info_get_disp_size(dest), fm_file_info_get_disp_mtime(dest)); } else { tmp = g_strdup_printf(_("Type: %s\nModified: %s"), fm_file_info_get_desc(dest), fm_file_info_get_disp_mtime(dest)); } gtk_label_set_text(dest_fi, tmp); g_free(tmp); tmp = g_filename_display_name(fm_path_get_basename(path)); gtk_entry_set_text(filename, tmp); g_free(tmp); tmp = (char*)fm_file_info_get_disp_name(dest); /* FIXME: cast const to char */ g_object_set_data(G_OBJECT(filename), "old_name", tmp); g_signal_connect(filename, "changed", G_CALLBACK(on_filename_changed), gtk_builder_get_object(builder, "rename")); g_object_unref(builder); res = gtk_dialog_run(dlg); switch(res) { case RESPONSE_RENAME: *new_name = g_strdup(gtk_entry_get_text(filename)); res = FM_FILE_OP_RENAME; break; case RESPONSE_OVERWRITE: res = FM_FILE_OP_OVERWRITE; break; case RESPONSE_SKIP: res = FM_FILE_OP_SKIP; break; default: res = FM_FILE_OP_CANCEL; } if(gtk_toggle_button_get_active(apply_all)) { if(res == RESPONSE_OVERWRITE || res == FM_FILE_OP_SKIP) data->default_opt = res; } gtk_widget_destroy(GTK_WIDGET(dlg)); if(data->timer) g_timer_continue(data->timer); return res; }
static gint on_ask_rename(FmFileOpsJob* job, FmFileInfo* src, FmFileInfo* dest, char** new_name, FmProgressDisplay* data) { int res; GtkBuilder* builder = gtk_builder_new(); GtkWidget *dlg, *src_icon, *dest_icon, *src_fi, *dest_fi, *filename, *apply_all; char* tmp; gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE); ensure_dlg(data); gtk_builder_add_from_file(builder, PACKAGE_UI_DIR "/ask-rename.ui", NULL); dlg = (GtkWidget*)gtk_builder_get_object(builder, "dlg"); src_icon = (GtkWidget*)gtk_builder_get_object(builder, "src_icon"); src_fi = (GtkWidget*)gtk_builder_get_object(builder, "src_fi"); dest_icon = (GtkWidget*)gtk_builder_get_object(builder, "dest_icon"); dest_fi = (GtkWidget*)gtk_builder_get_object(builder, "dest_fi"); filename = (GtkWidget*)gtk_builder_get_object(builder, "filename"); apply_all = (GtkWidget*)gtk_builder_get_object(builder, "apply_all"); gtk_window_set_transient_for(GTK_WINDOW(dlg), data->dlg); gtk_image_set_from_gicon(GTK_IMAGE(src_icon), src->icon->gicon, GTK_ICON_SIZE_DIALOG); tmp = g_strdup_printf("Type: %s\nSize: %s\nModified: %s", fm_file_info_get_desc(src), fm_file_info_get_disp_size(src), fm_file_info_get_disp_mtime(src)); gtk_label_set_text(GTK_LABEL(src_fi), tmp); g_free(tmp); gtk_image_set_from_gicon(GTK_IMAGE(dest_icon), src->icon->gicon, GTK_ICON_SIZE_DIALOG); tmp = g_strdup_printf("Type: %s\nSize: %s\nModified: %s", fm_file_info_get_desc(dest), fm_file_info_get_disp_size(dest), fm_file_info_get_disp_mtime(dest)); gtk_label_set_text(GTK_LABEL(dest_fi), tmp); g_free(tmp); gtk_entry_set_text(GTK_ENTRY(filename), dest->disp_name); g_object_set_data(G_OBJECT(filename), "old_name", dest->disp_name); g_signal_connect(filename, "changed", on_filename_changed, gtk_builder_get_object(builder, "rename")); g_object_unref(builder); res = gtk_dialog_run(GTK_DIALOG(dlg)); switch(res) { case RESPONSE_RENAME: *new_name = g_strdup(gtk_entry_get_text(GTK_ENTRY(filename))); res = FM_FILE_OP_RENAME; break; case RESPONSE_OVERWRITE: res = FM_FILE_OP_OVERWRITE; break; case RESPONSE_SKIP: res = FM_FILE_OP_SKIP; break; default: res = FM_FILE_OP_CANCEL; } if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(apply_all))) { /* FIXME: set default action */ } gtk_widget_destroy(dlg); return res; }
static gboolean on_error(FmFileOpsJob* job, GError* err, gboolean recoverable, FmProgressDisplay* data) { ensure_dlg(data); fm_show_error(GTK_WINDOW(data->dlg), err->message); return FALSE; }