[ekg2-devel] Pola zamiast act w window_t
Wiesław Ochmiński
wiechu w wiechu.com
Pią, 8 Lut 2008, 04:23:24 CET
Kłaniam!
Tak chyba będzie czytelniej.
Pozdrawiam,
Wiechu
--
Wiesław Ochmiński, Polska Północna, Malbork.
-------------- następna część ---------
Index: ekg/themes.c
===================================================================
--- ekg/themes.c (wersja 3760)
+++ ekg/themes.c (kopia robocza)
@@ -686,9 +686,9 @@
if (w != window_current && !w->floating && !(separate & 2)) {
int oldact = w->act;
if (separate)
- w->act = 2 | (w->act & ~3);
- else if ((w->act & 3) != 2)
- w->act = 1 | (w->act & ~3);
+ w->act = 2;
+ else if (w->act != 2)
+ w->act = 1;
if (oldact != w->act) /* emit UI_WINDOW_ACT_CHANGED only when w->act changed */
query_emit_id(NULL, UI_WINDOW_ACT_CHANGED);
Index: ekg/windows.c
===================================================================
--- ekg/windows.c (wersja 3760)
+++ ekg/windows.c (kopia robocza)
@@ -211,7 +211,7 @@
window_current = w;
query_emit_id(NULL, UI_WINDOW_SWITCH, &w); /* XXX */
- w->act &= ~3;
+ w->act = 0;
if (w->target && w->session && (u=userlist_find(w->session, w->target)) && (u->xstate & EKG_XSTATE_BLINK))
u->xstate &= ~EKG_XSTATE_BLINK;
@@ -628,7 +628,7 @@
for (l = windows; l; l = l->next) {
window_t *w = l->data;
- if ((w->act & 3) && !w->floating && w->id) {
+ if ((w->act) && !w->floating && w->id) {
id = w->id;
break;
}
Index: ekg/windows.h
===================================================================
--- ekg/windows.h (wersja 3760)
+++ ekg/windows.h (kopia robocza)
@@ -52,7 +52,16 @@
int left, top; /* pozycja (x, y) względem początku ekranu */
int width, height; /* wymiary okna */
- int act; /* czy coś się zmieniło? */
+ unsigned int act:2; /* something happened?
+ * 1 - yes
+ * 2 - yes, something _important_ happened
+ */
+ unsigned int inc_typing:1; /* somebody is writing to us */
+ unsigned int out_composing:2; /* we're writing here
+ * 1 - our typing
+ * 2 - our active
+ */
+
int more; /* pojawiło się coś poza ekranem */
int floating; /* czy pływające? */
Index: ekg/protocol.c
===================================================================
--- ekg/protocol.c (wersja 3760)
+++ ekg/protocol.c (kopia robocza)
@@ -833,9 +833,9 @@
if ((w = window_find_s(s, uid))) {
if (offstate & EKG_XSTATE_TYPING)
- w->act &= ~4;
+ w->inc_typing = 0;
else if (state & EKG_XSTATE_TYPING)
- w->act |= 4;
+ w->inc_typing = 1;
query_emit_id(NULL, UI_WINDOW_ACT_CHANGED);
}
Index: plugins/ncurses/old.c
===================================================================
--- plugins/ncurses/old.c (wersja 3760)
+++ plugins/ncurses/old.c (kopia robocza)
@@ -184,7 +184,7 @@
const char *sid = session_uid_get(ncurses_typing_win->session);
const char *uid = get_uid(ncurses_typing_win->session, ncurses_typing_win->target);
- if (((first > 1) || (ncurses_typing_win->act & 8)) && uid)
+ if (((first > 1) || (ncurses_typing_win->out_composing & 1)) && uid)
return query_emit_id(NULL, PROTOCOL_TYPING_OUT, &sid, &uid, &len, &first);
else
return -1;
@@ -265,12 +265,12 @@
ncurses_typing(0, NULL);
ncurses_typing_mod = tmp;
- } else if (w->act & 24) { /* <gone/> or <active/> */
+ } else if (w->out_composing & 3) { /* <gone/> or <active/> */
window_t *tmp = ncurses_typing_win;
ncurses_typing_win = w;
- if (!ncurses_typingsend(0, !(w->act & 16) ? 4 : 5) || (w->act & 16))
- w->act ^= 16;
+ if (!ncurses_typingsend(0, !(w->out_composing & 2) ? 4 : 5) || (w->out_composing & 2))
+ w->out_composing ^= 2;
ncurses_typing_win = tmp;
}
@@ -1543,12 +1543,12 @@
char tmp[33];
window_t *w = l->data;
- if (!(w->act & 7) || !w->id || (w == window_current))
+ if (!(w->act || w->inc_typing) || !w->id || (w == window_current))
continue;
if (act)
string_append_c(s, ',');
- sprintf(tmp, "statusbar_act%s%s", (w->act & 2 ? "_important" : ""), (w->act & 4 ? "_typing" : ""));
+ sprintf(tmp, "statusbar_act%s%s", (w->act & 2 ? "_important" : ""), (w->inc_typing ? "_typing" : ""));
string_append(s, format_find(tmp));
string_append(s, itoa(w->id));
act = 1;
Index: plugins/ncurses/main.c
===================================================================
--- plugins/ncurses/main.c (wersja 3760)
+++ plugins/ncurses/main.c (kopia robocza)
@@ -165,8 +165,8 @@
ncurses_commit();
if (w->act & 2) { /* enable <composing/> on incoming chat message receival */
- w->act |= 8;
- if (!(w->act & 16)) /* send <active/>, as we showed interest in chat */
+ w->out_composing |= 1;
+ if (!(w->out_composing & 2)) /* send <active/>, as we showed interest in chat */
ncurses_window_gone(w);
}
Index: plugins/ncurses/bindings.c
===================================================================
--- plugins/ncurses/bindings.c (wersja 3760)
+++ plugins/ncurses/bindings.c (kopia robocza)
@@ -132,7 +132,7 @@
ncurses_typing_mod = 1;
else {
ncurses_typing_win = NULL;
- window_current->act |= 16;
+ window_current->out_composing |= 2;
}
curs_set(1);
@@ -263,7 +263,7 @@
ncurses_typing_mod = 1;
else { /* if message, assume that its' handler has already disabled <composing/> */
ncurses_typing_win = NULL;
- window_current->act |= 16; /* but also remember that is should have set <active/> chatstate */
+ window_current->out_composing |= 2; /* but also remember that is should have set <active/> chatstate */
}
if (xwcscmp(line, TEXT(""))) {
Index: plugins/gtk/main.c
===================================================================
--- plugins/gtk/main.c (wersja 3760)
+++ plugins/gtk/main.c (kopia robocza)
@@ -199,7 +199,7 @@
mg_switch_page(FALSE, w->id);
gtk_ui_window_switch_lock = 0;
- fe_set_tab_color(w, w->act & 3);
+ fe_set_tab_color(w, w->act);
return 0;
}
@@ -276,7 +276,7 @@
for (l = windows; l; l = l->next) {
window_t *w = l->data;
- fe_set_tab_color(w, w->act & 3);
+ fe_set_tab_color(w, w->act);
}
return 0;
Index: plugins/readline/ui-readline.c
===================================================================
--- plugins/readline/ui-readline.c (wersja 3760)
+++ plugins/readline/ui-readline.c (kopia robocza)
@@ -499,7 +499,7 @@
for (l = windows; l; l = l->next) {
window_t *w = l->data;
/* we cannot make it colorful with default formats because grey on black doesn't look so good... */
- if (!w->act || !w->id)
+ if (!(w->act || w->inc_typing) || !w->id)
continue;
if (!first)
Index: plugins/readline/main.c
===================================================================
--- plugins/readline/main.c (wersja 3760)
+++ plugins/readline/main.c (kopia robocza)
@@ -112,6 +112,8 @@
window_t *w = *(va_arg(ap, window_t **));
window_current = w;
w->act = 0;
+ w->inc_typing = 0;
+ w->out_composing = 0;
window_refresh();
#ifdef HAVE_RL_SET_PROMPT
rl_set_prompt((char *) current_prompt());
Więcej informacji o liście dyskusyjnej ekg2-devel