prefs_ext_prog.c (6418B)
1 /* 2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client 3 * Copyright (C) 2004-2021 the Claws Mail team and Hiroyuki Yamamoto 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #include "defs.h" 20 21 #include <stdio.h> 22 #include <stdlib.h> 23 24 #include <glib.h> 25 #include <glib/gi18n.h> 26 #include <gtk/gtk.h> 27 #include <gdk/gdkkeysyms.h> 28 29 #include "utils.h" 30 #include "prefs_common.h" 31 #include "prefs_gtk.h" 32 33 #include "gtk/gtkutils.h" 34 #include "gtk/prefswindow.h" 35 36 #include "manage_window.h" 37 38 typedef struct _ExtProgPage 39 { 40 PrefsPage page; 41 42 GtkWidget *window; /* do not modify */ 43 44 GtkWidget *uri_label; 45 GtkWidget *uri_entry; 46 47 GtkWidget *exteditor_label; 48 GtkWidget *exteditor_entry; 49 50 GtkWidget *astextviewer_label; 51 GtkWidget *astextviewer_entry; 52 } ExtProgPage; 53 54 static void prefs_ext_prog_create_widget(PrefsPage *_page, GtkWindow *window, 55 gpointer data) 56 { 57 ExtProgPage *prefs_ext_prog = (ExtProgPage *) _page; 58 59 GtkWidget *table; 60 GtkWidget *vbox; 61 GtkWidget *hint_label; 62 GtkWidget *table2; 63 GtkWidget *uri_label; 64 GtkWidget *uri_entry; 65 GtkWidget *exteditor_label; 66 GtkWidget *exteditor_entry; 67 68 GtkWidget *astextviewer_label; 69 GtkWidget *astextviewer_entry; 70 int i = 0; 71 72 table = gtk_grid_new(); 73 gtk_widget_show(table); 74 gtk_container_set_border_width(GTK_CONTAINER(table), 8); 75 gtk_grid_set_row_spacing(GTK_GRID(table), 4); 76 gtk_grid_set_column_spacing(GTK_GRID(table), 8); 77 78 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); 79 gtk_widget_show(vbox); 80 81 gtk_grid_attach(GTK_GRID(table), vbox, 0, 0, 1, 1); 82 83 hint_label = gtk_label_new(_("%s will be replaced with file name / URI")); 84 gtk_label_set_justify (GTK_LABEL (hint_label), GTK_JUSTIFY_LEFT); 85 gtkut_widget_set_small_font_size (hint_label); 86 gtk_widget_show(hint_label); 87 gtk_box_pack_start(GTK_BOX (vbox), 88 hint_label, FALSE, FALSE, 4); 89 90 #ifdef G_OS_UNIX 91 hint_label = gtk_label_new(_("For the text editor, %w will be replaced with GtkSocket ID")); 92 gtk_label_set_justify (GTK_LABEL (hint_label), GTK_JUSTIFY_LEFT); 93 gtkut_widget_set_small_font_size (hint_label); 94 gtk_widget_show(hint_label); 95 gtk_box_pack_start(GTK_BOX (vbox), 96 hint_label, FALSE, FALSE, 4); 97 #endif 98 99 table2 = gtk_grid_new(); 100 gtk_widget_show(table2); 101 gtk_container_set_border_width(GTK_CONTAINER(table2), 8); 102 gtk_grid_set_row_spacing(GTK_GRID(table2), 4); 103 gtk_grid_set_column_spacing(GTK_GRID(table2), 8); 104 105 gtk_grid_attach(GTK_GRID(table), table2, 0, 1, 1, 1); 106 gtk_widget_set_hexpand(table2, TRUE); 107 gtk_widget_set_halign(table2, GTK_ALIGN_FILL); 108 109 uri_label = gtk_label_new ("Web browser"); 110 gtk_widget_show(uri_label); 111 i++; 112 gtk_label_set_justify(GTK_LABEL (uri_label), GTK_JUSTIFY_RIGHT); 113 gtk_label_set_xalign(GTK_LABEL (uri_label), 1.0); 114 gtk_grid_attach(GTK_GRID(table2), uri_label, 0, i, 1, 1); 115 uri_entry = gtk_entry_new(); 116 gtk_widget_show(uri_entry); 117 gtk_entry_set_text(GTK_ENTRY(uri_entry), prefs_common.uri_cmd ? prefs_common.uri_cmd : ""); 118 gtk_grid_attach(GTK_GRID(table2), uri_entry, 1, i, 1, 1); 119 120 exteditor_label = gtk_label_new ("Text editor"); 121 gtk_widget_show(exteditor_label); 122 i++; 123 gtk_label_set_justify(GTK_LABEL (exteditor_label), GTK_JUSTIFY_RIGHT); 124 gtk_label_set_xalign(GTK_LABEL (exteditor_label), 1.0); 125 gtk_grid_attach(GTK_GRID(table2), exteditor_label, 0, i, 1, 1); 126 exteditor_entry = gtk_entry_new(); 127 gtk_widget_show(exteditor_entry); 128 gtk_entry_set_text(GTK_ENTRY(exteditor_entry), prefs_common.ext_editor_cmd ? prefs_common.ext_editor_cmd : ""); 129 gtk_grid_attach(GTK_GRID(table2), exteditor_entry, 1, i, 1, 1); 130 131 astextviewer_label = gtk_label_new("Display as text"); 132 gtk_widget_show(astextviewer_label); 133 i++; 134 gtk_label_set_justify(GTK_LABEL (astextviewer_label), GTK_JUSTIFY_RIGHT); 135 gtk_label_set_xalign(GTK_LABEL (astextviewer_label), 1.0); 136 gtk_grid_attach(GTK_GRID(table2), astextviewer_label, 0, i, 1, 1); 137 astextviewer_entry = gtk_entry_new(); 138 gtk_widget_show(astextviewer_entry); 139 CLAWS_SET_TIP(astextviewer_entry, 140 _("This option enables MIME parts to be displayed in the " 141 "message view via a script when using the 'Display as text' " 142 "contextual menu item")); 143 gtk_grid_attach(GTK_GRID(table2), astextviewer_entry, 1, i, 1, 1); 144 gtk_widget_set_hexpand(astextviewer_entry, TRUE); 145 gtk_widget_set_halign(astextviewer_entry, GTK_ALIGN_FILL); 146 gtk_entry_set_text(GTK_ENTRY(astextviewer_entry), 147 prefs_common.mime_textviewer ? prefs_common.mime_textviewer : ""); 148 149 prefs_ext_prog->window = GTK_WIDGET(window); 150 prefs_ext_prog->uri_entry = uri_entry; 151 prefs_ext_prog->exteditor_entry = exteditor_entry; 152 prefs_ext_prog->astextviewer_entry = astextviewer_entry; 153 prefs_ext_prog->page.widget = table; 154 } 155 156 static void prefs_ext_prog_save(PrefsPage *_page) 157 { 158 ExtProgPage *ext_prog = (ExtProgPage *) _page; 159 160 prefs_common.uri_cmd = gtk_editable_get_chars 161 (GTK_EDITABLE(ext_prog->uri_entry), 0, -1); 162 prefs_common.ext_editor_cmd = gtk_editable_get_chars 163 (GTK_EDITABLE(ext_prog->exteditor_entry), 0, -1); 164 prefs_common.mime_textviewer = gtk_editable_get_chars 165 (GTK_EDITABLE(ext_prog->astextviewer_entry), 0, -1); 166 } 167 168 static void prefs_ext_prog_destroy_widget(PrefsPage *_page) 169 { 170 /* ExtProgPage *ext_prog = (ExtProgPage *) _page; */ 171 172 } 173 174 ExtProgPage *prefs_ext_prog; 175 176 void prefs_ext_prog_init(void) 177 { 178 ExtProgPage *page; 179 static gchar *path[3]; 180 181 path[0] = _("Message View"); 182 path[1] = _("External Programs"); 183 path[2] = NULL; 184 185 page = g_new0(ExtProgPage, 1); 186 page->page.path = path; 187 page->page.create_widget = prefs_ext_prog_create_widget; 188 page->page.destroy_widget = prefs_ext_prog_destroy_widget; 189 page->page.save_page = prefs_ext_prog_save; 190 page->page.weight = 155.0; 191 prefs_gtk_register_page((PrefsPage *) page); 192 prefs_ext_prog = page; 193 } 194 195 void prefs_ext_prog_done(void) 196 { 197 prefs_gtk_unregister_page((PrefsPage *) prefs_ext_prog); 198 g_free(prefs_ext_prog); 199 }