From f3e72e52a44305092a07f49ba9dcd3399977ebfa Mon Sep 17 00:00:00 2001 From: Wolfgang Ulbrich Date: Sun, 15 Nov 2015 23:47:05 +0100 Subject: [PATCH 1/5] port to vte291 Thank you to Author: egmont@gmail.com --- configure.ac | 2 +- src/terminal-profile.c | 7 ++++ src/terminal-screen-container.c | 8 ++++ src/terminal-screen.c | 69 ++++++++++++++++++++++++++++++++- src/terminal-window.c | 14 +++++++ 5 files changed, 97 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 3bae705..3364768 100644 --- a/configure.ac +++ b/configure.ac @@ -68,7 +68,7 @@ case "$with_gtk" in 3.0) GTK_API_VERSION=3.0 GTK_REQUIRED=3.0.0 GDK_TARGETS="$($PKG_CONFIG --variable targets gdk-$GTK_API_VERSION)" - VTE_PC_VERSION=-2.90 + VTE_PC_VERSION=-2.91 ;; esac diff --git a/src/terminal-profile.c b/src/terminal-profile.c index d917a23..fec496e 100644 --- a/src/terminal-profile.c +++ b/src/terminal-profile.c @@ -1271,10 +1271,17 @@ terminal_profile_class_init (TerminalProfileClass *klass) TERMINAL_PROFILE_PROPERTY_DOUBLE (BACKGROUND_DARKNESS, 0.0, 1.0, DEFAULT_BACKGROUND_DARKNESS, KEY_BACKGROUND_DARKNESS); TERMINAL_PROFILE_PROPERTY_ENUM (BACKGROUND_TYPE, TERMINAL_TYPE_BACKGROUND_TYPE, DEFAULT_BACKGROUND_TYPE, KEY_BACKGROUND_TYPE); +#if VTE_CHECK_VERSION (0, 38, 0) + TERMINAL_PROFILE_PROPERTY_ENUM (BACKSPACE_BINDING, VTE_TYPE_ERASE_BINDING, DEFAULT_BACKSPACE_BINDING, KEY_BACKSPACE_BINDING); + TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_BLINK_MODE, VTE_TYPE_CURSOR_BLINK_MODE, DEFAULT_CURSOR_BLINK_MODE, KEY_CURSOR_BLINK_MODE); + TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_SHAPE, VTE_TYPE_CURSOR_SHAPE, DEFAULT_CURSOR_SHAPE, KEY_CURSOR_SHAPE); + TERMINAL_PROFILE_PROPERTY_ENUM (DELETE_BINDING, VTE_TYPE_ERASE_BINDING, DEFAULT_DELETE_BINDING, KEY_DELETE_BINDING); +#else TERMINAL_PROFILE_PROPERTY_ENUM (BACKSPACE_BINDING, VTE_TYPE_TERMINAL_ERASE_BINDING, DEFAULT_BACKSPACE_BINDING, KEY_BACKSPACE_BINDING); TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_BLINK_MODE, VTE_TYPE_TERMINAL_CURSOR_BLINK_MODE, DEFAULT_CURSOR_BLINK_MODE, KEY_CURSOR_BLINK_MODE); TERMINAL_PROFILE_PROPERTY_ENUM (CURSOR_SHAPE, VTE_TYPE_TERMINAL_CURSOR_SHAPE, DEFAULT_CURSOR_SHAPE, KEY_CURSOR_SHAPE); TERMINAL_PROFILE_PROPERTY_ENUM (DELETE_BINDING, VTE_TYPE_TERMINAL_ERASE_BINDING, DEFAULT_DELETE_BINDING, KEY_DELETE_BINDING); +#endif TERMINAL_PROFILE_PROPERTY_ENUM (EXIT_ACTION, TERMINAL_TYPE_EXIT_ACTION, DEFAULT_EXIT_ACTION, KEY_EXIT_ACTION); TERMINAL_PROFILE_PROPERTY_ENUM (SCROLLBAR_POSITION, TERMINAL_TYPE_SCROLLBAR_POSITION, DEFAULT_SCROLLBAR_POSITION, KEY_SCROLLBAR_POSITION); TERMINAL_PROFILE_PROPERTY_ENUM (TITLE_MODE, TERMINAL_TYPE_TITLE_MODE, DEFAULT_TITLE_MODE, KEY_TITLE_MODE); diff --git a/src/terminal-screen-container.c b/src/terminal-screen-container.c index 1681c6d..8c82c63 100644 --- a/src/terminal-screen-container.c +++ b/src/terminal-screen-container.c @@ -143,7 +143,11 @@ terminal_screen_container_constructor (GType type, g_assert (priv->screen != NULL); #ifdef USE_SCROLLED_WINDOW +#if VTE_CHECK_VERSION (0, 38, 0) + priv->scrolled_window = gtk_scrolled_window_new (NULL, gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->screen))); +#else priv->scrolled_window = gtk_scrolled_window_new (NULL, vte_terminal_get_adjustment (VTE_TERMINAL (priv->screen))); +#endif gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window), priv->hscrollbar_policy, @@ -163,7 +167,11 @@ terminal_screen_container_constructor (GType type, priv->hbox = gtk_hbox_new (FALSE, 0); +#if VTE_CHECK_VERSION (0, 38, 0) + priv->vscrollbar = gtk_vscrollbar_new (gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->screen))); +#else priv->vscrollbar = gtk_vscrollbar_new (vte_terminal_get_adjustment (VTE_TERMINAL (priv->screen))); +#endif gtk_box_pack_start (GTK_BOX (priv->hbox), GTK_WIDGET (priv->screen), TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (priv->hbox), priv->vscrollbar, FALSE, FALSE, 0); diff --git a/src/terminal-screen.c b/src/terminal-screen.c index b3318bc..d5c8c14 100644 --- a/src/terminal-screen.c +++ b/src/terminal-screen.c @@ -119,7 +119,11 @@ static gboolean terminal_screen_popup_menu (GtkWidget *widget); static gboolean terminal_screen_button_press (GtkWidget *widget, GdkEventButton *event); static void terminal_screen_launch_child_on_idle (TerminalScreen *screen); -static void terminal_screen_child_exited (VteTerminal *terminal); +#if VTE_CHECK_VERSION (0, 38, 0) +static void terminal_screen_child_exited (VteTerminal *terminal, int status); +#else +static void terminal_screen_child_exited (VteTerminal *terminal); +#endif static void terminal_screen_window_title_changed (VteTerminal *vte_terminal, TerminalScreen *screen); @@ -305,11 +309,13 @@ terminal_screen_realize (GtkWidget *widget) GTK_WIDGET_CLASS (terminal_screen_parent_class)->realize (widget); +#if !VTE_CHECK_VERSION (0, 38, 0) /* FIXME: Don't enable this if we have a compmgr. */ bg_type = terminal_profile_get_property_enum (priv->profile, TERMINAL_PROFILE_BACKGROUND_TYPE); vte_terminal_set_background_transparent (VTE_TERMINAL (screen), bg_type == TERMINAL_BACKGROUND_TRANSPARENT && !window_uses_argb_visual (screen)); +#endif } static void @@ -970,8 +976,15 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, vte_terminal_set_audible_bell (vte_terminal, !terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SILENT_BELL)); if (!prop_name || prop_name == I_(TERMINAL_PROFILE_WORD_CHARS)) +#if VTE_CHECK_VERSION (0, 40, 0) + vte_terminal_set_word_char_exceptions (vte_terminal, + terminal_profile_get_property_string (profile, TERMINAL_PROFILE_WORD_CHARS)); +#elif !VTE_CHECK_VERSION (0, 38, 0) vte_terminal_set_word_chars (vte_terminal, terminal_profile_get_property_string (profile, TERMINAL_PROFILE_WORD_CHARS)); +#else + {} +#endif if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)) vte_terminal_set_scroll_on_keystroke (vte_terminal, terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE)); @@ -1013,6 +1026,8 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, } #endif /* ENABLE_SKEY */ +/* Background image support was removed in vte 0.38 */ +#if !VTE_CHECK_VERSION (0, 38, 0) if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE) || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_IMAGE) || @@ -1053,6 +1068,7 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, bg_type == TERMINAL_BACKGROUND_TRANSPARENT && !window_uses_argb_visual (screen)); } +#endif if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKSPACE_BINDING)) vte_terminal_set_backspace_binding (vte_terminal, @@ -1077,6 +1093,22 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, g_object_thaw_notify (object); } +/* TODO: Once Gtk2 support is dropped, mate-terminal should be converted to use GdkRGBA everywhere instead of GdkColor. */ +#if VTE_CHECK_VERSION (0, 38, 0) +static GdkRGBA * +gdk_color_to_rgba (const GdkColor *color, + GdkRGBA *rgba) +{ + if (color == NULL) + return NULL; + rgba->red = color->red / 65535.0; + rgba->green = color->green / 65535.0; + rgba->blue = color->blue / 65535.0; + rgba->alpha = 1.0; + return rgba; +} +#endif + static void update_color_scheme (TerminalScreen *screen) { @@ -1112,11 +1144,30 @@ update_color_scheme (TerminalScreen *screen) n_colors = G_N_ELEMENTS (colors); terminal_profile_get_palette (priv->profile, colors, &n_colors); +#if VTE_CHECK_VERSION (0, 38, 0) + { + GdkRGBA colors_rgba[TERMINAL_PALETTE_SIZE]; + GdkRGBA fg_rgba, bg_rgba, bold_rgba; + int i; + + for (i = 0; i < n_colors; i++) + gdk_color_to_rgba (&colors[i], &colors_rgba[i]); + + vte_terminal_set_colors (VTE_TERMINAL (screen), + gdk_color_to_rgba (&fg, &fg_rgba), + gdk_color_to_rgba (&bg, &bg_rgba), + colors_rgba, n_colors); + if (bold_color) + vte_terminal_set_color_bold (VTE_TERMINAL (screen), + gdk_color_to_rgba (bold_color, &bold_rgba)); + } +#else vte_terminal_set_colors (VTE_TERMINAL (screen), &fg, &bg, colors, n_colors); if (bold_color) vte_terminal_set_color_bold (VTE_TERMINAL (screen), bold_color); vte_terminal_set_background_tint_color (VTE_TERMINAL (screen), &bg); +#endif } void @@ -1502,7 +1553,12 @@ terminal_screen_launch_child_cb (TerminalScreen *screen) pty_flags |= VTE_PTY_NO_UTMP | VTE_PTY_NO_WTMP; if (!get_child_command (screen, shell, &spawn_flags, &argv, &err) || - !vte_terminal_fork_command_full (terminal, +#if VTE_CHECK_VERSION (0, 38, 0) + !vte_terminal_spawn_sync ( +#else + !vte_terminal_fork_command_full ( +#endif + terminal, pty_flags, working_dir, argv, @@ -1510,6 +1566,9 @@ terminal_screen_launch_child_cb (TerminalScreen *screen) spawn_flags, NULL, NULL, &pid, +#if VTE_CHECK_VERSION (0, 38, 0) + NULL, +#endif &err)) { GtkWidget *info_bar; @@ -1872,7 +1931,11 @@ terminal_screen_icon_title_changed (VteTerminal *vte_terminal, } static void +#if VTE_CHECK_VERSION (0, 38, 0) +terminal_screen_child_exited (VteTerminal *terminal, int status) +#else terminal_screen_child_exited (VteTerminal *terminal) +#endif { TerminalScreen *screen = TERMINAL_SCREEN (terminal); TerminalScreenPrivate *priv = screen->priv; @@ -1900,9 +1963,11 @@ terminal_screen_child_exited (VteTerminal *terminal) case TERMINAL_EXIT_HOLD: { GtkWidget *info_bar; +#if !VTE_CHECK_VERSION (0, 38, 0) int status; status = vte_terminal_get_child_exit_status (terminal); +#endif info_bar = terminal_info_bar_new (GTK_MESSAGE_INFO, _("_Relaunch"), RESPONSE_RELAUNCH, diff --git a/src/terminal-window.c b/src/terminal-window.c index 3b8dc97..3b803ca 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -766,7 +766,11 @@ terminal_set_encoding_callback (GtkToggleAction *action, g_assert (encoding); vte_terminal_set_encoding (VTE_TERMINAL (priv->active_screen), +#if VTE_CHECK_VERSION (0, 38, 0) + terminal_encoding_get_charset (encoding), NULL); +#else terminal_encoding_get_charset (encoding)); +#endif } static void @@ -1366,6 +1370,7 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard, action = gtk_action_group_get_action (priv->action_group, "PopupInputMethods"); gtk_action_set_visible (action, show_input_method_menu); +#if !VTE_CHECK_VERSION (0, 38, 0) im_menu_item = gtk_ui_manager_get_widget (priv->ui_manager, "/Popup/PopupInputMethods"); /* FIXME: fix this when gtk+ bug #500065 is done, use vte_terminal_im_merge_ui */ @@ -1381,6 +1386,7 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard, { gtk_menu_item_set_submenu (GTK_MENU_ITEM (im_menu_item), NULL); } +#endif popup_menu = gtk_ui_manager_get_widget (priv->ui_manager, "/Popup"); g_signal_connect (popup_menu, "deactivate", @@ -3769,7 +3775,11 @@ search_find_response_callback (GtkWidget *dialog, flags = terminal_search_dialog_get_search_flags (dialog); +#if VTE_CHECK_VERSION (0, 38, 0) + vte_terminal_search_set_gregex (VTE_TERMINAL (priv->active_screen), regex, 0); +#else vte_terminal_search_set_gregex (VTE_TERMINAL (priv->active_screen), regex); +#endif vte_terminal_search_set_wrap_around (VTE_TERMINAL (priv->active_screen), (flags & TERMINAL_SEARCH_FLAG_WRAP_AROUND)); @@ -3840,7 +3850,11 @@ search_clear_highlight_callback (GtkAction *action, if (G_UNLIKELY (!window->priv->active_screen)) return; +#if VTE_CHECK_VERSION (0, 38, 0) + vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL, 0); +#else vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL); +#endif } static void From 387af1fe861294d489fe4cff4eb6476fab15b793 Mon Sep 17 00:00:00 2001 From: Wolfgang Ulbrich Date: Sun, 15 Nov 2015 23:54:19 +0100 Subject: [PATCH 2/5] vte291: Fix geometry issues Thank you Author: egmont@gmail.com --- src/terminal-screen.c | 21 +++++++++++++++++++-- src/terminal-window.c | 25 ++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/terminal-screen.c b/src/terminal-screen.c index d5c8c14..524eca7 100644 --- a/src/terminal-screen.c +++ b/src/terminal-screen.c @@ -138,8 +138,12 @@ static void terminal_screen_cook_title (TerminalScreen *screen); static void terminal_screen_cook_icon_title (TerminalScreen *screen); static char* terminal_screen_check_match (TerminalScreen *screen, +#if VTE_CHECK_VERSION (0, 38, 0) + GdkEvent *event, +#else int column, int row, +#endif int *flavor); static guint signals[LAST_SIGNAL] = { 0 }; @@ -1679,14 +1683,19 @@ terminal_screen_button_press (GtkWidget *widget, TerminalScreen *screen = TERMINAL_SCREEN (widget); gboolean (* button_press_event) (GtkWidget*, GdkEventButton*) = GTK_WIDGET_CLASS (terminal_screen_parent_class)->button_press_event; - int char_width, char_height, row, col; char *matched_string; int matched_flavor = 0; guint state; +#if !VTE_CHECK_VERSION (0, 38, 0) + int char_width, char_height, row, col; GtkBorder *inner_border = NULL; +#endif state = event->state & gtk_accelerator_get_default_mod_mask (); +#if VTE_CHECK_VERSION (0, 38, 0) + matched_string = terminal_screen_check_match (screen, event, &matched_flavor); +#else terminal_screen_get_cell_size (screen, &char_width, &char_height); gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); @@ -1694,8 +1703,8 @@ terminal_screen_button_press (GtkWidget *widget, col = (event->y - (inner_border ? inner_border->top : 0)) / char_height; gtk_border_free (inner_border); - /* FIXMEchpe: add vte API to do this check by widget coords instead of grid coords */ matched_string = terminal_screen_check_match (screen, row, col, &matched_flavor); +#endif if (matched_string != NULL && (event->button == 1 || event->button == 2) && @@ -2334,8 +2343,12 @@ terminal_screen_skey_match_remove (TerminalScreen *screen) static char* terminal_screen_check_match (TerminalScreen *screen, +#if VTE_CHECK_VERSION (0, 38, 0) + GdkEvent *event, +#else int column, int row, +#endif int *flavor) { TerminalScreenPrivate *priv = screen->priv; @@ -2343,7 +2356,11 @@ terminal_screen_check_match (TerminalScreen *screen, int tag; char *match; +#if VTE_CHECK_VERSION (0, 38, 0) + match = vte_terminal_match_check_event (VTE_TERMINAL (screen), event, &tag); +#else match = vte_terminal_match_check (VTE_TERMINAL (screen), column, row, &tag); +#endif for (tags = priv->match_tags; tags != NULL; tags = tags->next) { TagData *tag_data = (TagData*) tags->data; diff --git a/src/terminal-window.c b/src/terminal-window.c index 3b803ca..cb933ea 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -1060,6 +1060,7 @@ update_edit_menu(TerminalWindow *window) g_object_ref (window)); } +/* width and height are character-based in vte 0.38, pixel-based in previous versions */ static void screen_resize_window_cb (TerminalScreen *screen, guint width, @@ -1069,12 +1070,13 @@ screen_resize_window_cb (TerminalScreen *screen, TerminalWindowPrivate *priv = window->priv; VteTerminal *terminal = VTE_TERMINAL (screen); GtkWidget *widget = GTK_WIDGET (screen); +#if !VTE_CHECK_VERSION (0, 38, 0) guint grid_width, grid_height; int char_width, char_height; GtkBorder *inner_border = NULL; GtkAllocation widget_allocation; +#endif - gtk_widget_get_allocation (widget, &widget_allocation); /* Don't do anything if we're maximised or fullscreened */ // FIXME: realized && ... instead? if (!gtk_widget_get_realized (widget) || @@ -1083,6 +1085,11 @@ screen_resize_window_cb (TerminalScreen *screen, /* NOTE: width and height already include the VteTerminal's padding! */ +#if VTE_CHECK_VERSION (0, 38, 0) + vte_terminal_set_size (terminal, width, height); +#else + gtk_widget_get_allocation (widget, &widget_allocation); + /* Short-circuit */ if (((int) width) == widget_allocation.width && ((int) height) == widget_allocation.height) @@ -1099,6 +1106,7 @@ screen_resize_window_cb (TerminalScreen *screen, gtk_border_free (inner_border); vte_terminal_set_size (terminal, grid_width, grid_height); +#endif if (screen != priv->active_screen) return; @@ -3128,18 +3136,29 @@ terminal_window_update_geometry (TerminalWindow *window) char_height != priv->old_char_height || widget != (GtkWidget*) priv->old_geometry_widget) { - GtkBorder *inner_border = NULL; - /* FIXME Since we're using xthickness/ythickness to compute * padding we need to change the hints when the theme changes. */ +#if VTE_CHECK_VERSION (0, 38, 0) + GtkBorder padding; + + gtk_style_context_get_padding(gtk_widget_get_style_context(widget), + gtk_widget_get_state_flags(widget), + &padding); + + hints.base_width = padding.left + padding.right; + hints.base_height = padding.top + padding.bottom; +#else + GtkBorder *inner_border = NULL; + gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); hints.base_width = (inner_border ? (inner_border->left + inner_border->right) : 0); hints.base_height = (inner_border ? (inner_border->top + inner_border->bottom) : 0); gtk_border_free (inner_border); +#endif #define MIN_WIDTH_CHARS 4 #define MIN_HEIGHT_CHARS 1 From 68a474cd334586ed5d2b3990df51a00121b1868d Mon Sep 17 00:00:00 2001 From: Wolfgang Ulbrich Date: Sun, 15 Nov 2015 23:57:54 +0100 Subject: [PATCH 3/5] vte291: fix transparency background Thank you Author: egmont@gmail.com --- src/terminal-screen.c | 27 +++++++++++++++++++++------ src/terminal-window.c | 2 ++ src/terminal-window.h | 2 ++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/terminal-screen.c b/src/terminal-screen.c index 524eca7..d110386 100644 --- a/src/terminal-screen.c +++ b/src/terminal-screen.c @@ -292,6 +292,7 @@ terminal_screen_get_window (TerminalScreen *screen) return TERMINAL_WINDOW (toplevel); } +#if !VTE_CHECK_VERSION (0, 38, 0) static gboolean window_uses_argb_visual (TerminalScreen *screen) { @@ -303,13 +304,16 @@ window_uses_argb_visual (TerminalScreen *screen) return terminal_window_uses_argb_visual (window); } +#endif static void terminal_screen_realize (GtkWidget *widget) { +#if !VTE_CHECK_VERSION (0, 38, 0) TerminalScreen *screen = TERMINAL_SCREEN (widget); TerminalScreenPrivate *priv = screen->priv; TerminalBackgroundType bg_type; +#endif GTK_WIDGET_CLASS (terminal_screen_parent_class)->realize (widget); @@ -927,7 +931,9 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, GObject *object = G_OBJECT (screen); VteTerminal *vte_terminal = VTE_TERMINAL (screen); const char *prop_name; +#if !VTE_CHECK_VERSION (0, 38, 0) TerminalBackgroundType bg_type; +#endif TerminalWindow *window; if (pspec) @@ -971,6 +977,10 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS) || prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) || +#if VTE_CHECK_VERSION (0, 38, 0) + prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE) || + prop_name == I_(TERMINAL_PROFILE_BACKGROUND_DARKNESS) || +#endif prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR_SAME_AS_FG) || prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) || prop_name == I_(TERMINAL_PROFILE_PALETTE)) @@ -1030,7 +1040,8 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, } #endif /* ENABLE_SKEY */ -/* Background image support was removed in vte 0.38 */ +/* Background image support was removed in vte 0.38. + * Transparency for 0.38+ is handled above next to TERMINAL_PROFILE_BACKGROUND_COLOR. */ #if !VTE_CHECK_VERSION (0, 38, 0) if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE) || @@ -1101,6 +1112,7 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile, #if VTE_CHECK_VERSION (0, 38, 0) static GdkRGBA * gdk_color_to_rgba (const GdkColor *color, + double alpha, GdkRGBA *rgba) { if (color == NULL) @@ -1108,7 +1120,7 @@ gdk_color_to_rgba (const GdkColor *color, rgba->red = color->red / 65535.0; rgba->green = color->green / 65535.0; rgba->blue = color->blue / 65535.0; - rgba->alpha = 1.0; + rgba->alpha = alpha; return rgba; } #endif @@ -1152,18 +1164,21 @@ update_color_scheme (TerminalScreen *screen) { GdkRGBA colors_rgba[TERMINAL_PALETTE_SIZE]; GdkRGBA fg_rgba, bg_rgba, bold_rgba; + double alpha = 1.0; int i; for (i = 0; i < n_colors; i++) - gdk_color_to_rgba (&colors[i], &colors_rgba[i]); + gdk_color_to_rgba (&colors[i], 1.0, &colors_rgba[i]); + if (terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE) == TERMINAL_BACKGROUND_TRANSPARENT) + alpha = terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS); vte_terminal_set_colors (VTE_TERMINAL (screen), - gdk_color_to_rgba (&fg, &fg_rgba), - gdk_color_to_rgba (&bg, &bg_rgba), + gdk_color_to_rgba (&fg, 1.0, &fg_rgba), + gdk_color_to_rgba (&bg, alpha, &bg_rgba), colors_rgba, n_colors); if (bold_color) vte_terminal_set_color_bold (VTE_TERMINAL (screen), - gdk_color_to_rgba (bold_color, &bold_rgba)); + gdk_color_to_rgba (bold_color, 1.0, &bold_rgba)); } #else vte_terminal_set_colors (VTE_TERMINAL (screen), &fg, &bg, diff --git a/src/terminal-window.c b/src/terminal-window.c index cb933ea..9033cb4 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -1165,12 +1165,14 @@ terminal_window_update_tabs_menu_sensitivity (TerminalWindow *window) gtk_action_set_sensitive (action, num_pages > 1); } +#if !VTE_CHECK_VERSION (0, 38, 0) gboolean terminal_window_uses_argb_visual (TerminalWindow *window) { TerminalWindowPrivate *priv = window->priv; return priv->have_argb_visual; } +#endif static void update_tab_visibility (TerminalWindow *window, diff --git a/src/terminal-window.h b/src/terminal-window.h index b9e8fa7..c07dbda 100644 --- a/src/terminal-window.h +++ b/src/terminal-window.h @@ -95,7 +95,9 @@ void terminal_window_set_size_force_grid (TerminalWindow *window, GtkWidget* terminal_window_get_notebook (TerminalWindow *window); +#if !VTE_CHECK_VERSION (0, 38, 0) gboolean terminal_window_uses_argb_visual (TerminalWindow *window); +#endif void terminal_window_save_state (TerminalWindow *window, GKeyFile *key_file, From 54db8f05e1a371b2af9814d1584a384d5579278e Mon Sep 17 00:00:00 2001 From: Wolfgang Ulbrich Date: Mon, 16 Nov 2015 00:01:30 +0100 Subject: [PATCH 4/5] vte291: Remove the background image UI setting Thank you Author: egmont@gmail.com --- src/profile-editor.c | 6 ++++++ src/profile-preferences.ui | 29 +++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/profile-editor.c b/src/profile-editor.c index d66b5da..cbfc394 100644 --- a/src/profile-editor.c +++ b/src/profile-editor.c @@ -141,6 +141,11 @@ profile_notify_sensitivity_cb (TerminalProfile *profile, !terminal_profile_property_locked (profile, TERMINAL_PROFILE_CUSTOM_COMMAND)); } +#if VTE_CHECK_VERSION (0, 38, 0) + gtk_widget_hide (profile_editor_get_widget (editor, "background-image")); + gtk_widget_hide (profile_editor_get_widget (editor, "darken-background-transparent-or-image-scale-label")); + gtk_widget_show (profile_editor_get_widget (editor, "darken-background-transparent-scale-label")); +#else if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE)) { gboolean bg_type_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); @@ -168,6 +173,7 @@ profile_notify_sensitivity_cb (TerminalProfile *profile, SET_SENSITIVE ("darken-background-vbox", FALSE); } } +#endif if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_SYSTEM_FONT) || diff --git a/src/profile-preferences.ui b/src/profile-preferences.ui index a14d26b..83d1042 100644 --- a/src/profile-preferences.ui +++ b/src/profile-preferences.ui @@ -2202,7 +2202,7 @@ - + True False 6 @@ -2354,7 +2354,7 @@ False 6 - + True S_hade transparent or image background: True @@ -2378,6 +2378,31 @@ False + + + False + S_hade transparent background: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + darken-background-scale + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + False + False + + True From 5ecc6d7c26e7d721245bc06ba0d699d7f072c052 Mon Sep 17 00:00:00 2001 From: Wolfgang Ulbrich Date: Tue, 17 Nov 2015 13:13:06 +0100 Subject: [PATCH 5/5] vte291: fix sensitive state of transparency slider --- src/profile-editor.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/profile-editor.c b/src/profile-editor.c index cbfc394..3d33639 100644 --- a/src/profile-editor.c +++ b/src/profile-editor.c @@ -145,6 +145,22 @@ profile_notify_sensitivity_cb (TerminalProfile *profile, gtk_widget_hide (profile_editor_get_widget (editor, "background-image")); gtk_widget_hide (profile_editor_get_widget (editor, "darken-background-transparent-or-image-scale-label")); gtk_widget_show (profile_editor_get_widget (editor, "darken-background-transparent-scale-label")); + if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE)) + { + gboolean bg_type_locked = terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); + SET_SENSITIVE ("solid-radiobutton", !bg_type_locked); + SET_SENSITIVE ("transparent-radiobutton", !bg_type_locked); + + bg_type = terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE); + if (bg_type == TERMINAL_BACKGROUND_TRANSPARENT) + { + SET_SENSITIVE ("darken-background-vbox", !terminal_profile_property_locked (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS)); + } + else + { + SET_SENSITIVE ("darken-background-vbox", FALSE); + } + } #else if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE)) {