fix for wrapping in desktop cycling

This commit is contained in:
Dana Jansens 2007-05-13 21:17:32 +00:00
parent 73e7b2925a
commit 3acd5ff0c5

View file

@ -663,7 +663,7 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
{ {
guint r, c; guint r, c;
static guint d = (guint)-1; static guint d = (guint)-1;
guint ret; guint ret, oldd;
if (d == (guint)-1) if (d == (guint)-1)
d = screen_desktop; d = screen_desktop;
@ -671,6 +671,7 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
if ((cancel || done) && dialog) if ((cancel || done) && dialog)
goto show_cycle_dialog; goto show_cycle_dialog;
oldd = d;
get_row_col(d, &r, &c); get_row_col(d, &r, &c);
if (linear) { if (linear) {
@ -696,19 +697,17 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
case OB_DIRECTION_EAST: case OB_DIRECTION_EAST:
++c; ++c;
if (c >= screen_desktop_layout.columns) { if (c >= screen_desktop_layout.columns) {
if (wrap) { if (wrap)
c = 0; c = 0;
} else { else
d = screen_desktop;
goto show_cycle_dialog; goto show_cycle_dialog;
}
} }
d = translate_row_col(r, c); d = translate_row_col(r, c);
if (d >= screen_num_desktops) { if (d >= screen_num_desktops) {
if (wrap) { if (wrap) {
++c; ++c;
} else { } else {
d = screen_desktop; d = oldd;
goto show_cycle_dialog; goto show_cycle_dialog;
} }
} }
@ -716,19 +715,17 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
case OB_DIRECTION_WEST: case OB_DIRECTION_WEST:
--c; --c;
if (c >= screen_desktop_layout.columns) { if (c >= screen_desktop_layout.columns) {
if (wrap) { if (wrap)
c = screen_desktop_layout.columns - 1; c = screen_desktop_layout.columns - 1;
} else { else
d = screen_desktop;
goto show_cycle_dialog; goto show_cycle_dialog;
}
} }
d = translate_row_col(r, c); d = translate_row_col(r, c);
if (d >= screen_num_desktops) { if (d >= screen_num_desktops) {
if (wrap) { if (wrap) {
--c; --c;
} else { } else {
d = screen_desktop; d = oldd;
goto show_cycle_dialog; goto show_cycle_dialog;
} }
} }
@ -736,19 +733,17 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
case OB_DIRECTION_SOUTH: case OB_DIRECTION_SOUTH:
++r; ++r;
if (r >= screen_desktop_layout.rows) { if (r >= screen_desktop_layout.rows) {
if (wrap) { if (wrap)
r = 0; r = 0;
} else { else
d = screen_desktop;
goto show_cycle_dialog; goto show_cycle_dialog;
}
} }
d = translate_row_col(r, c); d = translate_row_col(r, c);
if (d >= screen_num_desktops) { if (d >= screen_num_desktops) {
if (wrap) { if (wrap) {
++r; ++r;
} else { } else {
d = screen_desktop; d = oldd;
goto show_cycle_dialog; goto show_cycle_dialog;
} }
} }
@ -756,19 +751,17 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
case OB_DIRECTION_NORTH: case OB_DIRECTION_NORTH:
--r; --r;
if (r >= screen_desktop_layout.rows) { if (r >= screen_desktop_layout.rows) {
if (wrap) { if (wrap)
r = screen_desktop_layout.rows - 1; r = screen_desktop_layout.rows - 1;
} else { else
d = screen_desktop;
goto show_cycle_dialog; goto show_cycle_dialog;
}
} }
d = translate_row_col(r, c); d = translate_row_col(r, c);
if (d >= screen_num_desktops) { if (d >= screen_num_desktops) {
if (wrap) { if (wrap) {
--r; --r;
} else { } else {
d = screen_desktop; d = oldd;
goto show_cycle_dialog; goto show_cycle_dialog;
} }
} }