diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/fe-common/core/fe-windows.c | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/src/fe-common/core/fe-windows.c b/src/fe-common/core/fe-windows.c index bd289d2f..248cd621 100644 --- a/src/fe-common/core/fe-windows.c +++ b/src/fe-common/core/fe-windows.c @@ -42,6 +42,12 @@ static int daytag; static int daycheck; /* 0 = don't check, 1 = time is 00:00, check, 2 = time is 00:00, already checked */ +static int window_refnum_lookup(WINDOW_REC *window, void *refnum_p) +{ + int refnum = GPOINTER_TO_INT(refnum_p); + return window->refnum == refnum ? 0 : window->refnum < refnum ? -1 : 1; +} + static GSequenceIter *windows_seq_begin(void) { return g_sequence_get_begin_iter(windows_seq); @@ -52,6 +58,42 @@ static GSequenceIter *windows_seq_end(void) return g_sequence_get_end_iter(windows_seq); } +static GSequenceIter *windows_seq_insert(WINDOW_REC *rec) +{ + return g_sequence_insert_sorted(windows_seq, rec, (GCompareDataFunc)window_refnum_cmp, NULL); +} + +static GSequenceIter *windows_seq_refnum_lookup(int refnum) +{ + return g_sequence_lookup(windows_seq, GINT_TO_POINTER(refnum), (GCompareDataFunc)window_refnum_lookup, NULL); +} + +static void windows_seq_changed(GSequenceIter *iter) +{ + g_sequence_sort_changed(iter, (GCompareDataFunc)window_refnum_cmp, NULL); +} + +static GSequenceIter *windows_seq_window_lookup(WINDOW_REC *rec) +{ + return g_sequence_lookup(windows_seq, rec, (GCompareDataFunc)window_refnum_cmp, NULL); +} + +/* search to the numerically right iterator of refnum */ +static GSequenceIter *windows_seq_refnum_search_right(int refnum) +{ + return g_sequence_search(windows_seq, GINT_TO_POINTER(refnum), (GCompareDataFunc)window_refnum_lookup, NULL); +} + +/* we want to find the numerically left iterator of refnum, so we + search the right of the previous refnum. but we need to figure out + the case where the iterator is already at the beginning, i.e + iter->refnum >= refnum */ +static GSequenceIter *windows_seq_refnum_search_left(int refnum) +{ + GSequenceIter *iter = windows_seq_refnum_search_right(refnum - 1); + return iter == windows_seq_begin() ? NULL : g_sequence_iter_prev(iter); +} + static int window_get_new_refnum(void) { WINDOW_REC *win; @@ -75,11 +117,6 @@ static int window_get_new_refnum(void) return refnum; } -static GSequenceIter *windows_seq_insert(WINDOW_REC *rec) -{ - return g_sequence_insert_sorted(windows_seq, rec, (GCompareDataFunc)window_refnum_cmp, NULL); -} - WINDOW_REC *window_create(WI_ITEM_REC *item, int automatic) { WINDOW_REC *rec; @@ -114,22 +151,6 @@ static void window_set_refnum0(WINDOW_REC *window, int refnum) signal_emit("window refnum changed", 2, window, GINT_TO_POINTER(old_refnum)); } -static int window_refnum_lookup(WINDOW_REC *window, void *refnum_p) -{ - int refnum = GPOINTER_TO_INT(refnum_p); - return window->refnum == refnum ? 0 : window->refnum < refnum ? -1 : 1; -} - -static GSequenceIter *windows_seq_refnum_lookup(int refnum) -{ - return g_sequence_lookup(windows_seq, GINT_TO_POINTER(refnum), (GCompareDataFunc)window_refnum_lookup, NULL); -} - -static void windows_seq_changed(GSequenceIter *iter) -{ - g_sequence_sort_changed(iter, (GCompareDataFunc)window_refnum_cmp, NULL); -} - /* removed_refnum was removed from the windows list, pack the windows so there won't be any holes. If there is any holes after removed_refnum, leave the windows behind it alone. */ @@ -155,11 +176,6 @@ static void windows_pack(int removed_refnum) } } -static GSequenceIter *windows_seq_window_lookup(WINDOW_REC *rec) -{ - return g_sequence_lookup(windows_seq, rec, (GCompareDataFunc)window_refnum_cmp, NULL); -} - void window_destroy(WINDOW_REC *window) { GSequenceIter *iter; @@ -466,22 +482,6 @@ WINDOW_REC *window_find_item(SERVER_REC *server, const char *name) return window_item_window(item); } -/* search to the numerically right iterator of refnum */ -static GSequenceIter *windows_seq_refnum_search_right(int refnum) -{ - return g_sequence_search(windows_seq, GINT_TO_POINTER(refnum), (GCompareDataFunc)window_refnum_lookup, NULL); -} - -/* we want to find the numerically left iterator of refnum, so we - search the right of the previous refnum. but we need to figure out - the case where the iterator is already at the beginning, i.e - iter->refnum >= refnum */ -static GSequenceIter *windows_seq_refnum_search_left(int refnum) -{ - GSequenceIter *iter = windows_seq_refnum_search_right(refnum - 1); - return iter == windows_seq_begin() ? NULL : g_sequence_iter_prev(iter); -} - int window_refnum_prev(int refnum, int wrap) { WINDOW_REC *rec; |