always focus new windows, trying to be smart about it was a flop.
2002-06-14 Havoc Pennington <hp@pobox.com> * src/window.c (meta_window_show): always focus new windows, trying to be smart about it was a flop.
This commit is contained in:
parent
5faeb552b7
commit
346a8b5aaf
@ -1,3 +1,8 @@
|
|||||||
|
2002-06-14 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* src/window.c (meta_window_show): always focus new windows,
|
||||||
|
trying to be smart about it was a flop.
|
||||||
|
|
||||||
2002-06-14 Jayaraj Rajappan <jayaraj.rajappan@wipro.com>
|
2002-06-14 Jayaraj Rajappan <jayaraj.rajappan@wipro.com>
|
||||||
|
|
||||||
* src/delete.c (io_from_ping_dialog): Check for NULL string
|
* src/delete.c (io_from_ping_dialog): Check for NULL string
|
||||||
|
111
src/window.c
111
src/window.c
@ -1202,6 +1202,67 @@ meta_window_queue_calc_showing (MetaWindow *window)
|
|||||||
calc_showing_pending = g_slist_prepend (calc_showing_pending, window);
|
calc_showing_pending = g_slist_prepend (calc_showing_pending, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
window_takes_focus_on_map (MetaWindow *window)
|
||||||
|
{
|
||||||
|
/* don't initially focus windows that are intended to not accept
|
||||||
|
* focus
|
||||||
|
*/
|
||||||
|
if (!(window->input || window->take_focus))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
switch (window->type)
|
||||||
|
{
|
||||||
|
case META_WINDOW_DOCK:
|
||||||
|
case META_WINDOW_DESKTOP:
|
||||||
|
case META_WINDOW_UTILITY:
|
||||||
|
case META_WINDOW_SPLASHSCREEN:
|
||||||
|
case META_WINDOW_TOOLBAR:
|
||||||
|
case META_WINDOW_MENU:
|
||||||
|
/* don't focus these */
|
||||||
|
break;
|
||||||
|
case META_WINDOW_NORMAL:
|
||||||
|
|
||||||
|
/* Always focus new windows */
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
/* Old Windows-XP style rule for reference */
|
||||||
|
/* Focus only if the current focus is on a desktop element
|
||||||
|
* or nonexistent.
|
||||||
|
*
|
||||||
|
* (using display->focus_window is a bit of a race condition,
|
||||||
|
* but I have no idea how to avoid it)
|
||||||
|
*/
|
||||||
|
if (window->display->focus_window == NULL ||
|
||||||
|
(window->display->focus_window &&
|
||||||
|
(window->display->focus_window->type == META_WINDOW_DOCK ||
|
||||||
|
window->display->focus_window->type == META_WINDOW_DESKTOP)))
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case META_WINDOW_DIALOG:
|
||||||
|
case META_WINDOW_MODAL_DIALOG:
|
||||||
|
|
||||||
|
/* Always focus */
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
/* Old Windows-XP style rule for reference */
|
||||||
|
/* Focus only if the transient parent has focus */
|
||||||
|
/* (using display->focus_window is a bit of a race condition,
|
||||||
|
* but I have no idea how to avoid it)
|
||||||
|
*/
|
||||||
|
if (window->display->focus_window == NULL ||
|
||||||
|
(window->display->focus_window &&
|
||||||
|
meta_window_is_ancestor_of_transient (window->display->focus_window,
|
||||||
|
window)) ||
|
||||||
|
(window->display->focus_window->type == META_WINDOW_DOCK ||
|
||||||
|
window->display->focus_window->type == META_WINDOW_DESKTOP))
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_window_show (MetaWindow *window)
|
meta_window_show (MetaWindow *window)
|
||||||
{
|
{
|
||||||
@ -1310,50 +1371,14 @@ meta_window_show (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Always focus new windows in click-to-focus */
|
/* In sloppy focus, new windows aren't focused unless
|
||||||
|
* they are under the pointer.
|
||||||
|
*/
|
||||||
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK &&
|
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK &&
|
||||||
(window->input || window->take_focus))
|
window_takes_focus_on_map (window))
|
||||||
{
|
{
|
||||||
switch (window->type)
|
meta_window_focus (window,
|
||||||
{
|
meta_display_get_current_time (window->display));
|
||||||
case META_WINDOW_DOCK:
|
|
||||||
case META_WINDOW_DESKTOP:
|
|
||||||
case META_WINDOW_UTILITY:
|
|
||||||
case META_WINDOW_SPLASHSCREEN:
|
|
||||||
case META_WINDOW_TOOLBAR:
|
|
||||||
case META_WINDOW_MENU:
|
|
||||||
/* don't focus these */
|
|
||||||
break;
|
|
||||||
case META_WINDOW_NORMAL:
|
|
||||||
/* Focus only if the current focus is on a desktop element
|
|
||||||
* or nonexistent.
|
|
||||||
*
|
|
||||||
* (using display->focus_window is a bit of a race condition,
|
|
||||||
* but I have no idea how to avoid it)
|
|
||||||
*/
|
|
||||||
if (window->display->focus_window == NULL ||
|
|
||||||
(window->display->focus_window &&
|
|
||||||
(window->display->focus_window->type == META_WINDOW_DOCK ||
|
|
||||||
window->display->focus_window->type == META_WINDOW_DESKTOP)))
|
|
||||||
meta_window_focus (window,
|
|
||||||
meta_display_get_current_time (window->display));
|
|
||||||
break;
|
|
||||||
case META_WINDOW_DIALOG:
|
|
||||||
case META_WINDOW_MODAL_DIALOG:
|
|
||||||
/* Focus only if the transient parent has focus */
|
|
||||||
/* (using display->focus_window is a bit of a race condition,
|
|
||||||
* but I have no idea how to avoid it)
|
|
||||||
*/
|
|
||||||
if (window->display->focus_window == NULL ||
|
|
||||||
(window->display->focus_window &&
|
|
||||||
meta_window_is_ancestor_of_transient (window->display->focus_window,
|
|
||||||
window)) ||
|
|
||||||
(window->display->focus_window->type == META_WINDOW_DOCK ||
|
|
||||||
window->display->focus_window->type == META_WINDOW_DESKTOP))
|
|
||||||
meta_window_focus (window,
|
|
||||||
meta_display_get_current_time (window->display));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user