コード例 #1
0
void
meta_workspace_invalidate_work_area (MetaWorkspace *workspace)
{
  GList *tmp;
  GList *windows;
  int i;
  
  if (workspace->work_areas_invalid)
    {
      meta_topic (META_DEBUG_WORKAREA,
                  "Work area for workspace %d is already invalid\n",
                  meta_workspace_index (workspace));
      return;
    }

  meta_topic (META_DEBUG_WORKAREA,
              "Invalidating work area for workspace %d\n",
              meta_workspace_index (workspace));

  /* If we are in the middle of a resize or move operation, we
   * might have cached pointers to the workspace's edges */
  if (workspace == workspace->screen->active_workspace)
    meta_display_cleanup_edges (workspace->screen->display);

  g_free (workspace->work_area_monitor);
  workspace->work_area_monitor = NULL;
      
  workspace_free_all_struts (workspace);

  for (i = 0; i < workspace->screen->n_monitor_infos; i++)
    meta_rectangle_free_list_and_elements (workspace->monitor_region[i]);
  g_free (workspace->monitor_region);
  meta_rectangle_free_list_and_elements (workspace->screen_region);
  meta_rectangle_free_list_and_elements (workspace->screen_edges);
  meta_rectangle_free_list_and_elements (workspace->monitor_edges);
  workspace->monitor_region = NULL;
  workspace->screen_region = NULL;
  workspace->screen_edges = NULL;
  workspace->monitor_edges = NULL;
  
  workspace->work_areas_invalid = TRUE;

  /* redo the size/position constraints on all windows */
  windows = meta_workspace_list_windows (workspace);
  tmp = windows;
  while (tmp != NULL)
    {
      MetaWindow *w = tmp->data;

      meta_window_queue (w, META_QUEUE_MOVE_RESIZE);
      
      tmp = tmp->next;
    }

  g_list_free (windows);

  meta_screen_queue_workarea_recalc (workspace->screen);
}
コード例 #2
0
ファイル: workspace.c プロジェクト: mitya57/metacity
void
meta_workspace_invalidate_work_area (MetaWorkspace *workspace)
{
  GList *tmp;
  GList *windows;
  int i;
  
  if (workspace->work_areas_invalid)
    {
      meta_topic (META_DEBUG_WORKAREA,
                  "Work area for workspace %d is already invalid\n",
                  meta_workspace_index (workspace));
      return;
    }

  meta_topic (META_DEBUG_WORKAREA,
              "Invalidating work area for workspace %d\n",
              meta_workspace_index (workspace));

  g_free (workspace->work_area_xinerama);
  workspace->work_area_xinerama = NULL;
      
  workspace_free_struts (workspace);

  for (i = 0; i < workspace->screen->n_xinerama_infos; i++)
    meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]);
  g_free (workspace->xinerama_region);
  meta_rectangle_free_list_and_elements (workspace->screen_region);
  meta_rectangle_free_list_and_elements (workspace->screen_edges);
  meta_rectangle_free_list_and_elements (workspace->xinerama_edges);
  workspace->xinerama_region = NULL;
  workspace->screen_region = NULL;
  workspace->screen_edges = NULL;
  workspace->xinerama_edges = NULL;
  
  workspace->work_areas_invalid = TRUE;

  /* redo the size/position constraints on all windows */
  windows = meta_workspace_list_windows (workspace);
  tmp = windows;
  while (tmp != NULL)
    {
      MetaWindow *w = tmp->data;

      meta_window_queue (w, META_QUEUE_MOVE_RESIZE);
      
      tmp = tmp->next;
    }

  g_list_free (windows);

  meta_screen_queue_workarea_recalc (workspace->screen);
}
コード例 #3
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static void
test_region_fitting ()
{
  GList* region;
  MetaRectangle rect;

  /* See test_basic_fitting() for how/why these automated random tests work */
  int i;
  region = get_screen_region (3);
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&rect);
      g_assert (meta_rectangle_contained_in_region (region, &rect) == FALSE ||
                meta_rectangle_could_fit_in_region (region, &rect) == TRUE);
    }
  meta_rectangle_free_list_and_elements (region);

  /* Do some manual tests too */
  region = get_screen_region (1);

  rect = meta_rect (50, 50, 400, 400);
  g_assert (meta_rectangle_could_fit_in_region (region, &rect));
  g_assert (meta_rectangle_contained_in_region (region, &rect));

  rect = meta_rect (250, 0, 500, 1150);
  g_assert (!meta_rectangle_could_fit_in_region (region, &rect));
  g_assert (!meta_rectangle_contained_in_region (region, &rect));

  rect = meta_rect (250, 0, 400, 400);
  g_assert (meta_rectangle_could_fit_in_region (region, &rect));
  g_assert (!meta_rectangle_contained_in_region (region, &rect));

  meta_rectangle_free_list_and_elements (region);

  region = get_screen_region (2);
  rect = meta_rect (1000, 50, 600, 1100);
  g_assert (meta_rectangle_could_fit_in_region (region, &rect));
  g_assert (!meta_rectangle_contained_in_region (region, &rect));

  meta_rectangle_free_list_and_elements (region);

  printf ("%s passed.\n", G_STRFUNC);
}
コード例 #4
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static GList*
get_monitor_edges (int which_monitor_set, int which_strut_set)
{
  GList *ret;
  GSList *struts;
  GList *xins;

  xins = NULL;
  g_assert (which_monitor_set >=0 && which_monitor_set <= 3);
  switch (which_monitor_set)
    {
    case 0:
      xins = g_list_prepend (xins, new_meta_rect (  0,   0, 1600, 1200));
      break;
    case 1:
      xins = g_list_prepend (xins, new_meta_rect (  0,   0,  800, 1200));
      xins = g_list_prepend (xins, new_meta_rect (800,   0,  800, 1200));
      break;
    case 2:
      xins = g_list_prepend (xins, new_meta_rect (  0,   0, 1600,  600));
      xins = g_list_prepend (xins, new_meta_rect (  0, 600, 1600,  600));
      break;
    case 3:
      xins = g_list_prepend (xins, new_meta_rect (  0,   0, 1600,  600));
      xins = g_list_prepend (xins, new_meta_rect (  0, 600,  800,  600));
      xins = g_list_prepend (xins, new_meta_rect (800, 600,  800,  600));
      break;
    }

  ret = NULL;

  struts = get_strut_list (which_strut_set);
  ret = meta_rectangle_find_nonintersected_monitor_edges (xins, struts);

  free_strut_list (struts);
  meta_rectangle_free_list_and_elements (xins);

  return ret;
}
コード例 #5
0
void
meta_workspace_remove (MetaWorkspace *workspace)
{
  GList *tmp;
  MetaScreen *screen;
  int i;

  g_return_if_fail (workspace != workspace->screen->active_workspace);

  /* Here we assume all the windows are already on another workspace
   * as well, so they won't be "orphaned"
   */
  
  tmp = workspace->windows;
  while (tmp != NULL)
    {
      GList *next;
      MetaWindow *window = tmp->data;
      next = tmp->next;

      /* pop front of list we're iterating over */
      meta_workspace_remove_window (workspace, window);
      g_assert (window->workspace != NULL);

      tmp = next;
    }

  g_assert (workspace->windows == NULL);

  screen = workspace->screen;
  
  workspace->screen->workspaces =
    g_list_remove (workspace->screen->workspaces, workspace);
  
  g_free (workspace->work_area_monitor);

  g_list_free (workspace->mru_list);
  g_list_free (workspace->list_containing_self);

  workspace_free_builtin_struts (workspace);

  /* screen.c:update_num_workspaces(), which calls us, removes windows from
   * workspaces first, which can cause the workareas on the workspace to be
   * invalidated (and hence for struts/regions/edges to be freed).
   * So, no point trying to double free it; that causes a crash
   * anyway.  #361804.
   */

  if (!workspace->work_areas_invalid)
    {
      workspace_free_all_struts (workspace);
      for (i = 0; i < screen->n_monitor_infos; i++)
        meta_rectangle_free_list_and_elements (workspace->monitor_region[i]);
      g_free (workspace->monitor_region);
      meta_rectangle_free_list_and_elements (workspace->screen_region);
      meta_rectangle_free_list_and_elements (workspace->screen_edges);
      meta_rectangle_free_list_and_elements (workspace->monitor_edges);
    }

  g_object_unref (workspace);

  /* don't bother to reset names, pagers can just ignore
   * extra ones
   */
}
コード例 #6
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static void
test_shoving_into_region ()
{
  GList* region;
  MetaRectangle rect, temp;
  FixedDirections fixed_directions = 0;
  int i;

  region = get_screen_region (3);
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&rect);
      if (meta_rectangle_could_fit_in_region (region, &rect))
        {
          meta_rectangle_shove_into_region (region, 0, &rect);
          g_assert (meta_rectangle_contained_in_region (region, &rect));
        }
    }
  meta_rectangle_free_list_and_elements (region);

  /* Do some manual tests too */
  region = get_screen_region (2);

  rect = meta_rect (300, 1000, 400, 200);
  temp = meta_rect (300,  950, 400, 200);
  meta_rectangle_shove_into_region (region,
                                    fixed_directions,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (425, 1000, 300, 200);
  temp = meta_rect (450, 1000, 300, 200);
  meta_rectangle_shove_into_region (region,
                                    fixed_directions,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (425, 1000, 300, 200);
  temp = meta_rect (425,  950, 300, 200);
  meta_rectangle_shove_into_region (region,
                                    FIXED_DIRECTION_X,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 300, 1000, 400, 200);
  temp = meta_rect (1200, 1000, 400, 200);
  meta_rectangle_shove_into_region (region,
                                    FIXED_DIRECTION_Y,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect ( 800, 1150, 400,  50);  /* Completely "offscreen" :) */
  temp = meta_rect ( 800, 1050, 400,  50);
  meta_rectangle_shove_into_region (region,
                                    0,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (-1000,  0, 400, 150);  /* Offscreen in 2 directions */
  temp = meta_rect (    0, 20, 400, 150);
  meta_rectangle_shove_into_region (region,
                                    0,
                                    &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  meta_rectangle_free_list_and_elements (region);

  printf ("%s passed.\n", G_STRFUNC);
}
コード例 #7
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static void
test_clipping_to_region ()
{
  GList* region;
  MetaRectangle rect, temp;
  FixedDirections fixed_directions = 0;
  int i;

  region = get_screen_region (3);
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      get_random_rect (&rect);
      if (rect_overlaps_region (region, &rect))
        {
          meta_rectangle_clip_to_region (region, 0, &rect);
          g_assert (meta_rectangle_contained_in_region (region, &rect) == TRUE);
        }
    }
  meta_rectangle_free_list_and_elements (region);

  /* Do some manual tests too */
  region = get_screen_region (2);

  rect = meta_rect (-50, -10, 10000, 10000);
  meta_rectangle_clip_to_region (region,
                                 fixed_directions,
                                 &rect);
  g_assert (meta_rectangle_equal (region->data, &rect));

  rect = meta_rect (300, 1000, 400, 200);
  temp = meta_rect (300, 1000, 400, 150);
  meta_rectangle_clip_to_region (region,
                                 fixed_directions,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (400, 1000, 300, 200);
  temp = meta_rect (450, 1000, 250, 200);
  meta_rectangle_clip_to_region (region,
                                 fixed_directions,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (400, 1000, 300, 200);
  temp = meta_rect (400, 1000, 300, 150);
  meta_rectangle_clip_to_region (region,
                                 FIXED_DIRECTION_X,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  rect = meta_rect (400, 1000, 300, 200);
  temp = meta_rect (400, 1000, 300, 150);
  meta_rectangle_clip_to_region (region,
                                 FIXED_DIRECTION_X,
                                 &rect);
  g_assert (meta_rectangle_equal (&rect, &temp));

  meta_rectangle_free_list_and_elements (region);

  printf ("%s passed.\n", G_STRFUNC);
}
コード例 #8
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static void
test_clamping_to_region ()
{
  GList* region;
  MetaRectangle rect;
  MetaRectangle min_size;
  FixedDirections fixed_directions;
  int i;

  min_size.height = min_size.width = 1;
  fixed_directions = 0;

  region = get_screen_region (3);
  for (i = 0; i < NUM_RANDOM_RUNS; i++)
    {
      MetaRectangle temp;
      get_random_rect (&rect);
      temp = rect;
      meta_rectangle_clamp_to_fit_into_region (region,
                                               fixed_directions,
                                               &rect,
                                               &min_size);
      g_assert (meta_rectangle_could_fit_in_region (region, &rect) == TRUE);
      g_assert (rect.x == temp.x && rect.y == temp.y);
    }
  meta_rectangle_free_list_and_elements (region);

  /* Do some manual tests too */
  region = get_screen_region (1);

  rect = meta_rect (50, 50, 10000, 10000);
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 1600 && rect.height == 1140);

  rect = meta_rect (275, -50, 410, 10000);
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 400 && rect.height == 1180);

  rect = meta_rect (50, 50, 10000, 10000);
  min_size.height = 1170;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 400 && rect.height == 1180);

  printf ("The next test intentionally causes a warning, "
          "but it can be ignored.\n");
  rect = meta_rect (50, 50, 10000, 10000);
  min_size.width = 600;  min_size.height = 1170;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 600 && rect.height == 1170);

  rect = meta_rect (350, 50, 100, 1100);
  min_size.width = 1;  min_size.height = 1;
  fixed_directions = FIXED_DIRECTION_X;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 100 && rect.height == 1100);

  rect = meta_rect (300, 70, 500, 1100);
  min_size.width = 1;  min_size.height = 1;
  fixed_directions = FIXED_DIRECTION_Y;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 400 && rect.height == 1100);

  printf ("The next test intentionally causes a warning, "
          "but it can be ignored.\n");
  rect = meta_rect (300, 70, 999999, 999999);
  min_size.width = 100;  min_size.height = 200;
  fixed_directions = FIXED_DIRECTION_Y;
  meta_rectangle_clamp_to_fit_into_region (region,
                                           fixed_directions,
                                           &rect,
                                           &min_size);
  g_assert (rect.width == 100 && rect.height == 999999);

  meta_rectangle_free_list_and_elements (region);

  printf ("%s passed.\n", G_STRFUNC);
}
コード例 #9
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static void
test_regions_okay ()
{
  GList* region;
  GList* tmp;

  /*************************************************************/  
  /* Make sure test region 0 has the right spanning rectangles */
  /*************************************************************/  
  region = get_screen_region (0);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_meta_rect (0, 0, 1600, 1200));
  verify_lists_are_equal (region, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (region);

  /*************************************************************/  
  /* Make sure test region 1 has the right spanning rectangles */
  /*************************************************************/  
  region = get_screen_region (1);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_meta_rect (0, 20,  400, 1180));
  tmp = g_list_prepend (tmp, new_meta_rect (0, 20, 1600, 1140));
  verify_lists_are_equal (region, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (region);

  /*************************************************************/
  /* Make sure test region 2 has the right spanning rectangles */
  /*************************************************************/  
  region = get_screen_region (2);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_meta_rect (   0,   20,  300, 1180));
  tmp = g_list_prepend (tmp, new_meta_rect ( 450,   20,  350, 1180));
  tmp = g_list_prepend (tmp, new_meta_rect (1200,   20,  400, 1180));
  tmp = g_list_prepend (tmp, new_meta_rect (   0,   20,  800, 1130));
  tmp = g_list_prepend (tmp, new_meta_rect (   0,   20, 1600, 1080));
  verify_lists_are_equal (region, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (region);

  /*************************************************************/
  /* Make sure test region 3 has the right spanning rectangles */
  /*************************************************************/  
  region = get_screen_region (3);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_meta_rect ( 380,  675,  420,  525)); /* 220500 */
  tmp = g_list_prepend (tmp, new_meta_rect (   0,   20,  300, 1180)); /* 354000 */
  tmp = g_list_prepend (tmp, new_meta_rect ( 380,   20,  320, 1180)); /* 377600 */
  tmp = g_list_prepend (tmp, new_meta_rect (   0,  675,  800,  475)); /* 380000 */
  tmp = g_list_prepend (tmp, new_meta_rect (1200,   20,  400, 1180)); /* 472000 */
  tmp = g_list_prepend (tmp, new_meta_rect (   0,  675, 1600,  425)); /* 680000 */
  tmp = g_list_prepend (tmp, new_meta_rect ( 900,   20,  700, 1080)); /* 756000 */
  tmp = g_list_prepend (tmp, new_meta_rect (   0,   20,  700, 1130)); /* 791000 */
  tmp = g_list_prepend (tmp, new_meta_rect (   0,   20, 1600,  505)); /* 808000 */
#if 0
  printf ("Got to here...\n");
  char region_list[(RECT_LENGTH+2) * g_list_length (region)];
  char tmp_list[   (RECT_LENGTH+2) * g_list_length (tmp)];
  meta_rectangle_region_to_string (region, ", ", region_list);
  meta_rectangle_region_to_string (region, ", ", tmp_list);
  printf ("%s vs. %s\n", region_list, tmp_list);
#endif
  verify_lists_are_equal (region, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (region);

  /*************************************************************/
  /* Make sure test region 4 has the right spanning rectangles */
  /*************************************************************/  
  region = get_screen_region (4);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_meta_rect ( 800,   20,  800, 1180));
  verify_lists_are_equal (region, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (region);

  /*************************************************************/
  /* Make sure test region 5 has the right spanning rectangles */
  /*************************************************************/  
  printf ("The next test intentionally causes a warning, "
          "but it can be ignored.\n");
  region = get_screen_region (5);
  verify_lists_are_equal (region, NULL);

  /* FIXME: Still to do:
   *   - Create random struts and check the regions somehow
   */

  printf ("%s passed.\n", G_STRFUNC);
}
コード例 #10
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static void
test_find_nonintersected_monitor_edges ()
{
  GList* edges;
  GList* tmp;

  int left   = META_DIRECTION_LEFT;
  int right  = META_DIRECTION_RIGHT;
  int top    = META_DIRECTION_TOP;
  int bottom = META_DIRECTION_BOTTOM;

  /*************************************************************************/  
  /* Make sure test monitor set 0 for with region 0 has the correct edges */
  /*************************************************************************/  
  edges = get_monitor_edges (0, 0);
  tmp = NULL;
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************************************/  
  /* Make sure test monitor set 2 for with region 1 has the correct edges */
  /*************************************************************************/  
  edges = get_monitor_edges (2, 1);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_monitor_edge (   0,  600, 1600, 0, bottom));
  tmp = g_list_prepend (tmp, new_monitor_edge (   0,  600, 1600, 0, top));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************************************/  
  /* Make sure test monitor set 1 for with region 2 has the correct edges */
  /*************************************************************************/  
  edges = get_monitor_edges (1, 2);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_monitor_edge ( 800,   20, 0, 1080, right));
  tmp = g_list_prepend (tmp, new_monitor_edge ( 800,   20, 0, 1180, left));
#if 0
  #define FUDGE 50
  char big_buffer1[(EDGE_LENGTH+2)*FUDGE], big_buffer2[(EDGE_LENGTH+2)*FUDGE];
  meta_rectangle_edge_list_to_string (edges, "\n ", big_buffer1);
  meta_rectangle_edge_list_to_string (tmp,   "\n ", big_buffer2);
  printf("Generated edge list:\n %s\nComparison edges list:\n %s\n", 
         big_buffer1, big_buffer2);
#endif
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************************************/  
  /* Make sure test monitor set 3 for with region 3 has the correct edges */
  /*************************************************************************/  
  edges = get_monitor_edges (3, 3);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_monitor_edge ( 900,  600,  700, 0, bottom));
  tmp = g_list_prepend (tmp, new_monitor_edge (   0,  600,  700, 0, bottom));
  tmp = g_list_prepend (tmp, new_monitor_edge ( 900,  600,  700, 0, top));
  tmp = g_list_prepend (tmp, new_monitor_edge (   0,  600,  700, 0, top));
  tmp = g_list_prepend (tmp, new_monitor_edge ( 800,  675, 0,  425, right));
  tmp = g_list_prepend (tmp, new_monitor_edge ( 800,  675, 0,  525, left));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************************************/  
  /* Make sure test monitor set 3 for with region 4 has the correct edges */
  /*************************************************************************/  
  edges = get_monitor_edges (3, 4);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_monitor_edge ( 800,  600,  800, 0, bottom));
  tmp = g_list_prepend (tmp, new_monitor_edge ( 800,  600,  800, 0, top));
  tmp = g_list_prepend (tmp, new_monitor_edge ( 800,  600,  0, 600, right));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************************************/  
  /* Make sure test monitor set 3 for with region 5has the correct edges */
  /*************************************************************************/  
  edges = get_monitor_edges (3, 5);
  tmp = NULL;
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  printf ("%s passed.\n", G_STRFUNC);
}
コード例 #11
0
ファイル: testboxes.c プロジェクト: CSRedRat/mutter
static void
test_find_onscreen_edges ()
{
  GList* edges;
  GList* tmp;

  int left   = META_DIRECTION_LEFT;
  int right  = META_DIRECTION_RIGHT;
  int top    = META_DIRECTION_TOP;
  int bottom = META_DIRECTION_BOTTOM;

  /*************************************************/  
  /* Make sure test region 0 has the correct edges */
  /*************************************************/  
  edges = get_screen_edges (0);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_screen_edge (   0, 1200, 1600, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,    0, 1600, 0, top));
  tmp = g_list_prepend (tmp, new_screen_edge (1600,    0, 0, 1200, right));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,    0, 0, 1200, left));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************/  
  /* Make sure test region 1 has the correct edges */
  /*************************************************/  
  edges = get_screen_edges (1);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_screen_edge (   0, 1200,  400, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 400, 1160, 1200, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   20, 1600, 0, top));
  tmp = g_list_prepend (tmp, new_screen_edge (1600,   20, 0, 1140, right));
  tmp = g_list_prepend (tmp, new_screen_edge ( 400, 1160, 0,   40, right));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   20, 0, 1180, left));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************/  
  /* Make sure test region 2 has the correct edges */
  /*************************************************/  
  edges = get_screen_edges (2);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_screen_edge (1200, 1200,  400, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 450, 1200,  350, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge (   0, 1200,  300, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 300, 1150,  150, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 800, 1100,  400, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   20, 1600, 0, top));
  tmp = g_list_prepend (tmp, new_screen_edge (1600,   20, 0, 1180, right));
  tmp = g_list_prepend (tmp, new_screen_edge ( 800, 1100, 0,  100, right));
  tmp = g_list_prepend (tmp, new_screen_edge ( 300, 1150, 0,   50, right));
  tmp = g_list_prepend (tmp, new_screen_edge (1200, 1100, 0,  100, left));
  tmp = g_list_prepend (tmp, new_screen_edge ( 450, 1150, 0,   50, left));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   20, 0, 1180, left));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************/  
  /* Make sure test region 3 has the correct edges */
  /*************************************************/  
  edges = get_screen_edges (3);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_screen_edge (1200, 1200,  400, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 380, 1200,  420, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge (   0, 1200,  300, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 300, 1150,   80, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 800, 1100,  400, 0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 700,  525, 200,  0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 700,  675, 200,  0, top));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   20, 1600, 0, top));
  tmp = g_list_prepend (tmp, new_screen_edge (1600,   20, 0, 1180, right));
  tmp = g_list_prepend (tmp, new_screen_edge ( 800, 1100, 0,  100, right));
  tmp = g_list_prepend (tmp, new_screen_edge ( 700,  525, 0,  150, right));
  tmp = g_list_prepend (tmp, new_screen_edge ( 300, 1150, 0,   50, right));
  tmp = g_list_prepend (tmp, new_screen_edge (1200, 1100, 0,  100, left));
  tmp = g_list_prepend (tmp, new_screen_edge ( 900,  525, 0,  150, left));
  tmp = g_list_prepend (tmp, new_screen_edge ( 380, 1150, 0,   50, left));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   20, 0, 1180, left));

#if 0
  #define FUDGE 50 /* number of edges */
  char big_buffer1[(EDGE_LENGTH+2)*FUDGE], big_buffer2[(EDGE_LENGTH+2)*FUDGE];
  meta_rectangle_edge_list_to_string (edges, "\n ", big_buffer1);
  meta_rectangle_edge_list_to_string (tmp,   "\n ", big_buffer2);
  printf("Generated edge list:\n %s\nComparison edges list:\n %s\n", 
         big_buffer1, big_buffer2);
#endif

  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************/  
  /* Make sure test region 4 has the correct edges */
  /*************************************************/  
  edges = get_screen_edges (4);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_screen_edge ( 800, 1200, 800,  0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge ( 800,   20, 800,  0, top));
  tmp = g_list_prepend (tmp, new_screen_edge (1600,   20, 0, 1180, right));
  tmp = g_list_prepend (tmp, new_screen_edge ( 800,   20, 0, 1180, left));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************/  
  /* Make sure test region 5 has the correct edges */
  /*************************************************/  
  edges = get_screen_edges (5);
  tmp = NULL;
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  /*************************************************/  
  /* Make sure test region 6 has the correct edges */
  /*************************************************/  
  edges = get_screen_edges (6);
  tmp = NULL;
  tmp = g_list_prepend (tmp, new_screen_edge (   0, 1200, 1600,  0, bottom));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   40, 1600,  0, top));
  tmp = g_list_prepend (tmp, new_screen_edge (1600,   40, 0,  1160, right));
  tmp = g_list_prepend (tmp, new_screen_edge (   0,   40, 0,  1160, left));
  verify_edge_lists_are_equal (edges, tmp);
  meta_rectangle_free_list_and_elements (tmp);
  meta_rectangle_free_list_and_elements (edges);

  printf ("%s passed.\n", G_STRFUNC);
}