Index: xfce-panel-external-item.c =================================================================== --- xfce-panel-external-item.c (revision 23252) +++ xfce-panel-external-item.c (working copy) @@ -128,6 +128,32 @@ iface->configure = xfce_external_panel_item_configure; } +static gboolean +xfce_external_panel_item_expose(GtkWidget *widget, GdkEventExpose *event) +{ + cairo_t *cr; + + cr = gdk_cairo_create (widget->window); + + cairo_rectangle (cr, event->area.x, + event->area.y, + event->area.width, + event->area.height); + cairo_clip (cr); + + /* fully transparent */ + cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); + + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_paint (cr); + + cairo_destroy (cr); + + GTK_WIDGET_CLASS(xfce_external_panel_item_parent_class)->expose_event(widget, event); + + return FALSE; +} + static void xfce_external_panel_item_class_init (XfceExternalPanelItemClass * klass) { @@ -141,6 +167,8 @@ object_class->finalize = xfce_external_panel_item_finalize; + widget_class->expose_event = xfce_external_panel_item_expose; + widget_class->button_press_event = xfce_external_panel_item_button_press_event; } @@ -159,6 +187,8 @@ priv->screen_position = XFCE_SCREEN_POSITION_NONE; priv->expand = FALSE; priv->to_be_removed = FALSE; + + gtk_widget_set_app_paintable(GTK_WIDGET(item), TRUE); } /* GObject */ Index: xfce-panel-external-plugin.c =================================================================== --- xfce-panel-external-plugin.c (revision 23252) +++ xfce-panel-external-plugin.c (working copy) @@ -174,18 +174,47 @@ iface->set_panel_hidden = xfce_external_panel_plugin_set_panel_hidden; } +static gboolean +xfce_external_panel_plugin_expose(GtkWidget *widget, GdkEventExpose *event) +{ + cairo_t *cr; + + cr = gdk_cairo_create (widget->window); + + cairo_rectangle (cr, event->area.x, + event->area.y, + event->area.width, + event->area.height); + cairo_clip (cr); + + /* fully transparent */ + cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); + + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_paint (cr); + + cairo_destroy (cr); + + GTK_WIDGET_CLASS(xfce_external_panel_plugin_parent_class)->expose_event(widget, event); + + return FALSE; +} + static void xfce_external_panel_plugin_class_init (XfceExternalPanelPluginClass * klass) { GObjectClass *object_class; + GtkWidgetClass *widget_class; g_type_class_add_private (klass, sizeof (XfceExternalPanelPluginPrivate)); object_class = (GObjectClass *) klass; + widget_class = (GtkWidgetClass *) klass; object_class->finalize = xfce_external_panel_plugin_finalize; object_class->get_property = xfce_external_panel_plugin_get_property; object_class->set_property = xfce_external_panel_plugin_set_property; + widget_class->expose_event = xfce_external_panel_plugin_expose; /* properties */ @@ -219,6 +248,27 @@ priv->construct = NULL; priv->socket_id = 0; priv->expand = FALSE; + + { + GtkWidget *widget; + GdkScreen *screen; + GdkColormap *colormap; + + widget = GTK_WIDGET (plugin); + + gtk_widget_set_app_paintable(widget, TRUE); + + screen = gtk_widget_get_screen (widget); + colormap = gdk_screen_get_rgba_colormap (screen); + + if (!colormap) + { + colormap = gdk_screen_get_rgb_colormap (screen); + g_debug (" No Alpha support \n"); + } + + gtk_widget_set_colormap (widget, colormap); + } } /* GObject */ Index: xfce-panel-window.c =================================================================== --- xfce-panel-window.c (revision 23252) +++ xfce-panel-window.c (working copy) @@ -353,6 +353,26 @@ priv->right_border = TRUE; priv->movable = TRUE; + { + GtkWidget *widget; + GdkScreen *screen; + GdkColormap *colormap; + + widget = GTK_WIDGET (panel_window); + + gtk_widget_set_app_paintable(widget, TRUE); + + screen = gtk_widget_get_screen (widget); + colormap = gdk_screen_get_rgba_colormap (screen); + + if (!colormap) + { + colormap = gdk_screen_get_rgb_colormap (screen); + g_debug (" No Alpha support \n"); + } + + gtk_widget_set_colormap (widget, colormap); + } gtk_widget_set_events (GTK_WIDGET (panel_window), gtk_widget_get_events (GTK_WIDGET (panel_window)) | GDK_BUTTON_MOTION_MASK @@ -620,12 +640,29 @@ static gint xfce_panel_window_expose (GtkWidget * widget, GdkEventExpose * event) { + cairo_t *cr; XfcePanelWindow *panel_window = XFCE_PANEL_WINDOW (widget); XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); if (GTK_WIDGET_DRAWABLE (widget)) { + cr = gdk_cairo_create (widget->window); + + cairo_rectangle (cr, event->area.x, + event->area.y, + event->area.width, + event->area.height); + cairo_clip (cr); + + /* fully transparent */ + cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); + + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_paint (cr); + + cairo_destroy (cr); + if (GTK_BIN (widget)->child) { gtk_container_propagate_expose (GTK_CONTAINER (widget), Index: xfce-panel-internal-plugin.c =================================================================== --- xfce-panel-internal-plugin.c (revision 23252) +++ xfce-panel-internal-plugin.c (working copy) @@ -200,10 +200,37 @@ iface->focus_panel = xfce_internal_panel_plugin_focus_panel; } +static gboolean +xfce_internal_panel_plugin_expose(GtkWidget *widget, GdkEventExpose *event) +{ + cairo_t *cr; + + cr = gdk_cairo_create (widget->window); + + cairo_rectangle (cr, event->area.x, + event->area.y, + event->area.width, + event->area.height); + cairo_clip (cr); + + /* fully transparent */ + cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); + + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_paint (cr); + + cairo_destroy (cr); + + GTK_WIDGET_CLASS(xfce_internal_panel_plugin_parent_class)->expose_event(widget, event); + + return FALSE; +} + static void xfce_internal_panel_plugin_class_init (XfceInternalPanelPluginClass * klass) { GObjectClass *object_class; + GtkWidgetClass *widget_class; g_type_class_add_private (klass, sizeof (XfceInternalPanelPluginPrivate)); @@ -213,6 +240,10 @@ object_class->get_property = xfce_internal_panel_plugin_get_property; object_class->set_property = xfce_internal_panel_plugin_set_property; + widget_class = (GtkWidgetClass *) klass; + + widget_class->expose_event = xfce_internal_panel_plugin_expose; + /* properties */ g_object_class_override_property (object_class, PROP_NAME, "name"); @@ -243,6 +274,8 @@ priv->size = 0; priv->screen_position = XFCE_SCREEN_POSITION_NONE; priv->expand = FALSE; + + gtk_widget_set_app_paintable(GTK_WIDGET(plugin), TRUE); } /* GObject */