1
0
Fork 0

impl for nice debugging. (meta_workspace_get_neighbor): fix broken logic

2002-11-08  Mark McLoughlin  <mark@skynet.ie>

        * src/workspace.c:
        (meta_motion_direction_to_string),
        (meta_screen_corner_to_string): impl for nice debugging.
        (meta_workspace_get_neighbor): fix broken logic and
        cleanup debugging.
This commit is contained in:
Mark McLoughlin 2002-11-07 23:13:12 +00:00 committed by Mark McLoughlin
parent 765cb51df3
commit bc3b64f922
2 changed files with 70 additions and 19 deletions

View file

@ -1,3 +1,11 @@
2002-11-08 Mark McLoughlin <mark@skynet.ie>
* src/workspace.c:
(meta_motion_direction_to_string),
(meta_screen_corner_to_string): impl for nice debugging.
(meta_workspace_get_neighbor): fix broken logic and
cleanup debugging.
Thu Nov 7 17:07:21 2002 Jonathan Blandford <jrb@redhat.com> Thu Nov 7 17:07:21 2002 Jonathan Blandford <jrb@redhat.com>
* src/libmetacity-private.pc.in: add a pc file for * src/libmetacity-private.pc.in: add a pc file for

View file

@ -406,6 +406,42 @@ meta_workspace_get_work_area (MetaWorkspace *workspace,
*area = workspace->work_area; *area = workspace->work_area;
} }
static char *
meta_motion_direction_to_string (MetaMotionDirection direction)
{
switch (direction)
{
case META_MOTION_UP:
return "Up";
case META_MOTION_DOWN:
return "Down";
case META_MOTION_LEFT:
return "Left";
case META_MOTION_RIGHT:
return "Right";
}
return "Unknown";
}
static char *
meta_screen_corner_to_string (MetaScreenCorner corner)
{
switch (corner)
{
case META_SCREEN_TOPLEFT:
return "TopLeft";
case META_SCREEN_TOPRIGHT:
return "TopRight";
case META_SCREEN_BOTTOMLEFT:
return "BottomLeft";
case META_SCREEN_BOTTOMRIGHT:
return "BottomRight";
}
return "Unknown";
}
MetaWorkspace* MetaWorkspace*
meta_workspace_get_neighbor (MetaWorkspace *workspace, meta_workspace_get_neighbor (MetaWorkspace *workspace,
MetaMotionDirection direction) MetaMotionDirection direction)
@ -422,12 +458,16 @@ meta_workspace_get_neighbor (MetaWorkspace *workspace,
meta_screen_calc_workspace_layout (workspace->screen, num_workspaces, meta_screen_calc_workspace_layout (workspace->screen, num_workspaces,
&rows, &cols); &rows, &cols);
g_assert (rows != 0 && cols != 0);
grid_area = rows * cols; grid_area = rows * cols;
meta_verbose ("Getting neighbor rows = %d cols = %d vert = %d " meta_verbose ("Getting neighbor rows = %d cols = %d current = %d "
"current = %d num_spaces = %d neighbor = %d\n", "num_spaces = %d vertical = %s direction = %s corner = %s\n",
rows, cols, workspace->screen->vertical_workspaces, rows, cols, i, num_workspaces,
i, num_workspaces, direction); workspace->screen->vertical_workspaces ? "(true)" : "(false)",
meta_motion_direction_to_string (direction),
meta_screen_corner_to_string (workspace->screen->starting_corner));
/* ok, we want to setup the distances in the workspace array to go /* ok, we want to setup the distances in the workspace array to go
* in each direction. Remember, there are many ways that a workspace * in each direction. Remember, there are many ways that a workspace
@ -462,19 +502,19 @@ meta_workspace_get_neighbor (MetaWorkspace *workspace,
{ {
up_diff = -1; up_diff = -1;
down_diff = 1; down_diff = 1;
left_diff = -1 * cols; left_diff = -1 * rows;
right_diff = cols; right_diff = rows;
current_col = (i / (cols?cols:1)) + 1; current_col = ((i - 1) / rows) + 1;
current_row = (i % cols) + 1; current_row = ((i - 1) % rows) + 1;
} }
else else
{ {
up_diff = -1 * rows; up_diff = -1 * cols;
down_diff = rows; down_diff = cols;
left_diff = -1; left_diff = -1;
right_diff = 1; right_diff = 1;
current_col = (i % rows) + 1; current_col = (i % cols) + 1;
current_row = (i / (rows?rows:1)) + 1; current_row = ((i - 1) / cols) + 1;
} }
switch (workspace->screen->starting_corner) switch (workspace->screen->starting_corner)
@ -509,25 +549,29 @@ meta_workspace_get_neighbor (MetaWorkspace *workspace,
break; break;
} }
meta_verbose ("Workspace deltas: up = %d down = %d left = %d right = %d. "
"Current col = %d row = %d\n", up_diff, down_diff, left_diff,
right_diff, current_col, current_row);
/* calculate what we think the next spot should be */ /* calculate what we think the next spot should be */
new_workspace_idx = i; new_workspace_idx = i;
switch (direction) switch (direction)
{ {
case META_MOTION_LEFT: case META_MOTION_LEFT:
if ((current_col - 1) > 0) if (current_col >= 1)
new_workspace_idx = i + left_diff; new_workspace_idx = i + left_diff;
break; break;
case META_MOTION_RIGHT: case META_MOTION_RIGHT:
if ((current_col + 1) <= rows) if (current_col <= cols)
new_workspace_idx = i + right_diff; new_workspace_idx = i + right_diff;
break; break;
case META_MOTION_UP: case META_MOTION_UP:
if ((current_row - 1) > 0) if (current_row >= 1)
new_workspace_idx = i + up_diff; new_workspace_idx = i + up_diff;
break; break;
case META_MOTION_DOWN: case META_MOTION_DOWN:
if ((current_row + 1) <= cols) if (current_row <= rows)
new_workspace_idx = i + down_diff; new_workspace_idx = i + down_diff;
break; break;
default: default:
@ -539,10 +583,9 @@ meta_workspace_get_neighbor (MetaWorkspace *workspace,
if ((new_workspace_idx >= 0) && (new_workspace_idx < num_workspaces)) if ((new_workspace_idx >= 0) && (new_workspace_idx < num_workspaces))
i = new_workspace_idx; i = new_workspace_idx;
meta_verbose ("Neighbor space is %d\n", i); meta_verbose ("Neighbor workspace is %d\n", i);
return meta_screen_get_workspace_by_index (workspace->screen, return meta_screen_get_workspace_by_index (workspace->screen, i);
i);
} }
const char* const char*