diff options
Diffstat (limited to 'src/split.c')
-rw-r--r-- | src/split.c | 149 |
1 files changed, 74 insertions, 75 deletions
diff --git a/src/split.c b/src/split.c index b36b99e..7042a55 100644 --- a/src/split.c +++ b/src/split.c @@ -41,24 +41,10 @@ update_last_access (rp_frame *frame) rp_frame * current_frame (void) { - rp_screen *s = current_screen(); + rp_screen *s = rp_current_screen; return screen_get_frame (s, s->current_frame); } -int -num_frames (rp_screen *s) -{ - int count = 0; - rp_frame *cur; - - list_for_each_entry (cur, &s->frames, node) - { - count++; - } - - return count; -} - void cleanup_frame (rp_frame *frame) { @@ -95,7 +81,7 @@ set_frames_window (rp_frame *frame, rp_window *win) win->frame_number = frame->number; /* We need to make sure that win and frame are on the same screen, - * since with Xinerama, windows can move from one screen to another. + * since with Xrandr, windows can move from one screen to another. */ win->scr = frames_screen(frame); } @@ -110,15 +96,17 @@ set_frames_window (rp_frame *frame, rp_window *win) rp_screen * frames_screen (rp_frame *frame) { - int i; - rp_frame *cur; + rp_frame *cur_frame; + rp_screen *cur_screen; - for (i=0; i<num_screens; i++) - list_for_each_entry (cur, &screens[i].frames, node) - { - if (frame == cur) - return &screens[i]; - } + list_for_each_entry (cur_screen, &rp_screens, node) + { + list_for_each_entry (cur_frame, &cur_screen->frames, node) + { + if (frame == cur_frame) + return cur_screen; + } + } /* This SHOULD be impossible to get to. FIXME: It'll crash higher up if we return NULL. */ @@ -171,10 +159,12 @@ create_initial_frame (rp_screen *screen) void init_frame_lists (void) { - int i; + rp_screen *cur; - for (i=0; i<num_screens; i++) - init_frame_list (&screens[i]); + list_for_each_entry (cur, &rp_screens, node) + { + init_frame_list (cur); + } } void @@ -188,21 +178,19 @@ init_frame_list (rp_screen *screen) rp_frame * find_last_frame (void) { - rp_frame *cur, *last = NULL; + rp_frame *cur_frame, *last = NULL; + rp_screen *cur_screen; int last_access = -1; - int i; - for (i=0; i<num_screens; i++) + list_for_each_entry (cur_screen, &rp_screens, node) { - rp_screen *s = &screens[i]; - - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (cur_frame, &cur_screen->frames, node) { - if (cur->number != current_screen()->current_frame - && cur->last_access > last_access) + if (cur_frame->number != rp_current_screen->current_frame && + cur_frame->last_access > last_access) { - last_access = cur->last_access; - last = cur; + last_access = cur_frame->last_access; + last = cur_frame; } } } @@ -227,6 +215,12 @@ find_windows_frame (rp_window *win) return NULL; } +int +num_frames (rp_screen *s) +{ + return list_size (&s->frames); +} + rp_frame * find_frame_next (rp_frame *frame) { @@ -277,7 +271,7 @@ find_window_for_frame (rp_frame *frame) list_for_each_entry (cur, &rp_current_group->mapped_windows, node) { - if ((cur->win->scr == s || rp_have_xinerama) + if ((cur->win->scr == s || rp_have_xrandr) && cur->win != current_window() && !find_windows_frame (cur->win) && cur->win->last_access >= last_access @@ -382,7 +376,7 @@ void remove_all_splits (void) { struct list_head *tmp, *iter; - rp_screen *s = current_screen(); + rp_screen *s = rp_current_screen; rp_frame *frame; rp_window *win; @@ -822,9 +816,9 @@ remove_frame (rp_frame *frame) void set_active_frame (rp_frame *frame, int force_indicator) { - rp_screen *old_s = current_screen(); + rp_screen *old_s = rp_current_screen; rp_screen *s = frames_screen (frame); - int old = current_screen()->current_frame; + int old = rp_current_screen->current_frame; rp_window *win, *old_win; rp_frame *old_frame; @@ -845,7 +839,7 @@ set_active_frame (rp_frame *frame, int force_indicator) s->current_frame = frame->number; /* If frame->win == NULL, then rp_current_screen is not updated. */ - rp_current_screen = s->xine_screen_num; + rp_current_screen = s; update_bar (s); @@ -926,15 +920,18 @@ blank_frame (rp_frame *frame) void hide_frame_indicator (void) { - int i; - for (i=0; i<num_screens; i++) - XUnmapWindow (dpy, screens[i].frame_window); + rp_screen *cur; + + list_for_each_entry (cur, &rp_screens, node) + { + XUnmapWindow (dpy, cur->frame_window); + } } void show_frame_indicator (int force) { - if (num_frames (current_screen()) > 1 || force) + if (num_frames (rp_current_screen) > 1 || force) { hide_frame_indicator (); show_frame_message (defaults.frame_fmt); @@ -945,7 +942,7 @@ show_frame_indicator (int force) void show_frame_message (char *msg) { - rp_screen *s = current_screen (); + rp_screen *s = rp_current_screen; int width, height; rp_frame *frame; rp_window *win; @@ -1000,15 +997,16 @@ show_frame_message (char *msg) rp_frame * find_frame_up (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->y == cur->y + cur->height) + list_for_each_entry (cur, &s->frames, node) { - if (frame->x >= cur->x && frame->x < cur->x + cur->width) - return cur; + if (frame_top_abs (frame) == frame_bottom_abs (cur)) + if (frame_right_abs (frame) >= frame_left_abs (cur) && frame_left_abs (frame) <= frame_right_abs (cur)) + return cur; } } @@ -1018,15 +1016,16 @@ find_frame_up (rp_frame *frame) rp_frame * find_frame_down (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->y + frame->height == cur->y) + list_for_each_entry (cur, &s->frames, node) { - if (frame->x >= cur->x && frame->x < cur->x + cur->width) - return cur; + if (frame_bottom_abs (frame) == frame_top_abs (cur)) + if (frame_right_abs (frame) >= frame_left_abs (cur) && frame_left_abs (frame) <= frame_right_abs (cur)) + return cur; } } @@ -1036,15 +1035,16 @@ find_frame_down (rp_frame *frame) rp_frame * find_frame_left (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->x == cur->x + cur->width) + list_for_each_entry (cur, &s->frames, node) { - if (frame->y >= cur->y && frame->y < cur->y + cur->height) - return cur; + if (frame_left_abs (frame) == frame_right_abs (cur)) + if (frame_top_abs (frame) >= frame_top_abs (cur) && frame_top_abs (frame) < frame_bottom_abs (cur)) + return cur; } } @@ -1054,15 +1054,16 @@ find_frame_left (rp_frame *frame) rp_frame * find_frame_right (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->x + frame->width == cur->x) + list_for_each_entry (cur, &s->frames, node) { - if (frame->y >= cur->y && frame->y < cur->y + cur->height) - return cur; + if (frame_right_abs (frame) == frame_left_abs (cur)) + if (frame_top_abs (frame) >= frame_top_abs (cur) && frame_top_abs (frame) < frame_bottom_abs (cur)) + return cur; } } @@ -1072,17 +1073,15 @@ find_frame_right (rp_frame *frame) rp_frame * find_frame_number (int num) { - int i; - rp_frame *cur; + rp_frame *cur_frame; + rp_screen *cur_screen; - for (i=0; i<num_screens; i++) + list_for_each_entry (cur_screen, &rp_screens, node) { - rp_screen *s = &screens[i]; - - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (cur_frame, &cur_screen->frames, node) { - if (cur->number == num) - return cur; + if (cur_frame->number == num) + return cur_frame; } } |