[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