diff --git a/src/org.mate.terminal.gschema.xml.in b/src/org.mate.terminal.gschema.xml.in index 2e0659c..2ab3d7e 100644 --- a/src/org.mate.terminal.gschema.xml.in +++ b/src/org.mate.terminal.gschema.xml.in @@ -278,6 +278,11 @@ Highlight S/Key challenges Popup a dialog when an S/Key challenge response query is detected and clicked on. Typing a password into the dialog will send it to the terminal. + + true + Highlight URLs under mouse pointer + If true, URLs under mouse pointer are highlighted and can be opened by mouse click together with control key or used in context menu. + diff --git a/src/profile-editor.c b/src/profile-editor.c index fc13235..e0d54b2 100644 --- a/src/profile-editor.c +++ b/src/profile-editor.c @@ -253,6 +253,15 @@ profile_notify_sensitivity_cb (TerminalProfile *profile, SET_SENSITIVE ("copy-checkbutton", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_COPY_SELECTION)); +#ifdef ENABLE_SKEY + if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_SKEY)) + SET_SENSITIVE ("use-skey-checkbutton", + !terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_SKEY)); +#endif + if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_URLS)) + SET_SENSITIVE ("use-urls-checkbutton", + !terminal_profile_property_locked (profile, TERMINAL_PROFILE_USE_URLS)); + if (!prop_name || prop_name == I_(TERMINAL_PROFILE_WORD_CHARS)) SET_SENSITIVE ("word-chars-entry", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_WORD_CHARS)); @@ -683,7 +692,9 @@ terminal_profile_edit (TerminalProfile *profile, editor = (GtkWidget *) gtk_builder_get_object (builder, "profile-editor-dialog"); g_object_set_data_full (G_OBJECT (editor), "builder", builder, (GDestroyNotify) g_object_unref); - +#ifndef ENABLE_SKEY + gtk_widget_hide (profile_editor_get_widget (editor, "use-skey-checkbutton")); +#endif /* Store the dialogue on the profile, so we can acccess it above to check if * there's already a profile editor for this profile. */ @@ -818,6 +829,10 @@ terminal_profile_edit (TerminalProfile *profile, CONNECT_WITH_FLAGS ("bell-checkbutton", TERMINAL_PROFILE_SILENT_BELL, FLAG_INVERT_BOOL); /* CONNECT_WITH_FLAGS ("copy-checkbutton", TERMINAL_PROFILE_COPY_SELECTION, FLAG_INVERT_BOOL); */ CONNECT ("copy-checkbutton", TERMINAL_PROFILE_COPY_SELECTION); +#ifdef ENABLE_SKEY + CONNECT ("use-skey-checkbutton", TERMINAL_PROFILE_USE_SKEY); +#endif + CONNECT ("use-urls-checkbutton", TERMINAL_PROFILE_USE_URLS); #undef CONNECT #undef CONNECT_WITH_FLAGS diff --git a/src/profile-preferences.ui b/src/profile-preferences.ui index 131a810..59734dc 100644 --- a/src/profile-preferences.ui +++ b/src/profile-preferences.ui @@ -469,6 +469,38 @@ Author: Wolfgang Ulbrich 6 + + + Highlight _S/Key challenges under mouse pointer + True + True + False + start + True + True + + + False + False + 7 + + + + + Highlight _URLs under mouse pointer + True + True + False + start + True + True + + + False + False + 8 + + True @@ -513,7 +545,7 @@ Author: Wolfgang Ulbrich False True - 7 + 9 @@ -560,7 +592,7 @@ Author: Wolfgang Ulbrich False True - 8 + 10 @@ -600,7 +632,7 @@ Author: Wolfgang Ulbrich False True - 9 + 11 @@ -616,7 +648,7 @@ Author: Wolfgang Ulbrich False False - 10 + 12 @@ -727,7 +759,7 @@ Author: Wolfgang Ulbrich False True - 11 + 13 diff --git a/src/terminal-profile.c b/src/terminal-profile.c index 02daa6a..ab25741 100644 --- a/src/terminal-profile.c +++ b/src/terminal-profile.c @@ -79,6 +79,7 @@ enum PROP_USE_CUSTOM_COMMAND, PROP_USE_CUSTOM_DEFAULT_SIZE, PROP_USE_SKEY, + PROP_USE_URLS, PROP_USE_SYSTEM_FONT, PROP_USE_THEME_COLORS, PROP_VISIBLE_NAME, @@ -120,6 +121,7 @@ enum #define KEY_USE_CUSTOM_COMMAND "use-custom-command" #define KEY_USE_CUSTOM_DEFAULT_SIZE "use-custom-default-size" #define KEY_USE_SKEY "use-skey" +#define KEY_USE_URLS "use-urls" #define KEY_USE_SYSTEM_FONT "use-system-font" #define KEY_USE_THEME_COLORS "use-theme-colors" #define KEY_VISIBLE_NAME "visible-name" @@ -160,6 +162,7 @@ enum #define DEFAULT_USE_CUSTOM_COMMAND (FALSE) #define DEFAULT_USE_CUSTOM_DEFAULT_SIZE (FALSE) #define DEFAULT_USE_SKEY (TRUE) +#define DEFAULT_USE_URLS (TRUE) #define DEFAULT_USE_SYSTEM_FONT (TRUE) #define DEFAULT_USE_THEME_COLORS (TRUE) #define DEFAULT_VISIBLE_NAME (N_("Unnamed")) @@ -1298,6 +1301,7 @@ terminal_profile_class_init (TerminalProfileClass *klass) TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_CUSTOM_COMMAND, DEFAULT_USE_CUSTOM_COMMAND, KEY_USE_CUSTOM_COMMAND); TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_CUSTOM_DEFAULT_SIZE, DEFAULT_USE_CUSTOM_DEFAULT_SIZE, KEY_USE_CUSTOM_DEFAULT_SIZE); TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_SKEY, DEFAULT_USE_SKEY, KEY_USE_SKEY); + TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_URLS, DEFAULT_USE_URLS, KEY_USE_URLS); TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_SYSTEM_FONT, DEFAULT_USE_SYSTEM_FONT, KEY_USE_SYSTEM_FONT); TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_THEME_COLORS, DEFAULT_USE_THEME_COLORS, KEY_USE_THEME_COLORS); diff --git a/src/terminal-profile.h b/src/terminal-profile.h index 007766f..d8f41b2 100644 --- a/src/terminal-profile.h +++ b/src/terminal-profile.h @@ -101,6 +101,7 @@ typedef enum #define TERMINAL_PROFILE_USE_CUSTOM_COMMAND "use-custom-command" #define TERMINAL_PROFILE_USE_CUSTOM_DEFAULT_SIZE "use-custom-default-size" #define TERMINAL_PROFILE_USE_SKEY "use-skey" +#define TERMINAL_PROFILE_USE_URLS "use-urls" #define TERMINAL_PROFILE_USE_SYSTEM_FONT "use-system-font" #define TERMINAL_PROFILE_USE_THEME_COLORS "use-theme-colors" #define TERMINAL_PROFILE_VISIBLE_NAME "visible-name" diff --git a/src/terminal-screen.c b/src/terminal-screen.c index b4e7460..eb8eeee 100644 --- a/src/terminal-screen.c +++ b/src/terminal-screen.c @@ -174,6 +174,9 @@ static GRegex **url_regexes; static TerminalURLFlavour *url_regex_flavors; static guint n_url_regexes; +static void terminal_screen_url_match_remove (TerminalScreen *screen); + + #ifdef ENABLE_SKEY static const TerminalRegexPattern skey_regex_patterns[] = { @@ -333,12 +336,10 @@ terminal_screen_init (TerminalScreen *screen) { "text/x-moz-url", 0, TARGET_MOZ_URL }, { "_NETSCAPE_URL", 0, TARGET_NETSCAPE_URL } }; - VteTerminal *terminal = VTE_TERMINAL (screen); TerminalScreenPrivate *priv; GtkTargetList *target_list; GtkTargetEntry *targets; int n_targets; - guint i; priv = screen->priv = G_TYPE_INSTANCE_GET_PRIVATE (screen, TERMINAL_TYPE_SCREEN, TerminalScreenPrivate); @@ -351,18 +352,6 @@ terminal_screen_init (TerminalScreen *screen) priv->font_scale = PANGO_SCALE_MEDIUM; - for (i = 0; i < n_url_regexes; ++i) - { - TagData *tag_data; - - tag_data = g_slice_new (TagData); - tag_data->flavor = url_regex_flavors[i]; - tag_data->tag = vte_terminal_match_add_gregex (terminal, url_regexes[i], 0); - vte_terminal_match_set_cursor_type (terminal, tag_data->tag, URL_MATCH_CURSOR); - - priv->match_tags = g_slist_prepend (priv->match_tags, tag_data); - } - /* Setup DND */ target_list = gtk_target_list_new (NULL, 0); gtk_target_list_add_uri_targets (target_list, 0); @@ -1060,6 +1049,29 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, vte_terminal_set_cursor_shape (vte_terminal, terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_CURSOR_SHAPE)); + if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_URLS)) + { + if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_URLS)) + { + guint i; + + for (i = 0; i < n_url_regexes; ++i) + { + TagData *tag_data; + + tag_data = g_slice_new (TagData); + tag_data->flavor = url_regex_flavors[i]; + tag_data->tag = vte_terminal_match_add_gregex (vte_terminal, url_regexes[i], 0); + vte_terminal_match_set_cursor_type (vte_terminal, tag_data->tag, URL_MATCH_CURSOR); + + priv->match_tags = g_slist_prepend (priv->match_tags, tag_data); + } + } + else + { + terminal_screen_url_match_remove (screen); + } + } g_object_thaw_notify (object); } @@ -2312,6 +2324,30 @@ terminal_screen_skey_match_remove (TerminalScreen *screen) } #endif /* ENABLE_SKEY */ +static void +terminal_screen_url_match_remove (TerminalScreen *screen) +{ + TerminalScreenPrivate *priv = screen->priv; + GSList *l, *next; + + l = priv->match_tags; + while (l != NULL) + { + TagData *tag_data = (TagData *) l->data; + + next = l->next; +#ifdef ENABLE_SKEY + if (tag_data->flavor != FLAVOR_SKEY) +#endif + { + vte_terminal_match_remove (VTE_TERMINAL (screen), tag_data->tag); + priv->match_tags = g_slist_delete_link (priv->match_tags, l); + } + + l = next; + } +} + static char* terminal_screen_check_match (TerminalScreen *screen, GdkEvent *event,