1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#include "wm.h"
#include <ncurses.h>
#include <string.h>
#include "err.h"
#include "log.h"
#include "mem.h"
window *wm_create_new_w(terminal *t, const char *name, int height, int width,
int start_y, int start_x) {
if (t->w_count >= WINDOWS_MAX) {
die("Windows count has arrived max");
}
WINDOW *win;
win = derwin(t->windows[0]->win, height, width, start_y, start_x);
int current_idx = t->w_count;
strncpy(t->windows[current_idx]->name, name, 31);
t->windows[current_idx]->win = win;
t->windows[current_idx]->start_y = start_y;
t->windows[current_idx]->start_x = start_x;
t->windows[current_idx]->width = width;
t->windows[current_idx]->height = height;
t->w_count++;
return t->windows[current_idx];
}
terminal *wm_init(void) {
terminal *t = xmalloc(sizeof(terminal));
t->windows = xmalloc(sizeof(window *) * WINDOWS_MAX);
for (int i = 0; i < WINDOWS_MAX; i++) {
t->windows[i] = xmalloc(sizeof(window));
}
t->w_count = 0;
getmaxyx(stdscr, t->maxy, t->maxx);
t->windows[0]->win = newwin(t->maxy, t->maxx, 0, 0);
t->windows[t->w_count]->start_y = 0;
t->windows[t->w_count]->start_x = 0;
t->windows[t->w_count]->height = t->maxy;
t->windows[t->w_count]->width = t->maxx;
t->w_count++;
return t;
}
int wm_fd_w_by_name(terminal *t, const char *name) {
log_write(LOG_INFO, "w_count = %d", t->w_count);
for (int i = 0; i < t->w_count; i++) {
if (strcmp(t->windows[i]->name, name) != 0) continue;
return i;
}
return -1;
}
void wm_refresh_all(terminal *t) {
if (t->windows[0] && t->windows[0]->win) {
touchwin(t->windows[0]->win);
}
for (int i = 1; i < t->w_count; i++) {
if (t->windows[i] && t->windows[i]->win) {
wnoutrefresh(t->windows[i]->win);
}
}
doupdate();
}
|