talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

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 }