diff -r -u ./org/panel/panel-config.c ./new/panel/panel-config.c --- ./org/panel/panel-config.c 2005-09-23 09:06:11.000000000 +0200 +++ ./new/panel/panel-config.c 2005-12-09 17:01:56.000000000 +0100 @@ -212,7 +212,8 @@ int yoffset; int handle_style; gboolean autohide; - int transparency; + int transparency_leave; + int transparency_enter; }; static void @@ -228,7 +229,8 @@ parser->yoffset = 0; parser->handle_style = XFCE_HANDLE_STYLE_NONE; parser->autohide = DEFAULT_AUTOHIDE; - parser->transparency = DEFAULT_TRANSPARENCY; + parser->transparency_leave = DEFAULT_TRANSPARENCY_LEAVE; + parser->transparency_enter = DEFAULT_TRANSPARENCY_ENTER; } static void @@ -271,9 +273,13 @@ { parser->autohide = ((int) strtol (value, NULL, 0) == 1); } - else if (strcmp (name, "transparency") == 0) + else if (strcmp (name, "transparency_leave") == 0) { - parser->transparency = (int) strtol (value, NULL, 0); + parser->transparency_leave = (int) strtol (value, NULL, 0); + } + else if (strcmp (name, "transparency_enter") == 0) + { + parser->transparency_enter = (int) strtol (value, NULL, 0); } } @@ -428,7 +434,8 @@ "yoffset", parser->yoffset, "handle-style", parser->handle_style, "autohide", parser->autohide, - "transparency", parser->transparency, + "transparency_leave", parser->transparency_leave, + "transparency_enter", parser->transparency_enter, NULL); } panel_init_position (parser->current_panel); @@ -625,7 +632,7 @@ { Panel *panel; int size, monitor, screen_position, xoffset, yoffset, handle_style, - transparency, j; + transparency_leave, transparency_enter, j; gboolean autohide, fullwidth; XfcePanelItemConfig *configlist; @@ -634,7 +641,7 @@ panel = g_ptr_array_index (array, i); size = monitor = screen_position = xoffset = yoffset = - transparency = 0; + transparency_leave = transparency_enter = 0; autohide = fullwidth = FALSE; g_object_get (G_OBJECT (panel), @@ -646,7 +653,8 @@ "yoffset", &yoffset, "handle-style", &handle_style, "autohide", &autohide, - "transparency", &transparency, + "transparency_leave", &transparency_leave, + "transparency_enter", &transparency_enter, NULL); /* grouping */ @@ -678,8 +686,11 @@ fprintf (fp, "\t\t\t\n", autohide); - fprintf (fp, "\t\t\t\n", - transparency); + fprintf (fp, "\t\t\t\n", + transparency_leave); + + fprintf (fp, "\t\t\t\n", + transparency_enter); /* grouping */ fprintf (fp, "\t\t\n" diff -r -u ./org/panel/panel-private.h ./new/panel/panel-private.h --- ./org/panel/panel-private.h 2005-09-23 09:06:11.000000000 +0200 +++ ./new/panel/panel-private.h 2005-12-09 16:48:59.000000000 +0100 @@ -34,7 +34,8 @@ #define DEFAULT_YOFFSET 0 #define DEFAULT_AUTOHIDE FALSE #define DEFAULT_FULL_WIDTH FALSE -#define DEFAULT_TRANSPARENCY 20 +#define DEFAULT_TRANSPARENCY_LEAVE 20 +#define DEFAULT_TRANSPARENCY_ENTER 0 #define PANEL_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), PANEL_TYPE_PANEL, PanelPrivate)) @@ -53,9 +54,11 @@ int yoffset; guint autohide:1; guint full_width:1; - int transparency; + int transparency_leave; + int transparency_enter; - guint opacity; + guint opacity_leave; + guint opacity_enter; guint hidden:1; int block_autohide; diff -r -u ./org/panel/panel-properties.c ./new/panel/panel-properties.c --- ./org/panel/panel-properties.c 2005-12-07 11:42:38.000000000 +0100 +++ ./new/panel/panel-properties.c 2005-12-09 17:23:26.000000000 +0100 @@ -411,24 +411,49 @@ /* transparency and autohide */ static void -_set_transparent (Panel *panel, gboolean transparent) +_set_transparent (Panel *panel, gint mode) { PanelPrivate *priv; guint opacity; priv = PANEL_GET_PRIVATE (panel); - - if (G_UNLIKELY (priv->opacity == 0)) - { - if (priv->transparency != 0) - priv->opacity = - OPAQUE - rint ((double)priv->transparency * OPAQUE / 100); - else - priv->opacity = OPAQUE; + + /* Disable transparency when customizing the panel */ + if (priv->block_autohide) + mode = 3; + + switch (mode) + { + case 1: + /* Enter */ + if (G_UNLIKELY (priv->opacity_enter == 0)) + { + if (priv->transparency_enter != 0) + priv->opacity_enter = + OPAQUE - rint ((double)priv->transparency_enter * OPAQUE / 100); + else + priv->opacity_enter = OPAQUE; + } + opacity = priv->opacity_enter; + break; + case 2: + /* Leave */ + if (G_UNLIKELY (priv->opacity_leave == 0)) + { + if (priv->transparency_leave != 0) + priv->opacity_leave = + OPAQUE - rint ((double)priv->transparency_leave * OPAQUE / 100); + else + priv->opacity_leave = OPAQUE; + } + opacity = priv->opacity_leave; + break; + case 3: + /* Customize Panel (no trans) */ + opacity = OPAQUE; + break; } - - opacity = (transparent ? priv->opacity : OPAQUE); - + gdk_error_trap_push (); gdk_property_change (GTK_WIDGET (panel)->window, @@ -530,7 +555,7 @@ { panel_app_set_current_panel ((gpointer)panel); - _set_transparent (panel, FALSE); + _set_transparent (panel, 1); priv = PANEL_GET_PRIVATE (panel); @@ -558,7 +583,7 @@ if (event->detail != GDK_NOTIFY_INFERIOR) { - _set_transparent (panel, TRUE); + _set_transparent (panel, 2); priv = PANEL_GET_PRIVATE (panel); @@ -591,7 +616,7 @@ priv->hide_timeout = g_timeout_add (2000, (GSourceFunc)_hide_timeout, panel); - _set_transparent (panel, TRUE); + _set_transparent (panel, 2); gtk_window_get_position (GTK_WINDOW (panel), &x, &y); @@ -731,7 +756,7 @@ if (priv->hidden) _set_hidden (panel, FALSE); - _set_transparent (panel, FALSE); + _set_transparent (panel, 3); } void panel_unblock_autohide (Panel *panel) @@ -747,7 +772,7 @@ if (!priv->block_autohide && priv->autohide && !priv->hidden) _set_hidden (panel, TRUE); - _set_transparent (panel, TRUE); + _set_transparent (panel, 2); } } @@ -797,20 +822,37 @@ /* not really positioning, but easier to put here */ void -panel_set_transparency (Panel *panel, int transparency) +panel_set_transparency (Panel *panel, int transparency, int leave_enter) { PanelPrivate *priv; priv = PANEL_GET_PRIVATE (panel); - if (transparency != priv->transparency) + switch (leave_enter) { - DBG ("Transparency: %d", transparency); - - priv->transparency = transparency; - priv->opacity = 0; - - _set_transparent (panel, TRUE); + case 1: + if (transparency != priv->transparency_leave) + { + DBG ("Transparency Leave: %d", transparency); + + priv->transparency_leave = transparency; + priv->opacity_leave = 0; + + _set_transparent (panel, 2); + } + break; + case 2: + if (transparency != priv->transparency_enter) + { + DBG ("Transparency Enter: %d", transparency); + + priv->transparency_enter = transparency; + priv->opacity_enter = 0; + + /* Don't call the _set_transparent function because you're not entering the panel, just changing the value */ + /* _set_transparent (panel, 1); */ + } + break; } } diff -r -u ./org/panel/panel-properties.h ./new/panel/panel-properties.h --- ./org/panel/panel-properties.h 2005-09-23 09:06:11.000000000 +0200 +++ ./new/panel/panel-properties.h 2005-12-09 17:32:05.000000000 +0100 @@ -71,7 +71,8 @@ gboolean fullwidth); void panel_set_transparency (Panel *panel, - int transparency); + int transparency, + int leave_enter); G_END_DECLS diff -r -u ./org/panel/panel-settings.c ./new/panel/panel-settings.c --- ./org/panel/panel-settings.c 2005-12-07 13:13:48.000000000 +0100 +++ ./new/panel/panel-settings.c 2005-12-09 16:58:21.000000000 +0100 @@ -66,7 +66,8 @@ GPtrArray *monitors; GtkWidget *size; - GtkWidget *transparency; + GtkWidget *transparency_leave; + GtkWidget *transparency_enter; GtkWidget *autohide; GtkWidget *position_box; @@ -452,9 +453,13 @@ /* appearance */ gtk_range_set_value (GTK_RANGE (psd->size), priv->size); - if (psd->transparency) - gtk_range_set_value (GTK_RANGE (psd->transparency), - priv->transparency); + if (psd->transparency_leave) + gtk_range_set_value (GTK_RANGE (psd->transparency_leave), + priv->transparency_leave); + + if (psd->transparency_enter) + gtk_range_set_value (GTK_RANGE (psd->transparency_enter), + priv->transparency_enter); /* behavior */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (psd->autohide), @@ -554,12 +559,21 @@ } static void -transparency_changed (GtkRange *range, PanelSettingsDialog *psd) +transparency_leave_changed (GtkRange *range, PanelSettingsDialog *psd) { if (psd->updating) return; - panel_set_transparency (psd->panel, (int) gtk_range_get_value (range)); + panel_set_transparency (psd->panel, (int) gtk_range_get_value (range), 1); +} + +static void +transparency_enter_changed (GtkRange *range, PanelSettingsDialog *psd) +{ + if (psd->updating) + return; + + panel_set_transparency (psd->panel, (int) gtk_range_get_value (range), 2); } /* type and position */ @@ -935,7 +949,7 @@ create_properties_tab (PanelSettingsDialog *psd) { static Atom composite_atom = 0; - GtkWidget *frame, *box, *sep, *vbox2, *hbox, *label, *align; + GtkWidget *frame, *box, *sep, *vbox2, *vbox3, *hbox, *label, *align; GtkSizeGroup *sg, *sg2; int n_monitors, i; @@ -1102,33 +1116,76 @@ gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox2), frame, FALSE, FALSE, 0); - hbox = gtk_hbox_new (FALSE, BORDER); - gtk_widget_show (hbox); - gtk_container_add (GTK_CONTAINER (align), hbox); - - label = xfce_create_small_label (_("None")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - gtk_size_group_add_widget (sg, label); - - psd->transparency = gtk_hscale_new_with_range (0, 100, 5); - gtk_widget_set_size_request (psd->transparency, 150, -1); - /*gtk_scale_set_draw_value (GTK_SCALE (psd->transparency), FALSE);*/ - gtk_scale_set_value_pos (GTK_SCALE (psd->transparency), GTK_POS_BOTTOM); - gtk_range_set_update_policy (GTK_RANGE (psd->transparency), - GTK_UPDATE_DELAYED); - gtk_widget_show (psd->transparency); - gtk_box_pack_start (GTK_BOX (hbox), psd->transparency, FALSE, FALSE, 0); - - gtk_size_group_add_widget (sg2, psd->transparency); - - label = xfce_create_small_label (_("Full")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - g_signal_connect (psd->transparency, "value-changed", - G_CALLBACK (transparency_changed), psd); + vbox3 = gtk_vbox_new (FALSE, BORDER); + gtk_widget_show (vbox3); + gtk_container_add (GTK_CONTAINER (align), vbox3); + + label = gtk_label_new (_("Leave:")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox3), label, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + hbox = gtk_hbox_new (FALSE, BORDER); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox3), hbox, FALSE, FALSE, 0); + + label = xfce_create_small_label (_("None")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + gtk_size_group_add_widget (sg, label); + + psd->transparency_leave = gtk_hscale_new_with_range (0, 100, 5); + gtk_widget_set_size_request (psd->transparency_leave, 150, -1); + /*gtk_scale_set_draw_value (GTK_SCALE (psd->transparency), FALSE);*/ + gtk_scale_set_value_pos (GTK_SCALE (psd->transparency_leave), GTK_POS_BOTTOM); + gtk_range_set_update_policy (GTK_RANGE (psd->transparency_leave), + GTK_UPDATE_DELAYED); + gtk_widget_show (psd->transparency_leave); + gtk_box_pack_start (GTK_BOX (hbox), psd->transparency_leave, FALSE, FALSE, 0); + + gtk_size_group_add_widget (sg2, psd->transparency_leave); + + label = xfce_create_small_label (_("Full")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + g_signal_connect (psd->transparency_leave, "value-changed", + G_CALLBACK (transparency_leave_changed), psd); + + label = gtk_label_new (_("Enter:")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox3), label, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + hbox = gtk_hbox_new (FALSE, BORDER); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox3), hbox, FALSE, FALSE, 0); + + label = xfce_create_small_label (_("None")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + gtk_size_group_add_widget (sg, label); + + psd->transparency_enter = gtk_hscale_new_with_range (0, 100, 5); + gtk_widget_set_size_request (psd->transparency_enter, 150, -1); + /*gtk_scale_set_draw_value (GTK_SCALE (psd->transparency), FALSE);*/ + gtk_scale_set_value_pos (GTK_SCALE (psd->transparency_enter), GTK_POS_BOTTOM); + gtk_range_set_update_policy (GTK_RANGE (psd->transparency_enter), + GTK_UPDATE_DELAYED); + gtk_widget_show (psd->transparency_enter); + gtk_box_pack_start (GTK_BOX (hbox), psd->transparency_enter, FALSE, FALSE, 0); + + gtk_size_group_add_widget (sg2, psd->transparency_enter); + + label = xfce_create_small_label (_("Full")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + g_signal_connect (psd->transparency_enter, "value-changed", + G_CALLBACK (transparency_enter_changed), psd); + } g_object_unref (sg); diff -r -u ./org/panel/panel.c ./new/panel/panel.c --- ./org/panel/panel.c 2005-12-06 22:01:40.000000000 +0100 +++ ./new/panel/panel.c 2005-12-09 16:57:48.000000000 +0100 @@ -57,7 +57,8 @@ PROP_YOFFSET, PROP_AUTOHIDE, PROP_FULL_WIDTH, - PROP_TRANSPARENCY + PROP_TRANSPARENCY_LEAVE, + PROP_TRANSPARENCY_ENTER }; @@ -206,13 +207,21 @@ g_object_class_install_property (object_class, PROP_FULL_WIDTH, pspec); - pspec = g_param_spec_int ("transparency", - "panel_transparency", - "Transparency of the panel", + pspec = g_param_spec_int ("transparency_leave", + "panel_in_transparency", + "Transparency of the panel on leave", 0, 100, - DEFAULT_TRANSPARENCY, G_PARAM_READWRITE); + DEFAULT_TRANSPARENCY_LEAVE, G_PARAM_READWRITE); + + g_object_class_install_property (object_class, PROP_TRANSPARENCY_LEAVE, pspec); + + pspec = g_param_spec_int ("transparency_enter", + "panel_enter_transparency", + "Transparency of the panel on enter", + 0, 100, + DEFAULT_TRANSPARENCY_ENTER, G_PARAM_READWRITE); - g_object_class_install_property (object_class, PROP_TRANSPARENCY, pspec); + g_object_class_install_property (object_class, PROP_TRANSPARENCY_ENTER, pspec); } static void @@ -229,7 +238,8 @@ priv->yoffset = DEFAULT_YOFFSET; priv->autohide = DEFAULT_AUTOHIDE; priv->full_width = DEFAULT_FULL_WIDTH; - priv->transparency = DEFAULT_TRANSPARENCY; + priv->transparency_leave = DEFAULT_TRANSPARENCY_LEAVE; + priv->transparency_enter = DEFAULT_TRANSPARENCY_ENTER; gtk_window_set_title (GTK_WINDOW (panel), "Xfce Panel"); @@ -303,8 +313,11 @@ case PROP_FULL_WIDTH: g_value_set_boolean (value, priv->full_width); break; - case PROP_TRANSPARENCY: - g_value_set_int (value, priv->transparency); + case PROP_TRANSPARENCY_LEAVE: + g_value_set_int (value, priv->transparency_leave); + break; + case PROP_TRANSPARENCY_ENTER: + g_value_set_int (value, priv->transparency_enter); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -341,8 +354,11 @@ case PROP_FULL_WIDTH: panel_set_full_width (panel, g_value_get_boolean (value)); break; - case PROP_TRANSPARENCY: - panel_set_transparency (panel, g_value_get_int (value)); + case PROP_TRANSPARENCY_LEAVE: + panel_set_transparency (panel, g_value_get_int (value), 1); + break; + case PROP_TRANSPARENCY_ENTER: + panel_set_transparency (panel, g_value_get_int (value), 2); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);