+ if (!show) {
+ pager_popup_hide(desktop_cycle_popup);
+ } else {
+ a = screen_physical_area_monitor(0);
+ pager_popup_position(desktop_cycle_popup, CenterGravity,
+ a->x + a->width / 2, a->y + a->height / 2);
+ pager_popup_max_width(desktop_cycle_popup,
+ MAX(a->width/3, POPUP_WIDTH));
+ pager_popup_show(desktop_cycle_popup, screen_desktop_names[d], d);
+ }
+}
+
+guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
+ gboolean dialog, gboolean done, gboolean cancel)
+{
+ static gboolean first = TRUE;
+ static guint origd, d;
+ guint r, c;
+
+ if (cancel) {
+ d = origd;
+ goto done_cycle;
+ } else if (done && dialog) {
+ goto done_cycle;
+ }
+ if (first) {
+ first = FALSE;
+ d = origd = screen_desktop;
+ }
+
+ get_row_col(d, &r, &c);
+
+ if (linear) {
+ switch (dir) {
+ case OB_DIRECTION_EAST:
+ if (d < screen_num_desktops - 1)
+ ++d;
+ else if (wrap)
+ d = 0;
+ break;
+ case OB_DIRECTION_WEST:
+ if (d > 0)
+ --d;
+ else if (wrap)
+ d = screen_num_desktops - 1;
+ break;
+ default:
+ assert(0);
+ return screen_desktop;
+ }
+ } else {
+ switch (dir) {
+ case OB_DIRECTION_EAST:
+ ++c;
+ if (c >= screen_desktop_layout.columns) {
+ if (wrap) {
+ c = 0;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ d = translate_row_col(r, c);
+ if (d >= screen_num_desktops) {
+ if (wrap) {
+ ++c;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ break;
+ case OB_DIRECTION_WEST:
+ --c;
+ if (c >= screen_desktop_layout.columns) {
+ if (wrap) {
+ c = screen_desktop_layout.columns - 1;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ d = translate_row_col(r, c);
+ if (d >= screen_num_desktops) {
+ if (wrap) {
+ --c;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ break;
+ case OB_DIRECTION_SOUTH:
+ ++r;
+ if (r >= screen_desktop_layout.rows) {
+ if (wrap) {
+ r = 0;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ d = translate_row_col(r, c);
+ if (d >= screen_num_desktops) {
+ if (wrap) {
+ ++r;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ break;
+ case OB_DIRECTION_NORTH:
+ --r;
+ if (r >= screen_desktop_layout.rows) {
+ if (wrap) {
+ r = screen_desktop_layout.rows - 1;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ d = translate_row_col(r, c);
+ if (d >= screen_num_desktops) {
+ if (wrap) {
+ --r;
+ } else {
+ d = screen_desktop;
+ goto show_cycle_dialog;
+ }
+ }
+ break;
+ default:
+ assert(0);
+ return d = screen_desktop;
+ }
+
+ d = translate_row_col(r, c);
+ }
+
+show_cycle_dialog:
+ if (dialog) {
+ screen_desktop_popup(d, TRUE);
+ return d;
+ }
+
+done_cycle:
+ first = TRUE;
+
+ screen_desktop_popup(0, FALSE);
+
+ return d;