[maemo-commits] [maemo-commits] r18720 - in projects/haf/trunk/libmatchbox2: . matchbox/core
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Sat Jun 13 02:32:27 EEST 2009
- Previous message: [maemo-commits] r18719 - in projects/haf/trunk/gtk+: . debian gtk
- Next message: [maemo-commits] r18721 - projects/haf/trunk/clutter0.8/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: tthurman Date: 2009-06-13 02:32:17 +0300 (Sat, 13 Jun 2009) New Revision: 18720 Modified: projects/haf/trunk/libmatchbox2/ChangeLog projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.c projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.h Log: NB#118850 * matchbox/core/mb-window-manager.c: When a window is unmapped, check whether each window below it wants focus and is visible in order to find the window which should be focussed next. * matchbox/core/mb-wm-client.[ch]: Add functions to get whether a window is visible, and whether a window covers the screen. Modified: projects/haf/trunk/libmatchbox2/ChangeLog =================================================================== --- projects/haf/trunk/libmatchbox2/ChangeLog 2009-06-12 16:50:31 UTC (rev 18719) +++ projects/haf/trunk/libmatchbox2/ChangeLog 2009-06-12 23:32:17 UTC (rev 18720) @@ -1,3 +1,13 @@ +2009-06-12 Thomas Thurman <thomas.thurman at collabora.co.uk> + + NB#118850 + + * matchbox/core/mb-window-manager.c: When a window is unmapped, + check whether each window below it wants focus and is visible + in order to find the window which should be focussed next. + * matchbox/core/mb-wm-client.[ch]: Add functions to get whether + a window is visible, and whether a window covers the screen. + 2009-06-11 Kimmo Hämäläinen <kimmo.hamalainen at nokia.com> * matchbox/client-types/mb-wm-client-menu.c (mb_wm_client_menu_init): Modified: projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c =================================================================== --- projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c 2009-06-12 16:50:31 UTC (rev 18719) +++ projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c 2009-06-12 23:32:17 UTC (rev 18720) @@ -2093,11 +2093,20 @@ mb_wm_stack_enumerate_reverse (wm, c) { - if (c != client && mb_wm_client_want_focus (c)) + if (c != client && + mb_wm_client_want_focus (c) && + mb_wm_client_is_visible (c)) { next = c; break; } + if (mb_wm_client_covers_screen (c)) + { + /* anything below this is necessarily + * invisible + */ + break; + } } } Modified: projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.c =================================================================== --- projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.c 2009-06-12 16:50:31 UTC (rev 18719) +++ projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.c 2009-06-12 23:32:17 UTC (rev 18720) @@ -1121,3 +1121,51 @@ client->priv->hiding_from_desktop = False; } +/** + * Returns true iff the client is visible: it must be + * mapped, not hiding from the desktop, and at least + * partially onscreen. + * Does not check whether it's obscured by a higher + * window (should it?) + */ +Bool +mb_wm_client_is_visible (MBWindowManagerClient * client) +{ + MBGeometry geometry; + MBWindowManager *wm = client->wmref; + + mb_wm_client_get_coverage (client, &geometry); + + return + mb_wm_client_is_mapped (client) && + !mb_wm_client_is_hiding_from_desktop (client) && + geometry.x < wm->xdpy_width && + geometry.y < wm->xdpy_height && + geometry.x+geometry.width >= 0 && + geometry.y+geometry.height >= 0; +} + +/** + * Returns true iff the client (including its frame) + * covers at least the whole screen: it must be either + * maximised or fullscreen. + */ +Bool +mb_wm_client_covers_screen (MBWindowManagerClient * client) +{ + MBGeometry geometry; + MBWindowManager *wm = client->wmref; + int right, bottom, + right_of_screen = wm->xdpy_width, + bottom_of_screen = wm->xdpy_height; + + mb_wm_client_get_coverage (client, &geometry); + right = geometry.x+geometry.width; + bottom = geometry.y+geometry.height; + + return + geometry.x <= 0 && + geometry.y <= 0 && + right >= right_of_screen && + bottom >= bottom_of_screen; +} Modified: projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.h =================================================================== --- projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.h 2009-06-12 16:50:31 UTC (rev 18719) +++ projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client.h 2009-06-12 23:32:17 UTC (rev 18720) @@ -417,4 +417,10 @@ void mb_wm_client_reset_hiding_from_desktop (MBWindowManagerClient * client); +Bool +mb_wm_client_is_visible (MBWindowManagerClient * client); + +Bool +mb_wm_client_covers_screen (MBWindowManagerClient * client); + #endif
- Previous message: [maemo-commits] r18719 - in projects/haf/trunk/gtk+: . debian gtk
- Next message: [maemo-commits] r18721 - projects/haf/trunk/clutter0.8/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]