[maemo-developers] How to get a transparent GtkWindow (fremantle)

From: Luca Donaggio donaggio at gmail.com
Date: Thu Oct 29 18:29:17 EET 2009
I'm trying to create a transparent, non-decorated popup GtkWindow on top af
my app HildonWindow and draw something on its underlying GdkWindow object
using cairo.
All I was able to obtain so far is a black (or whatever is the background
colour of the selected theme) rectangle -ie it's not transparent and
everything I paint in its GdkWindow with Cairo is not showed at all.
Here is the code I'm using:

void create_image_details(GtkWidget *callerobj,app_data_t *myapp) {
    PangoLayout *textbuff;
    cairo_t *cr;
    gint x0, y0, r, txtwidth, txtheight;

    /* For the widget itself let's use a GtkWindow */
    if ((myapp->imgparamwin != NULL) & GTK_IS_WINDOW(myapp->imgparamwin))
gtk_widget_destroy(myapp->imgparamwin);
    myapp->imgparamwin = gtk_window_new(GTK_WINDOW_POPUP);
    gtk_window_set_decorated(GTK_WINDOW (myapp->imgparamwin),FALSE);
    gtk_window_set_opacity(GTK_WINDOW (myapp->imgparamwin),0);
    gtk_widget_set_app_paintable(myapp->imgparamwin,TRUE);
    gtk_widget_realize(myapp->imgparamwin);
    /* gdk_window_set_back_pixmap(myapp->imgparamwin->window,NULL,FALSE); */
    /* Get the Cairo context */
    cr = gdk_cairo_create(GDK_DRAWABLE (myapp->imgparamwin->window));
    textbuff = pango_cairo_create_layout(cr);
    pango_layout_set_markup(textbuff,myapp->imgparam,-1);
    pango_layout_get_pixel_size(textbuff,&txtwidth,&txtheight);
    /* Draw a rounded rectangle */

[cairo stuff is here]

    cairo_destroy(cr);
    g_object_unref(textbuff);
    /* Show the widget */
    gtk_window_resize(GTK_WINDOW (myapp->imgparamwin),txtwidth + (r *
2),txtheight + (r * 2));
    gtk_window_move(GTK_WINDOW (myapp->imgparamwin),30,30);

gdk_window_reparent(myapp->imgparamwin->window,myapp->image->window,30,30);
    gtk_widget_show_all(myapp->imgparamwin);
}

The window dimension after the gtk_window_resize() are correct -ie the
dimension of the PangoLayout containing the text to be rendered, so
something is definitely going on under the hood... but nothing is displayed!
If I add some widget to the popoup window (for example a GtkLabel with some
text in it), it's rendered correctly, but, of course it's not transparent!

Any help, as always, is much appreciated!

Luca Donaggio
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.maemo.org/pipermail/maemo-developers/attachments/20091029/a924d7cd/attachment.htm 
More information about the maemo-developers mailing list