I thought it was somewhat related to transparency because doing this:
gdk_window_reparent(win->window,gtk_widget_get_window(GTK_WIDGET
(mainwin)),300,200);
makes the HildonAppMenu work again at the price of loosing the transparency
effect (modified code attached).
--
Luca Donaggio
2009/11/10 Kimmo Hämäläinen <[email protected]>
> On Tue, 2009-11-10 at 14:12 +0100, ext Luca Donaggio wrote:
> > Hi Kimmo,
> >
> > I'm sorry to bother you again, but the problem I'm facing is not how
> > to get a transparent window, but that if I create such a window the
> > HildonAppMenu of its parent HildonWindow doesn't show anymore.
> > I (slightly) modified your code to exemplify my situation.
>
> Ah, yes, I can see it. Looks like the menu is unmapped immediately when
> it is shown. It's weird, I'm not yet sure what unmaps it... Now it
> looks like hildon-desktop is not unmapping it, so it could be widget
> side problem also. I'll try to find out.
>
> BTW. this problem is not related to the transparency: opaque window does
> the same.
>
> -Kimmo
>
> >
> >
> > Thanks for your time,
> >
> > Luca Donaggio
> >
> > 2009/11/10 Kimmo Hämäläinen <[email protected]>
> > Hi,
> >
> > Sorry, took some time, I was busy with some bug fixing... I
> > started
> > with the Home applet example and managed to whip up a small
> > example
> > (attached) that shows a transparent pop-up window.
> >
> > -Kimmo
> >
> >
>
>
/*
gcc -Wall `pkg-config gtk+-2.0 hildon-1 --cflags --libs` rgba-window-example-1.c -o rgba-window-example-1
*/
#include <gtk/gtk.h>
#include <hildon/hildon.h>
static gboolean
handle_expose (GtkWidget *widget, GdkEventExpose *event)
{
cairo_t *cr;
/* Create cairo context */
cr = gdk_cairo_create (GDK_DRAWABLE (widget->window));
gdk_cairo_region (cr, event->region);
cairo_clip (cr);
/* Draw alpha background */
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
cairo_set_source_rgba (cr, 0.5, 0.5, 0.5, 0.5);
cairo_paint (cr);
/* Free context */
cairo_destroy (cr);
return FALSE;
}
int main ()
{
HildonProgram *prog;
HildonWindow *mainwin;
GtkWidget *win, *label1, *label2;
GdkScreen *screen;
HildonAppMenu *menu;
GtkWidget *button;
hildon_gtk_init (NULL, NULL);
prog = HILDON_PROGRAM (hildon_program_get_instance ());
mainwin = HILDON_WINDOW (hildon_window_new ());
hildon_program_add_window (prog, mainwin);
menu = HILDON_APP_MENU (hildon_app_menu_new ());
button = gtk_button_new_with_label ("Quit");
g_signal_connect_after (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
hildon_app_menu_append (menu, GTK_BUTTON (button));
gtk_widget_show_all (GTK_WIDGET (menu));
hildon_window_set_app_menu (mainwin, menu);
label2 = gtk_label_new ("This is the main Hildon window\nThis is the main Hildon window\nThis is the main Hildon window\nThis is the main Hildon window");
gtk_container_add (GTK_CONTAINER (mainwin), label2);
gtk_widget_show_all (GTK_WIDGET (mainwin));
win = gtk_window_new (GTK_WINDOW_POPUP);
screen = gtk_widget_get_screen (win);
gtk_widget_set_colormap (win, gdk_screen_get_rgba_colormap (screen));
gtk_widget_set_app_paintable (win, TRUE);
gtk_widget_realize (win);
gdk_window_set_back_pixmap (win->window, NULL, FALSE);
gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (mainwin));
gtk_window_set_destroy_with_parent (GTK_WINDOW (win), TRUE);
gdk_window_reparent(win->window,gtk_widget_get_window(GTK_WIDGET (mainwin)),300,200);
gtk_window_move (GTK_WINDOW (win), 300, 200);
label1 = gtk_label_new ("This is an RGBA window");
gtk_container_add (GTK_CONTAINER (win), label1);
gtk_widget_show_all (win);
g_signal_connect (win, "expose-event", G_CALLBACK (handle_expose), win);
gtk_main ();
return 0;
}
_______________________________________________
maemo-developers mailing list
[email protected]
https://lists.maemo.org/mailman/listinfo/maemo-developers