Re: [gedit-list] Focus problem



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 <chuchiperriman gmail com> 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 <mike cchtml com> escribió:
> > 
> > > Perriman wrote:
> > > >
> > > > Can you help me?? (I attach the example)
> > > >
> > > >
> > > >   
> > > 
> > > Sorry, I don't see the example.
> _______________________________________________
> gedit-list mailing list
> gedit-list gnome org
> http://mail.gnome.org/mailman/listinfo/gedit-list
-- 
Jesse van den Kieboom

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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]