static void update_scripts_menu (BrowserData *data) { GthMenuManager *menu_manager; GList *script_list; GList *scan; menu_manager = gth_browser_get_menu_manager (data->browser, GTH_BROWSER_MENU_MANAGER_TOOLS3); if (data->menu_merge_id != 0) gth_menu_manager_remove_entries (menu_manager, data->menu_merge_id); data->menu_merge_id = gth_menu_manager_new_merge_id (menu_manager); script_list = gth_script_file_get_scripts (gth_script_file_get ()); for (scan = script_list; scan; scan = scan->next) { GthScript *script = scan->data; char *detailed_action; if (! gth_script_is_visible (script)) continue; detailed_action = g_strdup_printf ("win.exec-script('%s')", gth_script_get_id (script)); gth_menu_manager_append_entry (menu_manager, data->menu_merge_id, gth_script_get_display_name (script), detailed_action, NULL, NULL); g_free (detailed_action); } list_tools__gth_browser_update_sensitivity_cb (data->browser); _g_object_list_unref (script_list); }
static void set_script_list (DialogData *data, GList *script_list) { GList *scan; g_signal_handlers_block_by_func (data->list_store, row_inserted_cb, data); for (scan = script_list; scan; scan = scan->next) { GthScript *script = scan->data; char *shortcut; GtkTreeIter iter; shortcut = get_script_shortcut (script); gtk_list_store_append (data->list_store, &iter); gtk_list_store_set (data->list_store, &iter, COLUMN_SCRIPT, script, COLUMN_NAME, gth_script_get_display_name (script), COLUMN_SHORTCUT, shortcut, COLUMN_VISIBLE, gth_script_is_visible (script), -1); g_free (shortcut); } g_signal_handlers_unblock_by_func (data->list_store, row_inserted_cb, data); }
static char * ask_value (ReplaceData *replace_data, char *match, GError **error) { GthFileData *file_data; GRegex *re; char **a; int len; char *prompt; char *default_value; GtkBuilder *builder; GtkWidget *dialog; GthThumbLoader *thumb_loader; int result; char *value; file_data = (GthFileData *) replace_data->file_list->data; re = g_regex_new ("%ask(\\{([^}]+)\\}(\\{([^}]+)\\})?)?", 0, 0, NULL); a = g_regex_split (re, match, 0); len = g_strv_length (a); if (len >= 3) prompt = g_strstrip (a[2]); else prompt = _("Enter a value:"); if (len >= 5) default_value = g_strstrip (a[4]); else default_value = ""; builder = gtk_builder_new_from_resource ("/org/gnome/gThumb/list_tools/data/ui/ask-value.ui"); dialog = g_object_new (GTK_TYPE_DIALOG, "title", "", "transient-for", GTK_WINDOW (replace_data->parent), "modal", TRUE, "destroy-with-parent", FALSE, "use-header-bar", _gtk_settings_get_dialogs_use_header (), "resizable", TRUE, NULL); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), _gtk_builder_get_widget (builder, "dialog_content")); gtk_dialog_add_buttons (GTK_DIALOG (dialog), _GTK_LABEL_CANCEL, GTK_RESPONSE_CANCEL, _GTK_LABEL_EXECUTE, GTK_RESPONSE_OK, (gth_script_for_each_file (replace_data->script) ? _("_Skip") : NULL), GTK_RESPONSE_NO, NULL); _gtk_dialog_add_class_to_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_STYLE_CLASS_SUGGESTED_ACTION); gtk_label_set_text (GTK_LABEL (_gtk_builder_get_widget (builder, "title_label")), gth_script_get_display_name (replace_data->script)); gtk_label_set_text (GTK_LABEL (_gtk_builder_get_widget (builder, "filename_label")), g_file_info_get_display_name (file_data->info)); gtk_label_set_text (GTK_LABEL (_gtk_builder_get_widget (builder, "request_label")), prompt); gtk_entry_set_text (GTK_ENTRY (_gtk_builder_get_widget (builder, "request_entry")), default_value); g_object_ref (builder); thumb_loader = gth_thumb_loader_new (128); gth_thumb_loader_load (thumb_loader, file_data, NULL, thumb_loader_ready_cb, builder); result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result == GTK_RESPONSE_OK) { value = g_utf8_normalize (gtk_entry_get_text (GTK_ENTRY (_gtk_builder_get_widget (builder, "request_entry"))), -1, G_NORMALIZE_NFC); } else { if (result == GTK_RESPONSE_NO) *error = g_error_new_literal (GTH_TASK_ERROR, GTH_TASK_ERROR_SKIP_TO_NEXT_FILE, ""); else *error = g_error_new_literal (GTH_TASK_ERROR, GTH_TASK_ERROR_CANCELLED, ""); value = NULL; } gtk_widget_destroy (dialog); g_object_unref (builder); g_strfreev (a); g_regex_unref (re); return value; }
static void script_editor_dialog__response_cb (GtkDialog *dialog, int response, gpointer user_data) { DialogData *data = user_data; GthScript *script; GError *error = NULL; GthScriptFile *script_file; gboolean new_script; GtkTreeIter iter; gboolean change_list = TRUE; if (response == GTK_RESPONSE_HELP) { /* FIXME: show help dialog */ return; } if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (GTK_WIDGET (dialog)); return; } script = gth_script_editor_dialog_get_script (GTH_SCRIPT_EDITOR_DIALOG (dialog), &error); if (script == NULL) { _gtk_error_dialog_from_gerror_show (GTK_WINDOW (dialog), _("Could not save the script"), error); g_clear_error (&error); return; } /* update the script file */ script_file = gth_script_file_get (); new_script = ! gth_script_file_has_script (script_file, script); g_signal_handlers_block_by_func (script_file, scripts_changed_cb, data); gth_script_file_add (script_file, script); gth_script_file_save (script_file, NULL); /* FIXME: handle errors */ g_signal_handlers_unblock_by_func (script_file, scripts_changed_cb, data); /* update the script list */ if (new_script) { g_signal_handlers_block_by_func (data->list_store, row_inserted_cb, data); gtk_list_store_append (data->list_store, &iter); g_signal_handlers_unblock_by_func (data->list_store, row_inserted_cb, data); } else change_list = get_script_iter (data, script, &iter); if (change_list) { char *shortcut; shortcut = get_script_shortcut (script); gtk_list_store_set (data->list_store, &iter, COLUMN_SCRIPT, script, COLUMN_NAME, gth_script_get_display_name (script), COLUMN_SHORTCUT, shortcut, COLUMN_VISIBLE, gth_script_is_visible (script), -1); g_free (shortcut); } gtk_widget_destroy (GTK_WIDGET (dialog)); g_object_unref (script); }