From: Darren S. <ds...@us...> - 2006-07-27 22:54:48
|
Update of /cvsroot/xine/gnome-xine/src In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv30194/src Modified Files: noskin_window.c Log Message: Improved the toolbar focus handling somewhat. Index: noskin_window.c =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/noskin_window.c,v retrieving revision 1.120 retrieving revision 1.121 diff -u -r1.120 -r1.121 --- noskin_window.c 22 Jul 2006 23:58:56 -0000 1.120 +++ noskin_window.c 26 Jul 2006 23:58:20 -0000 1.121 @@ -425,17 +425,18 @@ gtk_widget_hide (widget); } -static gboolean refocus_cb (gpointer widget) +static gboolean refocus_cb (GtkWidget *widget) { if (GTK_WIDGET_VISIBLE (widget)) - gtk_widget_grab_focus (widget); + XSetInputFocus (GDK_WINDOW_XDISPLAY (widget->window), + GDK_WINDOW_XID (widget->window), + RevertToParent, CurrentTime); return FALSE; } static gboolean appfocus_cb (GtkWidget *w, GdkEventFocus *e, gpointer d) { - g_print (_("Eek, toolbar has focus")); - g_idle_add (refocus_cb, app); + g_idle_add ((GSourceFunc)refocus_cb, app); return TRUE; } @@ -589,15 +590,15 @@ if (gtk_video_is_fullscreen ((GtkVideo *) gtv)) { Display *xd = GDK_WINDOW_XDISPLAY (((GtkWidget *) d)->window); -#ifdef HAVE_XINERAMA - if (XineramaIsActive (xd)) - return GDK_FILTER_REMOVE; -#endif Window fw = None; int fr; XGetInputFocus (xd, &fw, &fr); GdkWindow *gw = gdk_window_lookup (fw); +#ifdef HAVE_XINERAMA + if (gw == fs_toolbar->window || (!gw && !XineramaIsActive (xd))) +#else if (!gw || gw == fs_toolbar->window) +#endif XSetInputFocus (xd, x->xany.window, RevertToParent, CurrentTime); } return GDK_FILTER_REMOVE; @@ -621,8 +622,10 @@ if (wm_toolbar) g_signal_connect (G_OBJECT (wm_toolbar), "key-press-event", G_CALLBACK (keypress_cb), NULL); - g_signal_connect (G_OBJECT (fs_toolbar), - "key-press-event", G_CALLBACK (keypress_cb), NULL); + g_object_connect (G_OBJECT (fs_toolbar), + "signal::focus-in-event", G_CALLBACK (appfocus_cb), NULL, + "signal::key-press-event", G_CALLBACK (keypress_cb), NULL, + NULL); ui_set_status (xine_get_param (stream, XINE_PARAM_AUDIO_MUTE) ? UI_AUDIO_MUTE : UI_AUDIO_UNMUTE); gdk_window_set_events (app->window, GDK_ALL_EVENTS_MASK); /* seems to work */ @@ -843,7 +846,7 @@ } g_object_connect (G_OBJECT (wm_toolbar), - "signal::grab-focus", G_CALLBACK (appfocus_cb), NULL, + "signal::focus-in-event", G_CALLBACK (appfocus_cb), NULL, /*"signal::key-press-event", G_CALLBACK (keypress_cb), NULL,*/ "signal::map-event", G_CALLBACK (window_wm_toolbar_snap), NULL, "signal::delete-event", G_CALLBACK (wm_close_cb), NULL, |