diff --git a/terminal/terminal-preferences.c b/terminal/terminal-preferences.c index c807267..9925607 100644 --- a/terminal/terminal-preferences.c +++ b/terminal/terminal-preferences.c @@ -90,6 +90,7 @@ enum PROP_MISC_TAB_CLOSE_MIDDLE_CLICK, PROP_MISC_TAB_POSITION, PROP_MISC_HIGHLIGHT_URLS, + PROP_MISC_URL_ACTIVATE_BUTTON, PROP_SCROLLING_BAR, PROP_SCROLLING_LINES, PROP_SCROLLING_ON_OUTPUT, @@ -796,6 +797,16 @@ terminal_preferences_class_init (TerminalPreferencesClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** + * TerminalPreferences:misc-url-activate-button: + **/ + preferences_props[PROP_MISC_URL_ACTIVATE_BUTTON] = + g_param_spec_uint ("misc-url-activate-button", + NULL, + "MiscUrlActivateButton", + 1, 2, 2, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** * TerminalPreferences:scrolling-bar: **/ preferences_props[PROP_SCROLLING_BAR] = diff --git a/terminal/terminal-widget.c b/terminal/terminal-widget.c index 46f7662..f55fda2 100644 --- a/terminal/terminal-widget.c +++ b/terminal/terminal-widget.c @@ -161,6 +161,7 @@ terminal_widget_class_init (TerminalWidgetClass *klass) gtkwidget_class = GTK_WIDGET_CLASS (klass); gtkwidget_class->button_press_event = terminal_widget_button_press_event; + gtkwidget_class->button_release_event = terminal_widget_button_press_event; gtkwidget_class->drag_data_received = terminal_widget_drag_data_received; gtkwidget_class->key_press_event = terminal_widget_key_press_event; @@ -380,7 +381,12 @@ terminal_widget_context_menu (TerminalWidget *widget, g_object_unref (G_OBJECT (menu)); } - +static void +terminal_widget_selection_changed (TerminalWidget *widget, + gboolean *clipboard_changed) +{ + *clipboard_changed = TRUE; +} static void terminal_widget_commit (TerminalWidget *widget, @@ -391,19 +397,41 @@ terminal_widget_commit (TerminalWidget *widget, *committed = TRUE; } - - static gboolean terminal_widget_button_press_event (GtkWidget *widget, GdkEventButton *event) { gboolean committed = FALSE; + static gboolean clipboard_changed; gchar *match; guint signal_id = 0; + guint signal_id2 = 0; gint tag; + guint mouse_button; + + g_object_get (G_OBJECT (TERMINAL_WIDGET (widget)->preferences), + "misc-url-activate-button", &mouse_button, NULL); + + signal_id = g_signal_connect (G_OBJECT (widget), "commit", + G_CALLBACK (terminal_widget_commit), &committed); + signal_id2 = g_signal_connect (G_OBJECT (widget), "selection-changed", + G_CALLBACK (terminal_widget_selection_changed), &clipboard_changed); + + if (event->type == GDK_BUTTON_RELEASE) + (*GTK_WIDGET_CLASS (terminal_widget_parent_class)->button_release_event) (widget, event); + else + (*GTK_WIDGET_CLASS (terminal_widget_parent_class)->button_press_event) (widget, event); - if (event->button == 2 && event->type == GDK_BUTTON_PRESS) + g_signal_handler_disconnect (G_OBJECT (widget), signal_id); + g_signal_handler_disconnect (G_OBJECT (widget), signal_id2); + + if (event->button == mouse_button && event->type == GDK_BUTTON_RELEASE) { + if (clipboard_changed) + { + clipboard_changed = FALSE; + return TRUE; + } /* middle-clicking on an URI fires the responsible application */ match = vte_terminal_match_check_event (VTE_TERMINAL (widget), (GdkEvent *) event, &tag); if (G_UNLIKELY (match != NULL)) @@ -415,20 +443,10 @@ terminal_widget_button_press_event (GtkWidget *widget, } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { - signal_id = g_signal_connect (G_OBJECT (widget), "commit", - G_CALLBACK (terminal_widget_commit), &committed); - } - - (*GTK_WIDGET_CLASS (terminal_widget_parent_class)->button_press_event) (widget, event); - - if (event->button == 3 && event->type == GDK_BUTTON_PRESS) - { - g_signal_handler_disconnect (G_OBJECT (widget), signal_id); - /* no data (mouse actions) was committed to the terminal application * which means, we can safely popup a context menu now. */ - if (!committed || (event->state & GDK_MODIFIER_MASK) == GDK_SHIFT_MASK) + if (!committed || (event->state & GDK_MODIFIER_MASK) != GDK_SHIFT_MASK) { terminal_widget_context_menu (TERMINAL_WIDGET (widget), event->button, event->time, @@ -439,8 +457,6 @@ terminal_widget_button_press_event (GtkWidget *widget, return TRUE; } - - static void terminal_widget_drag_data_received (GtkWidget *widget, GdkDragContext *context,