Skip to content

Commit dd67d69

Browse files
20kdclukefromdc
authored andcommitted
Make caja-open-terminal configurable (Depends on caja GitHub PR caja#1050)
This makes caja-open-terminal implement CajaConfigurable (see related PR), thus allowing the user to configure it from within Caja. Both the MATE-wide terminal application setting (org.mate.applications-terminal exec) and the 'open terminal in Home if called up from Desktop' settings are configurable here.
1 parent 3fecb36 commit dd67d69

File tree

1 file changed

+95
-5
lines changed

1 file changed

+95
-5
lines changed

open-terminal/caja-open-terminal.c

Lines changed: 95 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
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+
143156
static inline gboolean
144157
desktop_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+
528601
static void
529602
caja_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+
535614
static void
536615
caja_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

Comments
 (0)