2828#include "caja-open-terminal.h"
2929
3030#include <libcaja-extension/caja-menu-provider.h>
31+ #include <libcaja-extension/caja-configurable.h>
3132
3233#include <glib/gi18n-lib.h>
3334#include <gtk/gtkicontheme.h>
@@ -140,6 +141,18 @@ desktop_opens_home_dir (void)
140141 return result ;
141142}
142143
144+ static inline gboolean
145+ set_desktop_opens_home_dir (gboolean val )
146+ {
147+ gboolean result ;
148+ GSettings * settings ;
149+
150+ settings = g_settings_new (COT_SCHEMA );
151+ result = g_settings_set_boolean (settings , COT_DESKTOP_KEY , val );
152+ g_object_unref (settings );
153+ return result ;
154+ }
155+
143156static inline gboolean
144157desktop_is_home_dir (void )
145158{
@@ -161,6 +174,24 @@ default_terminal_application (void)
161174 settings = g_settings_new (TERM_SCHEMA );
162175 result = g_settings_get_string (settings , TERM_EXEC_KEY );
163176 g_object_unref (settings );
177+
178+ if (result == NULL || strlen (result ) == 0 ) {
179+ g_free (result );
180+ result = g_strdup ("mate-terminal" );
181+ }
182+
183+ return result ;
184+ }
185+
186+ static inline gboolean
187+ set_default_terminal_application (const gchar * exec )
188+ {
189+ gboolean result ;
190+ GSettings * settings ;
191+
192+ settings = g_settings_new (TERM_SCHEMA );
193+ result = g_settings_set_string (settings , TERM_EXEC_KEY , exec );
194+ g_object_unref (settings );
164195 return result ;
165196}
166197
@@ -291,11 +322,6 @@ open_terminal_callback (CajaMenuItem *item,
291322
292323 terminal_exec = default_terminal_application ();
293324
294- if (terminal_exec == NULL || strlen (terminal_exec ) == 0 ) {
295- g_free (terminal_exec );
296- terminal_exec = g_strdup ("mate-terminal" );
297- }
298-
299325 switch (get_terminal_file_info (file_info )) {
300326 case FILE_INFO_LOCAL :
301327 uri = caja_file_info_get_activation_uri (file_info );
@@ -525,13 +551,66 @@ caja_open_terminal_get_file_items (CajaMenuProvider *provider,
525551 }
526552}
527553
554+ static void
555+ caja_open_terminal_run_config (CajaConfigurable * provider )
556+ {
557+ GtkWidget * extconf_dialog , * extconf_content , * extconf_desktophomedir , * extconf_inform1 , * extconf_inform2 , * extconf_exec ;
558+ gchar * terminal ;
559+
560+ extconf_dialog = gtk_dialog_new ();
561+ extconf_content = gtk_dialog_get_content_area (GTK_DIALOG (extconf_dialog ));
562+
563+ extconf_desktophomedir = gtk_check_button_new_with_label (_ ("Open at Home if trying to open on desktop" ));
564+ extconf_exec = gtk_entry_new ();
565+ extconf_inform1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL , 12 );
566+ extconf_inform2 = gtk_label_new (_ ("Terminal application:" ));
567+
568+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (extconf_desktophomedir ), desktop_opens_home_dir ());
569+
570+ terminal = default_terminal_application ();
571+ gtk_entry_set_text (GTK_ENTRY (extconf_exec ), terminal );
572+ g_free (terminal );
573+
574+ gtk_container_add (GTK_CONTAINER (extconf_inform1 ), extconf_inform2 );
575+ gtk_widget_show (extconf_inform2 );
576+ gtk_container_add (GTK_CONTAINER (extconf_inform1 ), extconf_exec );
577+ gtk_widget_show (extconf_exec );
578+ gtk_box_set_child_packing (GTK_BOX (extconf_inform1 ), extconf_exec , FALSE, FALSE, 0 , GTK_PACK_END );
579+
580+ gtk_container_add (GTK_CONTAINER (extconf_content ), extconf_desktophomedir );
581+ gtk_widget_show (extconf_desktophomedir );
582+ gtk_container_add (GTK_CONTAINER (extconf_content ), extconf_inform1 );
583+ gtk_widget_show (extconf_inform1 );
584+ gtk_container_add (GTK_CONTAINER (extconf_content ), extconf_exec );
585+ gtk_widget_show (extconf_exec );
586+ gtk_dialog_add_buttons (GTK_DIALOG (extconf_dialog ), _ ("Close" ), GTK_RESPONSE_OK , NULL );
587+
588+ gtk_container_set_border_width (GTK_CONTAINER (extconf_inform1 ), 6 );
589+ gtk_container_set_border_width (GTK_CONTAINER (extconf_dialog ), 6 );
590+ gtk_container_set_border_width (GTK_CONTAINER (extconf_content ), 6 );
591+
592+ gtk_window_set_title (GTK_WINDOW (extconf_dialog ), _ ("open-terminal Configuration" ));
593+ gtk_dialog_run (GTK_DIALOG (extconf_dialog ));
594+
595+ set_default_terminal_application (gtk_entry_get_text (GTK_ENTRY (extconf_exec )));
596+ set_desktop_opens_home_dir (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (extconf_desktophomedir )));
597+
598+ gtk_widget_destroy (GTK_WIDGET (extconf_dialog ));
599+ }
600+
528601static void
529602caja_open_terminal_menu_provider_iface_init (CajaMenuProviderIface * iface )
530603{
531604 iface -> get_background_items = caja_open_terminal_get_background_items ;
532605 iface -> get_file_items = caja_open_terminal_get_file_items ;
533606}
534607
608+ static void
609+ caja_open_terminal_configurable_iface_init (CajaConfigurableIface * iface )
610+ {
611+ iface -> run_config = caja_open_terminal_run_config ;
612+ }
613+
535614static void
536615caja_open_terminal_instance_init (CajaOpenTerminal * cvs )
537616{
@@ -569,6 +648,12 @@ caja_open_terminal_register_type (GTypeModule *module)
569648 NULL
570649 };
571650
651+ static const GInterfaceInfo configurable_iface_info = {
652+ (GInterfaceInitFunc ) caja_open_terminal_configurable_iface_init ,
653+ NULL ,
654+ NULL
655+ };
656+
572657 terminal_type = g_type_module_register_type (module ,
573658 G_TYPE_OBJECT ,
574659 "CajaOpenTerminal" ,
@@ -578,4 +663,9 @@ caja_open_terminal_register_type (GTypeModule *module)
578663 terminal_type ,
579664 CAJA_TYPE_MENU_PROVIDER ,
580665 & menu_provider_iface_info );
666+
667+ g_type_module_add_interface (module ,
668+ terminal_type ,
669+ CAJA_TYPE_CONFIGURABLE ,
670+ & configurable_iface_info );
581671}
0 commit comments