Please have a look at the gedit-view search thingie, it also is a
GTK_WINDOW_POPUP type window, but can receive focus by handling some
focus stuff manually iirc.

Jesse

Op maandag 01-12-2008 om 00:47 uur [tijdzone +0100], schreef Perriman:
> Hi all,
> 
>       I want to create a GTK_WINDOW_POPUP and change the type
> to GTK_WINDOW_TOPLEVEL. 
> 
>       If you have used eclipse, when you are writting you can see a
> calltip (but the focus is in the editor) and if you press F2, then the
> calltip window gets the focus and show the decoration.
> 
>       I'm trying for two weeks and I cannot do the same in the
> example program. If I set GTK_WINDOW_POPUP then I cannot set the focus
> to the window and, If I use GTK_WINDOW_TOPLEVEL then the window lost
> the focus. If I show the popup window and set the focus to the main
> window, it does not work... I'm desperated....
> 
> Can you help me?
> 
> Thank you again!!
> 
> El Sun, 30 Nov 2008 23:37:29 +0100
> Perriman <[EMAIL PROTECTED]> escribió:
> 
> > Hi Michael
> > 
> > I paste the code:
> > 
> > #include <gtk/gtk.h>
> > #include <gdk/gdkkeysyms.h>
> > 
> > static GtkWidget *window;
> > static GtkWidget *view;
> > static GtkWidget *popup;
> > static GtkWidget *popup_view;
> > static gboolean set_focus = FALSE;
> > 
> > static void
> > destroy_cb(GtkObject *object,gpointer   user_data)
> > {
> >     gtk_main_quit ();
> > }
> > 
> > static gboolean
> > focus_window(gpointer win)
> > {
> >     g_debug("focus win");
> >     gtk_window_present_with_time(GTK_WINDOW(win),GDK_CURRENT_TIME);
> >     gtk_window_activate_focus(GTK_WINDOW(win));
> >     gtk_widget_grab_focus(GTK_WIDGET(win));
> >     return FALSE;
> > }
> > 
> > 
> > static void
> > show_cb(GtkWidget *widget, gpointer user_data)
> > {
> >     g_debug("show popup");
> >     focus_window(window);
> > }
> > 
> > static void
> > realize_cb(GtkWidget *widget, gpointer user_data)
> > {
> >     g_debug("realize popup");
> >     focus_window(window);
> > }
> > 
> > static void
> > focus_in_cb(GtkWidget *widget, gpointer user_data)
> > {
> >     g_debug("focus-in");
> >     //focus_window(window);
> > }
> > 
> > static void
> > focus_out_win_cb(GtkWidget *widget, gpointer user_data)
> > {
> >     g_debug("focus-out-win");
> > /*  if (!set_focus)
> >             focus_window(window);
> >     else
> >             set_focus = FALSE;
> > */
> > }
> > 
> > static void
> > map_cb(GtkWidget *widget, gpointer user_data)
> > {
> >     g_debug("map popup");
> >     focus_window(window);
> > }
> > 
> > static gboolean
> > key_press(GtkWidget   *widget,
> >     GdkEventKey *event,
> >     gpointer     user_data)
> > {
> >     if (event->keyval == GDK_F5)
> >     {
> >             if (GTK_WIDGET_VISIBLE(GTK_WIDGET(popup)))
> >             {
> >                     gtk_widget_hide(popup);
> >             }
> >             else
> >             {
> >                     gtk_widget_show_all(popup);
> >                     focus_window(window);
> >                     
> >                     //g_timeout_add(2000,focus_window,window);
> >             }
> >     }
> >     else if (event->keyval == GDK_F6)
> >     {
> >             if (GTK_WIDGET_VISIBLE(GTK_WIDGET(popup)))
> >             {
> >                     g_debug("focus al popup");
> >                     set_focus = TRUE;
> >                     focus_window(popup);
> >                     gtk_widget_grab_focus(popup_view);
> >             }
> >     }
> > 
> >     return FALSE;
> > }
> > 
> > GtkWidget*
> > create_popup (void)
> > {
> >     popup = gtk_window_new(GTK_WINDOW_TOPLEVEL);
> >     gtk_window_set_transient_for(GTK_WINDOW(popup),GTK_WINDOW(window));
> >     gtk_window_set_focus_on_map(GTK_WINDOW(popup), FALSE);
> >     gtk_window_set_type_hint(GTK_WINDOW(popup),
> >             GDK_WINDOW_TYPE_HINT_TOOLTIP);
> >     gtk_window_set_decorated(GTK_WINDOW(popup),FALSE);
> >     gtk_container_set_border_width(GTK_CONTAINER(popup),2);
> >     gtk_window_resize(GTK_WINDOW(popup),200,200);
> >     popup_view = gtk_text_view_new();
> >     GtkWidget *scroll = gtk_scrolled_window_new(NULL,NULL);
> >     gtk_container_add(GTK_CONTAINER(scroll),popup_view);
> >     gtk_container_add(GTK_CONTAINER(popup),scroll);
> >     
> >     /*g_signal_connect(popup, "show", G_CALLBACK(show_cb), NULL);
> >     g_signal_connect(popup, "realize", G_CALLBACK(realize_cb),
> > NULL); g_signal_connect(popup, "map", G_CALLBACK(map_cb), NULL);
> >     g_signal_connect(popup, "focus-in-event",
> > G_CALLBACK(focus_in_cb), NULL); */
> >     
> >     return popup;
> > }
> > 
> > GtkWidget*
> > create_window (void)
> > {
> >     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
> >     gtk_window_resize(GTK_WINDOW(window),800,600);
> >     view = gtk_text_view_new();
> >     gtk_window_set_default(GTK_WINDOW(window),view);
> >     GtkWidget *scroll = gtk_scrolled_window_new(NULL,NULL);
> >     gtk_container_add(GTK_CONTAINER(scroll),view);
> >     gtk_container_add(GTK_CONTAINER(window),scroll);
> >     g_signal_connect(view, "key-release-event",
> > G_CALLBACK(key_press), NULL); 
> >     g_signal_connect(window, "destroy", G_CALLBACK(destroy_cb),
> > NULL); g_signal_connect(window, "focus-out-event",
> > G_CALLBACK(focus_out_win_cb), NULL); 
> >     return window;
> > }
> > 
> > int
> > main (int argc, char *argv[])
> > {
> >     GtkWidget *window;
> >     
> >     gtk_set_locale ();
> >     gtk_init (&argc, &argv);
> > 
> >     window = create_window ();
> >     popup = create_popup();
> >     gtk_widget_show_all (window);
> > 
> >     gtk_main ();
> >     return 0;
> > }
> > 
> > 
> > 
> > 
> > 
> > El Sat, 29 Nov 2008 16:50:09 -0600
> > Michael Cronenworth <[EMAIL PROTECTED]> escribió:
> > 
> > > Perriman wrote:
> > > >
> > > > Can you help me?? (I attach the example)
> > > >
> > > >
> > > >   
> > > 
> > > Sorry, I don't see the example.
> _______________________________________________
> gedit-list mailing list
> [EMAIL PROTECTED]
> http://mail.gnome.org/mailman/listinfo/gedit-list
-- 
Jesse van den Kieboom

Personal: http://www.icecrew.nl
Professional: http://www.novowork.com

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to