Author: benny Date: 2006-12-21 20:53:43 +0000 (Thu, 21 Dec 2006) New Revision: 24157
Modified: terminal/trunk/ChangeLog terminal/trunk/NEWS terminal/trunk/configure.in.in terminal/trunk/terminal/terminal-app.c terminal/trunk/terminal/terminal-screen.c Log: 2006-12-21 Benedikt Meurer <[EMAIL PROTECTED]> * NEWS, configure.in.in, terminal/terminal-app.c, terminal/terminal-screen.c: Add support for real transparency with GTK+ 2.10 and a compositing manager. Bug #2671. Modified: terminal/trunk/ChangeLog =================================================================== --- terminal/trunk/ChangeLog 2006-12-21 13:36:48 UTC (rev 24156) +++ terminal/trunk/ChangeLog 2006-12-21 20:53:43 UTC (rev 24157) @@ -1,3 +1,9 @@ +2006-12-21 Benedikt Meurer <[EMAIL PROTECTED]> + + * NEWS, configure.in.in, terminal/terminal-app.c, + terminal/terminal-screen.c: Add support for real transparency with + GTK+ 2.10 and a compositing manager. Bug #2671. + 2006-11-17 Benedikt Meurer <[EMAIL PROTECTED]> * terminal/terminal-window.c: Apply patch from Nick Schermer Modified: terminal/trunk/NEWS =================================================================== --- terminal/trunk/NEWS 2006-12-21 13:36:48 UTC (rev 24156) +++ terminal/trunk/NEWS 2006-12-21 20:53:43 UTC (rev 24157) @@ -1,3 +1,9 @@ +0.2.5.9svn +========== +- Add support for real transparency with GTK+ 2.10 and a compositing manager, + i.e. the one built into xfwm4 (Bug #2671). + + 0.2.5.8rc2 ========== - Add a new "Paste Selection" action to the "Edit" menu, which pastes the Modified: terminal/trunk/configure.in.in =================================================================== --- terminal/trunk/configure.in.in 2006-12-21 13:36:48 UTC (rev 24156) +++ terminal/trunk/configure.in.in 2006-12-21 20:53:43 UTC (rev 24157) @@ -126,6 +126,25 @@ fi AM_CONDITIONAL([ENABLE_XML2PO], [test x"$enable_xml2po" = x"yes"]) +dnl ********************************** +dnl *** Check for VTE transparency *** +dnl ********************************** +AC_MSG_CHECKING([whether VTE supports real transparency]) +save_LIBS="$LIBS" +save_CFLAGS="$CFLAGS" +LIBS="$LIBS $VTE_LIBS" +CFLAGS="$CFLAGS $VTE_CFLAGS" +AC_TRY_LINK([ + #include <vte/vte.h> +], [ vte_terminal_set_opacity (0, 0); ], [ + AC_DEFINE_UNQUOTED([HAVE_VTE_TERMINAL_SET_OPACITY], [1], [Define to 1 if vte_terminal_set_opacity() is available]) + AC_MSG_RESULT([yes]) +], [ + AC_MSG_RESULT([no]) +]) +CFLAGS="$save_CFLAGS" +LIBS="$save_LIBS" + dnl *********************************** dnl *** Check for debugging support *** dnl *********************************** Modified: terminal/trunk/terminal/terminal-app.c =================================================================== --- terminal/trunk/terminal/terminal-app.c 2006-12-21 13:36:48 UTC (rev 24156) +++ terminal/trunk/terminal/terminal-app.c 2006-12-21 20:53:43 UTC (rev 24157) @@ -346,6 +346,9 @@ terminal_app_find_screen (const gchar *display_name) { const gchar *other_name; +#if GTK_CHECK_VERSION(2,10,0) + GdkColormap *colormap; +#endif GdkDisplay *display = NULL; GdkScreen *screen = NULL; GSList *displays; @@ -406,6 +409,25 @@ g_object_ref (G_OBJECT (screen)); } +#if GTK_CHECK_VERSION(2,10,0) + /* check if we already checked this screen */ + if (g_object_get_data (G_OBJECT (screen), "terminal-checked-screen") == NULL) + { + /* check if we can use ARGB visual for this screen */ + colormap = gdk_screen_get_rgba_colormap (screen); + if (G_LIKELY (colormap != NULL)) + { + /* use ARGB visual for all windows on this screen, required + * for real transparency with a compositing manager. + */ + gdk_screen_set_default_colormap (screen, colormap); + } + + /* mark this screen as handled */ + g_object_set_data (G_OBJECT (screen), "terminal-checked-screen", GINT_TO_POINTER (1)); + } +#endif + return screen; } Modified: terminal/trunk/terminal/terminal-screen.c =================================================================== --- terminal/trunk/terminal/terminal-screen.c 2006-12-21 13:36:48 UTC (rev 24156) +++ terminal/trunk/terminal/terminal-screen.c 2006-12-21 20:53:43 UTC (rev 24157) @@ -70,51 +70,52 @@ -static void terminal_screen_finalize (GObject *object); -static void terminal_screen_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void terminal_screen_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void terminal_screen_realize (GtkWidget *widget); -static gboolean terminal_screen_get_child_command (TerminalScreen *screen, - gchar **command, - gchar ***argv, - GError **error); -static gchar **terminal_screen_get_child_environment (TerminalScreen *screen); -static void terminal_screen_update_background (TerminalScreen *screen); -static void terminal_screen_update_binding_backspace (TerminalScreen *screen); -static void terminal_screen_update_binding_delete (TerminalScreen *screen); -static void terminal_screen_update_colors (TerminalScreen *screen); -static void terminal_screen_update_font (TerminalScreen *screen); -static void terminal_screen_update_misc_bell (TerminalScreen *screen); -static void terminal_screen_update_misc_cursor_blinks (TerminalScreen *screen); -static void terminal_screen_update_misc_mouse_autohide (TerminalScreen *screen); -static void terminal_screen_update_scrolling_bar (TerminalScreen *screen); -static void terminal_screen_update_scrolling_lines (TerminalScreen *screen); -static void terminal_screen_update_scrolling_on_output (TerminalScreen *screen); -static void terminal_screen_update_scrolling_on_keystroke (TerminalScreen *screen); -static void terminal_screen_update_title (TerminalScreen *screen); -static void terminal_screen_update_word_chars (TerminalScreen *screen); -static void terminal_screen_vte_child_exited (VteTerminal *terminal, - TerminalScreen *screen); -static void terminal_screen_vte_eof (VteTerminal *terminal, - TerminalScreen *screen); -static GtkWidget *terminal_screen_vte_get_context_menu (TerminalWidget *widget, - TerminalScreen *screen); -static void terminal_screen_vte_open_uri (TerminalWidget *widget, - const gchar *uri, - TerminalHelperCategory category, - TerminalScreen *screen); -static void terminal_screen_vte_selection_changed (VteTerminal *terminal, - TerminalScreen *screen); -static void terminal_screen_vte_window_title_changed (VteTerminal *terminal, - TerminalScreen *screen); -static gboolean terminal_screen_timer_background (gpointer user_data); -static void terminal_screen_timer_background_destroy (gpointer user_data); +static void terminal_screen_finalize (GObject *object); +static void terminal_screen_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); +static void terminal_screen_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void terminal_screen_realize (GtkWidget *widget); +static void terminal_screen_unrealize (GtkWidget *widget); +static gboolean terminal_screen_get_child_command (TerminalScreen *screen, + gchar **command, + gchar ***argv, + GError **error); +static gchar **terminal_screen_get_child_environment (TerminalScreen *screen); +static void terminal_screen_update_background (TerminalScreen *screen); +static void terminal_screen_update_binding_backspace (TerminalScreen *screen); +static void terminal_screen_update_binding_delete (TerminalScreen *screen); +static void terminal_screen_update_colors (TerminalScreen *screen); +static void terminal_screen_update_font (TerminalScreen *screen); +static void terminal_screen_update_misc_bell (TerminalScreen *screen); +static void terminal_screen_update_misc_cursor_blinks (TerminalScreen *screen); +static void terminal_screen_update_misc_mouse_autohide (TerminalScreen *screen); +static void terminal_screen_update_scrolling_bar (TerminalScreen *screen); +static void terminal_screen_update_scrolling_lines (TerminalScreen *screen); +static void terminal_screen_update_scrolling_on_output (TerminalScreen *screen); +static void terminal_screen_update_scrolling_on_keystroke (TerminalScreen *screen); +static void terminal_screen_update_title (TerminalScreen *screen); +static void terminal_screen_update_word_chars (TerminalScreen *screen); +static void terminal_screen_vte_child_exited (VteTerminal *terminal, + TerminalScreen *screen); +static void terminal_screen_vte_eof (VteTerminal *terminal, + TerminalScreen *screen); +static GtkWidget *terminal_screen_vte_get_context_menu (TerminalWidget *widget, + TerminalScreen *screen); +static void terminal_screen_vte_open_uri (TerminalWidget *widget, + const gchar *uri, + TerminalHelperCategory category, + TerminalScreen *screen); +static void terminal_screen_vte_selection_changed (VteTerminal *terminal, + TerminalScreen *screen); +static void terminal_screen_vte_window_title_changed (VteTerminal *terminal, + TerminalScreen *screen); +static gboolean terminal_screen_timer_background (gpointer user_data); +static void terminal_screen_timer_background_destroy (gpointer user_data); @@ -172,6 +173,7 @@ gtkwidget_class = GTK_WIDGET_CLASS (klass); gtkwidget_class->realize = terminal_screen_realize; + gtkwidget_class->unrealize = terminal_screen_unrealize; /** * TerminalScreen:custom-title: @@ -395,15 +397,41 @@ static void terminal_screen_realize (GtkWidget *widget) { +#if GTK_CHECK_VERSION(2,10,0) && defined(HAVE_VTE_TERMINAL_SET_OPACITY) + GdkScreen *screen; +#endif + (*GTK_WIDGET_CLASS (terminal_screen_parent_class)->realize) (widget); /* make sure the TerminalWidget is realized as well */ if (!GTK_WIDGET_REALIZED (TERMINAL_SCREEN (widget)->terminal)) gtk_widget_realize (TERMINAL_SCREEN (widget)->terminal); + +#if GTK_CHECK_VERSION(2,10,0) && defined(HAVE_VTE_TERMINAL_SET_OPACITY) + /* connect to the "composited-changed" signal */ + screen = gtk_widget_get_screen (widget); + g_signal_connect_swapped (G_OBJECT (screen), "composited-changed", G_CALLBACK (terminal_screen_update_background), widget); +#endif } +static void +terminal_screen_unrealize (GtkWidget *widget) +{ +#if GTK_CHECK_VERSION(2,10,0) && defined(HAVE_VTE_TERMINAL_SET_OPACITY) + GdkScreen *screen; + + /* disconnect the "composited-changed" handler */ + screen = gtk_widget_get_screen (widget); + g_signal_handlers_disconnect_by_func (G_OBJECT (screen), terminal_screen_update_background, widget); +#endif + + (*GTK_WIDGET_CLASS (terminal_screen_parent_class)->unrealize) (widget); +} + + + static gboolean terminal_screen_get_child_command (TerminalScreen *screen, gchar **command, @@ -868,6 +896,9 @@ vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL); vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0); vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), FALSE); +#if GTK_CHECK_VERSION(2,10,0) && defined(HAVE_VTE_TERMINAL_SET_OPACITY) + vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xFFFF); +#endif } else if (background_mode == TERMINAL_BACKGROUND_IMAGE) { @@ -879,6 +910,9 @@ screen->terminal->allocation.width, screen->terminal->allocation.height); vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), image); +#if GTK_CHECK_VERSION(2,10,0) && defined(HAVE_VTE_TERMINAL_SET_OPACITY) + vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xFFFF); +#endif if (image != NULL) g_object_unref (G_OBJECT (image)); g_object_unref (G_OBJECT (loader)); @@ -887,8 +921,24 @@ { g_object_get (G_OBJECT (screen->preferences), "background-darkness", &background_darkness, NULL); vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL); - vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0 - background_darkness); - vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), TRUE); + +#if GTK_CHECK_VERSION(2,10,0) && defined(HAVE_VTE_TERMINAL_SET_OPACITY) + /* check if the X screen is composited */ + if (gdk_screen_is_composited (gtk_widget_get_screen (user_data))) + { + vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0); + vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), FALSE); + vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), (guint16) (0xFFFFu * background_darkness)); + } + else + { +#endif + vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0 - background_darkness); + vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), TRUE); +#if GTK_CHECK_VERSION(2,10,0) && defined(HAVE_VTE_TERMINAL_SET_OPACITY) + vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xFFFF); + } +#endif } return FALSE; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits